/* Measured reference canvas: full-width backgrounds, centered 440px hero.
   The original keeps its artwork dimensions on mobile and clips at the viewport. */
@font-face{font-family:GTDisplay;src:url('./fonts/gt-super.woff') format('woff');font-display:swap}
@font-face{font-family:Ovo;src:url('./fonts/ovo.woff') format('woff');font-display:swap}
:root{--paper:#fffaf8;--ink:#3a3a3a;--shell:100%}
html,body{background:var(--crimson);color:var(--paper)}
body{font-family:GTDisplay,Georgia,serif}
.site-shell{width:100%;margin-inline:auto;overflow:clip;box-shadow:none}
.section-burgundy{background:var(--crimson)}
.site-shell>section{opacity:1;transform:none;transition:none}
.hero{height:763px;min-height:0}
.hero-media{width:440px;height:763px;margin:auto;overflow:hidden;max-width:none;left:50%;margin-left:-220px}
.hero-video{height:782px;object-fit:cover;filter:brightness(.6)}
.hero-media::after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 76%,#66021f 100%);pointer-events:none}
.hero-copy{z-index:1;text-shadow:none}
.script-line{position:absolute;top:94px;left:50%;width:560px;margin:0 0 0 -280px;font:400 40px/37px ImperialScript,cursive}
.hero-date{position:absolute;top:136px;left:0;width:100%;margin:0;font:400 25px/37px Ovo,serif;letter-spacing:0}
.couple-names{position:absolute;top:261px;left:50%;width:560px;height:165px;margin:0 0 0 -280px;display:block;font:400 85px/1 ImperialScript,cursive}
.couple-names>span{position:absolute;left:0;width:100%}
#partnerOne{top:0}#partnerTwo{top:96px}.couple-names #connector{top:64px;font:400 50px/55px ImperialScript,cursive}
.script-heading{position:relative;z-index:5;font:400 41px/64px ImperialScript,cursive;margin:0;text-align:center;color:var(--paper)}
.script-heading.dark{color:var(--ink)}
.letter{height:353px;min-height:0;padding:30px 0 0;border:0}
.letter p{position:relative;z-index:5;width:307px;max-width:calc(100% - 36px);font:21px/26px GTDisplay,serif;margin:14px auto 0}
.letter p+p{margin-top:26px}
.countdown-section{height:328px;min-height:0;padding:70px 0 0;display:block}
.countdown{margin-top:10px;gap:6px;align-items:center}
.countdown-unit{min-width:0}.countdown-value{font:45px/1.2 Ovo,serif}.countdown-label{font:19px/1.2 Ovo,serif;margin-top:8px}
.countdown-separator{font:52px/1 GTDisplay,serif;margin-top:-32px}
.torn{width:630px;height:121px;max-width:none;object-fit:fill;filter:none;z-index:2}
.torn-top{top:-74px;transform:translateX(-50%)}
.torn-bottom{bottom:-57px;transform:translateX(-50%) rotate(180deg)}
.paper-section::before,.paper-section::after{content:none}
.paper-section::before{top:-1px}.paper-section::after{bottom:-1px}
.paper-section>*:not(.torn):not(.flower-layer){position:relative;z-index:3}
.schedule{height:413px;min-height:0;padding:0;text-align:center}
.timeline{width:274px;max-width:none;margin:32px auto 0}
.timeline::before{left:50%;top:23px;bottom:26px;background:#fffaf8;width:1px}
.timeline-item{grid-template-columns:110px 54px 110px;min-height:0;height:82px;opacity:1;transform:none;transition:none}
.timeline-time{padding:0;text-align:center;font:30px/47px Ovo,serif}
.timeline-name{padding:0 7px;text-align:center;font:20px/22px GTDisplay,serif}
.timeline-dot{width:6px;height:6px;background:var(--paper)}
.timeline-item:first-child .timeline-dot{width:6px;height:6px;background:var(--paper);transform:rotate(45deg)}
.timeline-dot img{display:none}
.timeline-flower{position:absolute;left:calc(50% - 27.5px);top:-1px;width:55px;height:55px;z-index:4;will-change:transform;pointer-events:none}
.location{height:527px;min-height:0;padding:77px 0 0;background:linear-gradient(var(--paper) 0 497px,var(--crimson) 497px)}
.location h3{font:20px/31px GTDisplay,serif;margin:9px 0 0}
.location p{width:276px;max-width:calc(100% - 32px);font:17px/21px GTDisplay,serif;margin:7px auto 0}
.paper-section .venue-image{position:absolute!important;z-index:0!important;top:119px;left:50%;width:450px;max-width:none;max-height:none;height:375px;margin:0 0 0 -225px;object-fit:fill}
.dress-code{height:723px;min-height:0;padding:0}
.dress-intro{width:310px;max-width:calc(100% - 32px);font:21px/26px GTDisplay,serif;margin:13px auto 0}
.dress-palette{position:absolute;top:187px;left:50%;display:flex;gap:12px;transform:translateX(-50%)}
.dress-palette i{display:block;width:57px;height:57px;border:1px solid var(--paper);border-radius:50%;background:#60603b}
.dress-palette i:nth-child(2){background:#360c1a;transition-delay:.1s}.dress-palette i:nth-child(3){background:#40312c;transition-delay:.2s}.dress-palette i:nth-child(4){background:#efdfcd;transition-delay:.3s}
.dress-copy{position:absolute;display:block;width:156px;max-width:none;font:18px/23px GTDisplay,serif;text-align:left}
.dress-copy strong{display:block;margin:0;font-weight:400}
.dress-copy-one{top:328px;left:calc(50% + 10px);margin:0}
.dress-copy-two{top:546px;left:calc(50% - 184px);width:169px;margin:0;text-align:right}
.frames{position:absolute;inset:0;height:auto;margin:0;pointer-events:none}
.frame{filter:none;max-width:none;transition:none;transform:none}
.frame-one{left:calc(50% - 199px);top:276px;width:187px}
.frame-two{left:calc(50% + 6px);right:auto;top:460px;width:192px}
.reveal.is-visible .frame-one,.reveal.is-visible .frame-two{transform:none}
.details{height:668px;min-height:0;padding:80px 0 0;display:block;background:linear-gradient(var(--paper) 0 569px,var(--crimson) 569px)}
.details p{width:383px;max-width:calc(100% - 24px);font:21px/26px GTDisplay,serif;margin:14px auto 0}
.details .organizer{margin-top:15px;gap:5px}
.organizer a{font:25px/31px GTDisplay,serif}
.details #giftCopy{margin-top:42px}
.details .torn-bottom{top:523px;bottom:auto}
.details::after{height:79px}
.rsvp-section{height:951px;min-height:0;padding:0}
.rsvp-section #rsvpTitle{position:absolute;top:-8px;left:0;width:100%}
.rsvp-section>p:first-child{position:absolute;top:76px;left:50%;width:372px;max-width:calc(100% - 24px);transform:translateX(-50%);margin:0;font:21px/26px GTDisplay,serif}
.rsvp-button{position:absolute;top:158px;left:50%;transform:translateX(-50%);width:149px;min-height:41px;padding:2px 20px;font:22px/34px GTDisplay,serif;box-shadow:none;overflow:hidden}
.rsvp-button:hover,.rsvp-button:focus-visible{transform:translateX(-50%)}
.rsvp-button::after{content:"";position:absolute;top:0;left:-50%;width:35%;height:100%;background:linear-gradient(90deg,transparent,#fff8,transparent);transform:skewX(-45deg);animation:button-glint 3s linear infinite}
@keyframes button-glint{30%,100%{left:130%}}
.signoff{position:absolute;top:260px;left:0;width:100%;margin:0}
.closing-names{position:absolute;top:321px;left:0;width:100%;font:28px/45px GTDisplay,serif;margin:0}
.footer-photo{position:absolute;top:356px;left:50%;width:450px;height:595px;max-width:none;min-height:0;margin:0 0 0 -225px;object-fit:fill}
.rsvp-section::after{content:"";position:absolute;top:356px;left:50%;width:450px;height:595px;margin-left:-225px;background:url('./crimson-texture.webp') center/100% 100%;pointer-events:none}
.site-footer{position:relative;font:14px/1.4 GTDisplay,serif}
.music-toggle{right:20px;bottom:20px;width:60px;height:60px;background:var(--crimson);box-shadow:none;visibility:hidden;opacity:0;transition:opacity .3s}
body.invitation-open .music-toggle{visibility:visible;opacity:1}
.flower-layer{position:absolute;inset:0;pointer-events:none;z-index:4}
.flower{position:absolute;max-width:none;height:auto;transform-origin:center;will-change:transform,opacity}
.intro{position:absolute;left:0;top:0;width:100%;height:850px;min-height:0;background:transparent;overflow:hidden;transition:none}
.envelope-art{background:transparent;overflow:visible}
.envelope-piece{opacity:1;filter:none;height:auto;object-fit:fill;transition:transform 1.5s linear 2.5s}
/* Asset names are legacy: top is the lower triangle, bottom the upper flap. */
.envelope-top{top:271px;left:calc(50% - 505px);width:1011px;transform:none}
.envelope-bottom{top:-6px;bottom:auto;left:calc(50% - 506px);width:1012px;transform:none}
.envelope-left{left:calc(50% - 502px);top:-13px;width:467px;transition-duration:2s}
.envelope-right{right:auto;left:calc(50% + 35px);top:-13px;width:467px;transition-duration:2s}
.open-invitation{inset:auto;top:288px;left:calc(50% - 85px);width:170px;height:211px;padding:0;display:block;font:20px/31px GTDisplay,serif;letter-spacing:0;transition:none;overflow:visible}
.open-invitation::before{display:none}.seal{position:absolute;top:0;left:0;display:block;width:170px;height:170px;filter:none;transition:opacity 1.5s linear 1s,transform 1.5s linear 1s}
.open-invitation:hover .seal{transform:none}#openLabel{display:block;position:absolute;top:180px;left:-20px;width:210px;transition:opacity 1.5s linear}
.intro.is-opening .envelope-art,.intro.is-opening .open-invitation{opacity:1}
.intro.is-opening .seal{opacity:0;transform:scale(1.22)}.intro.is-opening #openLabel{opacity:0}
.intro.is-opening .envelope-top{transform:translateY(566px)}.intro.is-opening .envelope-bottom{transform:translateY(-430px)}
.intro.is-opening .envelope-left{transform:translateX(-560px)}.intro.is-opening .envelope-right{transform:translateX(559px)}
.intro.is-open{visibility:hidden;opacity:0}
/* Preserve the paper until its four local images finish loading. */
.intro:not(.is-opening){background:#fffaf8}
.motion-reveal{opacity:0;transform:translateY(40px);transition:opacity 2s ease,transform 2s ease}
.motion-reveal.is-visible{opacity:1;transform:none}
.motion-left{transform:translateX(-40px)}.motion-right{transform:translateX(40px)}
.flower.motion-reveal{transform:scale(.3);transition-duration:var(--duration,2.3s)}
.flower.is-visible{transform:scale(1)}
.hero-copy{opacity:0!important;transform:translateY(30px)!important;transition:opacity 2s ease,transform 2s ease!important}
body.invitation-open .hero-copy{opacity:1!important;transform:none!important}
@media(min-width:981px){.intro{display:none}.music-toggle{visibility:visible;opacity:1}}
@media(max-width:360px){.script-heading{font-size:36px}.dress-copy-one{left:calc(50% + 5px);width:145px}.dress-copy-two{left:12px;width:145px}.details{height:708px}.details #giftCopy{margin-top:30px}}
@media(max-width:360px){.rsvp-button{top:178px}.signoff{top:280px}.closing-names{top:341px}.footer-photo,.rsvp-section::after{top:376px}.rsvp-section{height:971px}}
@media(prefers-reduced-motion:reduce){.motion-reveal,.hero-copy{opacity:1!important;transform:none!important;transition:none!important}.envelope-piece,.seal,#openLabel{transition:none!important}.rsvp-button::after{animation:none}}
