:root{--ease-luxury:cubic-bezier(.22,1,.36,1);--gold:#b6a47c}
/* A paper gate opens onto the photograph. */
.envelope{background:transparent;overflow:hidden;isolation:isolate;transition:visibility 0s 1.75s,opacity .25s 1.5s;perspective:1600px}
.paper-wing{position:absolute;inset:0;width:50.1%;z-index:-1;background-color:#35452e;background-image:linear-gradient(120deg,#ffffff06,transparent 45%,#00000012),repeating-linear-gradient(0deg,#ffffff02 0 1px,transparent 1px 4px);transition:transform 1.6s cubic-bezier(.76,0,.24,1),filter 1.6s;backface-visibility:hidden}
.wing-left{right:auto;transform-origin:left;background-color:#425338;border-right:1px solid #b6a47c66;box-shadow:8px 0 35px #17241722}.wing-right{left:auto;transform-origin:right}
.paper-wing:after{content:'';position:absolute;inset:20px;border:1px solid #b6a47c55;pointer-events:none}.wing-left:after{right:0;border-right:0}.wing-right:after{left:0;border-left:0}
.envelope.opened{opacity:0;visibility:hidden}.envelope.opened .wing-left{transform:translateX(-100%) rotateY(-12deg);filter:brightness(.8)}.envelope.opened .wing-right{transform:translateX(100%) rotateY(12deg);filter:brightness(.8)}
.envelope-monogram{position:absolute;bottom:30px;font:22px 'Playfair Display',serif;color:#e3d8be;letter-spacing:8px;opacity:.65;transition:opacity .35s}.envelope.opened .envelope-monogram{opacity:0}
.invitation{z-index:2;background:linear-gradient(135deg,#fffef8,#f3f0e5);border-color:#b6a47c88;box-shadow:0 25px 90px #13200d66;animation:card-arrive 1.3s var(--ease-luxury) both;transition:transform .7s cubic-bezier(.55,0,.2,1),opacity .5s;transform-origin:50% 65%}
.invitation:before{border-color:#b6a47c55;inset:12px}.invitation:after{content:'';position:absolute;inset:18px;border:1px solid #b6a47c26;pointer-events:none}.envelope.opened .invitation{animation:none;transform:translateY(25px) scale(.94);opacity:0;pointer-events:none}
.invitation .lotus{animation:lotus-breathe 6s ease-in-out infinite}.invitation .lotus img{filter:sepia(.2)}.invitation h1{letter-spacing:-1px}.invitation .rule{background:var(--gold);animation:rule-arrive 1.5s .4s var(--ease-luxury) both}
.invitation .button{background:var(--moss);border-color:#b6a47c77;position:relative;overflow:hidden;box-shadow:0 6px 20px #46543b22}.invitation .button:after{content:'';position:absolute;inset:-100%;background:linear-gradient(110deg,transparent 40%,#ffffff26 50%,transparent 60%);transform:translateX(-100%);animation:seal-shine 7s ease-in-out infinite}
/* The photograph settles while each line rises through its own mask. */
.hero{overflow:hidden}.hero picture{transform:scale(1.045)}.invitation-open .hero picture{animation:hero-settle 11s .35s var(--ease-luxury) both}.hero picture img{transform:translateY(var(--image-drift,0px)) scale(1.035)}
.hero-text>.eyebrow,.hero-text>p,.hero-text>.hero-link{opacity:0;transform:translateY(18px)}.invitation-open .hero-text>.eyebrow,.invitation-open .hero-text>p,.invitation-open .hero-text>.hero-link{animation:fade-rise 1.4s var(--ease-luxury) both}
.invitation-open .hero-text>.eyebrow{animation-delay:1s}.invitation-open .hero-text>p{animation-delay:1.65s}.invitation-open .hero-text>.hero-link{animation-delay:1.85s}
.title-line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.14em}.title-line>span{display:block;transform:translateY(115%);opacity:0}.invitation-open .title-line>span{animation:title-unveil 1.65s 1.15s var(--ease-luxury) both}.invitation-open .title-line:nth-child(2)>span{animation-delay:1.35s}
.hero-filigree{position:absolute;top:40px;right:7%;width:90px;height:65px;opacity:0}.hero-filigree img{filter:brightness(0) invert(1);opacity:.6}.invitation-open .hero-filigree{animation:fade-rise 1.8s 1.6s var(--ease-luxury) both}
.hero-shade{background:linear-gradient(0deg,#152411df,transparent 90%)}.side-note{color:#e3d8be}.hero-link{transition:color .3s,letter-spacing .4s}.hero-link:hover{color:#e3d8be;letter-spacing:1.3px}
/* Reveal once, then let content remain stable. */
.reveal{opacity:0;transform:translateY(28px);transition:opacity 1.15s ease,transform 1.4s var(--ease-luxury)}.reveal.is-visible{opacity:1;transform:translateY(0)}
.welcome .reveal:nth-child(2){transition-delay:.12s}.welcome .reveal:nth-child(3){transition-delay:.22s}.welcome .reveal:nth-child(4){transition-delay:.3s}.family-grid article:nth-child(2),.event:nth-child(2){transition-delay:.18s}.gallery button:nth-child(3n+2){transition-delay:.1s}.gallery button:nth-child(3n){transition-delay:.2s}
.section-heading:after{content:'';display:block;width:58px;height:1px;margin:30px auto 0;background:var(--gold);transform:scaleX(0);transition:transform 1.3s .2s var(--ease-luxury)}.section-heading.is-visible:after{transform:scaleX(1)}
.portrait{position:relative;outline:1px solid #b6a47c55;outline-offset:8px}.portrait img{transform:scale(1.06);transition:transform 2s var(--ease-luxury)}.is-visible .portrait img{transform:scale(1)}.portrait:hover img{transform:scale(1.035)}
.photo-interlude{overflow:hidden}.photo-interlude>img{transform:translateY(var(--image-drift,0px)) scale(1.13)}.photo-interlude>div{max-width:85%}.photo-interlude:before{content:'';position:absolute;inset:20px;border:1px solid #e3d8be55;z-index:1;pointer-events:none}
.event{background:linear-gradient(145deg,#fffdf733,#e5e8da33);border-color:#b6a47c66;transition:opacity 1.15s,transform 1.4s var(--ease-luxury),box-shadow .5s,border-color .5s}.event:before,.event:after{content:'';position:absolute;width:18px;height:18px;border-color:var(--gold);border-style:solid;pointer-events:none}.event:before{top:8px;left:8px;border-width:1px 0 0 1px}.event:after{bottom:8px;right:8px;border-width:0 1px 1px 0}.event:hover{box-shadow:0 20px 60px #46543b0d;border-color:var(--gold)}
.gallery button{position:relative}.gallery img{transition:transform 1.2s var(--ease-luxury),filter .8s}.gallery button:hover img{transform:scale(1.045);filter:brightness(1.03)}.gallery button:after{content:'↗';position:absolute;right:15px;bottom:15px;width:34px;height:34px;line-height:34px;border:1px solid #e3d8be88;background:#f7f5eee8;color:var(--moss);border-radius:50%;opacity:0;transform:translateY(8px);transition:opacity .4s,transform .5s var(--ease-luxury)}.gallery button:hover:after,.gallery button:focus-visible:after{opacity:1;transform:translateY(0)}
.navigation{transition:box-shadow .5s,background .5s}.navigation.scrolled{box-shadow:0 4px 25px #28351a0d;background:#f7f5eef7}.navigation nav a{position:relative}.navigation nav a:after{content:'';position:absolute;left:0;right:0;bottom:-6px;height:1px;background:var(--gold);transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ease-luxury)}.navigation nav a:hover:after{transform:scaleX(1)}.button{transition:transform .4s var(--ease-luxury),background .3s,box-shadow .4s}.button:hover{transform:translateY(-2px);box-shadow:0 8px 24px #24351a20}.button:active{transform:translateY(0)}
.reading-progress{position:fixed;top:0;left:0;width:100%;height:2px;background:var(--gold);transform:scaleX(0);transform-origin:left;z-index:20;pointer-events:none}
dialog[open]{animation:lightbox-open .45s ease both}#lightbox-image{opacity:0;transform:scale(.96);transition:opacity .45s,transform .75s var(--ease-luxury)}#lightbox-image.photo-enter{opacity:1;transform:scale(1)}
@keyframes card-arrive{from{opacity:0;transform:translateY(30px) scale(.97)}to{opacity:1;transform:none}}
@keyframes lotus-breathe{50%{transform:translateY(-3px)}}
@keyframes rule-arrive{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes seal-shine{0%,75%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
@keyframes hero-settle{from{transform:scale(1.08)}to{transform:scale(1)}}
@keyframes title-unveil{to{opacity:1;transform:translateY(0)}}
@keyframes fade-rise{to{opacity:1;transform:translateY(0)}}
@keyframes lightbox-open{from{opacity:0}to{opacity:1}}
@media(max-width:759px){.hero-filigree{top:28px;right:22px;width:65px}.paper-wing:after{inset:12px}.wing-left:after{right:0}.wing-right:after{left:0}.photo-interlude:before{inset:12px}.family-grid article:nth-child(2),.event:nth-child(2){transition-delay:0s}}
@media(prefers-reduced-motion:reduce){.envelope{transition:none}.hero-text>.eyebrow,.hero-text>p,.hero-text>.hero-link,.title-line>span,.hero-filigree,.reveal,#lightbox-image{opacity:1;transform:none}.hero picture,.hero picture img,.photo-interlude>img,.portrait img{transform:none}.section-heading:after{transform:scaleX(1)}.envelope.opened .paper-wing{transform:none}.reading-progress{display:none}*,*:before,*:after{animation:none!important;transition:none!important}}
