body,html{height:100%;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.App{min-height:100vh;background-color:#000}.App,.content-wrapper{display:flex;align-items:center;justify-content:center}.content-wrapper{gap:40px;width:100%;max-width:1400px;padding:20px}.text-container{display:flex;align-items:center;justify-content:flex-start;flex:1 1}.cake-container{flex:1 1}.cake-container,.cakeLoop{display:flex;align-items:center;justify-content:flex-end}.cakeLoop{flex-direction:column;gap:12px;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex:1 1}.cakeLoop canvas,.cakeLoop img{image-rendering:pixelated;image-rendering:crisp-edges;image-rendering:-moz-crisp-edges;-ms-interpolation-mode:nearest-neighbor;display:block;width:auto;height:auto;max-width:100%;max-height:100%}.birthdayText{width:auto;height:auto;max-width:100%;max-height:80vh;image-rendering:pixelated;z-index:1;position:relative}:root{--cake-overlap:24px;--cake-offset-x:0px;--birthday-max-width:10vw}.cake{position:relative;transform:translateY(calc(-1 * var(--cake-overlap))) translateX(var(--cake-offset-x));z-index:2}.cake,.cake canvas,.cake img{cursor:crosshair}.confetti-root{pointer-events:none;position:fixed;inset:0 0 0 0;overflow:hidden;z-index:9999}.confetti-piece{position:absolute;top:-10vh;border-radius:2px;opacity:.95;will-change:transform,top;animation-name:confetti-fall;animation-timing-function:linear;animation-iteration-count:1}@keyframes confetti-fall{0%{transform:translateY(-10vh) rotate(0deg);opacity:1}70%{opacity:1}to{transform:translateY(110vh) rotate(1turn);opacity:.85}}.iman-overlay{position:fixed;inset:0 0 0 0;display:flex;background:rgba(0,0,0,.65);z-index:10000;pointer-events:auto}.iman-card,.iman-overlay{align-items:center;justify-content:center}.iman-card{background:transparent;border-radius:12px;padding:8px;display:inline-flex;transform-origin:center center;animation:iman-pop .54s cubic-bezier(.2,.8,.2,1) forwards}.iman-card img{display:block;max-width:80vw;max-height:80vh;border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,.6)}@keyframes iman-pop{0%{transform:scale(.6) translateY(8px);opacity:0}60%{transform:scale(1.05) translateY(-6px);opacity:1}to{transform:scale(1) translateY(0);opacity:1}}.hearts-root{pointer-events:none;position:fixed;inset:0 0 0 0;overflow:hidden;z-index:10001}.heart-piece{position:absolute;bottom:-50px;display:inline-block;will-change:transform,bottom,opacity;animation-name:heart-float;animation-timing-function:ease-out;animation-iteration-count:infinite;filter:drop-shadow(0 0 4px rgba(255,23,68,.5))}@keyframes heart-float{0%{transform:translateY(0) translateX(0) rotate(0deg) scale(.5);opacity:0;bottom:-50px}10%{opacity:1}50%{transform:translateY(-50vh) translateX(var(--drift)) rotate(180deg) scale(1);opacity:1}to{transform:translateY(-100vh) translateX(calc(var(--drift) * 1.5)) rotate(var(--rotation)) scale(.8);opacity:0;bottom:100vh}}.letter-overlay{position:fixed;inset:0 0 0 0;background:rgba(0,0,0,.7);z-index:10002;pointer-events:auto}.letter-container,.letter-overlay{display:flex;align-items:center;justify-content:center}.letter-container{flex-direction:column;cursor:pointer;transform-origin:center center;transition:transform .3s ease}.letter-container:hover{transform:scale(1.1)}.letter-shake{animation:letter-shake 1.2s ease-in-out infinite}.letter-open{animation:letter-open .3s ease-out forwards}.letter-image{width:200px;height:auto;max-width:40vw;filter:drop-shadow(0 10px 30px rgba(255,23,68,.4))}.letter-hint{color:#fff;margin-top:20px;font-size:18px;text-align:center;opacity:.9;animation:letter-hint-pulse 2s ease-in-out infinite}@keyframes letter-shake{0%,to{transform:translateX(0) rotate(0deg)}15%,45%,75%{transform:translateX(-8px) rotate(-3deg)}30%,60%,90%{transform:translateX(8px) rotate(3deg)}}@keyframes letter-open{0%{transform:scale(1) rotate(0deg)}50%{transform:scale(1.2) rotate(10deg)}to{transform:scale(0) rotate(180deg);opacity:0}}@keyframes letter-hint-pulse{0%,to{opacity:.7}50%{opacity:1}}.letter-text-overlay{position:fixed;inset:0 0 0 0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.75);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:10003;pointer-events:auto;padding:20px;overflow-y:auto}.letter-text-card{background:#fff;border-radius:12px;padding:40px;max-width:600px;width:100%;max-height:85vh;overflow-y:auto;box-shadow:0 4px 20px rgba(0,0,0,.15);transform-origin:center center;animation:letter-text-pop .6s cubic-bezier(.2,.8,.2,1) forwards;border:1px solid #e0e0e0;position:relative}.letter-title{font-size:32px;color:#333;text-align:center;margin-bottom:30px;font-weight:600}.letter-content{color:#2c2c2c;line-height:1.9;font-size:17px}.letter-content p{margin-bottom:20px;text-align:justify}.letter-content p:first-of-type{margin-top:0}.letter-signature{margin-top:30px;text-align:right;font-style:italic;color:#555;font-weight:500;font-size:18px}@keyframes letter-text-pop{0%{transform:scale(.7) translateY(20px);opacity:0}60%{transform:scale(1.05) translateY(-5px);opacity:1}to{transform:scale(1) translateY(0);opacity:1}}@media (max-width:768px){.content-wrapper{flex-direction:column;gap:20px}.cakeLoop,.text-container{justify-content:center}.birthdayText{max-height:40vh}.letter-text-card{padding:25px;max-width:90vw}.letter-title{font-size:24px}.letter-content{font-size:16px}.letter-image{width:150px}}