*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{overscroll-behavior:none;-webkit-overflow-scrolling:touch;touch-action:manipulation;width:100%;height:100%;overflow:hidden}body{color:#4a4a4a;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;background:linear-gradient(135deg,#fce4ec,#e8eaf6,#e0f7fa,#fff3e0) 0 0/400% 400%;font-family:Nunito,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;animation:12s infinite gradientShift}@keyframes gradientShift{0%{background-position:0%}25%{background-position:100%}50%{background-position:100% 0}75%{background-position:0 100%}to{background-position:0%}}#app{width:100%;height:100%;position:relative;overflow:hidden}.screen{opacity:0;pointer-events:none;flex-direction:column;justify-content:center;align-items:center;padding:20px;transition:opacity .5s,transform .5s;display:flex;position:absolute;inset:0;overflow:hidden;transform:translateY(30px)}.screen.active{opacity:1;pointer-events:auto;transform:translateY(0)}h1{text-align:center;color:#d81b60;margin-bottom:10px;font-size:2rem;font-weight:800;line-height:1.2}h2{text-align:center;color:#7b1fa2;margin-bottom:8px;font-size:1.3rem;font-weight:700}p{text-align:center;color:#666;margin-bottom:16px;font-size:1rem;line-height:1.5}.btn{color:#fff;cursor:pointer;background:linear-gradient(135deg,#f48fb1,#ce93d8);border:none;border-radius:50px;min-width:48px;min-height:48px;padding:14px 36px;font-family:inherit;font-size:1.1rem;font-weight:700;transition:transform .2s,box-shadow .2s;display:inline-block;box-shadow:0 4px 15px #f48fb166}.btn:active{transform:scale(.95);box-shadow:0 2px 8px #f48fb14d}.btn-secondary{background:linear-gradient(135deg,#b39ddb,#90caf9);box-shadow:0 4px 15px #90caf966}.card{-webkit-backdrop-filter:blur(10px);background:#ffffffd9;border:2px solid #fff9;border-radius:24px;width:100%;max-width:400px;padding:30px 24px;box-shadow:0 8px 32px #00000014}.password-wrapper{flex-direction:column;align-items:center;gap:16px;width:100%;display:flex}.lock-icon{margin-bottom:8px;font-size:3rem}.password-input{text-align:center;background:#ffffffe6;border:2px solid #e1bee7;border-radius:16px;outline:none;width:100%;padding:14px 20px;font-family:inherit;font-size:1.1rem;transition:border-color .3s,box-shadow .3s}.password-input:focus{border-color:#ce93d8;box-shadow:0 0 0 4px #ce93d833}.password-input.shake{animation:.5s shake}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-10px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(10px)}}.password-error{color:#e91e63;min-height:1.4em;font-size:.9rem}.greeting-wrapper{text-align:center}.greeting-wrapper h1{font-size:2.2rem;animation:.8s cubic-bezier(.68,-.55,.27,1.55) bounceIn}@keyframes bounceIn{0%{opacity:0;transform:scale(0)}60%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}.greeting-wrapper p{animation:.6s .3s both fadeInUp}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.dodgy-btn{z-index:100;transition:left .3s cubic-bezier(.68,-.55,.27,1.55),top .3s cubic-bezier(.68,-.55,.27,1.55),transform .3s cubic-bezier(.68,-.55,.27,1.55),font-size .3s;position:fixed}.confetti-container{pointer-events:none;z-index:1000;position:fixed;inset:0;overflow:hidden}.confetti-piece{border-radius:2px;width:10px;height:10px;animation:linear forwards confettiFall;position:absolute;top:-20px}@keyframes confettiFall{0%{opacity:1;transform:translateY(0)rotate(0)}to{opacity:0;transform:translateY(100vh)rotate(720deg)}}.challenge-header{z-index:10;-webkit-backdrop-filter:blur(8px);background:#ffffffd9;flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;width:100%;min-height:48px;padding:10px 16px;display:flex;position:absolute;top:0;left:0;right:0}.challenge-title{color:#7b1fa2;white-space:nowrap;font-size:.95rem;font-weight:700}.header-sep{background:#0000001f;flex-shrink:0;width:1px;height:20px}.timer{color:#e91e63;font-variant-numeric:tabular-nums;font-size:1.1rem;font-weight:800}.timer.warning{animation:.5s infinite alternate pulse}@keyframes pulse{0%{transform:scale(1)}to{color:#c62828;transform:scale(1.15)}}.progress-bar-container{background:#00000014;border-radius:3px;flex-shrink:0;width:80px;height:6px;overflow:hidden}.progress-bar-fill{background:linear-gradient(90deg,#f48fb1,#ce93d8,#90caf9);border-radius:3px;height:100%;transition:width .3s}.counter{color:#9c27b0;white-space:nowrap;font-size:.85rem;font-weight:600}.balloon-field{position:absolute;inset:0}.balloon{cursor:pointer;z-index:1;font-size:2.4rem;transition:transform .15s;animation:3s ease-in-out infinite float;position:absolute}.balloon:active{transform:scale(1.1)}.balloon.popped{pointer-events:none;animation:.3s forwards pop}@keyframes float{0%,to{transform:translateY(0)rotate(-3deg)}50%{transform:translateY(-12px)rotate(3deg)}}@keyframes pop{0%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.4)}to{opacity:0;transform:scale(0)}}.pop-particle{pointer-events:none;border-radius:50%;width:8px;height:8px;position:absolute}.candle-screen{justify-content:flex-end;padding:0 0 20px}.candle-field{pointer-events:none;position:absolute;inset:0}.candle-item{cursor:grab;touch-action:none;pointer-events:auto;font-size:1.8rem;transition:opacity .3s;position:absolute}.candle-item:active{cursor:grabbing}.candle-item.used{opacity:0;pointer-events:none}.lives{letter-spacing:2px;white-space:nowrap;font-size:.9rem}.candle-dragging{pointer-events:none;z-index:1000;filter:drop-shadow(0 4px 8px #0003);font-size:2.2rem;position:fixed;transform:translate(-50%,-50%)}.cake-zone{z-index:5;background:#fff9;border:3px dashed #ce93d8;border-radius:24px;flex-direction:column;align-items:center;gap:6px;width:calc(100% - 32px);max-width:340px;padding:12px;transition:border-color .3s,background .3s;display:flex;position:relative}.cake-zone.highlight{background:#ffffffd9;border-color:#e91e63}.cake-zone.danger{background:#ffcdd2cc;border-color:#e53935;animation:.4s dangerShake}@keyframes dangerShake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-6px)}80%{transform:translate(6px)}}.cake-zone.complete{background:#fff8e1e6;border-style:solid;border-color:#ffb300;animation:1.5s infinite alternate glow}@keyframes glow{0%{box-shadow:0 0 20px #ffb3004d}to{box-shadow:0 0 40px #ffb30099}}.cake-emoji{font-size:3.5rem}.cake-candles{flex-wrap:wrap;justify-content:center;gap:3px;min-height:28px;display:flex}.cake-candles .candle-on-cake{font-size:1.1rem;animation:.3s cubic-bezier(.68,-.55,.27,1.55) candlePlaced}@keyframes candlePlaced{0%{transform:scale(0)}to{transform:scale(1)}}.memory-grid{grid-template-columns:repeat(4,1fr);gap:10px;width:100%;max-width:340px;padding:8px;display:grid}.memory-card{aspect-ratio:1;perspective:600px;cursor:pointer}.memory-card-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);position:relative}.memory-card.flipped .memory-card-inner,.memory-card.matched .memory-card-inner{transform:rotateY(180deg)}.memory-card.matched{animation:.5s matchBounce}@keyframes matchBounce{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.memory-card-face{backface-visibility:hidden;border-radius:14px;justify-content:center;align-items:center;font-size:2rem;display:flex;position:absolute;inset:0}.memory-card-back{background:linear-gradient(135deg,#f48fb1,#ce93d8);font-size:1.5rem;box-shadow:0 2px 8px #0000001a}.memory-card-front{background:#fff;border:2px solid #f3e5f5;transform:rotateY(180deg);box-shadow:0 2px 8px #0000001a}.ribbon-screen{justify-content:flex-start;padding:0}.ribbon-area{width:100%;height:100%;position:relative}.ribbon-svg{width:100%;height:100%;position:absolute;inset:0}.ribbon-path{fill:none;stroke-width:5px;stroke-linecap:round;stroke-linejoin:round;cursor:pointer;transition:opacity .5s,stroke-width .3s}.ribbon-path:hover{stroke-width:7px}.ribbon-path.wrong{opacity:.15;stroke-dasharray:8 8;pointer-events:none}.ribbon-path.correct{stroke-width:8px;filter:drop-shadow(0 0 6px);animation:1s infinite alternate ribbonGlow}@keyframes ribbonGlow{0%{filter:drop-shadow(0 0 6px)}to{filter:drop-shadow(0 0 14px)}}.ribbon-label{cursor:pointer;background:#ffffffe6;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;font-size:1.2rem;font-weight:700;transition:transform .2s;display:flex;position:absolute;box-shadow:0 2px 8px #0000001a}.ribbon-label:active{transform:scale(.9)}.ribbon-label.wrong-label{opacity:.25;pointer-events:none}.ribbon-label.correct-label{pointer-events:none;background:#c8e6c9}.ribbon-gift{font-size:3.5rem;position:absolute;transform:translate(-50%)}.ribbon-x{color:#e53935;pointer-events:none;font-size:1.5rem;font-weight:800;animation:.3s xAppear;position:absolute}@keyframes xAppear{0%{opacity:0;transform:scale(0)rotate(-45deg)}to{opacity:1;transform:scale(1)rotate(0)}}.wrong-count{color:#e53935;white-space:nowrap;font-size:.85rem;font-weight:600}.reveal-screen{gap:20px}.gift-box{font-size:5rem;animation:1s cubic-bezier(.68,-.55,.27,1.55) unwrap}@keyframes unwrap{0%{transform:scale(0)rotate(-20deg)}50%{transform:scale(1.2)rotate(10deg)}to{transform:scale(1)rotate(0)}}.present-image{border-radius:16px;max-width:90%;max-height:50vh;animation:.8s .5s both revealImage;box-shadow:0 8px 32px #00000026}@keyframes revealImage{0%{opacity:0;transform:scale(.8)translateY(20px)}to{opacity:1;transform:scale(1)translateY(0)}}.sparkle{pointer-events:none;z-index:999;font-size:1.5rem;animation:1s ease-out forwards sparkle;position:fixed}@keyframes sparkle{0%{opacity:1;transform:scale(0)rotate(0)}50%{opacity:1;transform:scale(1.2)rotate(180deg)}to{opacity:0;transform:scale(0)rotate(360deg)}}.try-again-overlay{-webkit-backdrop-filter:blur(6px);z-index:50;background:#ffffffe6;flex-direction:column;justify-content:center;align-items:center;gap:20px;animation:.3s fadeIn;display:flex;position:absolute;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.try-again-overlay h2{color:#e91e63;font-size:1.5rem}.success-overlay{-webkit-backdrop-filter:blur(6px);z-index:50;background:#ffffffe6;flex-direction:column;justify-content:center;align-items:center;gap:16px;animation:.3s fadeIn;display:flex;position:absolute;inset:0}.success-overlay .emoji{font-size:4rem;animation:.6s cubic-bezier(.68,-.55,.27,1.55) bounceIn}.success-overlay h2{color:#4caf50}
