:root{--sage:#5f6f52;--sage-deep:#3f4b36;--cream:#f4efe4;--paper:#fbf8f1;--gold:#b8a574;--ink:#2b3125;--line:#d9d2bf;--err:#a2432f;--serif:"Cormorant Garamond", "Times New Roman", serif;--sans:"Jost", system-ui, sans-serif;--apex:78%}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:72px}html.env-lock,html.env-lock body{height:100%;overflow:hidden}body{background:var(--cream);color:var(--ink);font:300 17px/1.65 var(--sans);-webkit-font-smoothing:antialiased;margin:0}h1,h2{font-family:var(--serif);letter-spacing:.01em;margin:0;font-weight:400;line-height:1.05}h2{font-size:clamp(2rem,5vw,3rem)}p{margin:0}a{color:inherit}img{max-width:100%;display:block}:focus-visible{outline:2px solid var(--sage);outline-offset:3px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.eyebrow{letter-spacing:.28em;text-transform:uppercase;color:var(--sage);margin-bottom:14px;font-size:.75rem}.lede{color:#4a5142;max-width:46ch;margin-top:14px;font-size:1.1rem}.center{text-align:center}.center .lede{margin-inline:auto}.env-stage{--w:min(calc(100vw - 24px), calc((100svh - 24px) * .5621));z-index:100;background:radial-gradient(circle at 50% 40%, #faf6ec, var(--cream) 70%);touch-action:none;place-items:center;transition:opacity .8s .15s;display:grid;position:fixed;inset:0}.env-stage[data-phase=leave]{opacity:0;pointer-events:none}.env{isolation:isolate;width:var(--w);aspect-ratio:720/1281;perspective:1800px;transition:transform 1.1s cubic-bezier(.5,0,.2,1);position:relative}.env:before{content:"";z-index:-1;border-radius:2px;position:absolute;inset:0;box-shadow:0 30px 70px #232d1c61}.env>*{position:absolute;inset:0}[data-phase=flap] .env,[data-phase=letter] .env,[data-phase=leave] .env{transform:scale(.8)translateY(9%)}.env-liner{z-index:0;clip-path:polygon(0 0, 100% 0, 50% var(--apex));background:linear-gradient(#d9d2bb,#ece6d4);box-shadow:inset 0 0 40px #0000002e}.env-body{z-index:3;clip-path:polygon(0 0, 50% calc(var(--apex) - 0.6%), 100% 0, 100% 100%, 0 100%);background:url(/envelope.jpg) 50%/100% 100% no-repeat}.env-flap{z-index:4;transform-origin:top;transform-style:preserve-3d;transition:transform 1.05s cubic-bezier(.45,0,.2,1)}[data-phase=flap] .env-flap,[data-phase=letter] .env-flap,[data-phase=leave] .env-flap{transform:rotateX(180deg)}[data-phase=letter] .env-flap,[data-phase=leave] .env-flap{z-index:1}.env-face{backface-visibility:hidden;clip-path:polygon(0 0, 100% 0, 50% var(--apex));position:absolute;inset:0}.env-face.front{background:url(/envelope.jpg) 50%/100% 100% no-repeat}.env-face.back{background:linear-gradient(#e6dfca,#cfc8b0);transform:rotateX(180deg)}.env-seal{aspect-ratio:1;filter:drop-shadow(0 6px 8px #00000059);background:url(/envelope.jpg) 50% 45.6%/266.67% no-repeat;border-radius:50%;width:37.5%;position:absolute;top:46.52%;left:50%;transform:translate(-50%,-50%)}[data-phase=closed] .env-seal{animation:2.8s ease-in-out infinite seal-pulse}[data-phase=crack] .env-seal{animation:.45s ease-out forwards seal-crack}@keyframes seal-pulse{50%{transform:translate(-50%,-50%)scale(1.045)}}@keyframes seal-crack{0%{transform:translate(-50%,-50%)scale(1)}30%{transform:translate(-50%,-50%)scale(1.08)rotate(-3deg)}60%{transform:translate(-50%,-50%)scale(1.04)rotate(3deg)}to{transform:translate(-50%,-50%)scale(1.1)}}.env-letter{z-index:2;text-align:center;background:var(--paper);flex-direction:column;justify-content:center;align-items:center;height:64%;padding:6%;transition:transform 1.1s cubic-bezier(.4,0,.2,1);display:flex;inset:7% 7% auto;box-shadow:0 2px 14px #0003}.env-letter .eyebrow{font-size:calc(var(--w) * .024)}.env-letter h2{font-size:calc(var(--w) * .115)}.env-letter h2 span{color:var(--gold);font-style:italic}.letter-date{font-family:var(--serif);font-size:calc(var(--w) * .05);letter-spacing:.12em;margin-top:5%}.letter-city{font-size:calc(var(--w) * .028);letter-spacing:.2em;text-transform:uppercase;color:var(--sage);margin-top:2%}[data-phase=letter] .env-letter{transform:translateY(-40%)}[data-phase=leave] .env-letter{z-index:6;transition-duration:.9s;transform:translateY(-24%)scale(1.1);box-shadow:0 18px 50px #00000059}[data-phase=leave] :is(.env-liner,.env-body,.env-flap){transition:translate .9s cubic-bezier(.5,0,.8,.4),transform 1.05s;translate:0 130%}.env-hit{z-index:10;cursor:pointer;background:0 0;border:0;padding:0}.env-hint{left:0;right:0;bottom:calc(max(12px, (100svh - var(--w) * 1.781) / 2) + 6%);text-align:center;z-index:11;pointer-events:none;color:var(--cream);letter-spacing:.3em;text-transform:uppercase;font-size:.8rem;transition:opacity .3s;animation:2.4s ease-in-out infinite hint;position:absolute}.env-stage:not([data-phase=closed]) .env-hint{opacity:0;animation:none}.env-hint span{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#1e28189e;border-radius:999px;padding:10px 18px 8px;display:inline-block}.env-hint span:after{content:"↓";letter-spacing:0;margin-top:4px;font-size:1.2rem;display:block}@keyframes hint{50%{opacity:.7;transform:translateY(6px)}}.nav{z-index:50;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#f4efe4db;border-bottom:1px solid #d9d2bf99;justify-content:space-between;align-items:center;padding:12px max(20px,4vw);display:flex;position:fixed;inset:0 0 auto}.nav-mark{font-family:var(--serif);font-size:1.5rem;text-decoration:none}.nav nav{letter-spacing:.2em;text-transform:uppercase;align-items:center;gap:22px;font-size:.78rem;display:flex}.nav nav a{text-decoration:none}.nav-cta{border:1px solid var(--sage);color:var(--sage-deep);border-radius:999px;padding:8px 16px}@media (width<=600px){.nav nav a:not(.nav-cta){display:none}}.page{opacity:1}.section{padding:clamp(64px,10vw,120px) 0}.section.tint{background:#ebe5d3}.wrap{width:min(1080px,100% - 40px);margin-inline:auto}.wrap.narrow{width:min(620px,100% - 40px)}.split{grid-template-columns:1.1fr .9fr;align-items:center;gap:clamp(32px,6vw,80px);display:grid}.split.flip{grid-template-columns:.9fr 1.1fr}@media (width<=760px){.split,.split.flip{grid-template-columns:1fr}.split .arch{width:100%;max-width:360px;margin-inline:auto}}.hero{min-height:100svh;color:var(--cream);align-items:end;display:grid;position:relative}.hero .hero-photo{position:absolute;inset:0}.hero-photo img{object-position:50% 35%;height:100%}.closing{aspect-ratio:3/4;border-radius:6px;max-width:420px;margin:clamp(40px,6vw,64px) auto 0}.closing img{object-position:50% 40%}.arch img{object-position:50% 30%}.hero:after{content:"";background:linear-gradient(#141c101a 0%,#141c1026 40%,#141c10c7 100%);position:absolute;inset:0}.hero-copy{z-index:1;text-align:center;padding:120px 20px 12vh;position:relative}.hero-copy .eyebrow{color:#e5dcc0}.hero h1{font-size:clamp(3.4rem,13vw,8rem)}.hero h1 span{color:var(--gold);font-style:italic}.hero-date{font-family:var(--serif);letter-spacing:.1em;margin-top:18px;font-size:clamp(1.3rem,3.5vw,2rem)}.hero-city{letter-spacing:.25em;text-transform:uppercase;opacity:.9;margin:6px 0 28px;font-size:.8rem}.photo{background:#cfc8b0;position:relative;overflow:hidden}.photo img{object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .7s}.photo.is-loaded img{opacity:1}.arch{aspect-ratio:4/5;border-radius:999px 999px 6px 6px}.wide{aspect-ratio:16/9;border-radius:6px;margin-top:clamp(32px,5vw,56px)}.wide.short{aspect-ratio:21/9}.schedule{border-top:1px solid var(--line);margin:28px 0;padding:0;list-style:none}.schedule li{border-bottom:1px solid var(--line);grid-template-columns:96px 1fr;gap:16px;padding:16px 0;display:grid}.schedule time{font-family:var(--serif);color:var(--sage-deep);font-size:1.25rem}.schedule strong{font-weight:500;display:block}.schedule span{color:#5a6150;font-size:.95rem}.tabs{border:1px solid var(--line);background:var(--paper);border-radius:999px;gap:4px;max-width:100%;margin-top:4px;padding:4px;display:inline-flex}.tabs button{font:400 .8rem var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--sage-deep);cursor:pointer;background:0 0;border:0;border-radius:999px;padding:10px 18px;transition:background .2s,color .2s}.tabs button span{opacity:.7;letter-spacing:.05em;margin-left:4px}.tabs button.on{background:var(--sage);color:var(--cream)}.place{margin-top:24px}.place-note{font-family:var(--serif);color:var(--sage-deep);margin-top:4px;font-size:1.2rem;font-style:italic}.attire{border-top:1px solid var(--line);grid-template-columns:96px 1fr;align-items:baseline;gap:16px;margin:28px 0 0;padding:16px 0;display:grid}.attire+.schedule{margin-top:0}.attire span{letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-size:.72rem}.attire strong{font-weight:500}.venue{margin-top:clamp(64px,9vw,110px)}address{color:#4a5142;margin-top:10px;font-style:normal}.map{aspect-ratio:4/3;border:1px solid var(--line);background:#ddd6c2;border-radius:6px;margin-top:28px;overflow:hidden}@media (width>=700px){.map{aspect-ratio:16/9}}.map iframe{filter:saturate(.8)sepia(.12);border:0;width:100%;height:100%}.btn-row{flex-wrap:wrap;gap:10px;margin-top:20px;display:flex}.btn{min-height:46px;font:400 .78rem var(--sans);letter-spacing:.2em;text-transform:uppercase;border:1px solid var(--sage);background:var(--sage);color:var(--cream);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;padding:0 24px;text-decoration:none;transition:background .2s,color .2s,transform .15s;display:inline-flex}.btn:hover{background:var(--sage-deep)}.btn:active{transform:scale(.98)}.btn.ghost{color:var(--sage-deep);background:0 0}.btn.ghost:hover{background:var(--sage);color:var(--cream)}.btn.solid{background:var(--cream);color:var(--sage-deep);border-color:var(--cream)}.section .btn.solid{background:var(--sage);color:var(--cream);border-color:var(--sage)}.btn.block{width:100%;margin-top:8px}.btn:disabled{opacity:.6;cursor:default}.card{background:var(--paper);border:1px solid var(--line);border-radius:8px;margin-top:32px;padding:clamp(22px,5vw,40px)}.card.success{text-align:center;margin:0;padding-block:56px}.card.success .btn{margin-top:24px}.field{border:0;gap:6px;min-width:0;margin:0 0 20px;padding:0;display:grid}.field>label,.field>legend{padding:0;font-size:.85rem;font-weight:400}.hint{color:#7a8070;font-weight:300}.req{color:var(--err)}.req-note{color:#7a8070;text-align:right;margin:0 0 16px;font-size:.8rem}input:not([type=radio]),textarea{width:100%;font:inherit;color:inherit;background:#fff;border:1px solid #cfc8b0;border-radius:6px;min-height:48px;padding:13px 14px;transition:border-color .2s,box-shadow .2s}textarea{resize:vertical}input:focus,textarea:focus{border-color:var(--sage);outline:none;box-shadow:0 0 0 3px #5f6f5233}[aria-invalid=true]{border-color:var(--err)}.err{color:var(--err);font-size:.85rem}.err.banner{background:#f7e6e1;border-radius:6px;margin-bottom:14px;padding:12px 14px}.choice{grid-template-columns:1fr 1fr;gap:10px;display:grid}.choice label{text-align:center;cursor:pointer;background:#fff;border:1px solid #cfc8b0;border-radius:6px;justify-content:center;align-items:center;min-height:56px;padding:8px 12px;transition:all .2s;display:flex}.choice label.on{background:var(--sage);border-color:var(--sage);color:var(--cream)}.choice label:has(input:focus-visible){outline:2px solid var(--sage);outline-offset:3px}.choice input{opacity:0;pointer-events:none;position:absolute}@media (width<=420px){.choice{grid-template-columns:1fr}}.stepper{background:#fff;border:1px solid #cfc8b0;border-radius:999px;align-items:center;width:fit-content;display:inline-flex}.stepper button{cursor:pointer;width:48px;height:48px;color:var(--sage-deep);background:0 0;border:0;border-radius:999px;font-size:1.4rem}.stepper button:disabled{opacity:.3;cursor:default}.stepper output{text-align:center;min-width:40px;font-family:var(--serif);font-size:1.4rem}.reveal-in{animation:.35s both reveal-in}@keyframes reveal-in{0%{opacity:0;transform:translateY(-6px)}}.hp{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.footer{text-align:center;font-family:var(--serif);letter-spacing:.1em;color:var(--sage-deep);padding:40px 20px 56px;font-size:1.2rem}.reveal{opacity:0;transition:opacity .8s,transform .8s cubic-bezier(.2,.7,.2,1);transform:translateY(18px)}.reveal.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transition:none;transform:none}.env-seal,.env-hint{animation:none!important}.env,.env-flap,.env-letter{transition:none!important}}.lang{border:1px solid var(--line);background:#fbf8f1b3;border-radius:999px;padding:2px;display:inline-flex}.lang button{font:400 .72rem var(--sans);letter-spacing:.14em;min-width:38px;min-height:32px;color:var(--sage-deep);cursor:pointer;background:0 0;border:0;border-radius:999px;padding:6px 10px;transition:background .2s,color .2s}.lang button[aria-pressed=true]{background:var(--sage);color:var(--cream)}.env-lang{top:max(12px, env(safe-area-inset-top));z-index:12;position:absolute;right:12px}.hotels{gap:8px;margin:0 0 18px;padding:0;list-style:none;display:grid}.hotels li{background:var(--paper);border:1px solid var(--line);border-radius:6px;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.hotels a{letter-spacing:.15em;text-transform:uppercase;color:var(--sage-deep);white-space:nowrap;font-size:.75rem}.cash{margin-top:clamp(48px,7vw,80px)}.cash h3{font-family:var(--serif);margin:0;font-size:clamp(1.6rem,4vw,2.2rem);font-weight:400}.cash-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-top:24px;display:grid}.pay{background:var(--paper);border:1px solid var(--line);border-radius:8px;flex-direction:column;align-items:flex-start;gap:10px;padding:22px;display:flex}.pay h4{font-family:var(--serif);margin:0;font-size:1.4rem;font-weight:400}.pay dl{gap:2px;margin:0;display:grid}.pay dt{letter-spacing:.2em;text-transform:uppercase;color:var(--sage);margin-top:8px;font-size:.7rem}.pay dd{overflow-wrap:anywhere;margin:0}.mono{font-variant-numeric:tabular-nums;letter-spacing:.04em;overflow-wrap:anywhere}.pay-note{color:#5a6150;font-size:.9rem}.btn.small{min-height:38px;padding:0 16px;font-size:.7rem}.btn-row.tight{margin-top:0}.pay .btn{margin-top:auto}.pay .btn-row .btn{margin-top:0}.venmo{gap:8px;margin-bottom:6px;display:grid}.qr{border:1px solid var(--line);background:#fff;border-radius:6px;width:100%;max-width:228px;height:auto}.rsvp-grid{grid-template-areas:"head""form""photo";gap:8px;display:grid}.rsvp-head{text-align:center;grid-area:head}.rsvp-head .lede{margin-inline:auto}.rsvp-form{grid-area:form;justify-self:center;width:100%;max-width:620px}.rsvp-photo{grid-area:photo;width:100%}@media (width>=900px){.rsvp-grid{grid-template:"head form""photo form"1fr/minmax(0,5fr) minmax(0,6fr);align-items:start;column-gap:clamp(40px,6vw,88px)}.rsvp-head{text-align:left;padding-top:8px}.rsvp-head .lede{margin-inline:0}.rsvp-form{justify-self:stretch;max-width:none;margin-top:0}.rsvp-photo{align-self:start;max-width:380px;margin:28px 0 0}}.center-head{text-align:center}.center-head .lede{margin-inline:auto}#travel h3{font-family:var(--serif);margin:0;font-size:clamp(1.5rem,3.5vw,2rem);font-weight:400}.stay-body{color:#4a5142;max-width:56ch;margin-top:6px}.hotel-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin:20px 0 0;padding:0;list-style:none;display:grid}.hotel{background:var(--paper);border:1px solid var(--line);border-radius:8px;flex-direction:column;justify-content:space-between;gap:22px;min-height:170px;padding:24px;display:flex}.hotel h4{font-family:var(--serif);margin:4px 0 0;font-size:1.7rem;font-weight:400;line-height:1.15}.hotel-brand{letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-size:.72rem}.hotel .btn{align-self:flex-start}.travel-cols{grid-template-columns:1fr;gap:clamp(28px,5vw,64px);margin-top:clamp(40px,6vw,72px);display:grid}@media (width>=760px){.travel-cols{grid-template-columns:1fr 1fr}}.travel-col{border-top:1px solid var(--line);padding-top:20px}.travel-col dl{gap:18px;margin:16px 0 0;display:grid}.travel-col dt{font-weight:500}.travel-col dd{color:#4a5142;margin:2px 0 0}#details{padding-bottom:clamp(12px,2vw,24px)}#travel{padding-top:clamp(28px,4vw,44px)}#venue{margin-top:clamp(48px,6vw,72px)}.hotel{gap:18px;min-height:0;padding:22px 24px}.stay{margin-top:clamp(24px,4vw,40px)}.travel-cols{margin-top:clamp(32px,5vw,48px)}
