:root{--ink: #1d211c;--ink-soft: #3f473c;--mute: #6b7466;--paper: #eef1e8;--paper-deep: #e2e7db;--mist: #d7ddd0;--sage: #7d8f74;--leaf: #5f7358;--cinnabar: #9b1d2e;--cinnabar-deep: #6f1420;--photo-veil: linear-gradient( 180deg, rgba(29, 33, 28, .08) 0%, rgba(29, 33, 28, .18) 42%, rgba(29, 33, 28, .78) 100% );--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--stage-w: min(100vw, 430px);--stage-h: 100dvh;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-flap: cubic-bezier(.33, 1, .68, 1);--font-display: "Noto Sans SC", "PingFang SC", sans-serif;--font-latin: "Outfit", sans-serif;--font-ui: "Outfit", "Noto Sans SC", "PingFang SC", sans-serif;--font-envelope: "Outfit", "Noto Sans SC", "PingFang SC", sans-serif;--font-envelope-date: "Orbitron", "Outfit", sans-serif}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:#2a3128;color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;touch-action:pan-y}img{display:block;max-width:100%}button,input{font:inherit}.viewport{min-height:100%;display:grid;place-items:center;background:radial-gradient(ellipse at 50% 0%,#4a5744,#2a3128 62%)}.stage{position:relative;width:var(--stage-w);height:var(--stage-h);overflow:hidden;background:var(--mist);isolation:isolate}.stage:has(.letter.is-revealed){overflow:visible}.envelope{position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;display:grid;place-items:center;padding:calc(20px + var(--safe-top)) 16px calc(20px + var(--safe-bottom));transition:opacity .55s var(--ease-out),visibility .55s}.envelope.is-opening,.envelope.is-gone{pointer-events:none}.envelope.is-opening{opacity:0}.envelope.is-gone{visibility:hidden;opacity:0}.envelope__sky{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,#ffffff1f,#14141614),url(/assets/silver-brushed.png) center / cover no-repeat}.envelope__hit{position:relative;z-index:1;width:min(100%,340px);border:0;padding:0;background:transparent;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:14px}.envelope__stage{position:relative;width:100%;aspect-ratio:1.2 / 1;overflow:hidden}.envelope__lottie{position:absolute;left:50%;top:46%;width:128%;aspect-ratio:1;transform:translate(-50%,-50%);margin:0;pointer-events:none}.envelope__lottie svg{display:block;width:100%!important;height:100%!important}.envelope__meta{position:absolute;left:50%;top:63%;z-index:2;box-sizing:border-box;display:grid;justify-items:center;align-content:center;gap:5px;width:54%;height:28%;padding:6px 8px;overflow:hidden;transform:translate(-50%,-50%);color:var(--ink);text-shadow:0 1px 0 rgba(255,255,255,.35);pointer-events:none}.envelope.is-opening .envelope__meta,.envelope.is-opening .envelope__hint{opacity:0;transition:opacity .25s ease}.envelope__to{font-family:var(--font-envelope);font-size:.72rem;font-weight:400;letter-spacing:.48em;color:#6f6f6f;line-height:1.15}.envelope__names{display:flex;align-items:center;gap:12px;font-family:var(--font-envelope);font-size:clamp(1.18rem,5vw,1.42rem);font-weight:500;letter-spacing:.28em;color:#2a2a2a;line-height:1.1;white-space:nowrap}.envelope__names i{width:8px;height:8px;border-radius:50%;background:var(--cinnabar);flex-shrink:0}.envelope__names em{font-style:normal;font-weight:500}.envelope__date{font-family:var(--font-envelope-date);font-size:.92rem;font-weight:500;letter-spacing:.2em;color:var(--cinnabar);line-height:1.15}.envelope__hint{position:static;margin:0;font-family:var(--font-display);font-size:clamp(.88rem,3.6vw,1.05rem);font-weight:600;letter-spacing:.28em;color:#5c5c5c;text-shadow:0 1px 0 rgba(255,255,255,.4);animation:hint-pulse 2.4s var(--ease-out) infinite}@keyframes hint-pulse{0%,to{opacity:.45;transform:translateY(0)}50%{opacity:1;transform:translateY(3px)}}@media(prefers-reduced-motion:reduce){.envelope__hint{animation:none!important}}.letter{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;opacity:0;transform:translateY(18px);transition:opacity .7s var(--ease-out) .15s,transform .7s var(--ease-out) .15s}.letter.is-revealed{opacity:1;transform:translateY(0)}.letter.is-settled{transform:none;transition:none}.letter__scene{height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;background:#c5c8cd}.letter__invite{display:block;width:100%;height:auto;max-width:100%;margin:0;padding:0;border:0;image-rendering:auto;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;pointer-events:none}.btn{min-height:50px;border:0;cursor:pointer;letter-spacing:.28em;transition:transform .2s ease,background .2s ease,color .2s ease,border-color .2s ease}.btn:active{transform:scale(.985)}.btn--solid{background:var(--ink);color:#f5f7f2}.btn--solid:disabled{opacity:.55;cursor:not-allowed}.btn--ghost{background:transparent;color:var(--ink-soft);border:1px solid rgba(29,33,28,.22)}.btn--ghost.is-copied{border-color:var(--cinnabar);color:var(--cinnabar)}.btn--text{background:transparent;color:var(--mute);font-size:.78rem}.sheet{position:absolute;top:0;right:0;bottom:0;left:0;z-index:8;pointer-events:none}.sheet.is-open{pointer-events:auto}.sheet[hidden]{display:block!important}.sheet__scrim{position:absolute;top:0;right:0;bottom:0;left:0;border:0;padding:0;background:#1d211c6b;opacity:0;transition:opacity .35s var(--ease-out)}.sheet.is-open .sheet__scrim{opacity:1;pointer-events:auto}.sheet__panel{position:absolute;left:0;right:0;bottom:0;max-height:min(88dvh,760px);overflow-y:auto;padding:12px 24px calc(28px + var(--safe-bottom));background:var(--paper);border-radius:24px 24px 0 0;transform:translateY(110%);transition:transform .45s var(--ease-out);box-shadow:0 -18px 48px #1d211c33}.sheet.is-open .sheet__panel{transform:translateY(0)}.sheet__handle{width:42px;height:4px;margin:0 auto 18px;border-radius:999px;background:#1d211c2e}.rsvp,.rsvp-done{width:min(100%,360px);margin:0 auto;text-align:center}.rsvp__title{margin:0 0 8px;font-family:var(--font-display);font-size:1.55rem;font-weight:600;letter-spacing:.28em}.rsvp__desc{margin:0 0 26px;font-size:.82rem;line-height:1.65;color:var(--ink-soft)}.field{display:block;text-align:left;margin-bottom:18px}.field__label{display:block;margin-bottom:8px;font-size:.72rem;letter-spacing:.28em;color:var(--mute)}.field__input{width:100%;border:0;border-bottom:1px solid rgba(29,33,28,.28);background:transparent;padding:10px 2px;font-size:1.05rem;color:var(--ink);outline:none;border-radius:0;transition:border-color .2s ease}.field__input:focus{border-bottom-color:var(--cinnabar)}.field__input::placeholder{color:#1d211c47}.field__hint{display:block;margin-top:8px;font-size:.68rem;letter-spacing:.08em;color:var(--mute)}.field--gender{border:0;padding:0;margin:0 0 22px}.gender{display:grid;grid-template-columns:1fr 1fr;gap:10px}.gender__opt{position:relative;cursor:pointer}.gender__opt input{position:absolute;opacity:0;pointer-events:none}.gender__opt span{display:grid;place-items:center;min-height:48px;border:1px solid rgba(29,33,28,.22);background:#ffffff73;letter-spacing:.3em;transition:background .2s ease,border-color .2s ease,color .2s ease}.gender__opt input:focus-visible+span{outline:2px solid var(--cinnabar);outline-offset:2px}.gender__opt input:checked+span{background:var(--ink);border-color:var(--ink);color:#f5f7f2}.rsvp__error{margin:0 0 12px;font-size:.78rem;color:var(--cinnabar)}.rsvp__submit{width:100%;margin-bottom:8px}.rsvp-done__title{margin:24px 0 10px;font-family:var(--font-display);font-size:1.7rem;letter-spacing:.28em}.rsvp-done__text{margin:0 0 28px;color:var(--ink-soft);line-height:1.7}@media(prefers-reduced-motion:reduce){.envelope__hint,.envelope,.letter,.sheet__scrim,.sheet__panel{animation:none!important;transition-duration:.01ms!important}}
