:root{--primary: #ff6b95;--primary-dark: #e84a7a;--primary-light: #ffb3c6;--secondary: #ff4d6d;--accent: #ffd700;--background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f0f23 100%);--surface: rgba(255, 255, 255, .05);--surface-hover: rgba(255, 255, 255, .1);--text: #ffffff;--text-muted: rgba(255, 255, 255, .7);--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 20px;--radius-full: 9999px;--shadow-glow: 0 0 20px rgba(255, 107, 149, .3);--shadow-card: 0 8px 32px rgba(0, 0, 0, .3);--font-display: "Dancing Script", cursive;--font-body: "Poppins", sans-serif}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-body);background:var(--background);color:var(--text);min-height:100vh;min-height:100dvh;overflow-x:hidden;line-height:1.6}#app{min-height:100vh;min-height:100dvh;position:relative}.title{font-family:var(--font-display);font-size:clamp(2rem,8vw,4rem);color:var(--primary);text-shadow:0 0 30px rgba(255,107,149,.5);text-align:center;line-height:1.2}.subtitle{font-size:clamp(1rem,4vw,1.5rem);color:var(--text-muted);text-align:center;font-weight:300}.message{font-size:clamp(1rem,3vw,1.25rem);color:var(--text);text-align:center;max-width:90%;margin:0 auto}.stage{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-lg);position:relative;animation:fadeIn .6s ease-out}.stage-content{width:100%;max-width:500px;display:flex;flex-direction:column;align-items:center;gap:var(--space-lg);z-index:10}.password-container{width:100%;display:flex;flex-direction:column;gap:var(--space-md)}.password-input-wrapper{position:relative;width:100%}.password-input{width:100%;padding:var(--space-md) var(--space-lg);font-size:1.1rem;font-family:var(--font-body);background:#ffffff26;border:2px solid rgba(255,107,149,.6);border-radius:var(--radius-md);color:var(--text);outline:none;transition:all .3s ease;-webkit-appearance:none;box-shadow:0 0 15px #ff6b9533,inset 0 0 10px #ffffff0d}.password-input:focus{border-color:var(--primary);box-shadow:var(--shadow-glow)}.password-input::placeholder{color:#fff9}.password-input.error{border-color:#f44;animation:shake .5s ease-in-out}.password-toggle{position:absolute;right:var(--space-md);top:50%;transform:translateY(-50%);background:none;border:none;color:var(--text-muted);cursor:pointer;padding:var(--space-sm);font-size:1.2rem}.error-message{color:#ff6b6b;font-size:.9rem;text-align:center;min-height:1.5em}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md) var(--space-xl);font-size:1.1rem;font-family:var(--font-body);font-weight:500;border:none;border-radius:var(--radius-full);cursor:pointer;transition:all .3s ease;min-height:50px;min-width:150px;-webkit-appearance:none}.btn-primary{background:linear-gradient(135deg,var(--primary) 0%,var(--secondary) 100%);color:#fff;box-shadow:var(--shadow-glow)}.btn-primary:hover,.btn-primary:active{transform:translateY(-2px);box-shadow:0 0 30px #ff6b9580}.btn-primary:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-secondary{background:var(--surface);color:var(--text);border:2px solid rgba(255,107,149,.3)}.btn-secondary:hover,.btn-secondary:active{background:var(--surface-hover);border-color:var(--primary)}.gallery-container{width:100%;padding:var(--space-md)}.gallery-header{text-align:center;margin-bottom:var(--space-xl)}.gallery-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-sm);max-width:100%}@media (min-width: 480px){.gallery-grid{grid-template-columns:repeat(3,1fr)}}.gallery-item{aspect-ratio:1;border-radius:var(--radius-sm);overflow:hidden;position:relative;cursor:pointer;transition:transform .3s ease;contain:layout style paint;will-change:transform;background:#ffffff0d}.gallery-item img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease,opacity .3s ease;content-visibility:auto}.gallery-item img[data-src]{opacity:.5;filter:blur(2px)}.gallery-item:hover img{transform:scale(1.1)}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000f2;z-index:1000;display:flex;align-items:center;justify-content:center;padding:var(--space-md);animation:fadeIn .3s ease}.lightbox-content{max-width:100%;max-height:90vh;object-fit:contain;border-radius:var(--radius-sm)}.lightbox-close{position:absolute;top:var(--space-lg);right:var(--space-lg);background:var(--surface);border:none;color:#fff;font-size:2rem;width:50px;height:50px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center}.lightbox-nav{position:absolute;top:50%;transform:translateY(-50%);background:var(--surface);border:none;color:#fff;font-size:2rem;width:50px;height:50px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center}.lightbox-prev{left:var(--space-md)}.lightbox-next{right:var(--space-md)}.video-container{width:100%;max-width:100%;padding:var(--space-md)}.video-header{text-align:center;margin-bottom:var(--space-lg)}.video-wrapper{position:relative;width:100%;border-radius:var(--radius-md);overflow:hidden;background:#000;box-shadow:var(--shadow-card)}.video-player{width:100%;height:auto;display:block;max-height:70vh}.video-controls{display:flex;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-md);background:var(--surface);border-radius:var(--radius-md);margin-top:var(--space-md)}.progress-dots{display:flex;gap:var(--space-sm);justify-content:center;margin-top:var(--space-xl)}.progress-dot{width:10px;height:10px;border-radius:50%;background:var(--surface);transition:all .3s ease}.progress-dot.active{background:var(--primary);box-shadow:0 0 10px var(--primary)}.progress-dot.completed{background:var(--accent)}.hearts-bg{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;z-index:1}.confetti-container{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:100}.loading{display:flex;align-items:center;justify-content:center;gap:var(--space-sm)}.spinner{width:24px;height:24px;border:3px solid var(--surface);border-top-color:var(--primary);border-radius:50%;animation:spin 1s linear infinite}.heart-icon{display:inline-block;font-size:3rem;animation:heartbeat 1.5s ease-in-out infinite}.hidden{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--primary);border-radius:3px}@media (max-width: 360px){html{font-size:14px}.stage{padding:var(--space-md)}}@media (min-width: 768px){.gallery-grid{grid-template-columns:repeat(4,1fr)}.video-player{max-height:60vh}}@keyframes fadeIn{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInScale{0%{opacity:0;transform:scale(.8) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes slideUp{0%{opacity:0;transform:translateY(100px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-50px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-100px)}to{opacity:1;transform:translate(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(100px)}to{opacity:1;transform:translate(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes scaleInBounce{0%{opacity:0;transform:scale(0)}50%{transform:scale(1.1)}70%{transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-10px)}20%,40%,60%,80%{transform:translate(10px)}}@keyframes heartbeat{0%,to{transform:scale(1);filter:drop-shadow(0 0 10px rgba(255,107,149,.5))}10%{transform:scale(1.15);filter:drop-shadow(0 0 20px rgba(255,107,149,.8))}20%{transform:scale(1)}30%{transform:scale(1.15);filter:drop-shadow(0 0 20px rgba(255,107,149,.8))}40%{transform:scale(1)}}@keyframes floatUp{0%{opacity:0;transform:translateY(100vh) rotate(0) scale(.5)}10%{opacity:1;transform:translateY(80vh) rotate(30deg) scale(1)}50%{transform:translateY(40vh) rotate(-20deg) translate(20px) scale(1.1)}90%{opacity:.8}to{opacity:0;transform:translateY(-20vh) rotate(360deg) translate(-20px) scale(.8)}}@keyframes floatSide{0%,to{transform:translate(0)}25%{transform:translate(15px)}75%{transform:translate(-15px)}}.floating-heart{position:absolute;font-size:1.5rem;color:var(--primary);opacity:0;animation:floatUp linear infinite,floatSide ease-in-out infinite;pointer-events:none;text-shadow:0 0 15px rgba(255,107,149,.7);filter:drop-shadow(0 0 5px rgba(255,107,149,.5))}@keyframes pulseGlow{0%,to{box-shadow:0 0 20px #ff6b954d,0 0 40px #ff6b951a}50%{box-shadow:0 0 40px #ff6b9599,0 0 60px #ff6b954d}}.pulse-glow{animation:pulseGlow 2s ease-in-out infinite;opacity:1}.text-reveal.pulse-glow,.text-reveal-delay-1.pulse-glow,.text-reveal-delay-2.pulse-glow,.text-reveal-delay-3.pulse-glow,.text-reveal-delay-4.pulse-glow,.text-reveal-delay-5.pulse-glow{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) forwards,pulseGlow 2s ease-in-out .8s infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes confettiFall{0%{opacity:1;transform:translateY(-100vh) rotate(0) scale(1)}25%{transform:translateY(-25vh) rotate(180deg) translate(30px) scale(.9)}50%{transform:translateY(0) rotate(360deg) translate(-30px) scale(1.1)}75%{transform:translateY(50vh) rotate(540deg) translate(20px) scale(.85)}to{opacity:0;transform:translateY(100vh) rotate(720deg) scale(.7)}}@keyframes confettiSpin{0%{transform:rotateY(0)}to{transform:rotateY(360deg)}}.confetti{position:absolute;width:12px;height:12px;animation:confettiFall linear forwards,confettiSpin 2s linear infinite}@keyframes textReveal{0%{opacity:0;transform:translateY(30px) scale(.9);filter:blur(10px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}@keyframes letterReveal{0%{opacity:0;transform:translateY(50px) rotateX(90deg)}to{opacity:1;transform:translateY(0) rotateX(0)}}.text-reveal{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) forwards;opacity:0}.text-reveal-delay-1{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) .15s forwards;opacity:0}.text-reveal-delay-2{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) .3s forwards;opacity:0}.text-reveal-delay-3{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) .45s forwards;opacity:0}.text-reveal-delay-4{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) .6s forwards;opacity:0}.text-reveal-delay-5{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) .75s forwards;opacity:0}@keyframes photoFloat{0%,to{transform:translateY(0) rotate(0)}25%{transform:translateY(-5px) rotate(.5deg)}50%{transform:translateY(-2px) rotate(-.5deg)}75%{transform:translateY(-7px) rotate(.3deg)}}@keyframes photoGlow{0%,to{box-shadow:0 4px 15px #0000004d}50%{box-shadow:0 8px 25px #ff6b954d}}@keyframes photoPulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}.photo-animate-1{animation:photoFloat 4s ease-in-out infinite,photoGlow 3s ease-in-out infinite}.photo-animate-2{animation:photoFloat 5s ease-in-out infinite .5s,photoGlow 4s ease-in-out infinite 1s}.photo-animate-3{animation:photoFloat 4.5s ease-in-out infinite 1s,photoPulse 6s ease-in-out infinite}.photo-animate-4{animation:photoFloat 5.5s ease-in-out infinite .3s,photoGlow 5s ease-in-out infinite .5s}.photo-animate-5{animation:photoPulse 4s ease-in-out infinite,photoGlow 3.5s ease-in-out infinite .8s}.photo-animate-6{animation:photoFloat 6s ease-in-out infinite .7s,photoPulse 5s ease-in-out infinite 1s}@keyframes photoPopIn{0%{opacity:0;transform:scale(.3) rotate(-15deg)}50%{transform:scale(1.1) rotate(5deg)}70%{transform:scale(.95) rotate(-2deg)}to{opacity:1;transform:scale(1) rotate(0)}}@keyframes photoSlideIn{0%{opacity:0;transform:translate(-50px) translateY(30px) rotate(-10deg)}to{opacity:1;transform:translate(0) translateY(0) rotate(0)}}@keyframes photoFlyIn{0%{opacity:0;transform:scale(0) translateY(-100px) rotate(180deg)}60%{transform:scale(1.2) translateY(10px) rotate(-10deg)}to{opacity:1;transform:scale(1) translateY(0) rotate(0)}}.photo-pop{animation:photoPopIn .6s cubic-bezier(.34,1.56,.64,1) forwards;opacity:0}.photo-slide{animation:photoSlideIn .5s ease-out forwards;opacity:0}.photo-fly{animation:photoFlyIn .8s cubic-bezier(.34,1.56,.64,1) forwards;opacity:0}.photo-pop:nth-child(1),.photo-slide:nth-child(1),.photo-fly:nth-child(1){animation-delay:.05s}.photo-pop:nth-child(2),.photo-slide:nth-child(2),.photo-fly:nth-child(2){animation-delay:.1s}.photo-pop:nth-child(3),.photo-slide:nth-child(3),.photo-fly:nth-child(3){animation-delay:.15s}.photo-pop:nth-child(4),.photo-slide:nth-child(4),.photo-fly:nth-child(4){animation-delay:.2s}.photo-pop:nth-child(5),.photo-slide:nth-child(5),.photo-fly:nth-child(5){animation-delay:.25s}.photo-pop:nth-child(6),.photo-slide:nth-child(6),.photo-fly:nth-child(6){animation-delay:.3s}.photo-pop:nth-child(7),.photo-slide:nth-child(7),.photo-fly:nth-child(7){animation-delay:.35s}.photo-pop:nth-child(8),.photo-slide:nth-child(8),.photo-fly:nth-child(8){animation-delay:.4s}.photo-pop:nth-child(9),.photo-slide:nth-child(9),.photo-fly:nth-child(9){animation-delay:.45s}.photo-pop:nth-child(10),.photo-slide:nth-child(10),.photo-fly:nth-child(10){animation-delay:.5s}.photo-pop:nth-child(11),.photo-slide:nth-child(11),.photo-fly:nth-child(11){animation-delay:.55s}.photo-pop:nth-child(12),.photo-slide:nth-child(12),.photo-fly:nth-child(12){animation-delay:.6s}.photo-pop:nth-child(n+13){animation-delay:.65s}@keyframes stageEnter{0%{opacity:0;transform:scale(.9) translateY(50px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes stageExit{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.1)}}.stage{animation:stageEnter .8s cubic-bezier(.34,1.56,.64,1)}.stage-exit{animation:stageExit .3s ease-out forwards}@keyframes sparkle{0%,to{opacity:0;transform:scale(0) rotate(0)}50%{opacity:1;transform:scale(1) rotate(180deg)}}@keyframes sparkleFloat{0%{transform:translateY(0) scale(1);opacity:0}50%{opacity:1;transform:translateY(-20px) scale(1.2)}to{transform:translateY(-40px) scale(.5);opacity:0}}.sparkle{position:absolute;width:6px;height:6px;background:var(--accent);border-radius:50%;animation:sparkle 2s ease-in-out infinite;box-shadow:0 0 15px var(--accent),0 0 30px var(--accent)}@keyframes shimmer{0%{background-position:-200% center}to{background-position:200% center}}.title-shimmer{background:linear-gradient(90deg,var(--primary) 0%,var(--accent) 25%,var(--primary-light) 50%,var(--accent) 75%,var(--primary) 100%);background-size:200% auto;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:shimmer 3s linear infinite;opacity:1}.text-reveal.title-shimmer,.text-reveal-delay-1.title-shimmer,.text-reveal-delay-2.title-shimmer,.text-reveal-delay-3.title-shimmer,.text-reveal-delay-4.title-shimmer,.text-reveal-delay-5.title-shimmer{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) forwards,shimmer 3s linear infinite}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-15px)}}@keyframes bounceIn{0%{opacity:0;transform:scale(.3) translateY(100px)}50%{transform:scale(1.05) translateY(-10px)}70%{transform:scale(.95) translateY(5px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes bounceReveal{0%{opacity:0;transform:translateY(30px) scale(.9);filter:blur(10px)}30%{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}40%,to{opacity:1;filter:blur(0)}50%{transform:translateY(-15px)}75%{transform:translateY(0)}}.bounce{animation:bounce 2s ease-in-out infinite;opacity:1!important}.bounce-in{animation:bounceIn .8s cubic-bezier(.34,1.56,.64,1) forwards}.text-reveal.bounce,.text-reveal-delay-1.bounce,.text-reveal-delay-2.bounce,.text-reveal-delay-3.bounce,.text-reveal-delay-4.bounce,.text-reveal-delay-5.bounce{animation:textReveal .8s cubic-bezier(.34,1.56,.64,1) forwards,bounce 2s ease-in-out 1s infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotateGlow{0%{transform:rotate(0);filter:drop-shadow(0 0 10px rgba(255,107,149,.5))}50%{filter:drop-shadow(0 0 25px rgba(255,107,149,.9))}to{transform:rotate(360deg);filter:drop-shadow(0 0 10px rgba(255,107,149,.5))}}@keyframes gradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.gradient-animated{background-size:200% 200%;animation:gradientShift 5s ease infinite}@keyframes videoSlideUp{0%{opacity:0;transform:translateY(50px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.video-animate{animation:videoSlideUp .8s ease-out forwards}@keyframes buttonPop{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.btn:active{animation:buttonPop .3s ease}@keyframes loadingDots{0%,20%{opacity:0;transform:scale(0)}50%{opacity:1;transform:scale(1)}80%,to{opacity:0;transform:scale(0)}}.loading-dot{display:inline-block;width:10px;height:10px;margin:0 4px;background:var(--primary);border-radius:50%;animation:loadingDots 1.4s infinite}.loading-dot:nth-child(1){animation-delay:0s}.loading-dot:nth-child(2){animation-delay:.2s}.loading-dot:nth-child(3){animation-delay:.4s}@keyframes emojiRain{0%{opacity:1;transform:translateY(-100px) rotate(0)}to{opacity:0;transform:translateY(100vh) rotate(360deg)}}.emoji-rain{position:absolute;font-size:2rem;animation:emojiRain linear forwards;pointer-events:none}.gallery-item{transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .3s ease}.gallery-item:hover{transform:scale(1.08) rotate(2deg);box-shadow:0 15px 40px #ff6b9566;z-index:10}.gallery-item:active{transform:scale(.95)}@keyframes lightboxOpen{0%{opacity:0;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}to{opacity:1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}@keyframes lightboxImageIn{0%{opacity:0;transform:scale(.7) translateY(50px)}to{opacity:1;transform:scale(1) translateY(0)}}.lightbox{animation:lightboxOpen .3s ease}.lightbox-content{animation:lightboxImageIn .4s cubic-bezier(.34,1.56,.64,1)}
