@font-face{font-family:Allison;src:url(assets/fonts/allison-regular.woff) format("woff");font-display:swap}@font-face{font-family:Alegreya;src:url(assets/fonts/alegreya-regular.woff) format("woff");font-display:swap}@font-face{font-family:Amiri;src:url(assets/fonts/amiri-regular.ttf) format("truetype");font-display:swap}:root{font-family:Alegreya,Georgia,serif;color:#f0e3ce;background:#35121d;font-synthesis:none;font-weight:400;--wine:#501824;--gold:#d8bb91;--cream:#f5edde}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body{margin:0}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}button,a{touch-action:manipulation}button:focus-visible,a:focus-visible{outline:2px solid #be955f;outline-offset:6px}button{cursor:pointer}button:disabled{cursor:wait}img{display:block;max-width:100%}h1,h2,h3,p{margin:0}a{color:inherit}button svg{width:24px;height:24px}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip-link{position:fixed;z-index:20;top:8px;left:8px;transform:translateY(-150%);padding:12px;background:var(--cream)}.skip-link:focus{transform:none}.script{font-family:Allison,cursive;font-weight:400}.eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:2.2px}.ornament{display:block;font-size:40px;color:#d8bb91;line-height:1.3}.opening{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10;max-width:520px;margin:auto;background:#55262a;overflow:hidden;perspective:1400px;isolation:isolate}.envelope-art{position:absolute;width:100%;height:100%;object-fit:cover;transform:scale(1.026);transform-origin:center bottom;object-position:50% 100%;max-width:none}.seal-button{position:absolute;top:0;right:0;bottom:0;left:0;border:0;background:transparent;color:#fff}.invitation{width:100%;max-width:520px;margin:auto;background:#4b1824;overflow:clip;box-shadow:0 0 70px #3b16181f}.invitation[hidden]{display:none}.opened{animation:arrive 1.1s ease both}.invitation-body{background:linear-gradient(#4b1824,transparent 130px),radial-gradient(ellipse at 0 25%,#89545125,transparent 65%),radial-gradient(ellipse at 100% 65%,#1f071a38,transparent 70%),#4b1824}.welcome{text-align:center;padding:70px 35px 20px}.welcome h2{font-size:60px;margin:8px 0 14px}.welcome>p:not(.eyebrow){font-size:18px;line-height:1.7;max-width:290px;margin:auto}.welcome .ornament{margin-top:22px}.countdown{text-align:center;padding:36px 24px 58px}.countdown h2{font-size:53px;margin-bottom:25px}.timer{display:grid;grid-template-columns:repeat(4,1fr);max-width:360px;margin:auto}.time-unit{border-right:1px solid #a88e6d66}.time-unit:last-child{border:0}.time-unit span{display:block;font-size:36px;line-height:1.15;font-variant-numeric:tabular-nums}.time-unit small{font-size:9px;letter-spacing:1.5px;text-transform:uppercase;display:block;margin-top:10px}.completed{font-size:19px;line-height:1.7}.portrait-section{position:relative;margin:0 16px;text-align:center}.portrait-caption{font-size:49px;margin:22px 0 5px}.details{padding:58px 28px 70px;text-align:center}.details h2{font-size:60px;margin:8px 0 30px}.venue-card{border:1px solid #aa8a6266;padding:30px 18px;outline:1px solid #aa8a622a;outline-offset:6px}.venue-card h3{font-size:30px;font-weight:400;letter-spacing:.5px;margin:8px 0 12px}.address{white-space:pre-line;font-size:17px;line-height:1.6}.fine-rule{height:1px;width:50px;background:#ad8b60;margin:23px auto}.event-date{font-size:19px}.event-time{font-size:15px;margin-top:6px;letter-spacing:1px}.actions{display:flex;flex-direction:column;gap:12px;margin-top:30px}.button{display:flex;align-items:center;justify-content:center;gap:12px;min-height:51px;padding:12px 20px;background:#eee1c9;color:#501824;border:1px solid #e5cba2;text-decoration:none;font-size:15px;letter-spacing:.4px;transition:transform .2s,background .2s}.button svg{width:19px;height:22px;fill:none;stroke:currentColor;stroke-width:1.3}.button:active{transform:scale(.98)}.button:hover{background:#ddc6a3}.button:disabled{opacity:.5}.closing{padding:46px 24px 60px;text-align:center;background:linear-gradient(145deg,#f5edde,#e8d9bd);color:#59202b}.closing .ornament{color:#94734b;margin-bottom:22px}.closing .script{font-size:42px;line-height:1.15;max-width:300px;margin:0 auto 24px}.closing-names{font-size:15px;letter-spacing:.5px}.closing-names span{font-style:italic;padding:0 4px}.closing-date{font-size:12px;letter-spacing:3px;margin-top:16px}.floating-music{position:fixed;z-index:8;bottom:max(20px,env(safe-area-inset-bottom));right:max(17px,calc((100vw - 520px)/2 + 17px));width:44px;height:44px;border-radius:50%;border:1px solid #caa775;background:#4b101bed;color:#edd3ad;display:grid;place-items:center;box-shadow:0 3px 12px #25010730;transition:transform .2s}.floating-music:active{transform:scale(.92)}.music-note{transform-origin:center}.is-playing .music-note{animation:sway 2s ease-in-out infinite}.audio-message{position:fixed;bottom:74px;right:20px;max-width:260px;background:#f5edde;color:#570d19;font-size:13px;z-index:9}.audio-message:empty{display:none}.scroll-progress{position:fixed;left:0;top:0;right:0;height:2px;z-index:15;pointer-events:none}.scroll-progress>div{height:100%;background:#d7b27c;transform:scaleX(0);transform-origin:left}.reveal-ready{opacity:0;transform:translateY(24px);transition:opacity .9s ease,transform 1.1s cubic-bezier(.2,.65,.3,1)}.reveal-ready.visible{opacity:1;transform:none}@keyframes arrive{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}@keyframes breathe{50%{opacity:.55}}@keyframes sway{50%{transform:rotate(9deg)}}@media(max-width:350px){.details{padding-left:22px;padding-right:22px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.reveal-ready{opacity:1;transform:none}}.music-icon{width:24px;height:24px;position:relative;display:block}.music-glyph{position:absolute;top:0;right:0;bottom:0;left:0;fill:currentColor;opacity:0;transform:scale(.7);transition:opacity .2s,transform .2s}.music-glyph.is-visible{opacity:1;transform:scale(1)}.music-icon--loading{animation:breathe 1s infinite}.hero{position:relative;width:100%;padding:145px 24px 150px;background:#b29b7b;container-type:inline-size;isolation:isolate}.hero-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;z-index:-1}.invitation-card{position:relative;aspect-ratio:651/882;container-type:inline-size;box-shadow:0 14px 30px #35040970;background:#620f12;color:#edd5b4}.card-art{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.card-scene{position:absolute;width:157.2%;height:auto;left:-28.6%;top:-36.6%;max-width:none}.card-copy{position:absolute;top:0;right:0;bottom:0;left:0;padding:11% 8%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:#edd5b4;text-shadow:0 1px 3px #2c00005c}.card-copy .eyebrow{font-size:2.8cqw;line-height:1.3;letter-spacing:.42cqw;margin-bottom:3cqw}.card-copy h1{font-family:Allison,cursive;font-size:10.5cqw;line-height:1;font-weight:400;width:100%;outline:none}.card-copy h1 span{display:block;white-space:nowrap}.card-copy h1 i{display:block;font-size:6cqw;line-height:1;font-weight:400;margin:1.1cqw 0}.card-rule{font-size:4cqw;line-height:1;margin:3cqw 0 2cqw}.verse{font-family:Amiri,serif;font-size:4.2cqw;line-height:1.85;width:100%;margin-bottom:3.5cqw;text-align:center}.verse span{display:block;white-space:nowrap}.card-date{font-size:3.4cqw;line-height:1.4;text-transform:uppercase;letter-spacing:.22cqw}.card-time{font-size:3.4cqw;line-height:1.4;margin-top:1.2cqw;letter-spacing:.2cqw}.card-venue{font-size:5cqw;line-height:1.3;margin-top:2.4cqw}.card-ending{font-family:Allison,cursive;font-size:7cqw;line-height:1;margin-top:3cqw}.scroll-cue{position:absolute;bottom:24px;left:0;right:0;z-index:2;text-align:center;text-decoration:none;color:#f0e3ce;font-size:9px;letter-spacing:1.8px;text-transform:uppercase}.scroll-cue span{display:block;font-size:18px;line-height:1.2}.portrait-frame{position:relative;width:100%;aspect-ratio:2/3;isolation:isolate}.couple-portrait{position:absolute;left:7%;top:6%;width:86%;height:87%;object-fit:contain;object-position:center;transform:scale(.96);background:#f5efdf;border-radius:49% 49% 0 0/22% 22% 0 0}.portrait-border{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:fill;pointer-events:none}@media(max-width:350px){.hero{padding:125px 20px 140px}}@media(min-width:480px){.hero{padding-left:36px;padding-right:36px}}.envelope-lining{position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(45deg,#8f615a0a 0 2px,transparent 2px 8px),linear-gradient(160deg,#421c23,#805047 55%,#35121a)}.envelope-pocket,.envelope-flap{position:absolute;top:0;right:0;bottom:0;left:0;will-change:transform}.envelope-pocket{z-index:3;clip-path:polygon(0 37%,50% 57%,100% 37%,100% 100%,0 100%)}.envelope-flap{z-index:4;clip-path:polygon(0 0,100% 0,100% 37%,50% 57%,0 37%);transform-origin:50% 0;backface-visibility:hidden}.envelope-letter{position:absolute;z-index:2;left:12%;right:12%;top:40%;height:52%;padding:46px 20px;background:#f5edde;color:#652630;border:1px solid #c4a278;box-shadow:0 8px 30px #23040b55;text-align:center;transform:translateY(70%);opacity:0}.envelope-letter:before{content:"";position:absolute;top:10px;right:10px;bottom:10px;left:10px;border:1px solid #b897694d;pointer-events:none}.envelope-letter .eyebrow{font-size:9px}.letter-names{font:44px/1.15 Allison,cursive;margin-top:28px}.letter-names span{display:block}.letter-names i{display:block;font-size:28px;margin:10px 0}.letter-date{font-size:12px;letter-spacing:2px;margin-top:25px}.seal-button{z-index:5}.open-label{position:absolute;top:62%;left:0;right:0;display:flex;align-items:center;flex-direction:column;gap:14px;color:#f0ddbd;transition:opacity .25s,transform .3s}.open-label strong{font-family:Allison,cursive;font-weight:400;font-size:38px;line-height:1.1}.open-label small{font:9px/1.5 Alegreya,serif;text-transform:uppercase;letter-spacing:1.8px}.open-prompt-rule{display:flex;align-items:center;gap:12px;font-size:15px}.open-prompt-rule:before,.open-prompt-rule:after{content:"";width:42px;height:1px;background:linear-gradient(90deg,transparent,#d0b086)}.open-prompt-rule:after{transform:rotate(180deg)}.seal-button:hover .open-label{transform:translateY(-3px)}.opening.is-leaving{pointer-events:none;animation:envelope-fade .3s 1.55s ease both}.is-leaving .envelope-flap{animation:flap-open .85s .12s cubic-bezier(.4,0,.2,1) forwards}.is-leaving .envelope-letter{animation:letter-rise 1s .5s cubic-bezier(.22,.7,.2,1) forwards}.is-leaving .envelope-pocket{animation:pocket-away .7s 1.05s cubic-bezier(.4,0,.6,1) forwards}.is-leaving .open-label{opacity:0;transform:translateY(8px)}@keyframes flap-open{to{transform:rotateX(165deg);filter:brightness(.65)}}@keyframes letter-rise{15%{opacity:1}to{opacity:1;transform:translateY(-38%)}}@keyframes pocket-away{to{transform:translateY(85%);opacity:0}}@keyframes envelope-fade{to{opacity:0}}@media(max-width:350px){.open-label strong{font-size:33px}.open-label small{font-size:8px}.letter-names{font-size:37px}}body{background:radial-gradient(ellipse at 20% 0,#6a303a55,transparent 65%),#35121d}.welcome{padding-top:66px}.welcome>p:not(.eyebrow){max-width:340px;font-size:18px;line-height:1.85;color:#f0e3ce}.welcome h2,.countdown h2,.portrait-caption,.details h2{color:#f1dfc2}.venue-card{background:linear-gradient(145deg,#7d404020,#2b0d1c25);border-color:#d9bc8b80;outline-color:#d9bc8b35}.time-unit{border-right-color:#dcc49d66}.portrait-section{margin:0 20px}.portrait-caption{font-size:47px;margin-top:26px}.floating-music{background:#3a101be8;border-color:#e4c99f;color:#f0ddbd}.closing{border-top:1px solid #f3dfbf}@media(max-width:350px){.welcome{padding-left:27px;padding-right:27px}.welcome>p:not(.eyebrow){font-size:17px}}.hero:after{content:"";position:absolute;inset:auto 0 -1px;height:152px;z-index:1;pointer-events:none;background:linear-gradient(180deg,transparent,#4b1824 96%);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);-webkit-mask-image:linear-gradient(transparent,#000 55%);mask-image:linear-gradient(transparent,#000 55%)}.portrait-frame:before{content:"";position:absolute;top:6%;right:7%;bottom:7%;left:7%;background:#f5efdf;border-radius:49% 49% 0 0/22% 22% 0 0;z-index:-1}

/* smaller couple picture inside the frame: change .85 to taste */
.couple-portrait{transform:scale(.85)}
