:root{--bg: #f7efe8;--card: #fdfbf4;--ink: #2b2823;--muted: #837b6b;--ok: #4f6b54;--error: #9c5b50;--border: #e2dccd;--hairline: #d6cfbe;--accent: #d19a96;--env: #eee1d2;--paper: #fffdf6;--radius: 4px;--field-radius: 13px;--serif: "EB Garamond", "Cormorant Garamond", Georgia, "Times New Roman", serif;--display: "Cormorant Garamond", Georgia, "Times New Roman", serif;--sans: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--serif);font-weight:400;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}html{scroll-behavior:smooth}html,body{overflow-x:clip}#app{max-width:660px;margin:0 auto;padding:0 1.25rem}.site-footer{display:flex;align-items:center;justify-content:center;gap:.4rem;padding:clamp(2.5rem,7vh,4.5rem) 1.25rem clamp(2.5rem,6vh,3.5rem);font-family:var(--serif);font-size:.8rem;letter-spacing:.02em;color:var(--muted);opacity:.7}.footer-heart{display:inline-flex;width:.78rem;color:var(--accent)}.footer-heart svg{display:block;width:100%;height:auto}.snap-section{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:clamp(2rem,5vh,3.5rem) 0}.hero-scroll{position:relative;height:400svh}.hero-stage{position:sticky;top:0;height:100svh;display:flex;align-items:center;justify-content:center}.hero-stage:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:100vw;transform:translate(-50%);background:url(/img/leaves.svg) center / cover no-repeat;opacity:.5;pointer-events:none;-webkit-mask-image:linear-gradient(to bottom,#000 45%,transparent 96%);mask-image:linear-gradient(to bottom,#000 45%,transparent 96%)}.content,.rsvp-section{position:relative}.form-wrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows .45s ease}.form-wrap.open{grid-template-rows:1fr}.form-inner{overflow:hidden;min-height:0}.loading{text-align:center;padding:4rem 0;color:var(--muted)}.overline,.venue,.card h3,.btn,.lang-toggle,.status{text-transform:uppercase;letter-spacing:.2em}.hero h1{font-family:var(--serif);font-weight:500;text-transform:uppercase;font-size:clamp(2.3rem,8vw,3.4rem);letter-spacing:.14em;line-height:1.18;margin:.4rem 0 .6rem}.overline{font-weight:300;font-size:.8rem;letter-spacing:.28em;color:var(--ink);margin:0}.rule{border:none;border-top:1px solid var(--hairline);width:90px;margin:1.75rem auto 0}.print-inventory-bar{position:relative;z-index:2;margin:0 0 1rem;padding:4rem 1.25rem 1.25rem;background:var(--card);border-bottom:2px solid var(--ok);font:14px/1.5 var(--sans);text-align:left;overflow-wrap:anywhere}.inventory-heading{display:flex;flex-wrap:wrap;gap:.25rem .75rem;align-items:baseline}.inventory-heading span{font-size:12px;color:var(--muted)}.print-inventory-bar p{margin:.6rem 0}.inventory-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1rem}.inventory-actions button{min-height:48px;padding:.65rem 1rem;border-radius:8px;font:inherit;cursor:pointer}.inventory-mark{background:var(--ok);color:#fff;border:1px solid var(--ok)}.inventory-exit{background:transparent;color:var(--ink);border:1px solid var(--border)}.inventory-actions button:disabled{opacity:.6;cursor:wait}.lang-bar{position:sticky;top:0;height:0;z-index:10}.lang-toggle{position:absolute;top:1rem;right:calc((100% - 100vw)/2 + 1.25rem);font-size:.7rem}.polaroid{margin:0;background:#fff;padding:.6rem .6rem 0;width:clamp(118px,33vw,172px);border-radius:2px;box-shadow:0 10px 26px #2b28232e}.polaroid-photo{aspect-ratio:1 / 1;border-radius:1px;box-shadow:inset 0 0 0 1px #2b28230f}.polaroid--a .polaroid-photo{background:url(/img/proposal.webp) center / cover no-repeat}.polaroid--b .polaroid-photo{background:url(/img/watercolor.webp) center / cover no-repeat}.polaroid-chin{height:1.7rem}.flip-card{perspective:4000px}.flip-card-inner{position:relative;width:100%;height:100%;transform-style:preserve-3d;will-change:transform}.flip-face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:clamp(1.5rem,5vw,2.6rem);border-radius:3px;background:var(--card);box-shadow:0 18px 50px #2b282329;text-align:center;backface-visibility:hidden;-webkit-backface-visibility:hidden}.flip-back{transform:rotateY(180deg);gap:.9rem;border:1px solid var(--border)}.letter-line{font-family:var(--serif);font-size:clamp(.92rem,2.4vw,1.02rem);line-height:1.7;color:var(--ink);max-width:34ch;margin:0}.letter-sign{margin:.4rem 0 0;font-family:var(--display);font-style:italic;font-size:1.15rem;color:var(--muted);white-space:pre-line}.hero-scene{position:relative;--scene-w: min(86vw, 430px, 46svh);width:var(--scene-w);aspect-ratio:7.25 / 5.25}.env-pocket{position:absolute;inset:0;z-index:2;border-radius:4px;background:var(--env);border-top:1px solid rgba(43,40,35,.11);box-shadow:0 24px 50px #2b282333}.env-addressee{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;max-width:80%;font-family:var(--display);font-style:italic;font-size:clamp(1.05rem,4.4vw,1.6rem);line-height:1.2;text-align:center;color:var(--ink);opacity:.72}.env-flap{position:absolute;left:0;bottom:100%;width:100%;height:26%;z-index:3;transform-origin:50% 100%;background:var(--env);clip-path:polygon(0 100%,100% 100%,90% 0,10% 0);will-change:transform}.env-contents{--grow: 1;position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;will-change:transform}.hero-card{position:relative;z-index:0;--card-w: calc(var(--scene-w) * .664 * var(--grow, 1));width:var(--card-w);aspect-ratio:5 / 7;flex:none}.invite-face{padding:0;overflow:hidden;background:var(--paper);box-shadow:0 20px 44px #2b28233d}.invite-img{display:block;width:100%;height:100%;object-fit:contain}.letter-face{gap:calc(var(--card-w) * .03);padding:calc(var(--card-w) * .08);background:var(--paper);border:none;box-shadow:0 20px 44px #2b28233d}.letter-face .letter-line{font-size:calc(var(--card-w) * .052);line-height:1.6;max-width:none}.letter-face .letter-sign{margin:calc(var(--card-w) * .015) 0 0;font-size:calc(var(--card-w) * .075)}.hero-prints{position:absolute;inset:0;pointer-events:none}.hero-polaroid{position:absolute;inset:0;display:grid;place-items:center;will-change:transform}.hero-polaroid .polaroid{width:calc(40% * var(--grow, 1));box-shadow:0 14px 32px #2b282342}@media(max-width:620px){.hero-polaroid .polaroid{width:calc(34% * var(--grow, 1))}}@media(prefers-reduced-motion:reduce){.hero-scroll{height:auto}.hero-stage{position:static;height:auto;flex-direction:column;padding:clamp(2rem,8vh,4rem) 0}.env-pocket,.env-flap{display:none}.hero-scene{--scene-w: min(88vw, 340px);aspect-ratio:auto;perspective:none}.env-contents{position:static;flex-direction:column;gap:clamp(1.25rem,4vh,2rem)}.hero-card{--card-w: var(--scene-w);width:100%;aspect-ratio:auto;perspective:none}.flip-card-inner{height:auto;transform-style:flat;display:flex;flex-direction:column;gap:1.25rem}.flip-face{position:relative;inset:auto}.invite-face{aspect-ratio:5 / 7}.hero-prints{position:static;display:flex;justify-content:center;gap:clamp(.75rem,4vw,1.5rem)}.hero-polaroid{position:static;display:block}.hero-polaroid .polaroid{width:min(42vw,150px)}.env-contents,.flip-card-inner,.flip-face,.hero-polaroid{transform:none!important;opacity:1!important;z-index:auto!important}}.scroll-cue{position:absolute;top:50%;left:50%;z-index:1;display:grid;justify-items:center;gap:7px;min-width:140px;min-height:92px;padding:12px 20px;border:0;background:transparent;color:var(--muted);font:italic 400 1rem / 1.2 var(--serif);letter-spacing:.035em;cursor:pointer}.scroll-cue:hover{color:var(--ink)}.scroll-cue:focus-visible,.hotel-actions a:focus-visible,.hotel-details summary:focus-visible{outline:2px solid var(--ink);outline-offset:4px}.scroll-cue-icon{display:inline-grid;place-items:center}.scroll-cue svg{display:block;width:24px;height:auto;animation:cue-bob 2.6s ease-in-out infinite}@keyframes cue-bob{0%,to{transform:translateY(0)}50%{transform:translateY(4px)}}@media(prefers-reduced-motion:reduce){.scroll-cue svg{animation:none}.scroll-cue{position:static;transform:none!important;margin:clamp(1.25rem,4vh,2rem) auto 0}}.schedule-section,.travel-section,.attire-section,.hotels-section,.registry-section{text-align:center}.section-rule{border:none;border-top:1px solid var(--hairline);width:90px;margin:0 auto}.schedule{list-style:none;margin:clamp(1.5rem,4vh,2.25rem) auto 0;padding:0;width:fit-content;display:grid;grid-template-columns:auto auto auto;align-items:center;column-gap:1rem;row-gap:1.1rem;text-align:left}.schedule-item{display:contents}.schedule-icon{display:block;width:1.3rem;height:1.3rem;color:var(--accent)}.schedule-icon svg{display:block;width:100%;height:100%}.schedule-time{font:500 .74rem / 1.4 var(--sans);text-transform:uppercase;letter-spacing:.14em;color:var(--muted);white-space:nowrap}.schedule-label{font-size:1.1rem;line-height:1.4;color:var(--ink)}@media(max-width:380px){.schedule{column-gap:.7rem}.schedule-time{letter-spacing:.06em}.schedule-label{font-size:1.02rem}}.attire-note{display:inline-block;margin:1.6rem 0 0;font-family:var(--sans);text-transform:uppercase;letter-spacing:.18em;font-size:.72rem;color:var(--accent);border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:var(--radius);padding:.55rem 1.1rem}.travel-inner{width:min(100%,580px);margin:0 auto}.travel-grid{margin-top:clamp(1.5rem,4vh,2.5rem);display:grid;gap:clamp(1.75rem,5vh,2.75rem);text-align:left}.travel-title{font-family:var(--display);font-weight:600;text-transform:uppercase;font-size:clamp(2.2rem,7vw,3.2rem);letter-spacing:.1em;line-height:1.1;margin:.3rem 0 0;color:var(--ink)}.travel-intro{font-size:1.02rem;line-height:1.7;color:var(--muted);margin:1rem auto 1.75rem;max-width:46ch}.map-frame{position:relative;width:100%;aspect-ratio:4 / 3;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:0 10px 30px #2b28231a;background:var(--card)}.map-embed{display:block;width:100%;height:100%;border:0;filter:saturate(.9) contrast(.98)}.map-caption{margin:.85rem 0 0;font-family:var(--sans);text-transform:uppercase;letter-spacing:.14em;font-size:.66rem;color:var(--muted);text-align:center}.map-caption span{display:block;line-height:1.75}.hotel-picker{border:1px solid var(--border);border-radius:var(--radius);background:var(--card)}.hotel-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-bottom:1px solid var(--border)}.hotel-tab{min-width:0;min-height:52px;padding:.65rem .4rem;border:0;border-bottom:3px solid transparent;background:transparent;color:var(--ink);font:500 clamp(.65rem,2.6vw,.78rem) / 1.4 var(--sans);cursor:pointer}.hotel-tab+.hotel-tab{border-left:1px solid var(--border)}.hotel-tab:hover{background:var(--bg)}.hotel-tab[aria-selected=true]{border-bottom-color:var(--accent);background:var(--bg);font-weight:700}.hotel-tab:focus-visible,.hotel-card:focus-visible{outline:2px solid var(--ink);outline-offset:-4px}.hotel-dates{font:600 1.5rem / 1.25 var(--display);margin:0 0 .6rem}.hotel-card{min-width:0;padding:clamp(1rem,3vw,1.5rem);overflow-wrap:anywhere}.hotel-heading{display:grid;grid-template-columns:1fr 1fr;align-items:start;gap:1rem}.hotel-name{font:600 1.6rem / 1.12 var(--display);margin:0}.hotel-price{margin:0;text-align:right;line-height:1.4}.hotel-price strong{display:block;font-size:1.15rem}.hotel-price span{display:block;font-size:.88rem}.hotel-highlights{margin:1rem 0;padding-left:1.1rem;line-height:1.5}.hotel-highlights li+li{margin-top:.3rem}.hotel-code{background:var(--bg);border-left:3px solid var(--accent);padding:.65rem .85rem}.hotel-code span{display:block;font:500 .65rem / 1.5 var(--sans);letter-spacing:.04em}.hotel-code strong{font:600 .95rem / 1.8 var(--sans);-webkit-user-select:all;user-select:all}.hotel-booking{margin:1rem 0;line-height:1.55}.hotel-actions{display:flex;flex-wrap:wrap;gap:.5rem}.hotel-actions a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:.65rem .85rem;border:1px solid var(--hairline);border-radius:var(--radius);color:var(--ink);font:500 .72rem / 1.4 var(--sans);text-decoration:none}.hotel-actions a:first-child{background:var(--ink);color:var(--card);border-color:var(--ink)}.hotel-actions a:hover{text-decoration:underline;text-underline-offset:3px}.hotel-details{margin-top:1rem;border-top:1px solid var(--border)}.hotel-details summary{padding:.85rem 0;min-height:44px;font:500 .72rem / 1.5 var(--sans);cursor:pointer}.hotel-details ul{padding-left:1.1rem;margin:0 0 .5rem;font-size:.95rem;line-height:1.55}.hotel-details li+li{margin-top:.65rem}.hotels-body{text-align:left}@media(max-width:480px){.hotel-heading{grid-template-columns:1fr;gap:.65rem}.hotel-price{text-align:left}.hotel-actions a{width:100%}}@media(max-width:760px){.content .snap-section{min-height:auto;padding:clamp(1.25rem,4vh,2rem) 0}.travel-grid{margin-top:1.1rem;gap:1.4rem}.travel-intro{margin-bottom:1.1rem}}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:2rem 1.75rem;text-align:center}.card h2{font-family:var(--serif);font-weight:500;font-size:1.9rem;letter-spacing:.02em;line-height:1.2;margin:0 0 .5rem}.family-name{text-transform:uppercase;letter-spacing:.09em;font-style:italic;color:var(--accent)}.allowance strong{font-weight:600}.allowance strong:first-of-type{font-size:1.15rem}.card h3{font-size:.74rem;font-weight:500;color:var(--muted);margin:2rem 0 1rem}.allowance{color:var(--muted);font-size:.9rem;margin-top:0}.adults-only{font-family:var(--serif);font-style:normal;font-size:.92rem;line-height:1.5;color:var(--ink);text-align:center;background:transparent;border:1px solid var(--hairline);border-radius:var(--radius);max-width:280px;padding:.7rem 1.1rem 1rem;margin:.9rem auto 1rem}.adults-heart{display:block;width:16px;margin:-1.15rem auto .6rem;color:var(--hairline);background:var(--card);padding:0}.adults-heart svg{display:block;width:100%;height:auto}.adults-text{margin:0}.adults-text strong{font-weight:600;font-size:1.06em}.status{font-size:.7rem;padding:.6rem .85rem;border-radius:var(--radius);background:var(--bg);border:1px solid var(--border);color:var(--muted)}.status-1,.status-2{text-align:center;background:none;border:none;padding:0;font-size:calc(.9rem + 1px);font-weight:600}.status-1{color:var(--ok)}.status-2{color:var(--muted)}.banner{padding:.7rem .9rem;border-radius:var(--radius);font-size:.92rem}.banner-ok{background:#eaf0ea;color:var(--ok)}.banner-error{background:#f5e8e5;color:var(--error)}.guest-row{border:none;min-width:0;position:relative;padding:.4rem .25rem;margin:0 0 3.1rem}.guest-row+.guest-row:before{content:"";position:absolute;top:-1.55rem;left:50%;transform:translate(-50%);width:88px;border-top:1px solid #d6cfbe}.guest-row .names{display:flex;gap:.85rem}.field{position:relative;display:block;flex:1;min-width:0}.guest-row .names .field+.field{margin-top:0}.field input[type=text]{width:100%;font:inherit;font-size:.95rem;text-transform:uppercase;letter-spacing:.04em;padding:.9rem .9rem .72rem;border:1.5px solid rgba(209,154,150,.5);border-radius:var(--field-radius);background:transparent;color:var(--ink);transition:border-color .16s ease,box-shadow .16s ease}.field input[type=text]::placeholder{color:#c3bbac;text-transform:none;letter-spacing:normal;font-style:italic}.field input[type=text]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #d19a9629}.field-label{position:absolute;top:0;left:.85rem;transform:translateY(-50%);padding:0 .4rem;background:var(--card);font-family:var(--sans);font-weight:500;font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);pointer-events:none}.field-allergies{margin-top:1.1rem}.guest-row .flags{display:flex;align-items:center;gap:1.1rem;margin:.7rem 0;font-size:.9rem}.guest-row .remove{display:block;width:fit-content;margin:.9rem 0 0 auto}.check{display:inline-flex;align-items:center;gap:.5rem;-webkit-user-select:none;user-select:none;text-transform:uppercase;font-size:calc(.9rem - .5px);cursor:pointer}.check input[type=checkbox]{appearance:none;-webkit-appearance:none;flex:none;width:1.15rem;height:1.15rem;margin:0;border:1.5px solid rgba(209,154,150,.5);border-radius:5px;background:transparent;cursor:pointer;position:relative;transition:background .15s ease,border-color .15s ease}.check input[type=checkbox]:checked{background:var(--accent);border-color:var(--accent)}.check input[type=checkbox]:checked:after{content:"";position:absolute;left:50%;top:47%;width:.28rem;height:.55rem;border:solid var(--card);border-width:0 2px 2px 0;transform:translate(-50%,-55%) rotate(45deg)}.check input[type=checkbox]:focus-visible{outline:none;box-shadow:0 0 0 3px #d19a9629}.btn{font-family:var(--serif);font-size:.74rem;font-weight:500;padding:.85rem 1.6rem;border-radius:var(--radius);border:1px solid transparent;cursor:pointer;transition:background .18s ease,color .18s ease}.btn:disabled{opacity:.55;cursor:default}.btn-primary{background:var(--accent);color:var(--card)}.btn-primary:hover:not(:disabled){background:#c0857d}.btn-secondary{background:transparent;color:var(--accent);border-color:var(--accent)}.btn-secondary:hover:not(:disabled){background:var(--accent);color:var(--card)}.btn-link{background:none;border:none;font-family:var(--serif);font-size:.82rem;color:var(--ink);cursor:pointer;padding:.25rem 0}.btn-link:disabled{color:var(--muted);cursor:default;text-decoration:none}.btn-link:hover:not(:disabled){text-decoration:underline}.actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.75rem;justify-content:center}.cancel-rsvp{display:block;margin:.9rem auto 0;font-size:.78rem;color:var(--muted)}.changed-mind{align-items:baseline;justify-content:center;gap:.45rem;font-size:1rem}.changed-prompt{color:var(--muted)}.mind-link{color:var(--accent);font-size:1rem}.calendar-btn{display:block;width:fit-content;margin:1.2rem auto 0;text-align:center;text-decoration:none}.registry-gift{display:block;width:2rem;height:2rem;margin:0 auto .6rem;color:var(--accent)}.registry-gift svg{display:block;width:100%;height:100%}.registry-line{margin-bottom:.5rem}.registry-link{display:block;width:fit-content;margin:.7rem auto 0;font-size:1rem;text-transform:uppercase;letter-spacing:.22em;color:var(--accent);text-decoration:none}.registry-link:hover{text-decoration:underline}.modal{border:none;border-radius:8px;padding:1.9rem 1.6rem 1.5rem;width:calc(100% - 3rem);max-width:330px;background:var(--card);color:var(--ink);box-shadow:0 14px 46px #2b282338;text-align:center}.modal::backdrop{background:#fff3}.modal-text{font-family:var(--serif);font-size:1.2rem;line-height:1.4;margin:0 0 1.5rem}.modal-actions{display:flex;gap:.7rem}.modal-actions .btn{flex:1;padding:.7rem 1rem}.hint{font-size:.8rem;color:var(--muted);margin-bottom:0}.error-stage{min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(.75rem,3vh,1.75rem);padding:clamp(1.25rem,4vh,3rem) 0}.error-card{text-align:center;width:min(100%,300px);min-height:52vh;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;background:none;border:1px solid rgba(43,40,35,.14);border-radius:2px;box-shadow:inset 0 0 0 1px #fffcf580,0 2px 30px #2b28230d}.error-card .monogram-name{font-size:clamp(1.7rem,8vw,2.5rem)}.error-card .monogram-amp{font-size:clamp(4rem,20vw,5.5rem)}.error-card p{font-family:var(--serif);text-transform:uppercase;letter-spacing:.14em;font-size:.84rem;line-height:1.9}h1.monogram{display:flex;flex-direction:column;align-items:center;font-family:var(--display);line-height:1}.error-card h1.monogram{margin:.5rem 0 1.5rem}.monogram-name{font-weight:600;font-size:clamp(2.3rem,9vw,4.5rem);text-transform:uppercase;letter-spacing:.12em;text-indent:.12em;position:relative;z-index:1}.monogram-amp{font-size:clamp(5.5rem,22vw,8.5rem);font-weight:500;font-style:italic;letter-spacing:normal;line-height:.7;margin:-.2em 0;color:#f7efe8;-webkit-text-stroke:1px rgba(43,40,35,.25);position:relative;z-index:0}.error-doodle{overflow:hidden;aspect-ratio:100 / 82;width:min(62%,200px);margin:0 auto}.error-doodle img{display:block;width:100%;margin-top:-18%}@media(max-width:480px){.guest-row .names{flex-direction:column}.actions .btn{width:100%}}
