@font-face{font-family:Fraunces;src:url(/fonts/fraunces.woff2)format("woff2");font-weight:400 800;font-display:swap}@font-face{font-family:Caveat;src:url(/fonts/caveat.woff2)format("woff2");font-weight:500;font-display:swap}:root{--night:#1b1229;--night-lift:#29193d;--paper:#f8f0e3;--paper-shade:#ede1cd;--paper-edge:#d9c9ad;--ink:#2e2440;--ink-soft:#7a6a8d;--marigold:#ffb627;--magenta:#e8467c;--mint:#5fd3b4;--rule:2rem;--sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--display:"Fraunces", ui-serif, Georgia, serif;--hand:"Caveat", ui-rounded, cursive}*{box-sizing:border-box}html,body{background:var(--night);color:var(--paper);margin:0;padding:0}body{font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;background:radial-gradient(120% 60% at 50% -10%, var(--night-lift) 0%, transparent 60%), var(--night);min-height:100dvh}.shell{z-index:1;max-width:34rem;padding:3rem 1.25rem calc(2.5rem + env(safe-area-inset-bottom));flex-direction:column;gap:1.75rem;margin:0 auto;display:flex;position:relative}.masthead{text-align:center}.masthead__mark{width:2.25rem;height:2.25rem;margin:0 auto 1rem;display:block}.masthead__title{font-family:var(--display);letter-spacing:-.02em;color:var(--paper);text-wrap:balance;margin:0;font-size:clamp(2.5rem,11.5vw,3.5rem);font-weight:700;line-height:1.02}.masthead__intro{color:#bdaecd;text-wrap:pretty;max-width:26rem;margin:.9rem auto 0;font-size:1rem;line-height:1.55}.card{background:var(--paper);color:var(--ink);box-shadow:0 1px 0 var(--paper-edge), 0 18px 40px -12px #0009, 0 2px 6px #00000059;border-radius:3px;padding:1.5rem 1.35rem 1.35rem 2rem;position:relative;transform:rotate(-.7deg)}.card:before{content:"";pointer-events:none;background:linear-gradient(90deg,#7a6a8d47,#ffffff8c);width:3px;position:absolute;top:0;bottom:0;left:1.15rem}.card__label{font-family:var(--display);color:var(--ink-soft);margin:0 0 .35rem;font-size:.95rem;font-weight:600}.note{resize:none;background-color:#0000;background-image:repeating-linear-gradient(to bottom, transparent 0, transparent calc(var(--rule) - 1px), #7a6a8d40 calc(var(--rule) - 1px), #7a6a8d40 var(--rule));width:100%;font-family:var(--hand);font-size:1.5rem;line-height:var(--rule);color:var(--ink);min-height:calc(var(--rule) * 6);background-position:0 -5px;border:0;outline:none;margin:0;padding:0;display:block}.note::placeholder{color:#7a6a8dbf}.note:focus-visible{outline:2px solid var(--mint);outline-offset:6px;border-radius:2px}.sign{align-items:baseline;gap:.5rem;margin-top:1.1rem;display:flex}.sign__dash{font-family:var(--hand);color:var(--ink-soft);font-size:1.4rem;line-height:1}.sign__input{min-width:0;font-family:var(--hand);color:var(--ink);background:0 0;border:0;border-bottom:1px dashed #7a6a8d8c;outline:none;flex:1;padding:0 0 .3rem;font-size:1.4rem;line-height:1.2}.sign__input::placeholder{color:#7a6a8db3}.sign__input:focus-visible{outline:2px solid var(--mint);outline-offset:4px;border-radius:2px}.photos{flex-wrap:wrap;gap:.75rem;margin-top:1.25rem;padding:0;list-style:none;display:flex}.snap{background:#fff;width:5.25rem;padding:.3rem .3rem 1.15rem;position:relative;box-shadow:0 3px 10px #2e244047}.snap:nth-child(odd){transform:rotate(1.8deg)}.snap:nth-child(2n){transform:rotate(-2.2deg)}.snap__img{aspect-ratio:1;object-fit:cover;background:var(--paper-shade);width:100%;display:block}.snap__drop{border:2px solid var(--paper);background:var(--ink);width:1.6rem;height:1.6rem;color:var(--paper);cursor:pointer;border-radius:50%;place-items:center;padding:0;font-size:.9rem;line-height:1;display:grid;position:absolute;top:-.5rem;right:-.5rem}.snap__drop:focus-visible{outline:2px solid var(--mint);outline-offset:2px}.snap--busy{min-height:6.4rem;color:var(--ink-soft);place-items:center;font-size:.8rem;display:grid}.attach{border:1.5px dashed var(--paper-edge);color:var(--ink-soft);font-family:var(--sans);cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:.55rem;margin-top:1.25rem;padding:.6rem 1rem;font-size:.9rem;display:inline-flex}.attach:hover:not(:disabled){border-color:var(--magenta);color:var(--magenta)}.attach:disabled{opacity:.45;cursor:not-allowed}.attach:focus-visible{outline:2px solid var(--mint);outline-offset:3px}.attach__plus{font-size:1.1rem;line-height:1}.send{background:var(--marigold);color:#33240a;width:100%;font-family:var(--display);letter-spacing:-.01em;cursor:pointer;border:0;border-radius:999px;padding:1.05rem 1.5rem;font-size:1.15rem;font-weight:700;box-shadow:0 8px 22px -8px #ffb627b3}.send:hover:not(:disabled){background:#ffc44d}.send:active:not(:disabled){transform:translateY(1px)}.send:disabled{color:#b4a68f;cursor:progress;box-shadow:none;background:#6a5a44}.send:focus-visible{outline:3px solid var(--mint);outline-offset:3px}.alert{border-left:3px solid var(--magenta);color:#ffd3e2;background:#e8467c1f;border-radius:0 3px 3px 0;margin:0;padding:.8rem 1rem;font-size:.9rem;line-height:1.5}.count{text-align:right;color:var(--ink-soft);margin-top:.6rem;font-size:.75rem;display:block}.done{text-align:center;padding:2.5rem 1.5rem}.done__title{font-family:var(--display);color:var(--ink);margin:.75rem 0 0;font-size:2.1rem;font-weight:700;line-height:1.1}.done__body{max-width:20rem;color:var(--ink-soft);margin:.7rem auto 0;font-size:.95rem;line-height:1.55}.again{color:var(--magenta);font-family:var(--sans);text-underline-offset:3px;cursor:pointer;background:0 0;border:0;margin-top:1.5rem;padding:.4rem;font-size:.95rem;text-decoration:underline}.again:focus-visible{outline:2px solid var(--mint);outline-offset:2px;border-radius:3px}.seal{width:3.5rem;height:3.5rem}.confetti{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.confetti__bit{opacity:.55;position:absolute}.confetti--falling .confetti__bit{animation:2.6s cubic-bezier(.3,.7,.5,1) forwards drop}@keyframes drop{0%{opacity:0;transform:translateY(-16vh)rotate(0)}12%{opacity:.95}to{opacity:0;transform:translateY(105vh)rotate(420deg)}}.offscreen,.hp{opacity:0;width:1px;height:1px;position:absolute;left:-9999px}@media (prefers-reduced-motion:reduce){.confetti--falling .confetti__bit{animation:none}*{transition:none!important}}@media (width>=40rem){.shell{gap:2rem;padding-top:4.5rem}.card{padding:2rem 2rem 1.75rem 2.75rem}.card:before{left:1.6rem}}
