@font-face{font-family:Bagel Fat One;font-style:normal;font-display:swap;font-weight:400;src:url(./bagel-fat-one-latin-400-normal-CB1T13M1.woff2)format("woff2"),url(./bagel-fat-one-latin-400-normal-BFAfIXLM.woff)format("woff")}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(./nunito-cyrillic-ext-wght-normal-D4X5GqEv.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(./nunito-cyrillic-wght-normal-CY6AOgYE.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(./nunito-vietnamese-wght-normal-U01xdrZh.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(./nunito-latin-ext-wght-normal-CXYtwYOx.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(./nunito-latin-wght-normal-BzFMHfZw.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--cream:#fffaf0;--paper:#fff8ea;--pink:#f6c9cf;--pink-mid:#f6a3b0;--accent:#d9546b;--ink:#3a2230;--muted:#7a6170;--gold:#ffc93c;--lilac:#cdb8e8;--sky:#a8d4e6;--display:"Bagel Fat One", "Nunito Variable", system-ui, sans-serif;--body:"Nunito Variable", system-ui, sans-serif;--pop:cubic-bezier(.3, 1.6, .5, 1);--soft:cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}html{-webkit-tap-highlight-color:transparent}body{min-height:100dvh;color:var(--ink);font-family:var(--body);-webkit-user-select:none;user-select:none;background:radial-gradient(circle at 50% 0,#ffe9a8 0%,#ffd6dc 55%,#f6c9cf 100%) fixed;margin:0;line-height:1.5;overflow-x:hidden}body:not(.opened){overflow:hidden}body:before{content:"";z-index:-1;background-image:radial-gradient(#fff 2px,#0000 2.4px),radial-gradient(#d9546b33 1.6px,#0000 2px);background-position:0 0,13px 17px;background-size:34px 34px,26px 26px;position:fixed;inset:0}[hidden]{display:none!important}button{font:inherit;color:inherit;touch-action:manipulation;cursor:pointer}:focus-visible{outline:3px solid var(--ink);outline-offset:3px}.sr{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}#confetti{z-index:40;pointer-events:none;width:100%;height:100%;position:fixed;inset:0}#sound{z-index:30;border:2px solid var(--ink);background:var(--paper);width:46px;height:46px;box-shadow:0 3px 0 var(--ink);border-radius:50%;place-items:center;display:grid;position:fixed;top:12px;right:12px}#sound[aria-pressed=true] .mute{display:none}#start{z-index:20;text-align:center;transition:opacity .5s var(--soft), transform .5s var(--soft);place-content:center;justify-items:center;gap:8px;padding:16px;display:grid;position:fixed;inset:0}#start.gone{opacity:0;pointer-events:none;transform:scale(1.15)}#start h1{font-family:var(--display);animation:pop-in .7s var(--pop) both;margin:0;font-size:clamp(30px,9vw,44px);font-weight:400;line-height:1.1}#gift{aspect-ratio:1;background:0 0;border:0;width:min(64vw,260px);padding:0;position:relative}#gift>span,#gift svg{will-change:transform, opacity;display:block;position:absolute}.gift-shadow{background:#3a223026;border-radius:50%;height:9%;bottom:2%;left:15%;right:15%}.gift-shadow,.gift-body{transform-origin:50% 100%}.gift-body{inset:0}.gift-box{width:100%;top:44%;left:0}.gift-lid{transform-origin:50% 90%;width:100%;top:13%;left:0}.gift-glow{aspect-ratio:1;opacity:0;background:radial-gradient(circle,#fff6c9 0%,#ffc93cbf 35%,#ffc93c00 70%);border-radius:50%;width:70%;top:11%;left:15%;transform:scale(.2)}.gift-body.idle{animation:1.4s ease-in-out infinite hop}.gift-lid.idle{animation:1.4s ease-in-out infinite rattle}#start-hint{background:var(--paper);border-radius:999px;margin:4px 0 0;padding:6px 16px;font-weight:800;animation:1.6s ease-in-out infinite bob}#sky{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.balloon{pointer-events:auto;cursor:pointer;will-change:transform;animation:rise var(--t) linear var(--d) infinite;position:absolute;bottom:0}.balloon svg{width:100%;transition:opacity .2s,scale .2s;animation:3s ease-in-out infinite alternate sway;display:block}.balloon.popped svg{opacity:0;scale:1.7}#card{z-index:1;text-align:center;flex-direction:column;align-items:center;min-height:100dvh;padding:clamp(46px,8dvh,58px) 16px 22px;display:flex;position:relative}.bunting{pointer-events:none;justify-content:space-between;width:min(100%,560px);padding:0 6px;display:flex;position:absolute;top:0;left:50%;translate:-50%}.bunting:before{content:"";border-bottom:2px solid #a08b7c;border-radius:0 0 50% 50%;height:22px;position:absolute;top:6px;left:0;right:0}.bunting span{aspect-ratio:.8;width:7.4%;margin-top:calc(6px + var(--y));background:var(--c);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:50% 0;animation:flag 2.4s ease-in-out calc(var(--i) * -.2s) infinite alternate;position:relative}.hello{font-family:var(--display);white-space:nowrap;font-size:clamp(24px,min(8.5vw,5dvh),44px);line-height:1.1}.hello span{animation:drop .6s var(--pop) calc(.3s + var(--i) * 40ms) both, wave 2.2s ease-in-out calc(1.2s + var(--i) * 90ms) infinite;text-shadow:0 3px 0 var(--ink);-webkit-text-stroke:1.5px var(--ink);display:inline-block}.name-row{margin-top:2px;position:relative}.name{font-family:var(--display);background:linear-gradient(transparent 58%, var(--gold) 58% 88%, transparent 88%);animation:pop-in .8s var(--pop) .9s both;margin:0;padding:0 12px;font-size:clamp(40px,min(15vw,9dvh),80px);font-weight:400;line-height:1.05}.age{background:var(--accent);width:62px;height:62px;color:var(--paper);box-shadow:0 0 0 4px var(--paper), 0 4px 0 4px #3a223033;animation:pop-in .7s var(--pop) 1.3s both;border-radius:50%;place-content:center;line-height:1;display:grid;position:absolute;top:22px;right:-48px;rotate:14deg}.age b{font-family:var(--display);font-size:26px;font-weight:400}.age span{font-size:.7rem;font-weight:800}.stack{aspect-ratio:.84;touch-action:pan-y;width:min(58vw,230px,31dvh);animation:pop-in .8s var(--pop) 1.5s both;margin-top:clamp(10px,2.2dvh,18px);position:relative}.photo{rotate:var(--tilt);translate:0 calc(var(--depth) * 3px);will-change:transform;cursor:grab;background:#fff;border-radius:6px;margin:0;padding:9px 9px 34px;position:absolute;inset:0;box-shadow:0 8px 18px #3a22302e}.photo img{object-fit:cover;pointer-events:none;border-radius:3px;width:100%;height:100%;display:block}.photo.top{transition:rotate .4s var(--soft);rotate:0deg}.caption{min-height:1.4em;font-family:var(--display);margin:12px 0 0;font-size:1.15rem}.tip{color:var(--muted);margin:2px 0 0;font-size:.85rem;font-weight:700}.bubble{background:var(--paper);max-width:400px;box-shadow:0 0 0 3px var(--pink-mid), 0 8px 18px #3a22301f;animation:pop-in .7s var(--pop) 1.8s both;border-radius:22px;margin-top:clamp(10px,2dvh,16px);padding:12px 18px;position:relative}.bubble:before{content:"";background:var(--paper);width:22px;height:22px;box-shadow:-3px -3px 0 0 var(--pink-mid);position:absolute;top:-12px;left:50%;translate:-50%;rotate:45deg}#message{margin:0;font-weight:700;position:relative}.sign{font-family:var(--display);color:var(--accent);margin:6px 0 0}#party{background:var(--accent);min-height:52px;color:var(--paper);font-family:var(--display);animation:pop-in .7s var(--pop) 2.1s both, pulse 1.6s ease-in-out 3s infinite;border:0;border-radius:999px;margin-top:clamp(12px,2.4dvh,18px);padding:0 30px;font-size:1.3rem;transition:transform .12s,box-shadow .12s;box-shadow:0 5px #a33a4f}#party:active{transform:translateY(4px);box-shadow:0 1px #a33a4f}.emoji{z-index:41;pointer-events:none;animation:emoji 1.4s var(--soft) var(--d) both;font-size:30px;position:fixed;translate:-50% -50%}@keyframes hop{0%,to{transform:translateY(0)rotate(0)}45%{transform:translateY(-14px)rotate(-3deg)}60%{transform:translateY(0)rotate(2deg)}}@keyframes rattle{0%,60%,to{transform:rotate(0)}70%{transform:rotate(-5deg)translateY(-6px)}80%{transform:rotate(5deg)translateY(-6px)}90%{transform:rotate(-2deg)}}@keyframes squash{40%{transform:scale(1.12,.86)}}@keyframes bob{50%{transform:translateY(-6px)}}@keyframes pop-in{0%{opacity:0;transform:scale(.4)}to{opacity:1;transform:none}}@keyframes drop{0%{opacity:0;transform:translateY(-50px)rotate(-15deg)}to{opacity:1;transform:none}}@keyframes wave{0%,40%,to{transform:translateY(0)}20%{transform:translateY(-8px)}}@keyframes flag{0%{transform:rotate(-7deg)}to{transform:rotate(7deg)}}@keyframes wiggle{0%,80%,to{transform:rotate(0)scale(1)}85%{transform:rotate(-12deg)scale(1.1)}90%{transform:rotate(10deg)scale(1.1)}}@keyframes pulse{50%{scale:1.06}}@keyframes rise{0%{transform:translateY(110%)}to{transform:translate3d(var(--sway), -110vh, 0)}}@keyframes sway{0%{transform:rotate(-6deg)}to{transform:rotate(6deg)}}@keyframes emoji{0%{opacity:0;transform:translate(0)scale(.3)}20%{opacity:1;transform:translate(calc(var(--dx) * .3), -40px) scale(1.2) rotate(var(--r))}to{opacity:0;transform:translate(var(--dx), -160px) scale(.9) rotate(var(--r))}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (height<=700px){.stack{width:min(52vw,26dvh)}#photo-hint{display:none}.caption{margin-top:8px;font-size:1rem}.bubble{padding:10px 14px;font-size:.9rem}#party{min-height:46px;font-size:1.15rem}}
