body{min-height:100vh;min-height:100svh;color:#fff;min-height:100dvh;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);background-color:#000;margin:0;font-family:Pacifico,cursive;overflow:hidden}canvas{width:100%;height:100%;display:block}#ui{display:none}#info{letter-spacing:2px;text-shadow:0 0 10px #ff69b4cc;-webkit-backdrop-filter:blur(10px);background-color:#3c142d80;border:1px solid #ffb6c140;border-radius:10px;min-height:20px;padding:10px 24px;font-size:22px;transition:opacity .4s;display:inline-block}#start-wrap{z-index:200;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation;flex-direction:column;align-items:center;gap:10px;transition:transform .2s;display:none;position:fixed;bottom:40px;left:50%;transform:translate(-50%)}#start-wrap.held{transform:translate(-50%)scale(1.05)}#start-label{color:#ffb6c1d9;text-shadow:0 0 8px #ff69b499;letter-spacing:1px;font-family:Pacifico,cursive;font-size:13px}#start-wrap svg{filter:drop-shadow(0 0 8px #ff69b473);width:68px;height:68px}.ring-pulse{fill:#ff69b41a;animation:2s ease-in-out infinite ringPulse}@keyframes ringPulse{0%,to{opacity:.5}50%{opacity:.15}}.ring-track{fill:none;stroke:#ffb6c133;stroke-width:3px}.ring-fill{fill:none;stroke:#ff69b4;stroke-width:3.5px;stroke-linecap:round;stroke-dasharray:163.36;stroke-dashoffset:163.36px;transform-origin:34px 34px;transition:stroke-dashoffset 1s linear;transform:rotate(-90deg)}#transition-overlay{z-index:500;opacity:0;pointer-events:none;background:#000;transition:opacity .8s;position:fixed;top:0;bottom:0;left:0;right:0}#sphere-click-hint{z-index:300;color:#fff;pointer-events:none;opacity:0;letter-spacing:1px;background:#000000a6;border-radius:24px;padding:12px 24px;font-family:Pacifico,cursive;font-size:1rem;transition:opacity .35s;position:fixed;bottom:32px;left:50%;transform:translate(-50%)}#sphere-click-hint.visible{opacity:1}#btn-flying-corner{z-index:300;color:#fff;cursor:pointer;background:#ff69b4e6;border:none;border-radius:24px;padding:10px 18px;font-size:20px;transition:transform .2s,box-shadow .2s;display:none;position:fixed;bottom:20px;right:20px;box-shadow:0 2px 10px #ff69b466}#btn-flying-corner.visible{display:block}#btn-flying-corner:hover{transform:scale(1.05);box-shadow:0 4px 14px #ff69b480}#sphere-particles-bg{pointer-events:none;z-index:1;opacity:0;transition:opacity 1s;position:fixed;top:0;bottom:0;left:0;right:0}.sp-particle{background:#ff69b499;border-radius:50%;width:4px;height:4px;animation:15s ease-in-out infinite spFloat;position:absolute}@keyframes spFloat{0%,to{opacity:0;transform:translateY(100vh)rotate(0)}10%{opacity:1}80%{opacity:1}90%,to{opacity:0;transform:translateY(-100vh)rotate(720deg)}}@keyframes flashFade{0%{opacity:1}to{opacity:0}}#cupid-letter-overlay{z-index:350;pointer-events:none;justify-content:center;align-items:center;width:100%;height:100%;display:none;position:fixed;top:0;left:0}#cupid-letter-overlay.visible{pointer-events:auto;display:flex}#cupid-letter-overlay .cupid-space{width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}#cupid-flying-img{pointer-events:none;z-index:352;width:clamp(120px,25vw,220px);height:auto;position:absolute;transform:translate(-50%,-50%)}#letter-envelope-img{cursor:pointer;z-index:355;width:clamp(140px,30vw,260px);height:auto;transition:transform .2s;display:none;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}#letter-envelope-img.visible{animation:.5s ease-out cupidLetterFadeIn;display:block}#letter-envelope-img:hover{transform:translate(-50%,-50%)scale(1.06)}#cupid-letter-frame{z-index:360;pointer-events:auto;background:linear-gradient(135deg,#ffd1dc 0%,#ffe4e9 25%,#fff0f5 50%,#ffe4ec 75%,pink 100%);border-radius:clamp(12px,2.5vw,20px);flex-direction:column;width:min(92vw,720px);max-height:90vh;padding:clamp(20px,4vw,32px);display:none;position:fixed;top:50%;left:50%;overflow:visible;transform:translate(-50%,-50%);box-shadow:0 20px 60px #ff69b459,0 0 0 1px #ffb6c14d}#cupid-letter-frame.visible{animation:.6s ease-out cupidLetterFadeIn;display:flex}@media (max-width:767px){#cupid-letter-frame{width:min(88vw,300px)}}@keyframes cupidLetterFadeIn{0%{opacity:0;transform:translate(-50%,-50%)scale(.9)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}#cupid-letter-frame .letter-content{z-index:1;color:#8b3a62;letter-spacing:.02em;text-align:center;white-space:pre-wrap;max-height:72vh;font-family:Pacifico,cursive;font-size:clamp(.95rem,2vw,1.2em);line-height:1.75;position:relative;overflow-y:auto}#cupid-letter-frame .letter-content::-webkit-scrollbar{display:none}#cupid-letter-frame .letter-image-wrap{text-align:center;z-index:1;opacity:0;margin-top:1.25rem;transition:none;position:relative;transform:translateY(12px)scale(.92)}#cupid-letter-frame .letter-image-wrap.visible{animation:1.1s cubic-bezier(.22,1,.36,1) forwards letterImageReveal}@keyframes letterImageReveal{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}#cupid-letter-frame .letter-inline-image{border-radius:clamp(6px,1.2vw,10px);width:auto;max-width:min(85vw,70%);height:auto;max-height:38vh;margin:0 auto;display:block;box-shadow:0 4px 20px #8b3a6233}#cupid-letter-frame .letter-image-caption{color:#d84a6f;letter-spacing:.2em;text-align:center;text-shadow:0 0 10px #ffb6c199;margin-top:.5em;font-size:1.1em;display:block}#cupid-letter-frame .letter-content .letter-cursor{vertical-align:text-bottom;background:#8b3a62;width:2px;height:1.2em;margin-left:2px;animation:.8s infinite letterCursorBlink;display:inline-block}@keyframes letterCursorBlink{0%,50%{opacity:1}51%,to{opacity:0}}#cupid-letter-frame .letter-butterfly-left{z-index:2;pointer-events:none;position:absolute;top:0;left:0;transform:translate(-55%,-50%)rotate(-10deg)}#cupid-letter-frame .letter-butterfly-left img{object-fit:contain;filter:drop-shadow(0 6px 16px #0003);width:clamp(200px,32vw,340px);height:auto}#cupid-letter-frame .letter-butterfly-right{z-index:2;pointer-events:none;position:absolute;top:0;right:0;transform:translate(52%,-48%)rotate(10deg)}#cupid-letter-frame .letter-butterfly-right img{object-fit:contain;filter:drop-shadow(0 6px 16px #0003);width:clamp(110px,24vw,200px);height:auto}#cupid-letter-frame .letter-bottom-bg{z-index:0;pointer-events:none;background:url(https://cdn.festgift.top/projects/womens-day/images/nenthugocduoi.png) bottom/100% no-repeat;border-bottom-right-radius:clamp(12px,2.5vw,20px);border-bottom-left-radius:clamp(12px,2.5vw,20px);height:42%;position:absolute;bottom:0;left:0;right:0}#loading{z-index:1000;background-color:#000;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;transition:opacity .6s ease-out;display:flex;position:fixed}#loading span{letter-spacing:2px;margin-bottom:15px;font-size:24px}#progress-container{background-color:#ffffff1a;border-radius:3px;width:60%;max-width:300px;height:6px;overflow:hidden}#progress{background:linear-gradient(90deg,#ff69b4,#ffb6c1);border-radius:3px;width:0%;height:100%;transition:width .3s}#passcodeScreen{z-index:2000;touch-action:manipulation;-webkit-user-select:none;user-select:none;background:linear-gradient(#461432d1,#2d0a23e0),linear-gradient(160deg,#2d0f2a 0%,#1a0a18 100%);flex-direction:column;align-items:center;padding:30px 20px;font-family:-apple-system,sans-serif;display:none;position:fixed;top:0;bottom:0;left:0;right:0;overflow:hidden}#passcodeScreen.visible{display:flex}#passcodeScreen.hiding{opacity:0;pointer-events:none;transition:opacity .5s ease-out}.passcode-bears{flex-shrink:0;width:100%;max-width:420px;height:200px;position:relative}.passcode-bear{object-fit:contain;width:auto;height:clamp(160px,35vw,220px);transition:left .4s,right .4s;position:absolute;top:50%;transform:translateY(-50%)}.passcode-bear.left{left:5%}.passcode-bear.right{left:auto;right:5%}.passcode-bear.left.pos-0{left:5%}.passcode-bear.right.pos-0{right:5%}.passcode-bear.left.pos-1{left:10%}.passcode-bear.right.pos-1{right:10%}.passcode-bear.left.pos-2{left:18%}.passcode-bear.right.pos-2{right:18%}.passcode-bear.left.pos-3{left:27%}.passcode-bear.right.pos-3{right:27%}.passcode-bear.left.pos-4{left:37%}.passcode-bear.right.pos-4{right:37%}.passcode-couple-img{object-fit:contain;opacity:0;pointer-events:none;width:auto;height:clamp(180px,38vw,250px);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.passcode-bears.show-couple .passcode-bear{opacity:0;transition:opacity .4s}.passcode-bears.show-couple .passcode-couple-img{opacity:1;transition:opacity .8s ease-out .2s}.passcode-bears.show-couple~.passcode-title,.passcode-bears.show-couple~.passcode-subtitle,.passcode-bears.show-couple~.passcode-dots{display:none!important}.hearts-passcode{pointer-events:none;z-index:1;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.passcode-bears.show-couple~.hearts-passcode{opacity:1}.hearts-passcode .heart-fly{font-size:clamp(20px,5vw,28px);animation:4s linear infinite heartFly;position:absolute;bottom:-50px}@keyframes heartFly{0%{opacity:0;transform:translateY(0)scale(.6)}10%{opacity:1}80%{opacity:1}to{opacity:0;transform:translateY(-80vh)scale(1.2)}}.hearts-passcode .heart-fly:first-child{animation-duration:3.5s;animation-delay:0s;left:5%}.hearts-passcode .heart-fly:nth-child(2){animation-duration:4s;animation-delay:.3s;left:15%}.hearts-passcode .heart-fly:nth-child(3){animation-duration:3.8s;animation-delay:.7s;left:28%}.hearts-passcode .heart-fly:nth-child(4){animation-duration:4.2s;animation-delay:.1s;left:42%}.hearts-passcode .heart-fly:nth-child(5){animation-duration:3.5s;animation-delay:.5s;left:55%}.hearts-passcode .heart-fly:nth-child(6){animation-duration:4.1s;animation-delay:.9s;left:68%}.hearts-passcode .heart-fly:nth-child(7){animation-duration:3.7s;animation-delay:.2s;left:78%}.hearts-passcode .heart-fly:nth-child(8){animation-duration:4.4s;animation-delay:.6s;left:88%}.hearts-passcode .heart-fly:nth-child(9){animation-duration:3.9s;animation-delay:1.1s;left:22%}.hearts-passcode .heart-fly:nth-child(10){animation-duration:4s;animation-delay:.4s;left:48%}.passcode-title{color:#fff;text-align:center;margin-bottom:4px;font-size:18px;font-weight:600}.passcode-subtitle{color:#fff9;text-align:center;margin-bottom:20px;font-size:13px}.passcode-dots{gap:14px;margin-bottom:32px;display:flex}.passcode-dot{border:2px solid #fff6;border-radius:50%;width:14px;height:14px;transition:all .2s}.passcode-dot.filled{background:#fff;border-color:#fff}.passcode-dot.error{background:#ff3b30;border-color:#ff3b30;animation:.4s shake}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-5px)}75%{transform:translate(5px)}}.passcode-keypad{grid-template-columns:repeat(3,1fr);gap:18px;width:100%;max-width:300px;margin-top:auto;display:grid}.passcode-btn{-webkit-backdrop-filter:blur(8px);color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#ffffff2e;border:1px solid #ffffff47;border-radius:50%;justify-self:center;width:70px;height:70px;font-size:26px;font-weight:400;transition:background .15s,transform .1s;box-shadow:0 4px 12px #00000040}.passcode-btn:active{background:#ffffff59;transform:scale(.94)}.passcode-btn.empty{box-shadow:none;cursor:default;background:0 0;border-color:#0000}.passcode-btn.empty:active{transform:none}.passcode-cancel{color:#ffffff8c;cursor:pointer;background:0 0;border:none;margin-top:20px;padding:8px 20px;font-size:15px}.passcode-cancel:hover{color:#ffffffe6}