:root{--party-purple:#2d1b69;--party-purple-deep:#1a0e40;--party-pink:#ff4081;--party-yellow:#ffd600;--party-cyan:#00e5ff;--party-green:#00e676;--party-orange:#ff6e40;--party-violet:#b388ff;--cream:#fff8e1;--white:#fff}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{background-color:var(--party-purple-deep);overscroll-behavior:none;width:100%;height:100%}body{background:radial-gradient(ellipse at 20% 15%, #ff408159, transparent 55%), radial-gradient(ellipse at 80% 25%, #00e5ff4d, transparent 55%), radial-gradient(ellipse at 50% 85%, #ffd60040, transparent 60%), radial-gradient(ellipse at center, var(--party-purple), var(--party-purple-deep));background-color:var(--party-purple-deep);width:100%;min-height:100dvh;color:var(--cream);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior:none;background-attachment:fixed;font-family:Quicksand,system-ui,-apple-system,sans-serif}#root{width:100%;min-height:100dvh}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app{width:100%;min-height:100dvh;position:relative}.content{justify-content:center;align-items:center;width:100%;min-height:100dvh;display:flex}.floating-confetti{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.floating-confetti__piece{opacity:0;animation:linear infinite confetti-rise;display:block;position:absolute;bottom:-20px}.floating-confetti__piece--rect{border-radius:2px}.floating-confetti__piece--circle{border-radius:50%}@keyframes confetti-rise{0%{opacity:0;transform:translateY(0)rotate(0)}10%{opacity:var(--piece-opacity)}50%{opacity:var(--piece-opacity);transform:translateY(-50vh)rotate(220deg)}to{opacity:0;transform:translateY(calc(-100dvh - 40px))rotate(540deg)}}.present-border{padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);pointer-events:none;z-index:1;position:fixed;inset:0}.present-border__present{animation:3s ease-in-out infinite alternate present-shimmer;position:absolute}@keyframes present-shimmer{0%{opacity:var(--shimmer-from)}to{opacity:var(--shimmer-to)}}.birthday-present{flex-direction:column;align-items:center;gap:1rem;margin-top:1rem;display:flex}.birthday-present__btn{cursor:pointer;filter:drop-shadow(0 12px 14px #00000059);background:0 0;border:none;width:180px;height:200px;padding:0;position:relative}.birthday-present__btn:disabled{cursor:default}.birthday-present__btn:focus-visible{outline:2px solid var(--cream);outline-offset:6px;border-radius:12px}.birthday-present__stage{transform-origin:bottom;animation:4.5s ease-in-out infinite present-shake;display:block;position:absolute;inset:0}.birthday-present--opened .birthday-present__stage{animation:none}.birthday-present__shadow{background:radial-gradient(#00000073,#0000 70%);width:130px;height:12px;position:absolute;bottom:6px;left:50%;transform:translate(-50%)}.birthday-present__box{background:linear-gradient(#ff4081 0%,#e91e63 100%);border-radius:8px;width:130px;height:110px;position:absolute;bottom:14px;left:50%;transform:translate(-50%);box-shadow:inset 0 -10px 18px #0003}.birthday-present__ribbon-v{background:linear-gradient(#ffd600,#ffa000);width:22px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.birthday-present__lid-group{transform-origin:bottom;width:160px;height:80px;transition:transform .9s cubic-bezier(.34,1.56,.64,1),opacity .9s;position:absolute;bottom:110px;left:50%;transform:translate(-50%)}.birthday-present--opened .birthday-present__lid-group{opacity:0;transform:translate(-50%)translateY(-160px)rotate(-22deg)}.birthday-present__lid{background:linear-gradient(#ff6e40 0%,#ff3d00 100%);border-radius:8px;height:38px;position:absolute;bottom:0;left:0;right:0;box-shadow:0 4px 6px #00000040,inset 0 -6px 12px #00000026}.birthday-present__lid-ribbon{background:linear-gradient(#ffd600,#ffa000);width:22px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.birthday-present__bow{width:80px;height:50px;position:absolute;bottom:30px;left:50%;transform:translate(-50%)}.birthday-present__bow-loop{background:linear-gradient(135deg,#ffd600 0%,#ffa000 80%);border-radius:60% 30%/70% 50% 50% 30%;width:36px;height:36px;position:absolute;top:6px;box-shadow:inset -4px -2px 6px #0000002e}.birthday-present__bow-loop--left{left:-4px;transform:rotate(-15deg)}.birthday-present__bow-loop--right{right:-4px;transform:rotate(15deg)scaleX(-1)}.birthday-present__bow-knot{background:linear-gradient(#ffd600,#ffa000);border-radius:6px;width:18px;height:22px;position:absolute;top:14px;left:50%;transform:translate(-50%);box-shadow:inset 0 -3px 6px #0000002e}.birthday-present__reveal{justify-content:center;align-items:center;min-height:1px;display:flex}.birthday-present__image{border-radius:14px;width:clamp(220px,60vw,320px);height:auto;animation:.7s cubic-bezier(.34,1.56,.64,1) .35s both reveal-pop;display:block;box-shadow:0 10px 30px #00000073}@keyframes present-shake{0%,78%,to{transform:rotate(0)}80%{transform:rotate(-7deg)}83%{transform:rotate(7deg)}86%{transform:rotate(-6deg)}89%{transform:rotate(5deg)}92%{transform:rotate(-3deg)}95%{transform:rotate(2deg)}}@keyframes reveal-pop{0%{opacity:0;transform:scale(.35)translateY(-10px)}to{opacity:1;transform:scale(1)translateY(0)}}.birthday-message{text-align:center;z-index:2;max-width:720px;margin:0 auto;padding:2rem}.birthday-message__line{opacity:0;animation:1s ease-out forwards fadeSlideUp}.birthday-message__heading{color:var(--cream);text-shadow:0 0 18px #ff40818c,0 0 36px #ffd6004d;margin-bottom:.3em;font-family:Pacifico,Dancing Script,cursive;font-size:clamp(2.6rem,8vw,5rem);line-height:1.2}.birthday-message__subheading{letter-spacing:.02em;color:var(--cream);text-shadow:0 0 12px #00e5ff66;margin-bottom:1em;font-family:Quicksand,Dancing Script,cursive;font-size:clamp(1.4rem,4vw,2rem);font-weight:600}.birthday-message__body{color:var(--cream);text-shadow:0 0 8px #00000059;margin-bottom:.9em;font-family:Quicksand,system-ui,sans-serif;font-size:clamp(1.05rem,2.6vw,1.25rem);line-height:1.55}.birthday-message__initial-present{cursor:pointer;filter:drop-shadow(0 0 22px #ffd6008c);background:0 0;border:none;padding:0}.birthday-message__initial-present svg{width:clamp(90px,28vw,160px);height:clamp(90px,28vw,160px);animation:1.6s ease-in-out infinite present-breathe}.birthday-message__closing{color:var(--cream);text-shadow:0 0 15px #ff408180;font-family:Pacifico,Dancing Script,cursive;font-size:clamp(1.4rem,4vw,1.9rem)}.birthday-message__divider{margin-top:2.2em;margin-bottom:1.4em}.birthday-message__hr{border:none;border-top:1px solid #fff8e166;width:60%;margin:0 auto}.birthday-message__present-slot{margin-top:.5em}@keyframes fadeSlideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes present-breathe{0%,to{transform:scale(1)rotate(0)}25%{transform:scale(1.05)rotate(-2deg)}50%{transform:scale(1.08)rotate(0)}75%{transform:scale(1.05)rotate(2deg)}}.password-gate{z-index:9999;background:#f5f5f5;justify-content:center;align-items:center;min-height:100dvh;display:flex;position:fixed;inset:0}.password-gate__form{flex-direction:column;align-items:center;gap:12px;padding:32px;display:flex}.password-gate__input{border:1px solid #ccc;border-radius:6px;outline:none;width:240px;padding:10px 14px;font-size:16px;transition:border-color .2s}.password-gate__input:focus{border-color:#888}.password-gate__input--error{border-color:#d44;animation:.4s shake}.password-gate__button{color:#fff;cursor:pointer;background:#333;border:none;border-radius:6px;padding:10px 24px;font-size:16px;transition:background .2s}.password-gate__button:hover{background:#555}.password-gate__error{color:#d44;margin:0;font-size:14px}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}
