:root{--pink-50:#fff5f9;--pink-100:#ffe3ee;--pink-200:#ffc2d9;--pink-400:#ff8fb8;--pink-500:#ff4f93;--pink-700:#c2185b;--ink:#5a1f3a;--radius:24px;--shadow:0 12px 40px #c2185b2e;color:var(--ink);-webkit-tap-highlight-color:transparent;font-family:Quicksand,system-ui,sans-serif}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{background:linear-gradient(160deg, var(--pink-100) 0%, var(--pink-200) 55%, var(--pink-400) 100%) fixed;min-height:100dvh}.app{min-height:100dvh;padding:max(24px, env(safe-area-inset-top)) 16px max(24px, env(safe-area-inset-bottom));flex-direction:column;justify-content:center;align-items:center;display:flex;position:relative;overflow-x:hidden}.hearts{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.hearts span{bottom:-40px;left:calc(var(--i) * 8.5%);font-size:calc(14px + var(--i) * 1.5px);opacity:.45;animation:float calc(9s + var(--i) * .7s) linear infinite;animation-delay:calc(var(--i) * -1.3s);position:absolute}@keyframes float{to{transform:translateY(-110dvh)rotate(25deg)}}.screen,.stack{z-index:1;width:100%;max-width:420px;position:relative}.stack{flex-direction:column;gap:20px;display:flex}.welcome{text-align:center;cursor:pointer;animation:.7s ease-out both pop}.cake{font-size:88px;animation:1.6s ease-in-out infinite bounce}.script{color:var(--pink-500);text-shadow:0 3px #fff;margin:8px 0 0;font-family:Pacifico,cursive;font-size:clamp(44px,13vw,64px);font-weight:400;line-height:1.15}.name{color:var(--pink-700);margin:4px 0;font-size:clamp(36px,11vw,52px)}.age{margin:0 0 32px;font-size:20px;font-weight:600}.progress{background:#fff9;border-radius:99px;width:60%;height:6px;margin:0 auto;overflow:hidden}.progress span{background:var(--pink-500);transform-origin:0;height:100%;animation:linear forwards fill;display:block}@keyframes fill{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.card{z-index:1;border-radius:var(--radius);box-shadow:var(--shadow);text-align:center;background:#ffffffeb;padding:28px 22px;animation:.5s ease-out both pop;position:relative}.card h2{color:var(--pink-700);margin:6px 0 10px;font-size:26px;line-height:1.2}.emoji{font-size:48px}.emoji.big{font-size:72px}.eyebrow{text-transform:uppercase;letter-spacing:.12em;color:var(--pink-500);margin:0;font-size:13px;font-weight:700}.hint{margin:0 0 20px;font-size:17px}.gate h2+form{margin-top:18px}form{flex-direction:column;gap:12px;display:flex}input{font:inherit;border:2px solid var(--pink-200);background:var(--pink-50);color:var(--ink);text-align:center;border-radius:14px;outline:none;padding:14px 16px;font-size:18px;transition:border-color .2s}input:focus{border-color:var(--pink-500)}button,.button{font:inherit;background:var(--pink-500);color:#fff;cursor:pointer;border:0;border-radius:14px;padding:14px 20px;font-size:18px;font-weight:700;text-decoration:none;transition:transform .1s,opacity .2s;display:inline-block}button:active,.button:active{transform:scale(.97)}button:disabled{opacity:.5;cursor:default}.error{min-height:1.4em;color:var(--pink-700);margin:10px 0 0;font-weight:600}.shake{animation:.5s shake}@keyframes shake{20%,60%{transform:translate(-8px)}40%,80%{transform:translate(8px)}}.photo{aspect-ratio:4/3;object-fit:cover;border-radius:16px;width:100%;margin:16px 0 0;display:block}.details{text-align:left;gap:10px;margin:18px 0 20px;display:grid}.details div{background:var(--pink-50);border-radius:14px;padding:10px 14px}.details dt{text-transform:uppercase;letter-spacing:.08em;color:var(--pink-500);font-size:12px;font-weight:700}.details dd{margin:2px 0 0;font-size:17px;font-weight:600}.note{margin:18px 0 0;font-size:16px;line-height:1.5}.signoff{z-index:1;text-align:center;color:var(--pink-700);margin:8px 0;font-family:Pacifico,cursive;font-size:26px;position:relative}@keyframes pop{0%{opacity:0;transform:translateY(16px)scale(.96)}to{opacity:1;transform:none}}@keyframes bounce{50%{transform:translateY(-10px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important}}.back{z-index:1;color:var(--pink-700);background:#ffffffb3;align-self:flex-start;padding:8px 14px;font-size:15px;position:relative}
