@charset "UTF-8";
:root{--paper:#f2efE4;--ink:#263d33;--muted:#72766a;--red:#a93d2f;--line:#d5d2c4;--serif:"Songti SC","STSong","Noto Serif CJK SC","SimSun",serif;--sans:"PingFang SC","Microsoft YaHei",sans-serif;--preview-h:46px;--utility-h:33px;color-scheme:light}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--paper);color:var(--ink)}body{font-family:var(--sans);-webkit-font-smoothing:antialiased}button,input{font:inherit}button{color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button:focus-visible,input:focus-visible{outline:2px solid var(--red);outline-offset:5px}button{border:0;background:none}button:disabled{cursor:default;opacity:.4}[hidden]{display:none!important}h1,h2,p{margin:0}h1,h2{font-family:var(--serif);font-weight:400}h1:focus,h2:focus{outline:none}button,input{touch-action:manipulation}button{min-height:44px}img{display:block;width:100%;height:100%;object-fit:cover}::selection{background:#c1c9b5}fieldset{padding:0;border:0;margin:24px 0 0}legend{padding:0}dialog::backdrop{background:#15251dd9;backdrop-filter:blur(5px)}
.preview-bar{height:var(--preview-h);display:flex;align-items:center;gap:16px;justify-content:center;border-bottom:1px solid #d9d8ce;background:#fcfaf4;position:relative;z-index:30;padding:0 16px;font-size:11px}.preview-label{display:flex;align-items:center;gap:6px;color:#6b7268}.preview-label i{width:5px;height:5px;border-radius:50%;background:var(--red)}.time-switch{display:flex;padding:3px;background:#e9e7dd;border-radius:6px}.time-switch button{font-size:11px;min-height:29px;padding:0 18px;border-radius:4px;color:#6e756a}.time-switch [aria-pressed=true]{background:#fffdf8;color:var(--ink);box-shadow:0 1px 4px #20332412}.replay{font-size:22px;min-width:28px;padding:0}.utility-bar{position:fixed;bottom:0;left:0;right:0;z-index:40;display:flex;align-items:center;justify-content:center;gap:14px;min-height:var(--utility-h);padding:0 12px;background:#fcfaf4f5;border-top:1px solid #d9d8ce;color:#6e7369;font-size:10px;backdrop-filter:blur(12px)}.utility-bar button{min-height:32px;padding:0;font-size:10px;white-space:nowrap}.utility-bar button[aria-pressed=true]{color:var(--red)}
#app{position:relative;min-height:calc(100svh - var(--preview-h));padding-bottom:var(--utility-h)}.scene{position:relative;min-height:calc(100svh - var(--preview-h) - var(--utility-h));overflow:hidden}.scene.active{animation:scene-in .7s cubic-bezier(.22,.65,.24,1) both}.arrival,.receipt,.letter-scene{background:var(--paper);isolation:isolate}.arrival:before,.receipt:before,.letter-scene:before,.invite-paper:before,.envelope-front:after,.envelope-back:after,.reply-paper:after{content:"";position:absolute;inset:0;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23000' opacity='.18' filter='url(%23n)' d='M0 0h180v180H0z'/%3E%3C/svg%3E");opacity:.27;mix-blend-mode:multiply;z-index:4}.masthead{height:92px;padding:28px 7.5% 12px;display:flex;align-items:flex-start;justify-content:space-between;position:relative;z-index:5}.wordmark{font:18px var(--serif);letter-spacing:3px;display:block}.wordmark>span{display:block;font:7px var(--sans);letter-spacing:1.7px;margin-top:8px}.edition{font-size:9px;line-height:1.9;letter-spacing:1px;text-align:right;color:var(--muted)}.eyebrow{font-size:8px;letter-spacing:2.2px;font-weight:500}.arrival{display:flex;flex-direction:column;min-height:max(720px,calc(100svh - var(--preview-h) - var(--utility-h)))}.arrival-copy{padding:25px 9% 0;z-index:3;position:relative}.arrival h1{font-size:clamp(42px,11.4vw,56px);line-height:1.33;letter-spacing:2px;white-space:pre-line;margin:16px 0 14px}.arrival-copy p{font-size:11px;letter-spacing:1px;color:var(--muted)}.envelope-stage{position:relative;width:100%;max-width:460px;margin:22px auto 0;padding:55px 9% 30px;perspective:1200px;flex:1;display:flex;align-items:center;justify-content:center;min-height:285px}.margin-note{position:absolute;right:4%;top:58px;font:10px var(--serif);letter-spacing:3px;writing-mode:vertical-rl;color:#858579}.envelope{position:relative;width:100%;height:185px;max-width:340px;transform:rotate(-7deg);filter:drop-shadow(5px 18px 14px #2d342b27);perspective:1000px;isolation:isolate;--pull:0}.envelope-back{position:absolute;inset:0;background:#c7c7b4;border-radius:2px}.inside-card{position:absolute;z-index:1;width:88%;height:225px;left:6%;bottom:10px;padding:7px 7px 23px;background:#fdfbf1;transform:translateY(calc(var(--pull) * -65px)) rotate(calc(var(--pull) * 3deg));box-shadow:0 -4px 12px #14231b15;will-change:transform}.inside-card img{object-position:center 62%;filter:saturate(.75)}.inside-card>span{position:absolute;bottom:7px;left:10px;font-size:6px;letter-spacing:1.7px}.envelope-flap{position:absolute;z-index:2;top:0;left:0;right:0;height:105px;background:#d6d5c4;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top center;transform:rotateX(calc(var(--pull) * 175deg));filter:drop-shadow(0 1px 1px #22332730);will-change:transform}.envelope-front{position:absolute;z-index:3;inset:0;background:#e6e3d4;clip-path:polygon(0 0,48% 38%,52% 38%,100% 0,100% 100%,0 100%);border-radius:2px;overflow:hidden}.paper-fold{position:absolute;inset:0;background:linear-gradient(145deg,transparent 49.6%,#b9b9a680 49.9%,#eae7d7 50.5%);opacity:.75}.envelope-address{position:absolute;left:22px;bottom:24px;display:flex;flex-direction:column;gap:10px;z-index:2}.envelope-address small{font-size:7px;letter-spacing:3px}.envelope-address strong{font:21px var(--serif);letter-spacing:2px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.envelope-address>span{font-size:7px;color:#777b6d;letter-spacing:.6px}.post-stamp{position:absolute;right:16px;top:45px;width:49px;height:60px;background:var(--ink);color:#e5e4d4;display:flex;flex-direction:column;align-items:center;justify-content:center;outline:3px dotted #e6e3d4;outline-offset:-1px;transform:rotate(4deg)}.post-stamp>span{font:27px Georgia,serif;line-height:1}.post-stamp small{font-size:5px;letter-spacing:1px;margin:3px 0}.post-stamp i{font:7px var(--serif)}.envelope-postmark{position:absolute;right:42px;bottom:22px;display:flex;flex-direction:column;justify-content:center;text-align:center;width:63px;height:63px;border:1px solid #6e74654a;outline:1px solid #6e74654a;outline-offset:-4px;border-radius:50%;font:6px var(--sans);letter-spacing:.5px;line-height:1.3;transform:rotate(14deg);color:#727b6680}.envelope-postmark b{font-weight:400}.pull-tab{position:absolute;z-index:8;top:20px;left:12%;width:78%;height:43px;background:var(--red);color:#fff8e6;transform:translateX(calc(var(--pull) * 145px)) rotate(calc(var(--pull) * 8deg));box-shadow:1px 5px 7px #64291d20;touch-action:none;user-select:none;display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:0 13px;clip-path:polygon(0 0,96% 0,100% 50%,96% 100%,0 100%,1.5% 50%);cursor:grab}.pull-tab:active{cursor:grabbing}.pull-tab>span{font-size:6px;letter-spacing:1px;margin-right:auto;opacity:.8}.pull-tab b{font-size:10px;letter-spacing:2px;font-weight:400;white-space:nowrap}.pull-tab i{font-size:23px;font-style:normal;animation:pull-hint 2.6s ease-in-out 3}.gesture-hint{position:absolute;bottom:8px;text-align:center;font-size:9px;color:#72796e;letter-spacing:.7px}.gesture-hint span{display:inline-block;margin-right:4px;font-size:16px;vertical-align:-1px}.arrival-footer{position:relative;z-index:5;margin:15px 7.5% 0;padding:18px 0 20px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}.event-time{display:flex;align-items:center;gap:12px}.event-time>strong{font:36px Georgia,serif;letter-spacing:-2px}.event-time>span{font-size:8px;line-height:1.8;color:var(--muted)}.event-time b{font-weight:400;color:var(--ink);white-space:nowrap}.venue-link{font-size:10px;text-align:left;display:flex;align-items:center;gap:12px}.venue-link>span:last-child{font-size:19px}
.invite{display:flex;flex-direction:column;min-height:max(740px,calc(100svh - var(--preview-h) - var(--utility-h)));background:#193326;color:#fff9e6}.photo-cover{position:absolute;inset:0 0 190px}.photo-cover>img{object-position:center 64%;animation:photo-settle 1.7s cubic-bezier(.2,.7,.2,1) both}.photo-shade{position:absolute;inset:0;background:linear-gradient(180deg,#071d13a1 0%,#0a281f1a 55%,#0a281f00 75%,#0a281f38 100%)}.masthead.light{color:#fff9e6}.text-button{font-size:10px;letter-spacing:.4px;padding:0;min-height:34px;white-space:nowrap}.invite-copy{position:relative;z-index:3;margin:24px 9% 200px}.invite h1{font-size:44px;line-height:1.4;letter-spacing:2px;margin:17px 0 16px;text-shadow:0 2px 22px #09231942}.invite-copy p{font-family:var(--serif);font-size:12px;line-height:1.9;letter-spacing:.6px}.invite .eyebrow{font-size:7px;letter-spacing:1.8px}.photo-caption{position:relative;margin:auto 8% 15px;display:flex;justify-content:space-between;font-size:6px;letter-spacing:1.5px;z-index:3}.invite-paper{background:var(--paper);color:var(--ink);position:relative;padding:22px 8% 19px;clip-path:polygon(0 3px,4% 0,10% 2px,15% 0,26% 3px,30% 0,41% 2px,47% 0,54% 3px,62% 0,73% 2px,79% 0,85% 3px,96% 0,100% 2px,100% 100%,0 100%);z-index:5}.invitation-date{display:flex;align-items:center;justify-content:center;gap:20px}.invitation-date>span{font-size:8px;letter-spacing:2px}.invitation-date>strong{font:46px Georgia,serif;letter-spacing:-2px}.invitation-date strong>span{font:29px var(--serif);color:#b1b4a5;margin:0 10px}.invitation-place{display:flex;flex-direction:column;align-items:center;gap:8px;font-size:11px;margin:7px 0 21px}.invitation-place b{font-weight:400;letter-spacing:2px}.invitation-place>span{font-size:9px;color:var(--muted)}.primary-button{width:100%;height:51px;display:flex;align-items:center;justify-content:space-between;background:var(--ink);color:#faf7e9;padding:0 21px;font-size:12px;letter-spacing:2px;position:relative;z-index:6;transition:background .2s,transform .2s}.primary-button:hover{background:#375443}.primary-button:active{transform:scale(.98)}.primary-button>span{font-size:20px}.quiet-note{font-size:9px;line-height:1.8;text-align:center;margin-top:12px;color:var(--muted)}
.receipt{padding-bottom:30px}.receipt-heading{padding:28px 9% 0}.receipt h1{font-size:38px;line-height:1.5;margin-top:14px;letter-spacing:2px}.reply-paper{position:relative;margin:35px 9% 0;padding:24px;background:#faf8ef;box-shadow:4px 10px 25px #25312612;transform:rotate(-3deg);min-height:230px;border-bottom:2px solid #e2dfcf}.reply-paper-top{display:flex;justify-content:space-between;font-size:8px;letter-spacing:2px;padding-bottom:14px;border-bottom:1px solid #d6d7c8}.reply-paper>p:first-of-type{font-size:11px;margin:20px 0 16px;color:var(--muted)}.reply-paper strong{color:var(--ink);font-weight:400;margin-left:8px;overflow-wrap:anywhere}.reply-status{font:24px var(--serif)}.reply-count{font-size:10px;color:var(--muted);margin:10px 0 13px}.reply-paper .text-button{border-bottom:1px solid #adbaaa;position:relative;z-index:5}.received-stamp{position:absolute;right:22px;bottom:40px;width:87px;height:87px;border:2px solid var(--red);outline:1px solid var(--red);outline-offset:-6px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;transform:rotate(14deg);color:var(--red);opacity:0;z-index:5}.received-stamp>span{font-size:9px;letter-spacing:1px}.received-stamp>b{font:21px Georgia,serif}.received-stamp>small{font-size:6px;letter-spacing:1px}.stamped .received-stamp{animation:stamp-in .65s .25s cubic-bezier(.2,.7,.25,1.2) both}.future-letter{margin:38px 9% 20px;display:flex;align-items:flex-start;gap:15px}.future-mark{font-size:34px;color:var(--red);line-height:1}.future-letter p{font:16px var(--serif);margin-bottom:11px}.future-letter div>span{font-size:10px;color:var(--muted);line-height:2}.underlined{display:block;margin:auto;font-size:11px;border-bottom:1px solid #9ba694;padding:0 1px;min-height:33px}.receipt-local-note{font-size:9px;text-align:center;color:var(--muted);margin:23px 20px 0}
.letter-scene{padding-bottom:28px;overflow:visible}.personal-letter{position:relative;margin:18px 6.5% 24px;background:#fcfaf3;box-shadow:0 10px 40px #263c3210;animation:letter-unfold 1s cubic-bezier(.22,.7,.2,1) both;transform-origin:top center}.letter-photo{height:180px;position:relative;overflow:hidden}.letter-photo img{object-position:center 47%;filter:saturate(.75)}.letter-photo:after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 50%,#182c2599)}.letter-photo>span{position:absolute;bottom:14px;left:22px;color:#f8f6eb;z-index:2;font-size:6px;letter-spacing:2px}.letter-content{padding:24px 24px 34px}.letter-date{display:flex;justify-content:space-between;font-size:7px;letter-spacing:.5px;color:var(--muted)}.sample-label{font-size:8px;line-height:1.7;letter-spacing:.3px;color:var(--muted);margin:18px 0;padding:8px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.letter-content h1{font-size:25px;line-height:1.6;margin:22px 0;overflow-wrap:anywhere}.letter-content p{font:13px/2.2 var(--serif);letter-spacing:.5px;margin:0 0 20px}.letter-content .letter-wish{color:var(--red);margin:26px 0}.letter-sign{text-align:right;display:flex;flex-direction:column;gap:8px;padding-top:9px}.letter-sign>span:first-child{font:11px var(--serif)}.letter-sign b{font:22px var(--serif);letter-spacing:3px}.letter-sign>span:last-child{font-size:6px;letter-spacing:1.5px;color:var(--muted)}.letter-end{display:flex;align-items:center;justify-content:center;gap:12px;margin:35px 0 13px;color:var(--red)}.letter-end span{height:1px;background:var(--line);width:35px}.letter-end i{font-size:20px;font-style:normal}.letter-content .last-line{text-align:center;font-size:10px;letter-spacing:3px;margin:0}.letter-actions{display:flex;align-items:center;flex-direction:column;gap:15px}
.sheet-dialog{border:0;color:var(--ink);background:var(--paper);padding:24px 27px 22px;width:min(100%,430px);max-width:100%;max-height:min(90svh,740px);margin:auto auto 0;border-radius:12px 12px 0 0;box-shadow:0 -15px 80px #101e1922;overscroll-behavior:contain}.sheet-dialog[open]{animation:sheet-in .35s cubic-bezier(.2,.7,.2,1)}.dialog-header{display:flex;align-items:center;justify-content:space-between}.close-button{font-size:25px;min-width:44px;margin-right:-10px}.sheet-dialog h2{font-size:29px;line-height:1.4;margin-top:6px}.form-intro{font-size:11px;color:var(--muted);line-height:1.8;margin:10px 0 27px}.field-label{display:block;font-size:12px;margin-bottom:12px}.field-label>span{font-size:9px;color:var(--muted);margin-left:9px}#guest-name{border:0;border-bottom:1px solid #b7bdb0;border-radius:0;background:transparent;width:100%;height:45px;color:var(--ink);padding:0 0 10px;font:18px var(--serif)}#guest-name::placeholder{font:15px var(--serif);color:#929889}.attendance-options{display:flex;gap:8px}.attendance-options>label{flex:1;position:relative;cursor:pointer}.attendance-options input{position:absolute;opacity:0;inset:0;width:100%;height:100%;margin:0;cursor:pointer}.attendance-options span{display:flex;flex-direction:column;justify-content:center;gap:7px;height:80px;border:1px solid #cbd0c0;padding:12px;transition:background .2s,color .2s}.attendance-options b{font-size:14px;font-weight:400}.attendance-options small{font-size:9px;opacity:.7}.attendance-options i{position:absolute;right:10px;top:8px;font-style:normal;font-size:15px;opacity:0}.attendance-options input:checked+span{background:var(--ink);color:#faf8ed;border-color:var(--ink)}.attendance-options input:checked+span i{opacity:1}.attendance-options input:focus-visible+span{outline:2px solid var(--red);outline-offset:3px}.count-row{display:flex;justify-content:space-between;align-items:center;margin:23px 0 0}.count-row>label{font-size:12px}.count-row>label>span{display:block;font-size:9px;color:var(--muted);margin-top:7px}.stepper{display:flex;align-items:center;border-bottom:1px solid #bdc3b4}.stepper button{width:40px;font-size:17px}.stepper input{width:42px;text-align:center;font-size:17px;border:0;background:none;color:var(--ink);appearance:textfield;-moz-appearance:textfield}.stepper input::-webkit-inner-spin-button{display:none}.form-error{color:var(--red);font-size:11px;min-height:28px;padding:8px 0}#submit-rsvp{margin-top:4px}.detail-date{font:70px Georgia,serif;letter-spacing:-3px;margin:30px 0}.detail-date>span{font:43px var(--serif);margin:0 8px;color:#a3b09e}.detail-date small{display:block;font:10px var(--sans);letter-spacing:3px;margin-top:12px}.details-dialog dl{margin:0 0 28px}.details-dialog dl>div{display:flex;border-top:1px solid var(--line);padding:20px 0;gap:25px}.details-dialog dt{font-size:11px;color:var(--muted);min-width:30px}.details-dialog dd{margin:0;font-size:14px}.details-dialog dd>span{display:block;margin-top:8px;font-size:11px;color:var(--muted)}
@keyframes scene-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes photo-settle{from{transform:scale(1.045)}to{transform:scale(1)}}@keyframes pull-hint{0%,65%,100%{transform:translateX(0)}80%{transform:translateX(5px)}}@keyframes stamp-in{from{opacity:0;transform:scale(1.8) rotate(3deg)}55%{opacity:.85;transform:scale(.95) rotate(14deg)}to{opacity:.8;transform:scale(1) rotate(14deg)}}@keyframes sheet-in{from{opacity:0;transform:translateY(50px)}to{opacity:1;transform:none}}@keyframes letter-unfold{from{opacity:0;transform:translateY(40px) rotateX(-8deg)}to{opacity:1;transform:none}}
@media(min-width:650px){:root{--preview-h:52px;--utility-h:36px}.preview-bar{gap:25px}.preview-label,.time-switch button{font-size:12px}.time-switch button{padding:0 25px}.utility-bar{font-size:11px;gap:20px}.utility-bar button{font-size:11px}#app{max-width:none}.scene{max-width:none}.masthead{height:110px;padding:35px 5% 15px}.wordmark{font-size:22px}.wordmark>span{font-size:8px}.edition{font-size:11px}.arrival{min-height:max(660px,calc(100svh - 88px));display:grid;grid-template-columns:1fr 1fr;grid-template-rows:110px 1fr 100px;align-items:center}.arrival>.masthead{grid-column:1/-1;width:100%;align-self:stretch}.arrival-copy{padding:0 0 40px 15%;align-self:center}.arrival h1{font-size:clamp(56px,6.3vw,92px);line-height:1.32;margin-top:25px;letter-spacing:6px}.arrival-copy p{font-size:13px;margin-top:22px}.eyebrow{font-size:10px;letter-spacing:3px}.envelope-stage{grid-column:2;grid-row:2;width:100%;max-width:640px;padding:60px 10% 60px 5%;margin:0;min-height:400px}.envelope{max-width:460px;height:250px}.inside-card{height:300px;padding:10px 10px 29px;bottom:10px}.inside-card>span{font-size:8px;bottom:9px;left:15px}.envelope-flap{height:145px}.envelope-address{left:30px;bottom:36px;gap:13px}.envelope-address strong{font-size:30px;max-width:250px}.envelope-address small{font-size:9px}.envelope-address>span{font-size:10px}.post-stamp{width:65px;height:78px;top:65px;right:23px}.post-stamp>span{font-size:34px}.post-stamp small{font-size:7px}.post-stamp i{font-size:10px}.envelope-postmark{width:84px;height:84px;right:53px;bottom:29px;font-size:8px}.pull-tab{height:52px;top:30px;gap:18px;padding:0 20px}.pull-tab>span{font-size:8px}.pull-tab>b{font-size:12px}.margin-note{font-size:12px;top:70px;right:7%}.gesture-hint{bottom:5px;font-size:11px}.arrival-footer{grid-column:1/-1;margin:0 5%;padding:20px 0;align-self:end}.event-time>strong{font-size:45px}.event-time>span{font-size:11px}.venue-link{font-size:13px}.invite{height:calc(100svh - 88px);min-height:690px;display:block}.photo-cover{inset:0;width:100%;height:100%;max-width:none}.photo-cover>img{object-position:center 65%}.photo-shade{background:linear-gradient(90deg,#0d2c1ce6,#0d2c1c11 80%)}.invite-copy{position:absolute;top:20%;left:0;margin:0;padding-left:7.5%}.invite h1{font-size:clamp(50px,5.8vw,83px);line-height:1.37}.invite-copy p{font-size:15px;line-height:2.1}.invite .eyebrow{font-size:9px}.invite .photo-caption{position:absolute;bottom:35px;left:7.5%;right:7.5%;margin:0;font-size:8px}.invite-paper{position:absolute;bottom:80px;right:6%;width:300px;padding:23px 28px 24px;transform:rotate(2deg);box-shadow:10px 20px 50px #05230d33}.invitation-date{gap:14px}.invitation-date>strong{font-size:42px}.invitation-place{line-height:1.6}.invite .text-button{font-size:12px}.receipt>.masthead,.letter-scene>.masthead{max-width:1100px;margin:auto}.receipt-heading{text-align:center;padding:25px 0 0}.receipt h1{font-size:44px;line-height:1.4}.reply-paper{width:380px;margin:35px auto 0;min-height:230px}.future-letter{width:380px;margin:40px auto 18px}.personal-letter{width:530px;margin:20px auto 30px}.letter-photo{height:250px}.letter-content{padding:30px 45px 42px}.letter-content p{font-size:16px;line-height:2.2}.letter-content h1{font-size:33px}.letter-date{font-size:9px}.sample-label{font-size:10px}.letter-sign>span:first-child{font-size:13px}.sheet-dialog{margin:auto;border-radius:3px;padding:25px 32px;max-height:90svh}.receipt-local-note{font-size:10px}.receipt{padding-bottom:40px}.letter-actions .text-button{font-size:12px}}
@media(min-width:1200px){.arrival-copy{padding-left:18%}.envelope-stage{padding-right:14%;max-width:700px}.photo-cover>img{object-position:center 61%}.invite-paper{right:9%;width:330px}.invite-copy{padding-left:9%}}
@media(max-width:360px){.masthead{padding-left:7%;padding-right:7%;height:82px}.wordmark{font-size:16px}.arrival-copy{padding-top:20px}.arrival h1{font-size:39px}.arrival-copy p{font-size:10px}.envelope-stage{padding-left:10%;padding-right:10%;min-height:265px}.envelope{height:163px}.inside-card{height:200px}.envelope-address{left:17px;bottom:19px;gap:7px}.envelope-address strong{font-size:19px;max-width:145px}.envelope-address>span{font-size:6px}.pull-tab{left:8%;width:85%;gap:8px}.post-stamp{right:13px;top:44px;width:40px;height:53px}.envelope-postmark{right:24px;bottom:13px}.preview-bar{gap:9px;padding:0 10px}.time-switch button{padding:0 13px}.arrival-footer{gap:8px;margin-top:6px}.venue-link{font-size:9px;gap:7px}.event-time{gap:8px}.event-time>strong{font-size:31px}.utility-bar{gap:9px;font-size:9px;padding:0 7px}.utility-bar button{font-size:9px}.invite h1{font-size:38px}.invite-copy{margin-top:14px;margin-bottom:180px}.receipt h1{font-size:34px}.reply-paper{padding:20px}.reply-status{font-size:21px}.received-stamp{width:75px;height:75px;right:15px}.letter-content{padding:21px}.letter-content p{font-size:12px}.sheet-dialog{padding:18px 22px}.attendance-options span{padding:10px}.field-label>span{margin-left:6px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.received-stamp{opacity:.8}}

/* Final composition: give faces clear space, and keep the letter easy to read. */
.invite-copy{margin-top:10px;margin-bottom:235px}
.event-time>strong{font-size:33px}
.event-time>span{font-size:10px}
.letter-content p{font-size:15px;line-height:2.15}
.letter-date{font-size:9px}
.sample-label{font-size:10px}
.morph-paper{position:fixed;pointer-events:none;z-index:25;overflow:hidden;background:var(--paper);box-shadow:0 16px 40px #14241d25;transform-origin:center;will-change:transform}
.morph-paper img{width:100%;height:100%;object-fit:cover;object-position:center 62%}
.scene.no-entrance{animation:none!important}
@media(min-width:650px){.invite-copy{margin:0}.photo-cover>img{position:absolute;right:-9%;width:82%;object-position:center 58%}.photo-shade{background:linear-gradient(90deg,#193326 15%,#193326f5 25%,#19332666 50%,#19332600 75%)}.event-time>strong{font-size:45px}.event-time>span{font-size:11px}.letter-content p{font-size:16px}}
@media(max-width:360px){.event-time>strong{font-size:29px}.event-time>span{font-size:9px}.invite-copy{margin-top:4px;margin-bottom:225px}.letter-content p{font-size:14px}.sample-label{font-size:9px}}

/* A public invitation before the day; a private letter on the day. */
.wordmark>[data-wordmark]{display:inline;font:inherit;letter-spacing:inherit;margin:0}
.wordmark>[data-wordmark-en]{font-size:6.5px;letter-spacing:1.2px}
.invitation-stage{position:relative;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:340px;padding:24px 0 30px;margin-top:4px;perspective:1200px}
.invitation-card{--unfold:0;position:relative;width:220px;height:277px;background:#eee9d9;transform:rotate(5deg);transform-style:preserve-3d;filter:drop-shadow(6px 13px 12px #203c2c25);perspective:1100px}
.invitation-inner{position:absolute;inset:0;padding:25px 23px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--ink);background:linear-gradient(90deg,#c8c5b1,#f7f2e3 8%,#f1ecdd 96%,#d3cfbb);border:1px solid #d5d1bd;box-shadow:inset 0 0 0 7px #f6f2e4}
.invitation-inner>span{font-size:7px;letter-spacing:1.3px}.invitation-inner>b{font:26px/1.6 var(--serif);margin:24px 0 14px;letter-spacing:2px}.invitation-inner>i{font:31px Georgia,serif;font-style:normal;margin:5px 0 14px}.invitation-inner>small{font-size:8px;letter-spacing:1px;color:var(--muted)}
.invitation-cover{position:absolute;inset:0;padding:0;width:100%;height:100%;background:none;transform-style:preserve-3d;cursor:grab;touch-action:pan-y;user-select:none;text-align:center}
.invitation-cover:active{cursor:grabbing}.invitation-cover:focus-visible{outline:2px solid var(--red);outline-offset:8px}
.invitation-cover-face{display:block;position:absolute;inset:0;transform-origin:left center;transform:rotateY(calc(var(--unfold) * -156deg));transform-style:preserve-3d;backface-visibility:hidden;color:#fbf5dd;background:#243b2b;border:1px solid #48604a;box-shadow:inset 0 0 0 5px #e5e4c720,2px 2px 4px #263d3326;will-change:transform;pointer-events:none}
.invitation-cover-face:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#0c21103b,transparent 9%,#fff9df00 65%,#fff9df30);opacity:calc(.25 + var(--unfold) * .6);pointer-events:none}
.invitation-cover-face>img{position:absolute;inset:0;object-position:center 52%;filter:saturate(.75);pointer-events:none}
.invitation-cover-shade{position:absolute;inset:0;background:linear-gradient(#112b20a6 0%,#112b2040 42%,#112b2000 63%,#112b2099 100%)}
.cover-edition{position:absolute;left:0;right:0;top:20px;font-size:6px;letter-spacing:2px}.cover-title{position:absolute;left:0;right:0;top:47px;font:48px var(--serif);font-weight:400;letter-spacing:13px;text-indent:13px;line-height:1.3;text-shadow:0 1px 15px #12241b30}.cover-rule{position:absolute;left:43%;right:43%;top:113px;height:1px;background:#ede8ce80}.cover-caption{position:absolute;left:0;right:0;top:123px;font:8px var(--serif);letter-spacing:1px}.cover-bottom{position:absolute;left:18px;bottom:16px;display:flex;flex-direction:column;align-items:flex-start;gap:6px}.cover-bottom b{font:17px Georgia,serif;letter-spacing:1px}.cover-bottom small{font-size:5px;letter-spacing:1.3px}.cover-turn{position:absolute;right:-10px;bottom:23px;background:var(--red);padding:11px 15px;font-size:8px;letter-spacing:2px;box-shadow:2px 4px 7px #15271930}.invitation-gesture{position:absolute;bottom:3px;font-size:9px;letter-spacing:.7px;color:var(--muted)}
body[data-mode=before] .arrival-copy{padding-top:14px}body[data-mode=before] .arrival h1{font-size:clamp(36px,10.4vw,50px);margin-top:13px;margin-bottom:12px}body[data-mode=before] .arrival-footer{margin-top:6px}
@media(min-width:650px){.wordmark>[data-wordmark-en]{font-size:7px;letter-spacing:1.4px}.invitation-stage{grid-column:2;grid-row:2;width:100%;max-width:700px;justify-self:center;min-height:470px;margin:0;padding:35px 10% 40px 0}.invitation-card{width:290px;height:365px}.invitation-inner{padding:30px}.invitation-inner>span{font-size:8px}.invitation-inner>b{font-size:34px;margin:30px 0 22px}.invitation-inner>i{font-size:43px;margin-bottom:20px}.invitation-inner>small{font-size:10px}.cover-edition{top:26px;font-size:8px;letter-spacing:2.2px}.cover-title{font-size:65px;top:60px}.cover-rule{top:148px}.cover-caption{top:162px;font-size:10px}.cover-bottom{left:24px;bottom:22px;gap:8px}.cover-bottom b{font-size:22px}.cover-bottom small{font-size:6px}.cover-turn{bottom:35px;right:-13px;padding:13px 17px;font-size:11px}.invitation-gesture{font-size:11px;bottom:3px;margin-right:10%}body[data-mode=before] .arrival-copy{padding-top:0}body[data-mode=before] .arrival h1{font-size:clamp(45px,5.7vw,82px);margin-top:25px;letter-spacing:4px}body[data-mode=before] .arrival-footer{margin-top:0}}
@media(max-width:360px){.invitation-stage{min-height:315px;padding-top:20px}.invitation-card{width:200px;height:252px}.cover-title{font-size:43px;top:40px}.cover-edition{top:17px;font-size:5px}.cover-rule{top:99px}.cover-caption{top:109px;font-size:7px}.cover-bottom b{font-size:15px}.cover-bottom small{font-size:4.5px}.cover-turn{font-size:7px;padding:10px 12px}.invitation-inner>b{font-size:23px;margin:16px 0}.invitation-inner>i{font-size:29px}body[data-mode=before] .arrival h1{font-size:35px}.invitation-stage .margin-note{right:9%;top:45px}.invitation-gesture{font-size:8px}}

/* The album is a freely browsed stack of prints beside the invitation. */
#rsvp-button-text{font:inherit}
.album-entry{width:100%;display:flex;align-items:center;gap:15px;padding:20px 0 6px;margin-top:16px;border-top:1px solid var(--line);text-align:left;position:relative;z-index:6}
.photo-stack{position:relative;display:block;width:71px;height:54px;flex-shrink:0}.photo-stack img{position:absolute;width:38px;height:49px;top:1px;padding:3px 3px 8px;background:#fbf9ee;object-fit:cover;box-shadow:0 2px 5px #16332222;transition:transform .35s}.photo-stack img:nth-child(1){left:1px;transform:rotate(-14deg)}.photo-stack img:nth-child(2){left:16px;transform:rotate(3deg)}.photo-stack img:nth-child(3){left:31px;transform:rotate(14deg)}.album-entry:hover .photo-stack img:nth-child(1){transform:translateX(-4px) rotate(-20deg)}.album-entry:hover .photo-stack img:nth-child(3){transform:translateX(4px) rotate(20deg)}.album-entry-copy{display:flex;flex-direction:column;gap:8px;flex:1}.album-entry-copy b{font:13px/1.5 var(--serif);letter-spacing:.3px}.album-entry-copy small{font-size:10px;color:var(--muted)}.album-entry-arrow{font-size:20px}
.receipt-links{display:flex;justify-content:center;flex-wrap:wrap;gap:8px 22px;margin:18px 20px 0}.calendar-link{display:inline-flex;align-items:center;color:var(--ink);text-decoration:none}.calendar-download{margin-top:22px;min-height:46px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #9ba694;color:var(--ink);font-size:12px;letter-spacing:1px;text-decoration:none;padding:0 3px}.calendar-download>span{font-size:20px}
.letter-photo.has-selected-photo{height:auto;aspect-ratio:4/3;background:#e8e7db}.letter-photo.has-selected-photo img{object-fit:contain;object-position:center}.letter-photo.has-selected-photo>span{font-size:9px;letter-spacing:.5px;left:16px;right:16px;line-height:1.6}.letter-photo.has-selected-photo:after{background:linear-gradient(transparent 70%,#182c25bf)}
.album-dialog{width:min(100%,590px);max-width:100%;max-height:100svh;margin:auto;border:0;padding:23px 26px 18px;background:var(--paper);color:var(--ink);overscroll-behavior:contain;border-radius:3px;box-shadow:0 18px 80px #0a1e2040}
.album-dialog[open]{animation:sheet-in .4s cubic-bezier(.2,.7,.2,1)}.album-header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.album-header .eyebrow{font-size:8px;letter-spacing:2px}.album-header h2{font-size:24px;line-height:1.5;margin-top:9px;letter-spacing:.5px}.album-header .close-button{margin-top:-8px}.album-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:18px 0 11px}.album-filters{display:flex;gap:16px}.album-filters button{font-size:11px;min-height:37px;padding:0;color:var(--muted);border-bottom:1px solid transparent}.album-filters [aria-pressed=true]{color:var(--ink);border-bottom-color:var(--ink)}#album-count{font-size:9px;margin-left:3px}.album-toolbar>.text-button{color:var(--muted);font-size:10px}
.album-desk{position:relative;margin:8px auto 0;width:min(100%,346px);padding:8px 6px 3px;isolation:isolate}.album-paper-behind{position:absolute;inset:13px 7px 4px;background:#dddcca;transform:rotate(-3deg);box-shadow:1px 4px 10px #253d3310;z-index:-1}.album-viewer{position:relative;background:#fbfaf2;padding:9px 9px 0;box-shadow:1px 7px 16px #223a291c;touch-action:pan-y pinch-zoom;user-select:none;transition:transform .18s;min-width:0}.album-viewer>img{display:block;width:100%;height:min(44svh,425px);min-height:180px;object-fit:contain;background:#eeede3;pointer-events:none}.album-viewer.changing{animation:print-change .3s ease both}.album-paper-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:39px;padding:8px 5px;font-size:10px;letter-spacing:.7px}#album-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#album-index{white-space:nowrap;font-size:9px;color:var(--muted)}.album-back{position:absolute;inset:9px 9px 39px;display:flex;flex-direction:column;justify-content:center;padding:30px;background:#f5f0df;text-align:left}.album-back p{font:17px/2 var(--serif);white-space:pre-line;overflow-wrap:anywhere}.album-back>span{font-size:9px;color:var(--muted);margin-top:22px}
.album-turn-row{display:flex;align-items:center;justify-content:space-between;width:min(100%,350px);margin:10px auto 0}.album-turn-row button{width:44px;font-size:25px}.album-turn-row>span{font:11px var(--serif);color:var(--muted);letter-spacing:.5px}.album-actions{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:3px}.album-actions button{font-size:11px;min-height:42px;padding:0 15px}#album-favorite{border:1px solid #aeb9a8;color:var(--ink);min-width:130px}#album-favorite[aria-pressed=true]{color:#fbf7eb;background:var(--ink);border-color:var(--ink)}#album-flip{padding:0 6px;color:var(--muted)}
.album-thumbs{display:flex;overflow:auto;gap:8px;padding:12px 2px 4px;max-width:100%;margin:5px auto 0;scrollbar-width:thin;scrollbar-color:#bfc6b8 transparent}.album-thumbs button{flex:0 0 43px;height:54px;padding:3px;background:#faf8ee;border:1px solid transparent;opacity:.65;min-height:0}.album-thumbs button[aria-current=true]{border-color:var(--ink);opacity:1}.album-thumbs img{width:100%;height:100%;object-fit:cover;pointer-events:none}.album-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 12px;padding:10px 2px 14px}.album-grid button{display:flex;flex-direction:column;gap:8px;padding:5px 5px 9px;text-align:left;background:#fbfaf1;box-shadow:0 2px 5px #263a2212;min-width:0}.album-grid img{width:100%;height:130px;object-fit:cover;pointer-events:none}.album-grid button>span{font-size:9px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.album-grid button[aria-current=true]{outline:1px solid var(--ink)}.album-status{font-size:10px;line-height:1.6;color:var(--muted);text-align:center;min-height:16px;margin-top:9px}
.photo-dialog{border:0;padding:0;width:100vw;max-width:100vw;height:100svh;max-height:100svh;margin:0;background:#10251d;color:#f5f3e5;overflow:hidden}.photo-dialog::backdrop{background:#10251d}.photo-tools{height:62px;position:absolute;top:0;left:0;right:0;z-index:2;display:flex;justify-content:space-between;align-items:center;padding:8px 24px;background:#10251deb}.photo-tools button{font-size:12px;letter-spacing:1px}.photo-viewport{position:absolute;inset:62px 0 0;overflow:auto;touch-action:pan-x pan-y pinch-zoom;overscroll-behavior:contain}.photo-viewport img{width:100%;height:100%;object-fit:contain;display:block;max-width:none;user-select:none}.photo-dialog.is-zoomed .photo-viewport img{width:200%;height:auto;min-height:100%;object-fit:contain}.photo-dialog [aria-pressed=true]{color:#decba6}
@keyframes print-change{from{transform:translateX(10px) rotate(1deg);opacity:.7}to{transform:none;opacity:1}}
@media(min-width:650px){.invite-paper{bottom:65px}.album-entry{gap:10px;padding-top:16px}.album-entry-copy b{font-size:12px}.album-header h2{font-size:28px}.album-dialog{padding:27px 34px 20px;max-height:94svh}.album-viewer>img{height:min(44svh,430px)}.album-desk{width:min(100%,354px)}.album-thumbs{max-width:425px;justify-content:flex-start}.album-thumbs button{flex-basis:49px;height:59px}.album-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px 12px}.album-grid img{height:145px}}
@media(max-width:360px){.album-dialog{padding:18px 20px 15px}.album-header h2{font-size:21px}.album-header .eyebrow{font-size:7px;letter-spacing:1.5px}.album-filters{gap:12px}.album-toolbar{gap:7px}.album-grid{gap:12px 8px}.album-grid img{height:110px}.album-viewer>img{height:38svh}.album-actions{gap:5px}.album-actions button{font-size:10px;padding:0 11px}#album-favorite{min-width:115px}.album-entry{gap:12px}.album-entry-copy b{font-size:11px}}

/* Three small rituals belong to the guest: a note, a place, a familiar voice. */
.arrival-directions{display:flex;flex-direction:column;align-items:flex-end;gap:0}
.seat-shortcut{font-size:10px;min-height:36px;border-bottom:1px solid #929c8b;padding:0;display:flex;gap:15px;align-items:center}
.seat-shortcut>span{font-size:16px}
.details-seat-link{width:100%;display:flex;align-items:center;justify-content:space-between;min-height:48px;border-top:1px solid var(--line);margin:12px 0 19px;padding:0;font-size:12px}
.details-seat-link>span{font-size:20px}
.voice-signature{display:flex;align-items:center;justify-content:flex-end;gap:13px;align-self:flex-end;padding:0 0 0 12px;min-height:44px}
.voice-signature b{border-bottom:1px solid #b8bda9;padding-bottom:4px}
.signature-sound{display:flex;align-items:center;gap:3px;height:25px;color:var(--red)}
.signature-sound i{display:block;width:2px;height:7px;background:currentColor;transition:transform .2s}
.signature-sound i:nth-child(2),.signature-sound i:nth-child(4){height:15px}
.signature-sound i:nth-child(3){height:22px}
.voice-signature:hover .signature-sound i{transform:scaleY(.7)}
.voice-invitation{align-self:flex-end;color:var(--muted);font-size:10px;min-height:28px;padding:0}
.letter-reply-entry{max-width:530px;margin:38px auto 32px;padding:0 9%;text-align:center}
.letter-reply-entry>p{font:16px/1.8 var(--serif);margin:13px 0 18px}
.note-entry-button{display:flex;justify-content:space-between;align-items:center;gap:25px;width:100%;max-width:310px;margin:0 auto;padding:0 16px;min-height:50px;border:1px solid #a6b09d;font-size:12px;letter-spacing:1px;transition:background .2s}
.note-entry-button:hover{background:#e7e8da}
.note-entry-button>span:last-child{font-size:21px}
.entry-footnote{display:block;font-size:10px;color:var(--muted);margin-top:12px}
.ritual-dialog{width:min(100%,460px);color:var(--ink);overscroll-behavior:contain}
.ritual-dialog h2{font-size:26px;letter-spacing:1px;line-height:1.5;margin:8px 0 10px}
.ritual-intro{font-size:12px;line-height:1.9;color:var(--muted)}
.ritual-status{font-size:11px;line-height:1.8;color:var(--muted);text-align:center;min-height:20px;margin-top:18px;overflow-wrap:anywhere}
.note-writing{margin-top:28px;transform-origin:top center;will-change:transform}
.note-writing textarea{display:block;width:100%;resize:vertical;min-height:180px;max-height:45svh;border:0;border-bottom:1px solid #bcc3b2;border-radius:0;padding:12px 7px;color:var(--ink);font:16px/2 var(--serif);background:repeating-linear-gradient(transparent 0,transparent 31px,#ced2bf70 31px,#ced2bf70 32px);background-position:0 12px;caret-color:var(--red)}
.note-writing textarea::placeholder{color:#979b8a}
.note-writing textarea:focus-visible{outline:2px solid #9da78e;outline-offset:4px}
.note-field-footer{display:flex;justify-content:space-between;margin-top:9px;color:var(--muted);font-size:10px}
.note-dialog.is-folding .note-writing{animation:note-fold .65s cubic-bezier(.45,0,.3,1) forwards;pointer-events:none}
.kept-paper{position:relative;background:#fcfaf1;box-shadow:2px 6px 15px #263d3312;border-top:1px solid #e5e3d5;border-bottom:1px solid #d1d5c4;margin:28px 3px 0;padding:22px 24px 104px;transform:rotate(-2deg);min-height:195px}
.kept-paper:after{content:"";position:absolute;bottom:0;left:0;right:0;height:52px;background:linear-gradient(176deg,#edeede 48%,#d6dac6 49%,#f7f7e9 51%);opacity:.6;pointer-events:none}
.kept-edition{font-size:7px;letter-spacing:2px;color:var(--muted)}
#note-summary{font:15px/2 var(--serif);white-space:pre-wrap;overflow-wrap:anywhere;margin-top:16px;max-height:35svh;overflow:auto;padding-right:4px}
.note-postmark{position:absolute;bottom:22px;right:23px;z-index:1;border:1px solid var(--red);outline:1px solid var(--red);outline-offset:-4px;border-radius:50%;width:70px;height:70px;display:flex;align-items:center;justify-content:center;flex-direction:column;font-size:9px;line-height:1.6;color:var(--red);transform:rotate(12deg);animation:stamp-in .45s ease both}
.note-postmark b{font:17px Georgia,serif}
.note-kept-actions{display:flex;justify-content:center;align-items:center;gap:32px;margin:15px 0 8px}
.note-kept-actions .underlined{margin:0}
.seat-paper{position:relative;margin:28px 0 24px;padding:18px 24px 16px;background:#faf9ef;border:1px solid #d8daca;box-shadow:3px 9px 20px #24392e12;transform-origin:bottom center;text-align:center}
.seat-paper:before,.seat-paper:after{content:"";position:absolute;left:-1px;right:-1px;height:5px;background:repeating-linear-gradient(90deg,var(--paper) 0,var(--paper) 3px,transparent 3px,transparent 7px)}
.seat-paper:before{top:-1px}.seat-paper:after{bottom:-1px}
.seat-dialog[open] .seat-paper{animation:seat-unfold .5s cubic-bezier(.22,.7,.2,1) both}
.seat-paper-top{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:8px;letter-spacing:1px;padding-bottom:15px;border-bottom:1px solid var(--line)}
.seat-paper-top>span:first-child{font:19px Georgia,serif}
.seat-dear{font:13px/1.8 var(--serif);margin:22px 0 12px}
.seat-dear strong{font-weight:400;overflow-wrap:anywhere}
.seat-state{font-size:10px;letter-spacing:1px;color:var(--red);line-height:1.8}
.seat-number{font:76px/1.2 Georgia,var(--serif);margin:8px 0 12px;overflow-wrap:anywhere}
.seat-message{font:16px/1.9 var(--serif)}
.seat-detail{font-size:10px;line-height:1.8;color:var(--muted);margin:8px 0 22px;white-space:pre-line}
.seat-paper-foot{display:flex;justify-content:space-between;gap:12px;border-top:1px solid var(--line);padding-top:14px;font-size:8px;color:var(--muted);line-height:1.7}
.ritual-preview-controls{border-top:1px dashed #c8ccba;padding-top:14px;margin-top:22px;font-size:10px;color:var(--muted)}
.seat-preview-switch{display:flex;gap:18px;align-items:center;margin-top:8px}
.seat-preview-switch button{font-size:11px;padding:0;min-height:35px;border-bottom:1px solid transparent}
.seat-preview-switch button[aria-pressed=true]{border-bottom-color:var(--ink);color:var(--ink)}
.voice-player{padding-top:12px;text-align:center}
.voice-waveform{height:88px;display:flex;align-items:center;justify-content:center;gap:6px;margin:10px 0 5px}
.voice-waveform span{width:3px;height:18px;background:var(--ink);border-radius:2px;opacity:.65;transform-origin:center}
.voice-waveform span:nth-child(3n){height:39px}.voice-waveform span:nth-child(4n){height:55px}.voice-waveform span:nth-child(5n){height:28px}
.voice-waveform.is-playing span{animation:voice-pulse .75s ease-in-out infinite alternate}
.voice-waveform.is-playing span:nth-child(2n){animation-delay:-.3s}.voice-waveform.is-playing span:nth-child(3n){animation-delay:-.55s}
.voice-state{font:15px/1.8 var(--serif);margin-bottom:22px}
.voice-progress{display:block;appearance:none;-webkit-appearance:none;width:100%;height:3px;border:0;background:#d9ddcb;color:var(--ink)}
.voice-progress::-webkit-progress-bar{background:#d9ddcb}.voice-progress::-webkit-progress-value{background:var(--ink)}.voice-progress::-moz-progress-bar{background:var(--ink)}
.voice-timing{display:flex;justify-content:space-between;gap:10px;margin:10px 0 21px;color:var(--muted);font-size:9px}
.voice-timing>span:first-child{font-size:7px;letter-spacing:1px}
#voice-play{justify-content:center;letter-spacing:.6px}
.voice-restart{margin-top:10px;border-bottom:1px solid #bcc4ae}
.voice-preview summary{cursor:pointer;min-height:35px;line-height:1.8;padding:6px 0;color:var(--muted)}
.voice-preview label{display:block;font-size:11px;margin:15px 0 10px}
.voice-preview input{width:100%;font-size:11px;min-height:38px;padding:0;background:none;border:0;color:var(--ink)}
.voice-preview input::file-selector-button{padding:8px 12px;border:1px solid #b4bca8;background:transparent;color:var(--ink);font:inherit;margin-right:10px}
.voice-preview>p{font-size:10px;line-height:1.8;margin-top:8px}.voice-preview>.underlined{font-size:10px;margin:12px 0 0}
@keyframes note-fold{0%{transform:perspective(600px) rotateX(0);opacity:1}65%{transform:perspective(600px) rotateX(-65deg) scale(.94);opacity:.8}100%{transform:perspective(600px) rotateX(-88deg) scale(.86);opacity:0}}
@keyframes seat-unfold{from{transform:perspective(650px) rotateX(12deg) translateY(12px);opacity:.6}to{transform:none;opacity:1}}
@keyframes voice-pulse{from{transform:scaleY(.45);opacity:.45}to{transform:scaleY(1);opacity:.9}}
@media(min-width:650px){.seat-shortcut{font-size:11px;gap:20px}.letter-reply-entry{padding:0 45px}.letter-reply-entry>p{font-size:18px}.ritual-dialog{padding:26px 34px}.ritual-dialog h2{font-size:28px}.voice-invitation{font-size:11px}}
@media(max-width:360px){.ritual-dialog{padding-left:22px;padding-right:22px}.ritual-dialog h2{font-size:23px}.seat-paper{padding-left:18px;padding-right:18px}.seat-number{font-size:64px}.voice-waveform{gap:5px}.arrival-directions .venue-link{font-size:9px;gap:8px}.seat-shortcut{font-size:9px}}

/* Home: one column, one invitation, one clear next action. */
:root{--preview-h:0px;--utility-h:0px}
#app{min-height:100svh;padding-bottom:0}
#arrival{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100svh;padding:30px 24px 28px;gap:0}
#arrival .arrival-copy{position:relative;width:100%;max-width:390px;align-self:auto;margin:0;padding:0;text-align:center;z-index:5}
#arrival #arrival-title{font:500 32px/1.45 var(--serif);letter-spacing:1px;margin:0;white-space:pre-line;color:#263d33}
#arrival .invitation-stage{width:100%;max-width:330px;min-height:0;flex:none;display:flex;align-items:center;justify-content:center;padding:0;margin:22px 0 0;grid-area:auto}
#arrival .invitation-card{width:min(100%,300px);height:auto;aspect-ratio:6/5;transform:rotate(-1.5deg);background:#fbf8ed;filter:drop-shadow(3px 10px 10px #203c2c1c)}
#arrival .invitation-inner{padding:20px;border:1px solid #d9d4c1;box-shadow:inset 0 0 0 7px #f6f2e4}
#arrival .invitation-inner>b{font:24px/1.7 var(--serif);margin:0;letter-spacing:1px}
#arrival .invitation-cover-face{border:6px solid #fcf9ef;border-bottom-width:14px;box-shadow:inset 0 0 0 1px #fbf9ef,0 0 0 1px #d5d1bf;background:#dce0cb}
#arrival .invitation-cover-face>img{object-position:center 64%;filter:none}
#arrival .invitation-cover-face:after{opacity:.18;background:linear-gradient(90deg,#17372742,transparent 9%,transparent 92%,#ffffff22)}
#arrival .envelope-stage{width:100%;max-width:340px;flex:none;min-height:0;padding:48px 12px 8px;margin:30px 0 0;grid-area:auto}
#arrival .envelope{width:100%;height:182px;max-width:300px;transform:rotate(-3deg)}
#arrival .inside-card{height:210px;padding:6px;background:#fcf9ef}
#arrival .inside-card img{object-position:center 64%;filter:none}
#arrival .envelope-flap{height:105px}
#arrival .envelope-address{left:22px;bottom:30px;gap:9px}
#arrival .envelope-address small{font-size:14px;letter-spacing:0}
#arrival .envelope-address strong{font:24px/1.3 var(--serif);letter-spacing:1px;max-width:180px}
#arrival .post-stamp{width:43px;height:56px;right:16px;top:49px;transform:rotate(3deg)}
#arrival .post-stamp i{font:14px/1.5 var(--serif);letter-spacing:2px}
#arrival .pull-tab{height:44px;top:17px;left:10%;width:80%;padding:0 15px;gap:14px}
#arrival .pull-tab b{font:15px var(--sans);letter-spacing:1px}
#arrival .pull-tab i{font-size:24px;animation:none}
.arrival-information{position:relative;z-index:5;width:100%;max-width:340px;margin-top:25px;text-align:center}
.home-date{display:block;font-size:21px;line-height:1.6;font-weight:500;letter-spacing:.2px;white-space:normal}
.home-date>span{display:inline-block;font-size:16px;font-weight:400;margin-left:5px}
.home-time{font-size:16px;line-height:1.7;margin:2px 0 10px;color:#3b5043}
.home-time strong{font-size:19px;font-weight:600;margin:0 2px}
.home-venue{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:72px;padding:13px 0;margin:0 0 18px;border-top:1px solid #cdd1bf;border-bottom:1px solid #cdd1bf;text-align:left;letter-spacing:0}
.home-venue>span:first-child{display:flex;flex-direction:column;gap:6px;min-width:0}
.home-venue strong{font-size:18px;font-weight:500;line-height:1.4}
.home-venue small{font-size:16px;line-height:1.4;color:#53634f}
.home-address-label{font-size:16px;white-space:nowrap;display:flex;align-items:center;gap:8px;color:#3b5043}
.home-address-label>span{font-size:26px;font-family:var(--sans)}
.home-open-button{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:56px;padding:12px 22px;background:#263d33;color:#fffdf2;border:1px solid #263d33;border-radius:2px;font-size:18px;font-weight:500;letter-spacing:1px;line-height:1.5;transition:background .2s,transform .2s}
.home-open-button:hover{background:#375443}.home-open-button:active{transform:scale(.985)}
.home-open-button>span:last-child{font-size:24px;font-weight:400}
.home-open-button:focus-visible{outline:3px solid var(--red);outline-offset:5px}
.home-seat-button{font-size:16px;min-height:48px;line-height:1.6;margin-top:8px;padding:8px 16px;border-bottom:1px solid #9ca88f}
.home-seat-button>span{margin-left:10px;font-size:22px;vertical-align:-1px}
.preview-tools{max-width:430px;margin:0 auto;padding:0 24px 20px;color:#59664f;font-size:13px}
.preview-tools>summary{width:max-content;margin:auto;min-height:44px;display:list-item;padding:12px 8px;cursor:pointer;font-size:13px}
.preview-tools[open]{padding-top:10px;padding-bottom:26px}
.preview-tools .preview-bar{height:auto;min-height:0;position:static;background:transparent;border:0;flex-wrap:wrap;justify-content:center;gap:12px;padding:12px 0 0;font-size:13px}
.preview-tools .time-switch button{font-size:14px;min-height:44px;padding:6px 17px}
.preview-tools .replay{font:14px/1.5 var(--sans);min-height:44px;border-bottom:1px solid #aeb79f}
.preview-tools .utility-bar{position:static;min-height:0;display:flex;flex-direction:column;gap:6px;background:none;border:0;padding:14px 0 0;font-size:12px;line-height:1.7;text-align:center;backdrop-filter:none}
.preview-utilities{display:flex;gap:28px;justify-content:center}
.preview-tools .utility-bar button{font-size:14px;min-height:44px}
.preview-tools summary:focus-visible{outline:2px solid var(--red);outline-offset:3px}
@media(min-width:650px){
  #arrival{padding-top:36px;padding-bottom:30px}
  #arrival #arrival-title{font-size:35px}
  #arrival .invitation-stage{max-width:360px;margin-top:22px}
  #arrival .invitation-card{width:320px;aspect-ratio:6/5}
  #arrival .arrival-information{max-width:360px}
  #arrival .envelope-stage{max-width:360px}
  #arrival .envelope{max-width:320px;height:192px}
  #arrival .inside-card{height:220px}
  .invite{height:100svh}
}
@media(max-width:360px){
  #arrival{padding-left:22px;padding-right:22px}
  #arrival #arrival-title{font-size:29px}
  .home-date{font-size:19px}.home-date>span{font-size:16px}
  .home-venue strong{font-size:17px}
  .home-address-label{gap:5px}
  .home-open-button{font-size:17px;padding-left:18px;padding-right:18px}
}
@media(max-height:700px) and (max-width:649px){
  #arrival{padding-top:18px;padding-bottom:18px;justify-content:flex-start}
  #arrival #arrival-title{font-size:28px;line-height:1.4}
  #arrival .invitation-stage{margin-top:14px}
  #arrival .invitation-card{width:min(100%,240px);aspect-ratio:6/5}
  #arrival .envelope-stage{margin-top:14px;padding-top:38px}
  #arrival .arrival-information{margin-top:16px}
  .home-venue{margin-bottom:14px;padding-top:10px;padding-bottom:10px}
}
@media(max-height:800px) and (min-width:650px){#arrival #arrival-title{font-size:32px}#arrival .invitation-card{width:280px}#arrival{padding-top:26px;padding-bottom:26px}}

/* Reference-matched home: 860 × 1372 photo plane and independent ink layers. */
@font-face{font-family:"Wedding Hand";src:url("assets/fonts/wedding-hand-regular.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Wedding Hand";src:url("assets/fonts/wedding-hand-medium.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
:root{--wedding-hand:"Wedding Hand","Kaiti SC","KaiTi",cursive}
.greeting-bubble,.person-name,#wedding-info{font-synthesis:none}
body[data-mode=before]{background:#e5e7dc}
#invite{display:block;width:100%;max-width:560px;height:auto;min-height:100svh;margin:0 auto;overflow:visible;background:#eeeDE3;color:#263d33;animation:none;isolation:isolate;container-type:inline-size;box-shadow:0 0 65px #1e352114}
#invite .invite-hero{position:relative;background:#1d3223;color:#fffaf0;overflow:hidden}
.hero-photo-stage{position:relative;width:100%;aspect-ratio:860/1372;isolation:isolate;overflow:hidden}
.hero-photo-stage{touch-action:pan-y pinch-zoom}
.hero-photo-stage:focus-visible{outline:2px solid #f4da7d;outline-offset:-5px}
.hero-slide{position:absolute;inset:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .8s ease,visibility 0s .8s}
.hero-slide.is-active{opacity:1;visibility:visible;pointer-events:auto;z-index:1;transition:opacity .8s ease,visibility 0s}
#invite .hero-slide:not([data-slide=garden]) .hero-photo{inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 50%;animation:none}
.hero-slide-dark-ink .hero-doodles{color:#465048}
.hero-slide-dark-ink .person-name{color:#34483a;text-shadow:0 1px 5px #ffffffe0}
#invite.active .hero-slide.is-arriving .greeting-layer{animation:greeting-appear .65s var(--greeting-delay) cubic-bezier(.18,.8,.3,1.12) both}
#invite.active .hero-slide.is-arriving .bubble-trace path{animation:ink-draw .65s .6s ease-out both}
#invite.active .hero-slide.is-arriving .name-trace path{animation:ink-draw .65s .9s ease-out both}
#invite.active .hero-slide.is-arriving .person-name{animation:name-appear .5s .8s ease both}
.hero-carousel-controls{position:absolute;z-index:5;left:50%;bottom:16.5%;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;gap:0;color:#fffaf0;filter:drop-shadow(0 1px 4px #13251c80)}
.hero-carousel-controls[hidden]{display:none}
.hero-carousel-controls button{display:grid;place-items:center;min-width:40px;min-height:44px;padding:0;color:inherit;background:none;border:0;cursor:pointer;touch-action:manipulation}
.hero-carousel-controls button:focus-visible{outline:2px solid #fff9ed;outline-offset:-3px;border-radius:4px}
.hero-carousel-arrow{font:300 29px/1 Georgia,serif}
.hero-carousel-dots{display:flex;align-items:center}
.hero-carousel-controls .hero-carousel-dot{min-width:29px}
.hero-carousel-dot span{position:relative;display:block;width:6px;height:6px;overflow:hidden;border-radius:5px;background:#fffaf06b;transition:width .35s ease,background .35s ease}
.hero-carousel-dot[aria-current=true] span{width:23px;background:#fffaf087}
.hero-carousel-dot[aria-current=true] span:after{content:"";position:absolute;inset:0;background:#fffaf0;border-radius:inherit;transform-origin:left}
.is-rotating .hero-carousel-dot[aria-current=true] span:after{animation:hero-photo-progress 6.2s linear both}
.hero-carousel-dot:disabled{opacity:.3;cursor:default}
.hero-carousel-play svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.hero-carousel-play:disabled{opacity:.5;cursor:default}
#invite:is([data-home-motion=waiting],[data-home-motion=revealing]) .hero-carousel-controls{opacity:0;pointer-events:none}
@keyframes hero-photo-progress{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.hero-motion-plane{position:absolute;inset:0;transform:translate3d(0,var(--hero-drift,0px),0);transform-origin:50% 44%;will-change:transform}
#invite .hero-photo{position:absolute;top:auto;bottom:0;left:-13%;width:132%;height:auto;max-width:none;object-fit:initial;filter:none;pointer-events:none}
#invite.active:is(:not([data-home-motion]),[data-home-motion=entered]) .hero-photo{animation:photo-welcome .85s ease both}
#invite.active[data-home-motion=entered] .hero-motion-plane{animation:camera-settle 1.8s cubic-bezier(.2,.65,.25,1) both}
.hero-photo-shade{position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,#0b1e0b4a 0%,transparent 18%,transparent 65%,#14251b05 72%,#14251b8c 85%,#14251bbd 100%)}
.hero-daylight{position:absolute;inset:-5% -8%;pointer-events:none;background:radial-gradient(ellipse at 18% 26%,#fff8cf36 0,transparent 28%),radial-gradient(ellipse at 85% 16%,#fff8cf2e 0,transparent 32%),radial-gradient(ellipse at 86% 70%,#fff8cf26 0,transparent 23%);mix-blend-mode:soft-light;opacity:.45}
#invite.active:is([data-home-motion=entered],[data-home-motion=settled]) .hero-daylight{animation:garden-light 12s ease-in-out infinite alternate}
#invite.active.home-motion-paused .hero-daylight{animation-play-state:paused}
.hero-heading{position:absolute;left:0;right:0;top:max(3.35%,env(safe-area-inset-top));display:flex;flex-direction:column;align-items:center;gap:11px;color:#fffaf0;font:400 15px/1.5 var(--sans);letter-spacing:.8px}
.wedding-countdown{display:flex;align-items:baseline;justify-content:center;gap:7px;min-height:30px;margin:0;text-shadow:0 2px 12px #071909b3}
.wedding-countdown:focus{outline:none}
.wedding-countdown>span{font-size:14px}
.wedding-countdown>strong{font:400 25px/1.1 Georgia,var(--sans);font-variant-numeric:tabular-nums;letter-spacing:0}
.wedding-countdown>span:empty,.wedding-countdown>strong:empty{display:none}
.hero-heading:after{content:"";width:5.35%;height:1px;background:#fffaf0;opacity:.9}
.greeting-layer{position:absolute;z-index:3;transform-origin:50% 100%}
.greeting-layer-groom{left:11%;top:20.6%;width:27.6%;height:6.2%;--greeting-turn:-9deg;--greeting-delay:.22s}
.greeting-layer-bride{left:57.8%;top:25.3%;width:31%;height:6.3%;--greeting-turn:0deg;--greeting-delay:.53s}
#invite.active:is(:not([data-home-motion]),[data-home-motion=entered]) .greeting-layer{animation:greeting-appear .6s var(--greeting-delay) cubic-bezier(.18,.8,.3,1.12) both}
.greeting-bubble{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%;min-height:0;padding:0 5%;border:0;background:transparent;box-shadow:none;border-radius:35%;color:#171b14;transform:rotate(var(--greeting-turn));touch-action:pan-y pinch-zoom}
.greeting-bubble:before{content:"";position:absolute;inset:-7px 0;border-radius:inherit}
.bubble-paper{position:absolute;inset:0;width:100%;height:100%;fill:#fff9ed;pointer-events:none;filter:drop-shadow(0 1px 1px #23301d0d)}
.greeting-bubble [data-greeting-text]{position:relative;font:500 18px/1.2 var(--wedding-hand);font-size:3.85cqw;letter-spacing:.015em;white-space:nowrap}
.greeting-bubble:focus-visible{outline:2px solid #f4da7d;outline-offset:6px}
.greeting-bubble:active .bubble-paper{fill:#f5edda}
.greeting-bubble.is-long-greeting [data-greeting-text]{font-size:3.4cqw;letter-spacing:0}
.greeting-layer-groom .is-long-greeting [data-greeting-text]{font-size:3cqw}
.hero-doodles{position:absolute;inset:0;width:100%;height:100%;color:#fffaf0;pointer-events:none}
.hero-doodles path{stroke-dasharray:1;stroke-dashoffset:0}
#invite.active:is(:not([data-home-motion]),[data-home-motion=entered]) .bubble-trace path{animation:ink-draw .6s .72s ease-out both}
#invite.active:is(:not([data-home-motion]),[data-home-motion=entered]) .name-trace path{animation:ink-draw .65s 1.03s ease-out both}
#invite.active:is(:not([data-home-motion]),[data-home-motion=entered]) .hello-rays path{animation:ink-draw .4s .85s ease-out both}
.person-name{position:absolute;font:400 18px/1.2 var(--wedding-hand);font-size:3.65cqw;letter-spacing:.04em;text-shadow:0 1px 3px #11220c50;pointer-events:none;white-space:nowrap}
.person-groom{left:24.1%;top:33.2%;transform:rotate(-8deg)}
.person-bride{left:62.7%;top:40.6%;transform:rotate(1deg)}
#invite.active:is(:not([data-home-motion]),[data-home-motion=entered]) .person-name{animation:name-appear .5s .93s ease both}
#invite.active[data-home-motion=entered] .hero-heading{animation:name-appear .6s .12s ease both}
#invite:is([data-home-motion=waiting],[data-home-motion=revealing]) :is(.greeting-layer,.person-name,.hero-doodles,.hero-heading,#wedding-info){opacity:0}
/* One continuous photo-and-letter composition; only the invitation line crosses the paper edge. */
#invite .invite-paper{position:relative;inset:auto;width:100%;padding:0 0 32px;margin:-8cqw 0 0;transform:none;clip-path:none;box-shadow:none;background:#faf7ec;color:#263d33;z-index:6}
#invite .invite-paper:before{display:none}
.paper-curl{position:absolute;left:0;right:0;top:-7px;height:18px;z-index:2;pointer-events:none;transform-origin:50% 100%;transform:scaleY(calc(.25 + var(--paper-curl,1)*.75));opacity:var(--paper-curl,1);background:linear-gradient(180deg,#fffdf100,#fffdf1a6 35%,#a3a78d26 68%,#faf7ec00)}
#invite .wedding-information{position:relative;display:flow-root;isolation:isolate;padding:20px 7% 18px;background:#faf7ec;box-shadow:none;border-bottom:0}
#invite .wedding-information:before{content:"";position:absolute;left:0;right:0;top:-9px;height:10px;background:#faf7ec;clip-path:polygon(0 3px,3% 4px,7% 1px,12% 3px,18% 2px,23% 4px,29% 1px,35% 3px,40% 2px,46% 4px,51% 1px,58% 3px,63% 2px,69% 4px,75% 1px,81% 3px,87% 1px,93% 4px,97% 2px,100% 3px,100% 100%,0 100%);pointer-events:none}
#invite .wedding-information:after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.32;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 150 150' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='grain'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.76' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23797050' opacity='.16' filter='url(%23grain)' d='M0 0h150v150H0z'/%3E%3C/svg%3E")}
#invite #wedding-info{position:absolute;left:7%;right:7%;bottom:calc(100% + 24px);z-index:1;font:400 clamp(23px,6.1cqw,30px)/1.5 var(--wedding-hand);color:#fffbed;letter-spacing:.06em;text-shadow:0 2px 14px #13291c59;white-space:normal;text-align:center;scroll-margin-top:32px;margin:0;padding:0}
#invite.active:is(:not([data-home-motion]),[data-home-motion=entered]) #wedding-info{animation:invitation-line-in .7s .6s ease-out both}
#wedding-info:after{display:none}
#wedding-info:focus{outline:none}
.paper-summary{text-align:center}
.paper-date{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:5px 22px;color:#304536}
.paper-date-numerals{display:flex;align-items:baseline;gap:12px;font:400 clamp(46px,12.4cqw,58px)/1.05 Georgia,var(--serif);letter-spacing:-1.5px;white-space:nowrap}
.paper-date-numerals>i{font:italic 300 .72em/1 var(--serif);color:#7a856e;letter-spacing:0}
.paper-date-meta{display:flex;flex-direction:column;align-items:flex-start;gap:2px;font:400 16px/1.5 var(--sans);letter-spacing:.8px;white-space:nowrap}
.paper-event-row{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:3px 10px;margin-top:10px}
.paper-event-time{font-size:16px;line-height:1.6;letter-spacing:0;margin:0}
.paper-event-time>strong{font-size:17px;font-weight:500;font-variant-numeric:tabular-nums}
.paper-event-venue{font:400 16px/1.6 var(--sans);margin:0;padding-left:10px;border-left:1px solid #aab39d;letter-spacing:0}
#invite .invitation-reply{display:grid;grid-template-columns:23px minmax(0,1fr)23px;align-items:center;gap:13px;width:100%;height:auto;min-height:58px;padding:14px 18px;border:1px solid #65765d;border-radius:2px;background:transparent;color:#304536;box-shadow:inset 0 1px 0 #ffffff8c;font:400 18px/1.5 var(--serif);letter-spacing:1px;text-align:left;transition:background .22s ease,border-color .22s ease,transform .18s ease}
#invite .invitation-reply>span{font:inherit}
#invite .invitation-reply>svg{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}
#invite .invitation-reply .reply-arrow{transition:transform .22s ease}
#invite .paper-rsvp{margin-top:20px}
#invite .invitation-reply:focus-visible{outline:2px solid #304536;outline-offset:4px}
#invite .invitation-reply:active{background:#e9ecdf;transform:translateY(1px)}
#invite .invitation-reply:active .reply-arrow{transform:translateX(3px)}
@media(hover:hover){#invite .invitation-reply:hover{background:#eef0e5;border-color:#304536}#invite .invitation-reply:hover .reply-arrow{transform:translateX(3px)}}
.paper-reply-note{font-size:14px;line-height:1.8;color:#69755e;text-align:center;margin-top:9px}
.paper-location{margin-top:21px;padding-top:16px;border-top:1px solid #d6dac8;text-align:center}
.paper-event-address{font-size:16px;line-height:1.8;color:#5e6d54}
.paper-info-links{display:flex;align-items:center;justify-content:center;gap:33px;margin:4px 0 0}
.paper-info-links>button,.paper-info-links>a{display:flex;align-items:center;gap:10px;min-height:44px;padding:0;font-size:16px;color:#4b6145;text-decoration:none}
.paper-info-links span{font-size:19px}
#invite .section-intro{font-size:14px;line-height:1.9;letter-spacing:.2px;color:#62685c;margin:0 0 10px}
#invite .invite-paper h2{font:400 clamp(24px,6.1cqw,32px)/1.5 var(--serif);letter-spacing:.5px;margin:0}
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
#invite .home-album{margin:25px 7% 0;padding-top:26px;border-top:1px solid #cbd0bf}
.home-section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}
.album-photo-count{font:13px/1.6 var(--sans);color:#5b6856;white-space:nowrap;margin-bottom:5px}
.home-album-entry{display:block;width:100%;margin-top:28px;padding:0;text-align:left}
.home-album-prints{display:block;position:relative;width:100%;height:210px;max-width:400px;margin:0 auto 12px}
.home-album-prints img{position:absolute;width:39%;height:85%;padding:5px 5px 17px;background:#fffdf5;box-shadow:0 5px 12px #1b371d24;object-fit:cover;transition:transform .3s ease}
.home-album-prints img:nth-child(1){left:1%;top:11%;transform:rotate(-10deg);object-position:50% 40%}
.home-album-prints img:nth-child(2){left:29%;top:1%;transform:rotate(2deg);z-index:2;object-position:50% 50%}
.home-album-prints img:nth-child(3){right:1%;top:10%;transform:rotate(11deg);object-position:50% 63%}
.home-album-prints.motion-pending img{opacity:0;transform:translateY(30px) rotate(0deg) scale(.94)}
.home-album-prints.is-revealed img{animation:album-lay-down .8s var(--print-delay,0ms) cubic-bezier(.18,.75,.3,1) backwards}
.home-album-prints img:nth-child(1){--print-turn:-10deg;--print-delay:0ms}
.home-album-prints img:nth-child(2){--print-turn:2deg;--print-delay:120ms}
.home-album-prints img:nth-child(3){--print-turn:11deg;--print-delay:240ms}
.home-album-entry:focus-visible .home-album-prints.motion-pending img{opacity:1;transform:rotate(var(--print-turn))}
.home-album-entry:active .home-album-prints img:nth-child(1){transform:translateX(-3px) rotate(-13deg)}
.home-album-entry:active .home-album-prints img:nth-child(3){transform:translateX(3px) rotate(14deg)}
.home-album-caption{display:flex;justify-content:space-between;align-items:center;gap:15px;min-height:52px;font-size:17px;border-bottom:1px solid #a5b19d}
.home-album-caption>span{font-size:24px}
#invite .home-reply{margin:48px 7% 0;text-align:center}
#invite .home-reply .invitation-reply{margin-top:25px}
.home-reply>p:last-child{font-size:14px;line-height:1.9;color:#53634f;margin-top:14px}
.home-signature{display:flex;flex-direction:column;align-items:center;gap:12px;padding-top:48px}
.home-signature>span{font:20px/1.5 var(--serif);letter-spacing:3px}
.home-signature i{font:italic 22px Georgia,serif;margin:0 5px;color:#7b876b}
.home-signature>a{display:flex;align-items:center;min-height:44px;font-size:14px;line-height:1.8;letter-spacing:.5px;color:#5b6856;text-decoration:none}
@keyframes photo-welcome{from{opacity:.75}to{opacity:1}}
@keyframes camera-settle{from{transform:translate3d(0,var(--hero-drift,0px),0) scale(1.035)}to{transform:translate3d(0,var(--hero-drift,0px),0) scale(1)}}
@keyframes garden-light{from{opacity:.25;transform:translate3d(-2%,-1%,0)}to{opacity:.6;transform:translate3d(2%,1%,0)}}
@keyframes greeting-appear{from{opacity:0;transform:translateY(15px) scale(.86)}to{opacity:1;transform:none}}
@keyframes ink-draw{from{stroke-dashoffset:1;opacity:0}10%{opacity:1}to{stroke-dashoffset:0;opacity:1}}
@keyframes name-appear{from{opacity:0}to{opacity:1}}
@keyframes invitation-line-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes album-lay-down{from{opacity:0;transform:translateY(30px) rotate(0deg) scale(.94)}to{opacity:1;transform:translateY(0) rotate(var(--print-turn)) scale(1)}}
/* The temporary cover has the same paper edge as the real invitation below it. */
.home-opening{display:none;position:fixed;top:0;left:0;right:0;width:100%;max-width:560px;height:100svh;margin:0 auto;z-index:80;place-items:center;background:#faf7ec;color:#304536;touch-action:pan-y;will-change:transform}
.home-booting body[data-mode=before] #invite.active .home-opening,#invite:is([data-home-motion=waiting],[data-home-motion=revealing]) .home-opening{display:grid}
.home-opening:before{content:"";position:absolute;left:0;right:0;top:-9px;height:10px;background:#faf7ec;clip-path:polygon(0 3px,3% 4px,7% 1px,12% 3px,18% 2px,23% 4px,29% 1px,35% 3px,40% 2px,46% 4px,51% 1px,58% 3px,63% 2px,69% 4px,75% 1px,81% 3px,87% 1px,93% 4px,97% 2px,100% 3px,100% 100%,0 100%);pointer-events:none}
.home-opening:after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.32;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 150 150' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='opening-grain'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.76' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23797050' opacity='.16' filter='url(%23opening-grain)' d='M0 0h150v150H0z'/%3E%3C/svg%3E")}
.home-opening-copy{position:relative;width:86%;margin:0 auto;text-align:center;pointer-events:none}
.home-opening-welcome{font:400 19px/1.7 var(--serif);letter-spacing:3px;animation:opening-welcome 1.1s .1s cubic-bezier(.2,.65,.25,1) both}
.home-opening-line{font:400 clamp(30px,8.4cqw,44px)/1.5 var(--wedding-hand);letter-spacing:.08em;margin-top:20px}
.opening-line-mask{display:block;overflow:hidden;padding:0 0 2px}
.opening-line-mask>span{display:block;animation:opening-words .85s .85s cubic-bezier(.2,.7,.25,1) both}
.opening-line-mask:nth-child(2)>span{animation-delay:1.1s}
.home-opening-names{font:400 16px/1.6 var(--serif);letter-spacing:3px;margin-top:24px;animation:opening-signature .7s 1.25s ease both}
.home-opening-names i{font:italic 18px Georgia,serif;color:#7a856e;margin:0 7px}
.home-opening-stroke{display:block;width:128px;height:22px;margin:18px auto 0;stroke:#809075;stroke-width:1.25;stroke-linecap:round}
.home-opening-stroke path{stroke-dasharray:1;stroke-dashoffset:1;animation:ink-draw .9s 1.4s ease both}
.home-opening-skip{position:absolute;z-index:2;bottom:max(28px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:8px;min-height:44px;padding:0 6px;font-size:15px;letter-spacing:.5px;white-space:nowrap;color:#617457}
.home-opening-skip span{font-size:19px}
.home-opening-skip:focus-visible{outline:2px solid #304536;outline-offset:4px}
@keyframes opening-welcome{0%{opacity:0;transform:translateY(92px)}30%,55%{opacity:1;transform:translateY(82px)}100%{opacity:1;transform:translateY(0)}}
@keyframes opening-words{from{opacity:0;transform:translateY(110%)}to{opacity:1;transform:translateY(0)}}
@keyframes opening-signature{from{opacity:0;transform:translateY(10px);letter-spacing:5px}to{opacity:1;transform:translateY(0);letter-spacing:3px}}
@media(min-width:650px){
  #invite{max-width:520px}
  .home-opening{max-width:520px}
  #invite .wedding-information{padding-bottom:20px}
  .wedding-countdown>span{font-size:16px}
  .wedding-countdown>strong{font-size:28px}
}
@media(max-width:360px){
  .hero-heading{gap:8px}
  #invite .wedding-information{padding-bottom:16px}
  .paper-date{gap:5px 18px}
  #invite .paper-rsvp{margin-top:18px}
  .paper-info-links{gap:27px}
  .home-album-prints{height:180px}
}
@media(prefers-reduced-motion:reduce){
  .hero-slide,.hero-slide.is-active,.hero-carousel-dot span{transition:none}
  #invite.active .hero-slide.is-arriving :is(.greeting-layer,.person-name,.hero-doodles path),.is-rotating .hero-carousel-dot[aria-current=true] span:after{animation:none}
  .greeting-layer,.person-name,.hero-photo,#wedding-info{opacity:1;translate:none}
  #invite .invitation-reply .reply-arrow{transition:none;transform:none}
  .hero-doodles path{stroke-dashoffset:0;opacity:1}
  .home-opening,.paper-curl{display:none!important}
  .hero-motion-plane{transform:none!important;will-change:auto}
  .hero-daylight{animation:none!important;opacity:.25;transform:none}
  .home-album-prints img,.home-album-prints.motion-pending img{opacity:1;transform:rotate(var(--print-turn))}
  #invite:is([data-home-motion=waiting],[data-home-motion=revealing]) :is(.greeting-layer,.person-name,.hero-doodles,.hero-heading,#wedding-info){opacity:1}
}

/* A continuous invitation: the photograph stays briefly as the paper unfolds. */
.hero-scroll-scene{position:relative;padding-bottom:22cqw}
#invite .hero-scroll-scene .invite-hero{position:sticky;top:min(0px,calc(100svh - 159.535cqw))}
#invite .invite-paper{margin-top:-30cqw;box-shadow:0 -12px 25px #152b2424}
#invite .paper-curl{top:-17px;height:34px;transform:scaleY(calc(.16 + (1 - var(--paper-open,1))*.84));opacity:calc(.15 + (1 - var(--paper-open,1))*.65);background:linear-gradient(180deg,transparent,#fffff5aa 36%,#9ca08755 57%,#faf7ec 90%)}
.paper-date-numerals{position:relative;isolation:isolate}
#date-ink{position:absolute;width:122%;height:150%;left:-11%;top:-27%;z-index:-1;overflow:visible;pointer-events:none;color:#879578}
#date-ink path{stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:calc(1 - var(--date-ink,1))}
#invite .wedding-information{padding-top:28px;padding-bottom:28px;background:linear-gradient(180deg,#faf7ec,#f7f4e8)}
.paper-location{border-top:0;margin-top:15px;padding-top:7px}
.paper-event-address{font-size:14px}
.paper-info-links{gap:28px}
.paper-info-links>button,.paper-info-links>a{font-size:15px}

/* An image-led pause between the facts and the guest's reply. */
#invite .home-album{margin:0;padding:0;border:0}
.memory-scene{position:relative;height:126cqw;min-height:390px;max-height:640px;overflow:hidden;isolation:isolate;background:#263028;color:#fffaf0}
.memory-photo{position:absolute;inset:-24px 0 auto;width:100%;height:calc(100% - 48px);object-fit:cover;object-position:53% 50%;transform:translate3d(0,var(--memory-drift,0px),0);pointer-events:none}
.memory-shade{position:absolute;inset:0;background:linear-gradient(180deg,#26302800 35%,#26302818 48%,#263028a6 70%,#263028 87%);pointer-events:none}
.memory-scene:before,.memory-scene:after{content:"";position:absolute;left:-1%;right:-1%;height:12px;background:#f7f4e8;z-index:2;pointer-events:none;clip-path:polygon(0 0,100% 0,100% 70%,95% 51%,91% 78%,85% 52%,80% 70%,73% 50%,66% 73%,60% 55%,53% 81%,47% 51%,40% 69%,32% 55%,25% 76%,18% 55%,12% 72%,7% 50%,0 74%)}
.memory-scene:before{top:-1px}
.memory-scene:after{bottom:-1px;transform:rotate(180deg);background:#faf7ec}
.memory-caption{position:absolute;left:9%;right:9%;bottom:7%;text-shadow:0 2px 10px #14221c33}
#invite .memory-caption h2{font:400 clamp(29px,7.8cqw,40px)/1.55 var(--serif);letter-spacing:2px;color:#fffaf0}
.album-paper-insert{position:relative;z-index:3;padding:32px 8% 0;background:#faf7ec}
.album-handnote{font:16px/1.8 var(--serif);color:#60705a;text-align:center;transform:rotate(-3deg);margin:0}
.album-paper-insert .home-album-entry{margin-top:26px}
.album-paper-insert .home-album-prints{height:58cqw;max-height:285px;margin-bottom:4px}
.album-paper-insert .home-album-prints img{height:82%;width:40%;padding:5px 5px 21px;object-position:center 45%}
.album-paper-insert .home-album-prints img:nth-child(2){object-position:center 48%}
.home-album-caption{font-size:16px;border-bottom:0;min-height:60px}
.home-album-caption>span:first-child{font:inherit;display:flex;align-items:center;gap:12px}
.home-album-caption small{font:12px/1.5 var(--sans);color:#718069}

/* A real, reusable form is unfolded from the reply envelope in the page. */
#invite .home-reply{position:relative;margin:0;padding:48px 7% 20px;background:linear-gradient(180deg,#faf7ec,#ececdd 55%,#eef0e2);text-align:left;overflow:hidden}
.reply-heading{text-align:center;margin-bottom:40px}
#invite .reply-heading .section-intro{font-size:15px;letter-spacing:1px;margin-bottom:9px}
#invite .reply-heading h2{font-size:clamp(26px,7cqw,35px);letter-spacing:1px}
.reply-heading>p:last-child{font:14px/1.9 var(--serif);color:#65745c;margin:15px 0 0}
.reply-stationery{position:relative;isolation:isolate;background:#fcfaef;color:#304536;box-shadow:3px 13px 30px #344d3520,-1px 0 1px #ffffffb0;transform-origin:50% 100%;scroll-margin-top:24px;transition:transform .45s ease;min-height:252px}
.reply-stationery[data-reply-state=closed]{transform:rotate(-2deg)}
.reply-fold-shadow{position:absolute;inset:0;pointer-events:none;z-index:3;border-top:1px solid #fffef7;border-bottom:1px solid #c6cbb6;background:linear-gradient(180deg,#a9b09612,transparent 18%,transparent 79%,#cdd1bf26)}
.reply-stationery[data-reply-state=closed]:after{content:"";position:absolute;left:0;right:0;bottom:0;height:52%;background:linear-gradient(156deg,transparent 49%,#c8ceb422 50%,#f3f2e4 51%);pointer-events:none}
.reply-invite{position:relative;padding:22px 24px 0;min-height:252px}
.reply-envelope-top,.reply-kept-top{display:flex;justify-content:space-between;gap:16px;font:11px/1.7 var(--sans);letter-spacing:1.4px;color:#718069}
.reply-envelope-top>span:last-child{font:italic 19px Georgia,serif;letter-spacing:0}
.reply-envelope-address{display:flex;flex-direction:column;gap:9px;padding-top:28px;padding-right:50px}
.reply-envelope-address>span{font:13px var(--serif);color:#788169}
.reply-envelope-address>strong{font:400 clamp(18px,5.2cqw,24px)/1.5 var(--serif);letter-spacing:1px}
.reply-postage{position:absolute;right:24px;top:65px;width:48px;height:61px;border:3px dotted #d9dfc8;outline:1px solid #d2d8c2;background:#e8ecd9;display:grid;place-content:center;text-align:center;font:16px/1.5 var(--serif);letter-spacing:2px;color:#59714b;transform:rotate(4deg)}
.reply-pull{position:relative;z-index:4;display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:54px;margin-top:28px;padding:10px 0;border-top:1px solid #cdd2bd;color:#304536;font:16px/1.5 var(--serif);text-align:left;background:transparent}
.reply-pull>span:last-child{font-size:24px;transition:transform .2s ease}
.reply-pull:hover>span:last-child{transform:translate(3px,-3px)}
.inline-rsvp-mount{position:relative;padding:23px 23px 28px;transform-origin:50% 0;perspective:800px}
.reply-stationery[data-reply-state=editing] .inline-rsvp-mount{animation:reply-unfold .6s cubic-bezier(.2,.75,.25,1) both}
.reply-stationery[data-reply-state=folding] .inline-rsvp-mount{animation:reply-refold .56s cubic-bezier(.4,0,.3,1) forwards;pointer-events:none}
.inline-rsvp-mount .eyebrow{font:11px/1.5 var(--sans);letter-spacing:1.5px;color:#728066}
.inline-rsvp-mount .close-button{font-size:24px;min-height:44px;min-width:44px;margin-right:-10px}
#invite .inline-rsvp-mount h2{font:400 clamp(23px,6.2cqw,30px)/1.45 var(--serif);margin-top:8px}
.inline-rsvp-mount .form-intro{font-size:14px;line-height:1.8;margin:10px 0 25px}
.inline-rsvp-mount .field-label{font-size:15px;margin-bottom:10px}
.inline-rsvp-mount .field-label>span{display:block;font-size:12px;margin:5px 0 0}
.inline-rsvp-mount #guest-name{height:48px;font-size:18px}
.inline-rsvp-mount fieldset{margin-top:26px}
.inline-rsvp-mount .attendance-options{gap:7px}
.inline-rsvp-mount .attendance-options span{padding:12px 9px;height:84px}
.inline-rsvp-mount .attendance-options b{font-size:16px}
.inline-rsvp-mount .attendance-options small{font-size:12px}
.inline-rsvp-mount .count-row>label{font-size:15px}
.inline-rsvp-mount .count-row>label>span{font-size:12px}
.inline-rsvp-mount .stepper button{min-width:44px;min-height:44px}
.inline-rsvp-mount .stepper input{min-height:44px}
.inline-rsvp-mount .form-error{font-size:13px;line-height:1.7;min-height:30px}
.inline-rsvp-mount #submit-rsvp{min-height:54px;font:16px/1.5 var(--serif);padding:13px 15px}
.inline-rsvp-mount .quiet-note{font-size:12px;line-height:1.7;margin-top:14px}
.reply-kept{position:relative;padding:23px 23px 26px;min-height:305px;overflow-wrap:anywhere;animation:reply-kept-in .4s ease both}
.reply-kept-top{padding-bottom:14px;border-bottom:1px solid #d5dac8;font-size:10px;letter-spacing:1px}
#reply-kept-title{font:400 clamp(22px,6cqw,29px)/1.6 var(--serif);margin:21px 0 14px}
.reply-from{font:15px/1.7 var(--serif);margin:0 88px 10px 0}
.reply-from strong{font-weight:500}
.reply-kept-status{font:18px/1.7 var(--serif);margin:0 84px 5px 0}
.reply-kept-count{font:13px/1.7 var(--sans);color:#65755c;margin:0 85px 12px 0}
.reply-ink-stamp{position:absolute;right:20px;top:121px;width:76px;height:76px;border:1.3px solid #9d5846;border-radius:50%;outline:1px solid #9d5846;outline-offset:-5px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;color:#9d5846;transform:rotate(12deg);opacity:0;pointer-events:none}
.reply-ink-stamp>span{font:11px/1.5 var(--serif);letter-spacing:2px}
.reply-ink-stamp>b{font:22px/1.2 Georgia,serif}
.reply-ink-stamp>small{font:9px/1.5 var(--sans);letter-spacing:1px}
.reply-stationery.is-stamped .reply-ink-stamp{opacity:.85;animation:reply-stamp .45s cubic-bezier(.2,.8,.2,1) both}
.reply-stationery[data-reply-state=kept] .reply-ink-stamp{opacity:.85}
.reply-edit{font:14px/1.6 var(--sans);min-height:44px;border-bottom:1px solid #b8c1a9;display:flex;align-items:center;gap:20px}
.reply-kept-note{font:12px/1.8 var(--sans);color:#79816e;margin-top:19px}
#invite .home-reply .reply-postscript{font:13px/1.8 var(--serif);text-align:center;color:#738069;margin:27px 0 0}
.home-signature{background:#eef0e2;padding:24px 20px 28px}
#invite .invite-paper{padding-bottom:0}
@keyframes reply-unfold{from{opacity:.4;transform:perspective(800px) rotateX(-14deg) translateY(30px)}to{opacity:1;transform:none}}
@keyframes reply-refold{0%{opacity:1;transform:perspective(800px) rotateX(0)}65%{opacity:.65;transform:perspective(800px) rotateX(-50deg) scale(.96)}100%{opacity:0;transform:perspective(800px) rotateX(-85deg) scale(.92)}}
@keyframes reply-kept-in{from{opacity:.6;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes reply-stamp{from{opacity:0;transform:scale(1.65) rotate(-2deg)}60%{opacity:.85;transform:scale(.96) rotate(13deg)}to{opacity:.85;transform:scale(1) rotate(12deg)}}
@media(max-width:360px){.inline-rsvp-mount{padding:20px 17px 24px}.inline-rsvp-mount .attendance-options{flex-direction:column}.inline-rsvp-mount .attendance-options span{height:54px;flex-direction:row;justify-content:space-between;align-items:center;padding:10px 27px 10px 12px}.inline-rsvp-mount .attendance-options i{top:18px;right:9px}.reply-invite{padding:20px 20px 0}.reply-envelope-address{padding-right:42px}.reply-postage{right:19px;width:44px}.reply-kept{padding:20px 18px 24px}.reply-ink-stamp{right:17px;width:66px;height:66px}.reply-from,.reply-kept-status,.reply-kept-count{margin-right:75px}}
@media(prefers-reduced-motion:reduce){.hero-scroll-scene{padding-bottom:0}#invite .hero-scroll-scene .invite-hero{position:relative;top:auto}#invite .invite-paper{margin-top:-8cqw}.memory-photo{transform:none}#date-ink path{stroke-dashoffset:0}.reply-stationery[data-reply-state=closed]{transform:none}.reply-stationery.is-stamped .reply-ink-stamp{opacity:.85}}
