@import"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;600&family=Space+Mono:wght@400&display=swap";:root{font-family:Space Grotesk,Segoe UI,sans-serif;color:#e5ebf5;background-color:#0b0f14;line-height:1.4}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh;background-color:#0b0f14}#root{min-height:100vh}code{font-family:Space Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.app{min-height:100vh;display:flex;flex-direction:column;align-items:center;background:linear-gradient(180deg,#0c080a80,#060406e0),url(/assets/mubu1.jpg) center / cover no-repeat;background-attachment:fixed;padding:24px;gap:8px}.fireworks-canvas{position:fixed;inset:0;pointer-events:none;z-index:35;opacity:0;transition:opacity .4s ease;mix-blend-mode:screen}.fireworks-canvas.active{opacity:1}.red-envelope{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 20% 20%,rgba(255,220,170,.25),transparent 45%),radial-gradient(circle at 80% 15%,rgba(255,170,150,.2),transparent 40%),linear-gradient(180deg,#5a0e12eb,#280608f5);overflow:hidden;transition:opacity 1.2s ease}.red-envelope.open{opacity:0;pointer-events:none}.click-particles{position:fixed;inset:0;pointer-events:none;z-index:40}.blessing-particle{position:absolute;transform:translate(-50%,-50%);color:#ffdcaaf2;text-shadow:0 6px 14px rgba(0,0,0,.45),0 0 12px rgba(255,160,100,.45);font-family:"Noto Serif SC","Source Han Serif SC",Songti SC,SimSun,STSong,serif;letter-spacing:.14em;opacity:0;animation:blessing-burst 1.6s ease-out forwards;mix-blend-mode:screen}.seal-panel{position:absolute;top:0;bottom:0;width:52%;background:url(/assets/user/hb.jpg) center / cover no-repeat;box-shadow:inset 0 0 40px #00000059;transition:transform 1.6s ease}.seal-panel.left{left:0;transform:translate(0);background-position:left center}.seal-panel.right{right:0;transform:translate(0);background-position:right center}.red-envelope.open .seal-panel.left{transform:translate(-105%)}.red-envelope.open .seal-panel.right{transform:translate(105%)}.seal-content{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;gap:18px;color:#fff0d2f2;text-align:center;font-family:"Noto Serif SC","Source Han Serif SC",Songti SC,SimSun,STSong,serif;letter-spacing:.18em}.seal-title{font-size:26px;text-shadow:0 6px 16px rgba(0,0,0,.45)}.seal-sub{font-size:12px;opacity:.75}.seal-names{display:flex;align-items:center;gap:12px;font-size:20px;color:#ffebcdf2;text-shadow:0 6px 16px rgba(0,0,0,.45);letter-spacing:.12em}.seal-heart{font-size:18px;color:#ffd2aaf2}.seal-button{width:120px;height:120px;border-radius:50%;border:2px solid rgba(255,220,160,.85);background:radial-gradient(circle at 30% 30%,#fff5dcf2,#dca050e6),linear-gradient(180deg,#c87828e6,#a04614e6);color:#78140cf2;font-size:16px;cursor:pointer;box-shadow:0 10px 24px #00000059,inset 0 0 0 4px #fff0d259;transition:transform .3s ease,box-shadow .3s ease;animation:seal-pulse 2.2s ease-in-out infinite}.seal-button:hover{transform:scale(1.05);box-shadow:0 12px 28px #0006,inset 0 0 0 4px #fff0d273}.seal-button:active{transform:scale(.98)}@media(orientation:portrait)and (max-width:600px){.seal-content{position:relative;padding:14px 18px;border-radius:18px;background-image:url(/assets/user/xy.jpg),radial-gradient(circle at 20% 20%,rgba(255,215,150,.18),transparent 40%),radial-gradient(circle at 80% 30%,rgba(255,200,140,.16),transparent 42%),radial-gradient(circle at 30% 80%,rgba(255,200,150,.14),transparent 46%),linear-gradient(180deg,#5a101280,#3c0c108c);background-repeat:repeat,no-repeat,no-repeat,no-repeat,no-repeat;background-size:150px auto,auto,auto,auto,auto;background-position:center,center,center,center,center;background-color:#460e128c;background-blend-mode:multiply,screen,screen,screen,normal;border:1px solid rgba(255,215,150,.75);box-shadow:0 10px 24px #00000059;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.seal-content:before,.seal-content:after{content:"";position:absolute;inset:6px;border-radius:14px;border:1px solid rgba(255,230,180,.35);pointer-events:none}.seal-content:after{inset:-4px;border-radius:22px;border:1px solid rgba(255,210,140,.45);box-shadow:0 0 18px #ffc87840,inset 0 0 18px #ffbe7826}.seal-title{position:relative}.seal-title:before,.seal-title:after{content:"囍";position:absolute;top:50%;transform:translateY(-50%);font-size:14px;color:#ffd28cf2;opacity:.8}.seal-title:before{left:-26px}.seal-title:after{right:-26px}.seal-names{position:relative;padding:6px 18px}.seal-names:before{content:"";position:absolute;inset:0;border-radius:999px;border:1px solid rgba(255,215,150,.5);background:linear-gradient(90deg,#7814168c,#a0281e59);z-index:-1}.seal-sub{position:relative}.seal-sub:before{content:"吉祥 · 祝福";position:absolute;top:-18px;left:50%;transform:translate(-50%);font-size:10px;letter-spacing:.2em;color:#ffd796cc;opacity:.85}.seal-title,.seal-names,.seal-sub{text-shadow:0 6px 16px rgba(0,0,0,.6)}.seal-sub{opacity:.9}}.ui-bar{width:min(1100px,92vw);display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:10px;flex-wrap:wrap}.ui-bar h1{font-size:20px;letter-spacing:.08em;text-transform:uppercase;margin:0}.song-btn{border:1px solid rgba(248,230,170,.5);background:#14100cb3;color:#f8e6aae6;padding:8px 14px;border-radius:10px;font-size:13px;cursor:pointer}.song-btn.active{box-shadow:0 0 0 2px #f8e6aa40}.audio-controls{display:flex;align-items:center;gap:12px}.seek-wrap input[type=range]{width:180px}.scene-shell{width:min(1100px,92vw);position:relative;display:flex;flex-direction:column;align-items:center;gap:8px}.scene-scroll{width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin}.scene-scroll::-webkit-scrollbar{height:6px}.scene-scroll::-webkit-scrollbar-thumb{background:#f8e6aa40;border-radius:999px}.scene{position:relative;width:100%;height:560px;overflow:hidden;border-radius:24px;background:radial-gradient(circle at 18% 12%,rgba(180,90,60,.55),transparent 55%),radial-gradient(circle at 82% 14%,rgba(200,120,70,.45),transparent 50%),radial-gradient(circle at 50% 0%,rgba(255,200,120,.22),transparent 60%),linear-gradient(180deg,#3a0b10eb,#1e0a0ff2 45%,#12070cfa),url(/assets/user/sucai1.jpg) center / cover no-repeat;background-blend-mode:screen,screen,normal,multiply,soft-light;box-shadow:0 24px 60px #0408108c}.lyrics-dock{width:min(1100px,92vw);margin:14px auto 0;padding:10px 14px 12px;border-radius:16px;background:#0a0c12bf;border:1px solid rgba(248,230,170,.18);box-shadow:0 14px 30px #00000059}.lyrics-list{max-height:140px;overflow-y:auto;padding-right:6px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin}.lyrics-list.compact{align-items:center;text-align:center}.lyrics-line{font-size:13px;color:#e5ebf5b3;cursor:pointer;line-height:1.5;transition:transform .3s ease,color .3s ease,opacity .3s ease;opacity:.5}.lyrics-line.active{color:#f8e6aa;font-weight:600;opacity:1;transform:scale(1.04);text-shadow:0 6px 18px rgba(248,230,170,.25)}@media(max-width:900px){.ui-bar{justify-content:center}.audio-controls{width:100%;justify-content:center;flex-wrap:wrap}.seek-wrap input[type=range]{width:min(240px,70vw)}.scene{height:480px}.lyrics-dock{margin-top:10px}.stage-blessing{font-size:20px;padding:12px 20px;letter-spacing:.08em}.scene-art{inset:14px 16px auto;font-size:12px}.seal-button{width:104px;height:104px;font-size:15px}.projector-beam{width:440px;height:360px}.reel-caption{bottom:118px;letter-spacing:.2em}.pet-row{bottom:64px;gap:14px}.pet-art{font-size:10px}.pet-emoji{font-size:16px}}@media(max-width:700px){.stage-blessing{max-width:86%;width:min(280px,86vw);padding:8px 10px;font-size:12px;letter-spacing:.01em;line-height:1.4;text-align:center;top:16%;bottom:auto;z-index:9;flex-direction:column;align-items:center;gap:6px;box-sizing:border-box;background:linear-gradient(180deg,#8c1212c7,#500c0cb8)}.stage-blessing .blessing-text{display:block;width:100%;white-space:normal;max-width:100%;word-break:break-word;overflow-wrap:anywhere}.stage-blessing .blessing-text span{display:block}.stage-blessing .blessing-knot{font-size:11px;letter-spacing:.08em}.scene-freeze{top:30%;font-size:13px;letter-spacing:.06em;line-height:1.4;z-index:8;padding:10px 14px;border-radius:12px;background:radial-gradient(circle at 20% 20%,rgba(255,220,160,.22),transparent 45%),linear-gradient(180deg,#300c10e0,#140a0eeb);border:1px solid rgba(248,210,140,.85)}}@media(max-width:600px){.scene{height:400px}.scene-stage,.stage-area{width:420px}.lyrics-list{max-height:120px}.scene-art{inset:12px 12px auto;font-size:11px}.scene-curtain{height:96px;padding:0 24px;font-size:18px;letter-spacing:.14em}.scene-stage{width:360px;height:170px}.stage-area{width:360px;gap:32px;bottom:106px}.cloud{font-size:12px;letter-spacing:.16em}.firework{font-size:12px}.firecracker{font-size:11px}.stage-blessing{bottom:210px;font-size:18px;padding:10px 18px}.blessing-knot{font-size:14px}.seal-title{font-size:22px}.seal-sub{font-size:11px}.seal-names{font-size:18px}.seal-heart{font-size:16px}.reel-screen,.reel-frame{width:min(420px,84vw)}.projector-beam{width:360px;height:300px}.reel-caption{bottom:102px;font-size:10px}.pet-row{bottom:54px;gap:10px}.pet-name{font-size:9px;letter-spacing:.1em}.pet-art{font-size:9px}.pet-emoji{font-size:14px}.meow{font-size:10px}.lyrics-dock{width:min(1100px,96vw);padding:8px 10px 10px}.song-btn{padding:10px 16px;font-size:12px}.seek-wrap input[type=range]{width:min(260px,78vw)}}@media(max-width:530px){.scene-freeze{top:28%;width:min(280px,86vw);padding:10px 14px;font-size:12px;letter-spacing:.05em;line-height:1.35;display:flex;flex-direction:column;gap:4px;box-sizing:border-box}}@media(max-width:420px){.scene-scroll{padding-bottom:6px}.scene{min-width:360px;height:360px}.lyrics-dock{width:min(1100px,98vw)}.scene-art{font-size:10px}.scene-stage{width:320px;height:160px}.stage-area{width:320px;gap:22px;bottom:98px}.couple.bride{transform:translate(10px);z-index:2}.couple.groom{transform:translate(-10px);z-index:1;opacity:.92}.stage-blessing{bottom:196px;font-size:16px}.projector-beam{width:300px;height:240px}.reel-screen,.reel-frame{width:min(320px,86vw)}.pet-row{bottom:46px;gap:8px}}@media(max-width:400px){.app{padding:12px 10px}.scene{min-width:320px;height:500px}.stage-area{width:300px;bottom:96px}.stage-blessing{max-width:86%;width:min(280px,86vw);padding:8px 10px;font-size:12px;letter-spacing:.01em;line-height:1.4;text-align:center;top:16%;bottom:auto;z-index:9;flex-direction:column;align-items:center;gap:6px;box-sizing:border-box;background:linear-gradient(180deg,#8c1212c7,#500c0cb8)}.stage-blessing .blessing-text{display:block;width:100%;white-space:normal;max-width:100%;word-break:break-word;overflow-wrap:anywhere}.stage-blessing .blessing-text span{display:block}.stage-blessing .blessing-knot{font-size:11px;letter-spacing:.08em}.scene-freeze{top:30%;font-size:13px;letter-spacing:.06em;line-height:1.4;z-index:8;padding:10px 14px;border-radius:12px;background:radial-gradient(circle at 20% 20%,rgba(255,220,160,.22),transparent 45%),linear-gradient(180deg,#300c10e0,#140a0eeb);border:1px solid rgba(248,210,140,.85)}}.lyrics-line.near{opacity:.8;transform:scale(1.01)}.lyrics-line.next{opacity:.7}.lyrics-line.blur{opacity:.18;filter:blur(1px)}.lyrics-empty{font-size:12px;color:#e5ebf573;text-align:center}.scene-art{position:absolute;inset:18px 24px auto;font-family:Space Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;line-height:1.2;color:#e5ebf573;margin:0;pointer-events:none;white-space:pre}.act-before .scene-art{animation:twinkle 2.4s ease-in-out infinite}.scene-decor{position:absolute;inset:0;pointer-events:none;font-size:16px}.firework-field{position:absolute;inset:0;pointer-events:none}.firework{position:absolute;font-size:14px;color:#ffd2aae6;opacity:0;animation:firework-burst 2.8s ease-out infinite;text-shadow:0 0 10px rgba(255,160,120,.65)}.firework.f1{top:110px;left:18%;animation-delay:.1s}.firework.f2{top:90px;right:20%;animation-delay:.7s}.firework.f3{top:140px;left:46%;animation-delay:1.4s}.firework.f4{top:70px;left:64%;animation-delay:.4s}.firework.f5{top:120px;right:36%;animation-delay:1s}.firework.f6{top:160px;right:12%;animation-delay:1.8s}.firecracker-field{position:absolute;left:50%;bottom:210px;transform:translate(-50%);display:flex;gap:18px;pointer-events:none}.firecracker{font-size:12px;color:#ff785af2;letter-spacing:.2em;opacity:0;animation:firecracker-pop 1.8s ease-in-out infinite;text-shadow:0 0 10px rgba(255,80,60,.6)}.firecracker.b1{animation-delay:.2s}.firecracker.b2{animation-delay:.6s}.firecracker.b3{animation-delay:1s}.firecracker.b4{animation-delay:1.4s}.cloud-field{position:absolute;inset:0;pointer-events:none;font-family:Space Mono,ui-monospace,SFMono-Regular,Menlo,monospace;color:#fff5e699}.cloud{position:absolute;font-size:14px;letter-spacing:.2em;opacity:.65;filter:blur(.2px);animation:cloud-drift 18s linear infinite}.cloud.c1{top:54px;left:8%;animation-duration:22s}.cloud.c2{top:78px;right:10%;animation-duration:26s}.cloud.c3{top:44px;right:36%;animation-duration:20s}.cloud.c4{top:96px;left:38%;animation-duration:28s}.cloud.c5{top:36px;left:62%;animation-duration:24s}.cloud.c6{top:70px;left:22%;animation-duration:30s}.cloud.c7{top:110px;right:24%;animation-duration:32s}.cloud.c8{top:24px;right:52%;animation-duration:27s}.cloud.c9{top:88px;left:76%;animation-duration:29s}.cloud.c10{top:64px;right:70%;animation-duration:25s}.particle-field{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .4s ease}.particle{position:absolute;color:#f8e6aad9;font-size:14px;opacity:0}.particle.p13,.particle.p14,.particle.p15,.particle.p16,.particle.p17,.particle.p18,.particle.p19,.particle.p20,.particle.p21,.particle.p22,.particle.p23,.particle.p24,.particle.p25,.particle.p26,.particle.p27,.particle.p28,.particle.p29,.particle.p30,.particle.p31,.particle.p32,.particle.p33,.particle.p34,.particle.p35,.particle.p36,.particle.p37,.particle.p38,.particle.p39,.particle.p40{color:#b9dcffcc;font-size:12px}.particle.p1{top:40px;left:8%}.particle.p2{top:70px;right:10%}.particle.p3{top:120px;left:22%}.particle.p4{top:160px;right:24%}.particle.p5{top:210px;left:34%}.particle.p6{top:250px;right:36%}.particle.p7{top:90px;left:6%}.particle.p8{top:140px;right:6%}.particle.p9{top:240px;left:18%}.particle.p10{top:300px;right:18%}.particle.p11{top:180px;left:70%}.particle.p12{top:260px;right:46%}.particle.p13{top:60px;left:44%}.particle.p14{top:100px;right:44%}.particle.p15{top:200px;left:52%}.particle.p16{top:280px;right:54%}.particle.p17{top:320px;left:8%}.particle.p18{top:340px;right:8%}.particle.p19{top:360px;left:30%}.particle.p20{top:380px;right:30%}.particle.p21{top:420px;left:16%}.particle.p22{top:430px;right:16%}.particle.p23{top:140px;left:82%}.particle.p24{top:220px;right:78%}.particle.p25{top:260px;left:62%}.particle.p26{top:320px;right:62%}.particle.p27{top:360px;left:46%}.particle.p28{top:400px;right:46%}.particle.p29{top:120px;left:58%}.particle.p30{top:180px;right:58%}.particle.p31{top:80px;left:12%}.particle.p32{top:140px;right:14%}.particle.p33{top:200px;left:26%}.particle.p34{top:260px;right:28%}.particle.p35{top:320px;left:22%}.particle.p36{top:360px;right:22%}.particle.p37{top:420px;left:12%}.particle.p38{top:450px;right:12%}.particle.p39{top:60px;left:70%}.particle.p40{top:110px;right:70%}.scene-backdrop{position:absolute;inset:0;background:radial-gradient(circle at 50% 25%,rgba(245,220,160,.12),transparent 55%),radial-gradient(circle at 15% 40%,rgba(120,100,80,.25),transparent 55%),radial-gradient(circle at 85% 35%,rgba(120,90,70,.25),transparent 55%);opacity:.7;pointer-events:none}.spotlight-field{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;opacity:.55}.spotlight{position:absolute;top:-10%;width:320px;height:520px;background:radial-gradient(circle at 50% 0%,#ffe6b48c,#ffe6b400 70%);filter:blur(6px);transform:translate(-50%) skew(-10deg);opacity:.75;animation:spotlight-sway 6s ease-in-out infinite}.spotlight.s1{left:32%;animation-delay:0s}.spotlight.s2{left:50%;animation-delay:1.2s;opacity:.6}.spotlight.s3{left:68%;animation-delay:2.4s;opacity:.5}.scene-curtain{position:absolute;top:0;left:0;right:0;height:120px;display:flex;align-items:flex-end;justify-content:space-between;padding:0 80px;background:linear-gradient(180deg,#220e0eb8,#160c0a0d),url(/assets/mubu1.jpg) center / cover no-repeat;background-blend-mode:multiply;color:#f8e6aa99;font-size:22px;letter-spacing:.2em;pointer-events:none}.sparkle{position:absolute;opacity:.4}.sparkle.s1{top:40px;left:80px}.sparkle.s2{top:60px;right:120px}.sparkle.s3{top:120px;left:50%}.sparkle.s4{top:90px;left:220px}.sparkle.s5{top:30px;right:220px}.ribbon{position:absolute;top:20px;font-size:18px}.ribbon.r1{left:28%}.ribbon.r2{right:26%}.confetti{position:absolute;font-size:18px;opacity:0}.confetti.c1{left:20%;top:140px}.confetti.c2{right:22%;top:160px}.confetti.c3{left:50%;top:110px}.scene-stage{position:absolute;left:0;right:0;bottom:32px;width:min(560px,88%);height:190px;margin:0 auto;background:linear-gradient(180deg,#78141259,#280a0cd9),url(/assets/sucai2.jpg) center / cover no-repeat;border-radius:32px 32px 12px 12px;border:1px solid rgba(255,210,150,.55);box-shadow:inset 0 0 0 2px #ffdcaa47,0 22px 48px #14060a8c}.memory-reel{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:6;opacity:0;transform:translateY(8px) scale(.98);transition:opacity .8s ease,transform .8s ease}.reel-on .memory-reel{opacity:1;transform:translateY(0) scale(1)}.reel-fade .memory-reel{opacity:0;transform:translateY(-8px) scale(.98);transition:opacity 1.8s ease,transform 1.8s ease}.projector-beam{position:absolute;top:-40px;left:50%;width:520px;height:420px;transform:translate(-50%) skew(-6deg);background:linear-gradient(180deg,#ffe6be3d,#ffe6be00);filter:blur(8px);opacity:.7;animation:beam-fade 4.5s ease-in-out infinite}.reel-screen{position:relative;width:min(560px,76vw);aspect-ratio:16 / 9;border-radius:14px;overflow:hidden;background:#0b0f14;box-shadow:0 22px 40px #00000073,0 0 0 1px #ffdcb440,inset 0 0 28px #0a080873;animation:reel-flicker 3.6s ease-in-out infinite}.reel-slide{position:absolute;inset:0;background-size:contain;background-repeat:no-repeat;background-position:center;opacity:0;filter:saturate(.9) contrast(1.05) sepia(.18);animation-name:reel-fade;animation-duration:var(--reel-duration, 35s);animation-timing-function:ease-in-out;animation-iteration-count:infinite}.reel-frame{position:absolute;width:min(580px,78vw);aspect-ratio:16 / 9;border-radius:16px;border:1px solid rgba(255,220,180,.35);box-shadow:0 0 0 2px #ffdcb426,0 20px 40px #00000059}.frame-glow{position:absolute;inset:-12px;border-radius:18px;border:1px solid rgba(255,220,180,.25);box-shadow:0 0 18px #ffd2a040;opacity:.6}.film-grain{position:absolute;inset:0;border-radius:16px;background-image:linear-gradient(0deg,#ffffff0d,#ffffff0d),repeating-linear-gradient(90deg,rgba(255,255,255,.04) 0,rgba(255,255,255,.04) 1px,transparent 1px,transparent 3px);mix-blend-mode:screen;opacity:.35;animation:grain-shift 2.4s steps(3) infinite}.reel-caption{position:absolute;bottom:128px;letter-spacing:.28em;font-size:11px;text-transform:uppercase;color:#ffe6beb3;text-shadow:0 4px 12px rgba(0,0,0,.45)}.stage-area{position:absolute;left:0;right:0;bottom:120px;display:flex;justify-content:center;align-items:flex-end;gap:48px;width:min(560px,88%);margin:0 auto;transition:gap .6s ease}.stage-blessing{position:absolute;left:50%;bottom:250px;transform:translate(-50%);display:inline-flex;align-items:center;gap:14px;padding:14px 26px;border-radius:999px;background:linear-gradient(180deg,#8c1212f2,#500c0cf2);border:1px solid rgba(255,210,150,.8);box-shadow:0 10px 26px #780a0a73,inset 0 0 0 2px #ffdcaa40;color:#fff3d6;font-size:24px;letter-spacing:.12em;font-family:"Noto Serif SC","Source Han Serif SC",Songti SC,SimSun,STSong,serif;text-shadow:0 6px 16px rgba(0,0,0,.35);pointer-events:none;animation:blessing-pop .9s ease-out both;overflow:hidden;box-sizing:border-box}.scene.blessing-fade .stage-blessing{opacity:0;transform:translate(-50%) translateY(-24px) scale(.98);transition:opacity 2s ease,transform 2s ease}.stage-blessing:after{content:"";position:absolute;inset:-10px;border-radius:999px;border:1px solid rgba(255,120,100,.4);box-shadow:0 0 20px #ff504659;opacity:.8}.blessing-text{font-weight:600}.blessing-knot{font-size:16px;letter-spacing:.2em;color:#ffdcaae6}.blessing-particles{position:absolute;inset:-22px;pointer-events:none}.blessing-particles .bp{position:absolute;color:#ffd296f2;font-size:12px;opacity:0;animation:blessing-spark 1.6s ease-out infinite}.blessing-particles .bp1{top:0;left:18%;animation-delay:0s}.blessing-particles .bp2{top:6px;right:16%;animation-delay:.2s}.blessing-particles .bp3{bottom:4px;left:30%;animation-delay:.4s}.blessing-particles .bp4{bottom:0;right:24%;animation-delay:.6s}.blessing-particles .bp5{top:50%;left:6%;animation-delay:.3s}.blessing-particles .bp6{top:45%;right:6%;animation-delay:.5s}.blessing-particles .bp7{top:-6px;left:45%;animation-delay:.1s}.blessing-particles .bp8{bottom:-6px;right:45%;animation-delay:.7s}.guest-cloud{position:absolute;inset:0;pointer-events:none}.guest{position:absolute;display:flex;align-items:flex-end}.emoji-person{display:flex;flex-direction:column;align-items:center;gap:2px;font-family:Space Mono,ui-monospace,SFMono-Regular,Menlo,monospace;color:#e5ebf5}.couple{display:flex;flex-direction:column;align-items:center;gap:6px}.couple.bride{transform:translate(-12px)}.couple.groom{transform:translate(12px)}.scene.finale-fade .couple{opacity:0;animation:finale-fade var(--finale-duration, 33s) ease-in-out both;animation-delay:calc(-1s * var(--finale-offset, 0))}.scene.finale-on .stage-area{gap:0;justify-content:center}.scene.finale-on .couple.bride{transform:translate(0)}.couple-overlap .stage-area{gap:6px}.couple-overlap .couple.bride{transform:translate(44px);z-index:2}.couple-overlap .couple.groom{transform:translate(-44px);z-index:1;opacity:.86}.emoji-name{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#f8e6aabf}.emoji-head{font-size:24px;line-height:1}.emoji-body{margin:0;font-size:13px;line-height:1;white-space:pre}.sprite{display:flex;align-items:flex-end}.sprite.bride{transform:translateY(4px)}.sprite.groom{transform:translateY(0)}.sprite .sprite-sheet{width:calc(var(--frame-width) * var(--scale));height:calc(var(--frame-height) * var(--scale));background-image:var(--sheet);background-repeat:no-repeat;background-size:calc(var(--frame-width) * var(--frame-count) * var(--scale)) calc(var(--frame-height) * var(--scale) * var(--rows));image-rendering:pixelated;image-rendering:crisp-edges;background-position:0 var(--row-offset);animation:sprite-steps var(--duration) steps(var(--frame-count)) var(--loop-count)}.act-celebration .emoji-person.guest{animation:guest-bounce .9s steps(3) infinite}.act-singing .sprite.performer,.act-celebration .sprite.performer{animation:performer-spin 1.4s steps(4) infinite}.act-singing .scene-decor .sparkle,.act-celebration .scene-decor .sparkle{animation:sparkle-float 3s ease-in-out infinite}.act-celebration .scene-decor .confetti{animation:confetti-fall 2.6s ease-in-out infinite;opacity:1}.song-on .firework,.act-celebration .firework,.song-on .firecracker,.act-celebration .firecracker{opacity:1}.act-before .scene-decor .sparkle{animation:sparkle-twinkle 2.4s ease-in-out infinite}.act-vows .sprite.performer{animation:performer-sway 2.2s steps(3) infinite}.act-freeze .emoji-person{animation-play-state:paused}.song-on .emoji-person.guest{animation:guest-bounce .7s steps(3) infinite}.song-on .sprite.performer{animation:performer-spin 1s steps(4) infinite}.song-on .particle-field{opacity:1}.song-on .particle{animation:particle-drift 2.4s ease-in-out infinite}.song-on .particle.p13,.song-on .particle.p14,.song-on .particle.p15,.song-on .particle.p16{animation:particle-spark 2.8s ease-in-out infinite}.song-on .particle.p17,.song-on .particle.p18,.song-on .particle.p19,.song-on .particle.p20{animation:particle-arc 3.2s ease-in-out infinite}.song-on .particle.p21,.song-on .particle.p22,.song-on .particle.p23,.song-on .particle.p24,.song-on .particle.p25,.song-on .particle.p26,.song-on .particle.p27,.song-on .particle.p28,.song-on .particle.p29,.song-on .particle.p30,.song-on .particle.p31,.song-on .particle.p32,.song-on .particle.p33,.song-on .particle.p34,.song-on .particle.p35,.song-on .particle.p36,.song-on .particle.p37,.song-on .particle.p38,.song-on .particle.p39,.song-on .particle.p40{animation:particle-flicker 2s ease-in-out infinite}.song-on .particle.p2{animation-delay:.2s}.song-on .particle.p3{animation-delay:.4s}.song-on .particle.p4{animation-delay:.6s}.song-on .particle.p5{animation-delay:.8s}.song-on .particle.p6{animation-delay:1s}.song-on .particle.p7{animation-delay:1.2s}.song-on .particle.p8{animation-delay:1.4s}.song-on .particle.p9{animation-delay:1.6s}.song-on .particle.p10{animation-delay:1.8s}.song-on .particle.p11{animation-delay:2s}.song-on .particle.p12{animation-delay:2.2s}.song-on .particle.p13{animation-delay:.3s}.song-on .particle.p14{animation-delay:.5s}.song-on .particle.p15{animation-delay:.7s}.song-on .particle.p16{animation-delay:.9s}.song-on .particle.p17{animation-delay:1.1s}.song-on .particle.p18{animation-delay:1.3s}.song-on .particle.p19{animation-delay:1.5s}.song-on .particle.p20{animation-delay:1.7s}.song-on .particle.p21{animation-delay:1.9s}.song-on .particle.p22{animation-delay:2.1s}.song-on .particle.p23{animation-delay:.4s}.song-on .particle.p24{animation-delay:.6s}.song-on .particle.p25{animation-delay:.8s}.song-on .particle.p26{animation-delay:1s}.song-on .particle.p27{animation-delay:1.2s}.song-on .particle.p28{animation-delay:1.4s}.song-on .particle.p29{animation-delay:1.6s}.song-on .particle.p30{animation-delay:1.8s}.song-on .particle.p31{animation-delay:.15s}.song-on .particle.p32{animation-delay:.35s}.song-on .particle.p33{animation-delay:.55s}.song-on .particle.p34{animation-delay:.75s}.song-on .particle.p35{animation-delay:.95s}.song-on .particle.p36{animation-delay:1.15s}.song-on .particle.p37{animation-delay:1.35s}.song-on .particle.p38{animation-delay:1.55s}.song-on .particle.p39{animation-delay:.25s}.song-on .particle.p40{animation-delay:.45s}.act-kiss .stage-area{gap:8px}.scene-heart{position:absolute;left:50%;bottom:220px;transform:translate(-50%);font-size:20px;opacity:0;transition:opacity .6s ease}.act-vows .scene-heart{opacity:1}.scene-kiss{position:absolute;left:50%;bottom:220px;transform:translate(-50%);font-size:20px;opacity:0;transition:opacity .6s ease}.act-kiss .scene-kiss{opacity:1}.act-kiss .sprite.performer.bride,.act-kiss .sprite.performer.groom{animation:kiss-pulse 1.6s ease-in-out infinite}.act-kiss .scene-kiss{animation:heart-glow 1.2s ease-in-out infinite}.scene-freeze{position:absolute;left:50%;top:32%;transform:translate(-50%);text-align:center;font-size:16px;letter-spacing:.08em;color:#fceec8f2;text-shadow:0 2px 10px rgba(0,0,0,.45),0 0 14px rgba(255,200,120,.25);max-width:90%;white-space:normal;padding:14px 26px 12px;border-radius:16px;background:radial-gradient(circle at 10% 20%,rgba(255,220,160,.2),transparent 45%),radial-gradient(circle at 90% 20%,rgba(255,210,140,.2),transparent 45%),linear-gradient(180deg,#300c10e0,#140a0eeb);border:1.5px solid rgba(248,210,140,.9);box-shadow:0 14px 30px #00000073,0 0 0 3px #ffd28c33,inset 0 0 18px #ffc87833;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.pet-row{position:absolute;left:50%;bottom:58px;transform:translate(-50%);display:flex;gap:18px;align-items:flex-end;font-family:Space Mono,ui-monospace,SFMono-Regular,Menlo,monospace;color:#f8e6aad9;pointer-events:none;z-index:5}.pet{display:flex;flex-direction:column;align-items:center;gap:2px;position:relative}.pet-name{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#f8e6aab3}.pet-art{margin:0;font-size:11px;line-height:1.1;color:#f0e6dce6}.pet-emoji{font-size:18px;line-height:1;filter:drop-shadow(0 2px 6px rgba(0,0,0,.35))}.meow-bubbles{position:absolute;left:50%;bottom:34px;transform:translate(-50%);pointer-events:none;opacity:0}.cat-cheer .meow-bubbles{opacity:1}.meow{position:absolute;font-size:11px;color:#f8e6aae6;text-shadow:0 2px 6px rgba(0,0,0,.45);opacity:0;animation:meow-float 1.8s ease-in-out infinite}.meow.m1{animation-delay:0s;left:-10px}.meow.m2{animation-delay:.6s;left:8px}.meow.m3{animation-delay:1.2s;left:-4px}.meow.m4{animation-delay:.2s;left:-12px}.meow.m5{animation-delay:.8s;left:10px}.meow.m6{animation-delay:1.4s;left:-2px}@keyframes guest-bounce{0%{transform:translateY(0)}35%{transform:translateY(-14px)}70%{transform:translateY(-4px)}to{transform:translateY(0)}}@keyframes guest-breath{0%{transform:translateY(0)}to{transform:translateY(-4px)}}@keyframes performer-sway{0%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-6px) rotate(1deg)}to{transform:translateY(0) rotate(-1deg)}}@keyframes performer-spin{0%{transform:translateY(0) rotate(0)}50%{transform:translateY(-10px) rotate(3deg)}to{transform:translateY(0) rotate(0)}}@keyframes sprite-steps{0%{background-position:0 var(--row-offset)}to{background-position:var(--travel-x) var(--row-offset)}}@keyframes kiss-pulse{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-6px) scale(1.03)}to{transform:translateY(0) scale(1)}}@keyframes heart-glow{0%{filter:drop-shadow(0 0 0 rgba(255,100,120,.2))}50%{filter:drop-shadow(0 0 6px rgba(255,100,120,.6))}to{filter:drop-shadow(0 0 0 rgba(255,100,120,.2))}}@keyframes sparkle-float{0%{transform:translateY(0) scale(1);opacity:.5}50%{transform:translateY(-12px) scale(1.1);opacity:.9}to{transform:translateY(0) scale(1);opacity:.6}}@keyframes sparkle-twinkle{0%{opacity:.2}50%{opacity:.7}to{opacity:.2}}@keyframes cloud-drift{0%{transform:translate(-12px)}50%{transform:translate(18px)}to{transform:translate(-12px)}}@keyframes confetti-fall{0%{transform:translateY(-10px) rotate(0)}50%{transform:translateY(40px) rotate(20deg)}to{transform:translateY(-10px) rotate(-10deg)}}@keyframes firework-burst{0%{transform:scale(.6);opacity:0}30%{opacity:1}60%{transform:scale(1.3);opacity:.7}to{transform:scale(1.8);opacity:0}}@keyframes firecracker-pop{0%{transform:translateY(6px) scale(.9);opacity:0}35%{opacity:1}60%{transform:translateY(-8px) scale(1.05);opacity:.8}to{transform:translateY(6px) scale(.9);opacity:0}}@keyframes particle-drift{0%{transform:translateY(0) scale(.9);opacity:0}30%{opacity:.9}60%{transform:translateY(-18px) scale(1.1);opacity:.6}to{transform:translateY(0) scale(.9);opacity:0}}@keyframes particle-spark{0%{transform:translateY(0) scale(.8) rotate(0);opacity:0}40%{opacity:.9}70%{transform:translateY(-20px) scale(1.15) rotate(12deg);opacity:.5}to{transform:translateY(0) scale(.8) rotate(0);opacity:0}}@keyframes particle-arc{0%{transform:translate(0) scale(.9);opacity:0}30%{opacity:.7}60%{transform:translate(10px,-18px) scale(1.1);opacity:.6}to{transform:translate(0) scale(.9);opacity:0}}@keyframes particle-flicker{0%{opacity:.1;transform:scale(.9)}25%{opacity:.7;transform:scale(1.05)}55%{opacity:.3;transform:scale(.95)}to{opacity:.1;transform:scale(.9)}}@keyframes blessing-pop{0%{transform:translate(-50%) translateY(6px) scale(.85);opacity:0}60%{opacity:1}to{transform:translate(-50%) translateY(0) scale(1);opacity:1}}@keyframes blessing-spark{0%{transform:translateY(6px) scale(.6);opacity:0}40%{opacity:.9}70%{transform:translateY(-10px) scale(1.1);opacity:.4}to{transform:translateY(-16px) scale(.8);opacity:0}}@keyframes twinkle{0%{opacity:.25}50%{opacity:.6}to{opacity:.25}}@keyframes finale-fade{0%{opacity:0}18%{opacity:1}82%{opacity:1}to{opacity:0}}@keyframes reel-fade{0%{opacity:0;transform:scale(1.02)}1%{opacity:1;transform:scale(1)}6%{opacity:1}7%{opacity:0;transform:scale(.98)}to{opacity:0;transform:scale(.98)}}@keyframes reel-flicker{0%{opacity:.92;filter:brightness(1)}45%{opacity:1;filter:brightness(1.05)}55%{opacity:.88;filter:brightness(.95)}to{opacity:.96;filter:brightness(1.02)}}@keyframes grain-shift{0%{transform:translate(0);opacity:.3}50%{transform:translate(-6px);opacity:.45}to{transform:translate(6px);opacity:.3}}@keyframes beam-fade{0%{opacity:.55}50%{opacity:.85}to{opacity:.55}}@keyframes meow-float{0%{transform:translateY(6px) scale(.9);opacity:0}30%{opacity:.9}70%{transform:translateY(-10px) scale(1.05);opacity:.4}to{transform:translateY(-16px) scale(.9);opacity:0}}@keyframes seal-pulse{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}@keyframes spotlight-sway{0%{transform:translate(-50%) skew(-8deg) scale(1);opacity:.6}50%{transform:translate(-50%) skew(-2deg) scale(1.05);opacity:.85}to{transform:translate(-50%) skew(-8deg) scale(1);opacity:.6}}@keyframes blessing-burst{0%{opacity:0;transform:translate(-50%,-50%) scale(.85)}25%{opacity:1}70%{opacity:.7}to{opacity:0;transform:translate(calc(-50% + var(--drift, 0px)),-90px) scale(1.1)}}.ceremony-cta{position:relative;margin:10px auto 0;display:flex;justify-content:center}.ceremony-cta button{border:1px solid rgba(248,230,170,.5);background:#14100ce6;color:#f8e6aae6;padding:10px 20px;border-radius:12px;font-size:14px;cursor:pointer}
