:root{font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}#root{flex-direction:column;width:100%;min-height:100svh;display:flex}body{margin:0}.app{--rose:#e11d48;--rose-deep:#be123c;--blush:#fb7185;--ink:#3f0a1a;--muted:color-mix(in srgb, var(--ink) 62%, transparent);--sans:"Outfit", system-ui, sans-serif;--display:"Fraunces", Georgia, serif;min-height:100svh;font-family:var(--sans);color:var(--ink);flex-direction:column;flex:1;transition:background .6s;display:flex;overflow:hidden}.app--welcome{background:radial-gradient(70% 55% at 70% 10%,#fecdd3 0%,#0000 55%),radial-gradient(50% 40% at 10% 90%,#fda4af 0%,#0000 50%),linear-gradient(160deg,#fff7f8 0%,#ffe4e6 50%,#fecdd3 100%)}.app--compose{background:radial-gradient(60% 50% at 20% 20%,#ffd6a5 0%,#0000 55%),radial-gradient(55% 45% at 90% 80%,#fecdd3 0%,#0000 50%),linear-gradient(155deg,#fff8f1 0%,#ffe8d6 45%,#ffd6e0 100%)}.app--celebrate{background:radial-gradient(80% 60% at 50% 35%,#ffe4e6 0%,#0000 55%),radial-gradient(70% 50% at 20% 80%,#fecdd3 0%,#0000 50%),radial-gradient(60% 40% at 85% 70%,#fda4af 0%,#0000 45%),linear-gradient(165deg,#fff7f8 0%,#ffe4e6 45%,#fecdd3 100%)}.topbar{z-index:3;justify-content:space-between;align-items:center;gap:16px;padding:20px clamp(20px,4vw,40px);display:flex}.brand{font-family:var(--display);letter-spacing:-.02em;margin:0;font-size:1.35rem;font-weight:700}.workflow{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.workflow__step{border:1px solid color-mix(in srgb, var(--ink) 12%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--muted);font:500 .85rem/1 var(--sans);cursor:pointer;background:#ffffff8c;border-radius:999px;align-items:center;gap:8px;padding:8px 12px;transition:background .25s,color .25s,border-color .25s,transform .2s;display:inline-flex}.workflow__step:hover:not(:disabled){border-color:color-mix(in srgb, var(--rose) 35%, transparent);transform:translateY(-1px)}.workflow__step:disabled{opacity:.45;cursor:not-allowed}.workflow__step.is-active{color:#fff;background:linear-gradient(135deg, var(--blush), var(--rose));border-color:#0000}.workflow__step.is-done:not(.is-active){color:var(--rose-deep);border-color:color-mix(in srgb, var(--rose) 30%, transparent)}.workflow__num{background:color-mix(in srgb, var(--ink) 8%, transparent);border-radius:50%;place-items:center;width:1.35rem;height:1.35rem;font-size:.75rem;display:grid}.workflow__step.is-active .workflow__num{background:#ffffff40}.page{flex:1;place-items:center;padding:12px 20px 40px;animation:.55s cubic-bezier(.22,1,.36,1) page-in;display:grid}.panel{text-align:center;flex-direction:column;align-items:center;gap:16px;width:min(560px,100%);display:flex;position:relative}.panel--welcome{gap:20px}.panel--compose{text-align:left;align-items:stretch}.panel--celebrate{justify-content:center;gap:14px;min-height:70svh}.panel__orb{aspect-ratio:1;filter:blur(22px);pointer-events:none;z-index:0;background:radial-gradient(circle,#fb71858c 0%,#0000 70%);border-radius:50%;width:min(42vw,220px);animation:2.8s ease-in-out infinite glow-breathe;position:absolute;top:-10%;left:50%;translate:-50%}.eyebrow{z-index:1;letter-spacing:.14em;text-transform:uppercase;color:var(--rose);margin:0;font-size:.8rem;font-weight:600;position:relative}.title{z-index:1;font-family:var(--display);letter-spacing:-.03em;color:var(--ink);margin:0;font-size:clamp(2.2rem,6vw,3.4rem);font-weight:700;line-height:1.08;position:relative}.title--sm{font-size:clamp(1.8rem,4.5vw,2.4rem)}.lede{z-index:1;max-width:36ch;color:var(--muted);margin:0;font-size:1.05rem;line-height:1.55;position:relative}.panel--compose .lede{max-width:none}.actions{z-index:1;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:8px;display:flex;position:relative}.panel--compose .actions{justify-content:flex-end}.btn{appearance:none;font:600 .95rem/1 var(--sans);cursor:pointer;border:0;border-radius:999px;padding:.85rem 1.45rem;transition:transform .2s,box-shadow .2s,background .2s,opacity .2s}.btn:hover:not(:disabled){transform:translateY(-2px)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn--primary{color:#fff;background:linear-gradient(135deg, var(--blush), var(--rose-deep));box-shadow:0 14px 30px #be123c47}.btn--primary:hover:not(:disabled){box-shadow:0 18px 36px #be123c57}.btn--ghost{color:var(--ink);border:1px solid color-mix(in srgb, var(--ink) 12%, transparent);background:#ffffffb3}.moods{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.mood{border:1px solid color-mix(in srgb, var(--ink) 10%, transparent);font:600 .9rem/1 var(--sans);color:var(--ink);cursor:pointer;background:#ffffffb8;border-radius:18px;flex-direction:column;align-items:center;gap:8px;padding:16px 10px;transition:border-color .2s,transform .2s,background .2s;display:flex}.mood:hover{transform:translateY(-2px)}.mood.is-selected{border-color:var(--rose);background:#fff9fa;box-shadow:0 10px 24px #e11d481f}.mood__dot{background:currentColor;border-radius:50%;width:12px;height:12px}.mood--warm .mood__dot{background:#f59e0b}.mood--playful .mood__dot{background:#fb7185}.mood--deep .mood__dot{background:#7c3a6a}.field{flex-direction:column;gap:8px;display:flex}.field__label{font-size:.85rem;font-weight:600}.field__input{box-sizing:border-box;resize:vertical;border:1px solid color-mix(in srgb, var(--ink) 12%, transparent);width:100%;min-height:110px;font:400 1rem/1.45 var(--sans);color:var(--ink);background:#fffc;border-radius:16px;outline:none;padding:14px 16px;transition:border-color .2s,box-shadow .2s}.field__input:focus{border-color:var(--blush);box-shadow:0 0 0 4px #fb71852e}.field__hint{color:var(--muted);align-self:flex-end;font-size:.75rem}.sent-mood{letter-spacing:.12em;text-transform:uppercase;color:var(--rose);margin:8px 0 0;font-size:.8rem;font-weight:600}.sent-note{max-width:28ch;font-family:var(--display);color:var(--ink);margin:0;font-size:clamp(1.25rem,3.5vw,1.7rem);font-weight:500;line-height:1.35}.heart-stage__glow{aspect-ratio:1;filter:blur(28px);pointer-events:none;background:radial-gradient(circle,#fb718573 0%,#0000 70%);border-radius:50%;width:min(52vw,320px);animation:2.4s ease-in-out infinite glow-breathe;position:absolute}.heart-button{z-index:1;cursor:pointer;background:0 0;border:0;place-items:center;width:180px;height:180px;padding:0;display:grid;position:relative}.heart-button:focus-visible{outline:3px solid var(--blush);outline-offset:10px;border-radius:50%}.heart{filter:drop-shadow(0 18px 28px #be123c59);width:110px;height:100px;animation:1.2s ease-in-out infinite heartbeat;position:relative}.heart__shape{background:linear-gradient(145deg, var(--blush) 0%, var(--rose) 48%, var(--rose-deep) 100%);border-radius:12px 12px 4px;position:absolute;inset:0;transform:rotate(-45deg)}.heart__shape:before,.heart__shape:after{content:"";background:inherit;border-radius:50%;width:100%;height:100%;position:absolute}.heart__shape:before{top:-50%;left:0}.heart__shape:after{top:0;left:50%}.heart__shine{pointer-events:none;background:linear-gradient(135deg,#ffffffbf 0%,#0000 70%);border-radius:50%;width:28%;height:22%;position:absolute;top:18%;left:22%;transform:rotate(-20deg)}.heart__ring{pointer-events:none;border:2px solid #e11d4859;border-radius:50%;width:120px;height:120px;position:absolute}.heart__ring--a{animation:1.2s ease-out infinite ring-pulse}.heart__ring--b{animation:1.2s ease-out .6s infinite ring-pulse}.sparkles{pointer-events:none;z-index:2;position:absolute;inset:0}.sparkle{background:linear-gradient(145deg, #fda4af, var(--rose));opacity:0;border-radius:2px;width:14px;height:13px;margin:-7px 0 0 -7px;animation:.9s ease-out forwards sparkle-burst;position:absolute;top:42%;left:50%;transform:rotate(-45deg)scale(0)}.sparkle:before,.sparkle:after{content:"";background:inherit;border-radius:50%;width:100%;height:100%;position:absolute}.sparkle:before{top:-50%;left:0}.sparkle:after{top:0;left:50%}.sparkle--1{--dx:0px;--dy:-110px}.sparkle--2{--dx:78px;--dy:-78px;animation-delay:40ms}.sparkle--3{--dx:110px;--dy:0px;animation-delay:80ms}.sparkle--4{--dx:78px;--dy:78px;animation-delay:.12s}.sparkle--5{--dx:0px;--dy:110px;animation-delay:.16s}.sparkle--6{--dx:-78px;--dy:78px;animation-delay:.2s}.sparkle--7{--dx:-110px;--dy:0px;animation-delay:.24s}.sparkle--8{--dx:-78px;--dy:-78px;animation-delay:.28s}@keyframes page-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes heartbeat{0%,to{transform:scale(1)}14%{transform:scale(1.12)}28%{transform:scale(1)}42%{transform:scale(1.18)}70%{transform:scale(1)}}@keyframes glow-breathe{0%,to{opacity:.7;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}@keyframes ring-pulse{0%{opacity:.7;transform:scale(.7)}to{opacity:0;transform:scale(1.85)}}@keyframes sparkle-burst{0%{opacity:0;transform:rotate(-45deg)translate(0)scale(.2)}25%{opacity:1}to{transform:rotate(-45deg) translate(var(--dx), var(--dy)) scale(.85);opacity:0}}@media (prefers-reduced-motion:reduce){.page,.heart,.heart-stage__glow,.heart__ring,.panel__orb,.sparkle{animation:none}.sparkle{display:none}}@media (width<=640px){.topbar{flex-direction:column;align-items:flex-start}.workflow{justify-content:stretch;width:100%}.workflow__step{flex:1;justify-content:center}.workflow__label{display:none}.moods{grid-template-columns:1fr}.heart{width:88px;height:80px}.heart-button{width:140px;height:140px}.actions{width:100%}.btn{flex:1}}
