/* Motion direction: slow photographs, precise type, short tactile responses. */
/* Both source photos include a full backdrop; these responsive silhouettes hide it without altering their texture. */
:root{--ease-out:cubic-bezier(.16,1,.3,1)}
/* Hide pointer/touch focus rings while preserving deliberate keyboard focus. */
:focus:not(:focus-visible){outline:none!important}
button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}
.nav{top:calc(16px + env(safe-area-inset-top));right:calc(18px + env(safe-area-inset-right));left:auto;width:max-content;max-width:calc(100vw - 36px);justify-content:flex-end;padding:10px 4px 10px 10px;border:0;border-radius:0;background:transparent;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}
.nav__right{gap:clamp(12px,2vw,24px);margin-right:0}
.nav__link{color:var(--ink);font-size:10px;font-weight:600;letter-spacing:.12em;text-shadow:0 0 2px rgba(255,251,246,.98),0 0 9px rgba(255,251,246,.88),0 1px 3px rgba(41,33,28,.58);white-space:nowrap}
.hero__visual{animation:photo-unveil 1.65s var(--ease-out) both}
.hero__paper:after{animation:frame-unveil 2s .15s var(--ease-out) both}
.hero__scroll span{transform-origin:center;animation:line-unveil 1.4s .6s var(--ease-out) both}
.photo-window{overflow:hidden;position:relative}
.motion-ready .story__image.reveal:not(.is-visible) .photo-window{clip-path:inset(var(--photo-inset-y,10%) var(--photo-inset-x,8%));transition:none}
.is-visible .photo-window{clip-path:inset(0)}
.motion-ready .story__image.reveal:not(.is-visible) figcaption{transform:translateY(var(--caption-y,24px)) rotate(var(--caption-rotation,-5deg));opacity:var(--caption-opacity,0)}
.section-heading h2 .word-mask{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.14em;margin-bottom:-.14em}
.section-heading h2 .word{display:inline-block}
.motion-ready .section-heading.reveal:not(.is-visible) h2 .word{transform:translateY(var(--word-y,135%)) rotate(var(--word-rotation,5deg));transition:none}
.event{transition:border-color .4s,transform 1.25s var(--ease-out),opacity 1s}
.event:before{z-index:0;opacity:.45}
.event>*{position:relative;z-index:1}
.section-icon{display:block;width:44px;height:44px;margin:0 auto 15px;color:var(--rose);opacity:.48}
.event>.event__icon{position:absolute;z-index:0;right:14px;bottom:11px;width:clamp(112px,13vw,154px);height:auto;color:var(--rose);opacity:.19;pointer-events:none}
.event>.event__icon--celebration{right:9px;bottom:12px;width:clamp(128px,15vw,174px);opacity:.17}
.event:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background:var(--gold);transform:scaleX(var(--reveal-progress,1));transform-origin:left}
.motion-ready .event.reveal{transition:none}
.story,.events{position:relative;overflow:hidden}
.story__grid,.events>.container{position:relative;z-index:1}
.gift{position:relative;overflow:hidden;background:var(--paper)}
.gift>.container{position:relative;z-index:1}
.gift__art{position:absolute;z-index:0;height:auto;pointer-events:none;color:var(--rose);stroke-width:1.15;opacity:.2}
.gift__art--gift{top:8%;left:clamp(14px,calc((100vw - 1180px)/2),110px);width:clamp(135px,17vw,210px);transform:rotate(-7deg);opacity:.3}
.gift__art--lines{right:clamp(0px,3vw,44px);bottom:3%;width:clamp(240px,30vw,360px);transform:rotate(-5deg);opacity:.24}
.gift__intro{margin-bottom:42px}
.gift__intro p{max-width:620px}
.gift__intro p+p{margin-top:10px}
.gift__card{position:relative;max-width:620px;margin-inline:auto;padding:clamp(30px,5vw,52px);border:1px solid rgba(195,165,133,.56);background:var(--cream);text-align:center}
.gift__ornament{display:block;color:var(--rose);font-size:20px;line-height:1}
.gift__label{display:block;margin-top:12px;color:var(--petal-deep);font-size:9px;font-weight:600;letter-spacing:.22em;text-transform:uppercase}
.gift__bank{margin:8px 0 22px;font-family:"Playfair Display",serif;font-size:clamp(32px,4vw,42px);font-weight:400;line-height:1.15}
.gift__details{max-width:440px;margin:0 auto;border-top:1px solid var(--line)}
.gift__details>div{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 0;border-bottom:1px solid var(--line)}
.gift__details dt{color:var(--petal-deep);font-size:9px;font-weight:600;letter-spacing:.2em;text-align:left;text-transform:uppercase}
.gift__details dd{margin:0;font-family:"Playfair Display",serif;font-size:17px;text-align:right}
.gift__account{font-variant-numeric:tabular-nums;letter-spacing:.045em;white-space:nowrap}
.gift__copy{min-width:175px;margin-top:26px}
.gift__copy.is-copied{background:#754b51}
.gift__copy:focus-visible{outline:2px solid var(--petal-deep);outline-offset:3px}
.gift__feedback{display:block;min-height:1.5em;margin-top:10px;color:var(--muted);font-size:11px;line-height:1.5}
.gift__trigger{display:flex;flex-direction:column;align-items:center;gap:10px;margin:34px auto 0;padding:0;border:0;background:transparent;color:var(--petal-deep);font-size:9px;font-weight:600;letter-spacing:.17em;text-transform:uppercase;cursor:pointer}
.gift__trigger-icon{display:grid;place-items:center;width:62px;height:62px;border:1px solid rgba(143,98,104,.54);border-radius:50%;color:var(--petal-deep);transition:transform .35s var(--ease-out),background .35s,border-color .35s}
.gift__trigger-icon svg{width:31px;height:31px}
.gift__trigger:hover .gift__trigger-icon{transform:translateY(-3px);border-color:var(--petal-deep);background:rgba(231,201,199,.48)}
.gift__trigger:focus-visible{outline:2px solid var(--petal-deep);outline-offset:6px}
.gift-dialog{position:fixed;inset:0;margin:auto;width:min(calc(100vw - 28px),560px);max-height:min(88dvh,720px);overflow:auto;padding:clamp(20px,4vw,34px);border:1px solid rgba(195,165,133,.62);background:var(--paper);color:var(--ink);box-shadow:0 28px 90px rgba(42,35,32,.26)}
.gift-dialog:not([open]){display:none}
.gift-dialog[open]{animation:dialog-in .4s var(--ease-out) both}
.gift-dialog::backdrop{background:rgba(62,55,51,.54);backdrop-filter:blur(4px)}
.gift-dialog__close{position:absolute;z-index:2;top:12px;right:12px;display:grid;place-items:center;width:36px;height:36px;padding:0;border:0;border-radius:50%;background:transparent;color:rgba(143,98,104,.72);cursor:pointer;transition:color .25s ease,background .25s ease}
.gift-dialog__close svg{display:block;width:15px;height:15px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-width:1.25}
.gift-dialog__close:focus-visible{outline:none!important;box-shadow:none!important;color:var(--petal-deep)}
@media(hover:hover){.gift-dialog__close:hover{background:rgba(231,201,199,.3);color:var(--petal-deep)}}
.gift-dialog .gift__card{padding:clamp(48px,6vw,58px) clamp(28px,5vw,48px) clamp(28px,5vw,48px);background:var(--cream)}
.story__ornament,.events__ornament{position:absolute;z-index:0;pointer-events:none}
.story__ornament{top:8%;left:-84px;width:230px;transform:rotate(18deg);opacity:.15}
.events__ornament{top:15%;right:-66px;width:205px;transform:rotate(198deg);opacity:.12}
.text-link__icon{transition:transform .3s var(--ease-out)}
.text-link:hover .text-link__icon{transform:translate(3px,-3px)}
.button:active{transform:translateY(0) scale(.98)}
.preview-dialog[open]{animation:dialog-in .4s var(--ease-out) both}
.rsvp-dialog{position:fixed;inset:0;margin:auto;width:min(calc(100vw - 28px),560px);height:fit-content;max-height:min(90dvh,760px);overflow:hidden;padding:0;border:1px solid rgba(195,165,133,.5);background:var(--cream);box-shadow:0 28px 90px rgba(42,35,32,.24)}
.rsvp-dialog:not([open]){display:none}
.rsvp-dialog[open]{display:flex;flex-direction:column}
.rsvp-dialog__header{flex:0 0 auto;padding:clamp(25px,5vw,42px) clamp(20px,5vw,42px) 14px}
.rsvp-dialog__form{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 clamp(20px,5vw,42px) clamp(22px,4vw,34px);scrollbar-gutter:stable;scroll-padding-block:24px}
.rsvp-dialog .preview-dialog__close{float:none;position:absolute;top:8px;right:8px;display:grid;place-items:center;width:44px;height:44px;padding:0;color:var(--petal-deep);cursor:pointer}
.rsvp-dialog .preview-dialog__close:focus-visible{outline:none!important;box-shadow:none!important;color:var(--ink)}
.rsvp-dialog__header .kicker{display:block;padding-right:36px}
.rsvp-dialog h2{font-size:clamp(31px,7vw,43px);margin:13px 0 8px}
.rsvp-dialog__intro{margin:0}
.rsvp-choice{min-width:0;margin:0;padding:0;border:0}
.rsvp-choice legend{margin-bottom:12px;color:var(--petal-deep);font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}
.rsvp-choice__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.rsvp-dialog .rsvp-option{position:relative;display:block;margin:0;cursor:pointer;letter-spacing:normal;text-transform:none}
.rsvp-option input{position:absolute;width:1px!important;height:1px!important;min-height:0!important;padding:0!important;opacity:0}
.rsvp-option__face{display:flex;flex-direction:column;justify-content:center;min-height:98px;padding:16px;border:1px solid rgba(143,98,104,.28);background:rgba(255,255,255,.38);transition:background .3s,border-color .3s,box-shadow .3s,transform .3s var(--ease-out)}
.rsvp-option__face strong{color:var(--ink);font-family:"Playfair Display",serif;font-size:20px;font-weight:400;line-height:1.2}
.rsvp-option__face small{margin-top:8px;color:var(--muted);font-size:11px;font-weight:400;line-height:1.35}
.rsvp-option input:checked+.rsvp-option__face{border-color:var(--petal-deep);background:#f1e2e0;box-shadow:inset 0 0 0 1px var(--petal-deep)}
.rsvp-option input:focus-visible+.rsvp-option__face{outline:2px solid var(--petal-deep);outline-offset:3px}
@media(hover:hover){.rsvp-option:hover .rsvp-option__face{transform:translateY(-2px);border-color:var(--petal-deep)}}
.rsvp-response{margin-top:17px;animation:rsvp-reveal .5s var(--ease-out) both}
.rsvp-response[hidden],.rsvp-submit[hidden]{display:none}
.rsvp-response p{margin:0 0 12px}
.rsvp-dialog .rsvp-name-row label,.rsvp-dialog #rsvp-no label{margin:16px 0 7px}
#rsvp-names{display:grid;gap:5px}
.rsvp-name-row{min-width:0}
.rsvp-name-row__control{display:flex;align-items:stretch}
.rsvp-dialog input[type="text"]{font:inherit;font-size:16px;outline-color:var(--petal-deep)}
.rsvp-dialog input[type="text"]:focus-visible{outline:0;border-color:var(--petal-deep);box-shadow:none}
.rsvp-name-row__control input{min-width:0;flex:1}
.rsvp-remove{flex:0 0 48px;min-height:48px;border:1px solid var(--line);border-left:0;background:var(--cream);color:var(--petal-deep);font-size:24px;cursor:pointer}
.rsvp-remove:hover,.rsvp-add:hover{color:var(--ink);background:var(--paper)}
.rsvp-add{display:inline-flex;align-items:center;gap:10px;min-height:44px;margin-top:15px;padding:6px 10px;border:0;background:transparent;color:var(--petal-deep);font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;cursor:pointer}
.rsvp-add[hidden]{display:none}
.rsvp-add span{font-family:"Playfair Display",serif;font-size:25px;font-weight:400;line-height:1}
.rsvp-submit{position:sticky;bottom:0;z-index:2;width:100%;margin-top:20px;box-shadow:0 -9px 16px rgba(255,251,246,.82);cursor:pointer}
@keyframes rsvp-reveal{from{opacity:0;transform:translateY(-13px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:410px){.rsvp-dialog{width:calc(100vw - 24px);max-height:calc(100dvh - 24px)}.rsvp-dialog__header{padding:27px 18px 12px}.rsvp-dialog__form{padding:0 18px 24px}.rsvp-choice__grid{gap:8px}.rsvp-option__face{min-height:105px;padding:12px}.rsvp-option__face strong{font-size:18px}.gift-dialog{width:calc(100vw - 24px);max-height:calc(100dvh - 24px);padding:17px}.gift-dialog .gift__card{padding:48px 18px 24px}}
.music-control{position:fixed;z-index:40;right:auto;left:calc(18px + env(safe-area-inset-left));bottom:calc(18px + env(safe-area-inset-bottom));display:grid;place-items:center;width:48px;height:44px;padding:0;border:0;border-radius:0;background:transparent;color:rgba(143,98,104,.78);box-shadow:none;cursor:pointer;opacity:.72;transition:color .35s ease,opacity .35s ease,transform .25s ease}
.music-control:hover,.music-control:focus-visible{color:var(--petal-deep);opacity:1}
.music-control:active{transform:scale(.96)}
.music-control:focus-visible{outline:1px solid rgba(143,98,104,.42);outline-offset:3px}
.music-control__bars{display:flex;align-items:center;justify-content:center;gap:3px;width:34px;height:22px}
.music-control__bar{display:block;width:2px;height:var(--bar-height,6px);border-radius:2px;background:currentColor;opacity:.72;transform:scaleY(.42);transform-origin:center;transition:transform .1s ease-out,opacity .25s ease}
.music-control.is-playing:not(.is-live) .music-control__bar{opacity:.92;animation:music-equalize 1.08s ease-in-out infinite alternate;animation-delay:var(--bar-delay,0s)}
.music-control.is-live .music-control__bar{opacity:.92;transform:scaleY(var(--bar-scale,.42))}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.footer{padding-bottom:calc(50px + env(safe-area-inset-bottom))}
.hero__paper,.hero__visual,.story__grid>*,.events__list>*{min-width:0}
.band{display:grid;justify-items:center;gap:9px;width:100%;min-width:0;padding:clamp(30px,4vw,44px) 20px;background:var(--petal-deep);color:var(--cream);text-align:center}
.band__eyebrow{display:block;color:rgba(255,251,246,.76);font-family:"DM Sans",sans-serif;font-size:9px;font-style:normal;font-weight:500;letter-spacing:.24em;line-height:1.5;text-transform:uppercase}
.band__message{max-width:760px;margin:0;font-family:"Playfair Display",serif;font-size:clamp(19px,2vw,26px);font-style:italic;letter-spacing:.015em;line-height:1.35;text-wrap:balance}
.intro__copy>p,.section-heading>p,.story__text>p:not(.story__quote),.event__time,.gift__intro>p,.rsvp__panel>p{font-family:"Cormorant Garamond",Georgia,serif;font-size:clamp(20px,1.75vw,24px);font-weight:400;letter-spacing:.005em;line-height:1.62}
.footer__names{max-width:100%;text-wrap:balance}
.hero__second{max-width:100%}
@media(min-width:701px) and (max-width:900px){.hero{grid-template-columns:repeat(2,minmax(0,1fr))}}
.progress span{width:100%;transform:scaleX(0);transform-origin:left}
.hero__caption{right:clamp(24px,4vw,56px);bottom:clamp(42px,6vh,72px);display:flex;width:min(440px,calc(100% - 64px));max-width:calc(100% - 64px);flex-direction:column;align-items:flex-end;gap:10px;padding:8px 0;overflow:visible}
.hero__caption-kicker{font-family:"DM Sans",sans-serif;font-size:9px;font-style:normal;letter-spacing:.18em;line-height:1.55;text-align:right;text-transform:uppercase;text-wrap:balance}
.hero__caption-main{max-width:100%;font-size:clamp(20px,2.1vw,30px);line-height:1.2;text-align:right;text-wrap:balance}
.hero__caption-main em{font-weight:400}
.hero__caption-scroll{display:none}
.opening{position:fixed;inset:0;z-index:120;display:none;place-items:stretch;width:auto;height:auto;min-width:0;min-height:0;max-width:none;max-height:none;box-sizing:border-box;margin:0;padding:0;border:0;overflow:hidden;background:#f2ecdf;color:var(--ink);opacity:0;transform:none}
.opening[open]{display:grid;opacity:1;animation:opening-arrive .8s var(--ease-out) both}
.opening::backdrop{background:#f2ecdf;transition:background-color .45s var(--ease-out)}
.opening.is-leaving{opacity:0;animation:none;transition-duration:.45s}
.opening.is-leaving::backdrop{background-color:transparent}
.opening__scene{position:relative;isolation:isolate;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;min-width:0;min-height:100%;box-sizing:border-box;margin-inline:0;padding:54px 24px 38px;text-align:center;background:radial-gradient(ellipse at 50% 50%,rgba(255,251,246,.5),transparent 56%),radial-gradient(ellipse at 8% 8%,rgba(231,201,199,.08),transparent 38%),#f2ecdf}
.opening__scene:before{position:absolute;z-index:0;inset:-18%;background:radial-gradient(ellipse at 34% 43%,rgba(255,255,255,.78) 0%,rgba(255,255,255,.28) 23%,transparent 43%),radial-gradient(ellipse at 69% 59%,rgba(231,201,199,.34) 0%,rgba(231,201,199,.12) 24%,transparent 44%),radial-gradient(ellipse at 56% 20%,rgba(255,251,246,.42),transparent 33%);content:"";opacity:.76;filter:blur(12px);pointer-events:none;transform:translate3d(-3%,-1%,0) scale(1.02);animation:opening-radial-drift 20s ease-in-out infinite}
.opening__particles{position:absolute;z-index:0;inset:0;overflow:hidden;pointer-events:none}
.opening__particle{position:absolute;width:2px;height:2px;border-radius:50%;background:var(--gold);box-shadow:0 0 4px rgba(195,165,133,.28);opacity:.16;animation:pixel-flicker 6.8s ease-in-out infinite}
.opening__particle--small{width:1px;height:1px;box-shadow:0 0 3px rgba(195,165,133,.22)}
.opening__particle--rose{background:var(--rose);box-shadow:0 0 4px rgba(185,124,131,.24)}
.opening__particle:nth-child(1){top:20%;left:19%;animation-delay:-2.1s}
.opening__particle:nth-child(2){top:27%;right:21%;animation-delay:-.8s}
.opening__particle:nth-child(3){top:42%;left:12%;animation-delay:-4.4s}
.opening__particle:nth-child(4){top:48%;right:13%;animation-delay:-1.7s}
.opening__particle:nth-child(5){bottom:31%;left:22%;animation-delay:-3.6s}
.opening__particle:nth-child(6){right:18%;bottom:27%;animation-delay:-2.8s}
.opening__particle:nth-child(7){top:67%;left:10%;animation-delay:-5.2s}
.opening__particle:nth-child(8){right:11%;bottom:48%;animation-delay:-.3s}
.opening__particle:nth-child(9){top:15%;right:34%;animation-delay:-3.1s}
.opening__eyebrow,.opening__title,.envelope,.opening__hint{position:relative;z-index:1}
.opening__eyebrow{margin:0 0 16px;color:var(--petal-deep);font-size:9px;font-weight:600;letter-spacing:.27em;text-transform:uppercase}
.opening__title{margin:0 0 32px;font-family:"Playfair Display",serif;font-size:clamp(31px,4vw,46px);font-weight:400;line-height:1.16;letter-spacing:-.035em}
.opening__title em{color:var(--petal);font-weight:400}
.envelope{position:relative;width:min(560px,100%);min-width:0;margin-inline:auto;aspect-ratio:1.5;perspective:1200px;transform-style:preserve-3d;filter:drop-shadow(0 24px 32px rgba(54,48,39,.18))}
.envelope__body{position:absolute;z-index:1;inset:0;display:block;width:100%;height:100%;object-fit:fill}
.envelope__flap{position:absolute;z-index:3;inset:0;transform:rotateX(0deg);transform-origin:50% 19.2%;backface-visibility:visible;transform-style:preserve-3d;transition:transform 1.55s cubic-bezier(.22,.72,.22,1)}
.envelope__flap img{display:block;width:100%;height:100%;object-fit:fill;backface-visibility:visible}
.envelope__seal{position:absolute;z-index:4;top:65.5%;left:50%;display:grid;place-items:center;width:56px;height:56px;padding:0;border:0;border-radius:50%;background:transparent;color:#fff8f1;font-family:"Playfair Display",serif;font-size:9px;letter-spacing:.01em;text-shadow:0 1px 2px rgba(71,39,38,.65);transform:translate(-50%,-50%);filter:drop-shadow(0 2px 3px rgba(68,41,39,.2))}
.envelope__seal:after{position:absolute;inset:5%;border-radius:50%;background:linear-gradient(128deg,transparent 46%,rgba(80,43,43,.72) 47% 48%,transparent 49%),linear-gradient(67deg,transparent 56%,rgba(80,43,43,.64) 57% 58%,transparent 59%);content:"";opacity:0;pointer-events:none}
.envelope__seal-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.envelope__seal-mark{position:relative;z-index:1;color:#fff8f1;font-size:9px;text-shadow:0 1px 2px rgba(71,39,38,.72)}
.envelope__seal-fragment{position:absolute;inset:0;display:block;background:url("../assets/envelope/sello-cera-recortado.webp") center/100% 100% no-repeat;opacity:0;pointer-events:none}
.envelope__seal-fragment--one{clip-path:polygon(0 0,51% 0,46% 42%,20% 57%,0 49%)}
.envelope__seal-fragment--two{clip-path:polygon(51% 0,100% 0,100% 49%,65% 43%,46% 42%)}
.envelope__seal-fragment--three{clip-path:polygon(0 49%,20% 57%,46% 42%,65% 43%,100% 49%,100% 100%,0 100%)}
.envelope__seal:focus-visible{outline:none!important;box-shadow:none!important;filter:brightness(1.12) drop-shadow(0 2px 3px rgba(68,41,39,.2))}
.opening.is-seal-breaking .envelope__seal{pointer-events:none}
.opening.is-seal-breaking .envelope__seal:after{animation:seal-fracture .3s ease-out both}
.opening.is-seal-breaking .envelope__seal-photo{animation:seal-core-break .62s .1s cubic-bezier(.3,.75,.35,1) both}
.opening.is-seal-breaking .envelope__seal-mark{animation:seal-mark-fade .22s .12s ease both}
.opening.is-seal-breaking .envelope__seal-fragment--one{animation:seal-fragment-one .72s .2s cubic-bezier(.2,.8,.25,1) both}
.opening.is-seal-breaking .envelope__seal-fragment--two{animation:seal-fragment-two .72s .2s cubic-bezier(.2,.8,.25,1) both}
.opening.is-seal-breaking .envelope__seal-fragment--three{animation:seal-fragment-three .72s .2s cubic-bezier(.2,.8,.25,1) both}
.opening.is-flap-opening .envelope__flap{transform:rotateX(-172deg)}
.opening__hint{margin:22px 0 0;color:var(--muted);font-family:"Playfair Display",serif;font-size:14px;font-style:italic;transition:opacity .3s}
.opening.is-opening .opening__hint{opacity:0}
.opening.is-preview-rising .opening__eyebrow,.opening.is-preview-rising .opening__title,.opening.is-preview-rising .opening__hint{opacity:0;transform:translateY(-9px);transition:opacity .55s ease,transform .7s var(--ease-out)}
.opening__handoff-clip{position:fixed;z-index:8;inset:0;overflow:hidden;clip-path:inset(0 0 var(--handoff-clip-bottom,0px) 0);pointer-events:none}
.opening__handoff{position:absolute;inset:0;display:grid;place-items:center;overflow:hidden;border-radius:18px;opacity:0;pointer-events:none;transform-origin:center center;will-change:transform,opacity,border-radius;transition:opacity .35s ease}
.opening__pocket-mask{position:fixed;z-index:9;inset:0;opacity:0;pointer-events:none;transition:opacity .45s var(--ease-out)}
.opening__pocket-mask img{position:absolute;top:var(--envelope-top,0px);left:var(--envelope-left,0px);display:block;width:var(--envelope-width,0px);height:var(--envelope-height,0px);object-fit:fill}
.opening.has-preview.is-flap-opening .opening__pocket-mask{opacity:1;transition-duration:0s}
.opening.has-preview.is-handing-off .opening__pocket-mask{opacity:0;transition-duration:.45s}
.opening.is-flap-opening .opening__handoff{opacity:1}
.opening__handoff .hero{width:100vw;height:100svh;min-height:100svh}
.opening__handoff .hero__visual{animation:none!important;clip-path:none!important;opacity:1!important;transform:none!important}
.opening__handoff .hero__visual img{transform:scale(1.025)!important}
.opening__handoff .hero__paper:after{animation:none!important;clip-path:none!important;opacity:1}
.opening__handoff .hero__copy>*{animation:none!important}
.opening__handoff .hero__flower-a,.opening__handoff .hero__flower-b{animation:none!important;clip-path:none}
.opening.is-handing-off .opening__scene{opacity:0;pointer-events:none;transition:opacity .55s var(--ease-out)}
@keyframes opening-arrive{from{opacity:0}to{opacity:1}}
@keyframes seal-fracture{0%,100%{opacity:0}12%,48%{opacity:.9}70%{opacity:.35}}
@keyframes seal-core-break{0%,34%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.04) rotate(-4deg)}100%{opacity:0;transform:scale(.72) rotate(14deg)}}
@keyframes seal-mark-fade{to{opacity:0;transform:scale(.4) rotate(10deg)}}
@keyframes seal-fragment-one{0%,20%{opacity:0;transform:translate(0,0) rotate(0)}34%{opacity:1}100%{opacity:0;transform:translate(-18px,-19px) rotate(-28deg)}}
@keyframes seal-fragment-two{0%,20%{opacity:0;transform:translate(0,0) rotate(0)}34%{opacity:1}100%{opacity:0;transform:translate(19px,-17px) rotate(33deg)}}
@keyframes seal-fragment-three{0%,20%{opacity:0;transform:translate(0,0) rotate(0)}34%{opacity:1}100%{opacity:0;transform:translate(2px,20px) rotate(-13deg)}}
@keyframes photo-unveil{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0)}}
@keyframes frame-unveil{from{opacity:0;clip-path:inset(0 100% 0 0)}to{opacity:1;clip-path:inset(0)}}
@keyframes line-unveil{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes dialog-in{from{opacity:0;transform:translateY(18px) scale(.98)}to{opacity:1;transform:none}}
@keyframes music-equalize{from{transform:scaleY(.24)}to{transform:scaleY(1.18)}}
@keyframes arrow-float{0%,100%{transform:translateY(-2px)}50%{transform:translateY(3px)}}
@keyframes pixel-flicker{0%,100%{opacity:.1;transform:scale(.8)}42%{opacity:.42;transform:scale(1.18)}53%{opacity:.2;transform:scale(.92)}}
@keyframes opening-radial-drift{0%,100%{transform:translate3d(-3%,-1%,0) scale(1.02)}25%{transform:translate3d(0,2%,0) scale(1.05)}50%{transform:translate3d(3%,-1%,0) scale(1.03)}75%{transform:translate3d(0,-3%,0) scale(1.06)}}
@media(max-width:700px){
  .story__grid,.events__list{grid-template-columns:minmax(0,1fr)}
  .countdown__grid{grid-template-columns:repeat(4,minmax(0,1fr))}
  .event:before{width:148px;height:148px;right:-84px;top:-128px;opacity:.38}
  .section-icon{width:40px;height:40px;margin-bottom:12px}
  .event>.event__icon{right:8px;bottom:8px;width:112px;opacity:.18}
  .event>.event__icon--celebration{right:4px;bottom:8px;width:136px;opacity:.16}
  .opening__scene{padding:calc(38px + env(safe-area-inset-top)) 22px calc(25px + env(safe-area-inset-bottom))}
  .opening__title{margin-bottom:28px;font-size:clamp(30px,8vw,39px)}
  .envelope{width:min(560px,100%)}
  .envelope__seal{width:56px;height:56px}
  .opening__hint{margin-top:19px;font-size:13px}
  .gift__details>div{gap:12px}
  .gift__details dd{font-size:16px}
  .gift__account{font-size:14px!important;letter-spacing:.015em}
  .gift__art--gift{top:2%;right:-4px;left:auto;width:clamp(132px,37vw,156px);opacity:.28}
  .gift__art--lines{right:-18px;bottom:1%;width:clamp(240px,66vw,280px);opacity:.22}
  .hero{padding-top:0}
  .hero__paper{padding:35px 24px 31px;min-height:100svh}
  .hero__visual{height:100svh;min-height:100svh;max-height:none;flex:0 0 100svh;animation:none;transition:none}
  .hero__visual:after{background:linear-gradient(180deg,rgba(62,49,43,.02) 37%,rgba(62,49,43,.66) 100%)}
  .hero__visual img{object-position:center 47%}
  .hero__caption{right:0;left:0;bottom:0;width:auto;max-width:100%;align-items:center;gap:12px;padding:30px 24px calc(34px + env(safe-area-inset-bottom));text-align:center}
  .hero__caption-kicker{font-size:9px;letter-spacing:.2em}
  .hero__caption-main{font-size:clamp(27px,8vw,38px);line-height:1.12;text-align:center}
  .hero__caption-scroll{display:inline-flex;align-items:center;gap:10px;margin-top:5px;font-size:9px;letter-spacing:.17em;text-transform:uppercase}
  .hero__caption-scroll span{display:grid;place-items:center;width:25px;height:25px;border:1px solid rgba(255,251,246,.78);border-radius:50%;font-size:14px;animation:arrow-float 1.8s ease-in-out infinite}
}
@media(max-width:380px){.hero__paper{min-height:100svh}.hero h1{font-size:clamp(47px,14vw,55px)}.countdown__unit{min-width:0;padding-inline:2px}.countdown__value{font-size:clamp(34px,10vw,41px)}}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .motion-ready .reveal:not(.is-visible){opacity:1;transform:none;filter:none}
  .motion-ready .hero__visual:not(.is-visible){opacity:1;transform:none;clip-path:none}
  .motion-ready .photo-window{clip-path:none}
  .motion-ready .section-heading:not(.is-visible) h2 .word{transform:none}
  .motion-ready .story__image:not(.is-visible) figcaption{opacity:1;transform:none}
  [data-parallax]{transform:none!important}
  .hero__flower-a,.hero__flower-b{clip-path:none}
  .opening,.opening *{animation:none!important;transition:none!important;scroll-behavior:auto}
}

/* Ornaments stay visibly present while remaining softer than the content. */
.botanical{opacity:.74}
.hero__flower-a,.hero__flower-b{opacity:.68}
.intro__flower{opacity:.52}
.rsvp__flower-a,.rsvp__flower-b{opacity:.56}
.story__ornament{opacity:.28}
.events__ornament{opacity:.25}
.event:before{opacity:.55}
.section-icon{opacity:.66}
.event>.event__icon{opacity:.29}
.event>.event__icon--celebration{opacity:.27}
.gift__art--gift{opacity:.39}
.gift__art--lines{opacity:.32}
@media(max-width:900px){.hero__flower-a,.hero__flower-b{opacity:.52}}
@media(max-width:700px){
  .hero__flower-a,.hero__flower-b{opacity:.54}
  .intro__flower{opacity:.5}
  .rsvp__flower-a,.rsvp__flower-b{opacity:.54}
  .event:before{opacity:.48}
  .event>.event__icon{opacity:.27}
  .event>.event__icon--celebration{opacity:.25}
  .gift__art--gift{opacity:.35}
  .gift__art--lines{opacity:.29}
}

/* Editorial countdown hierarchy: days first, then a fine HH:MM:SS line. */
.countdown__grid{display:grid;grid-template-columns:1fr;justify-items:center;gap:0;max-width:700px;margin:32px auto 0}
.countdown__days{display:grid;justify-items:center;padding:10px 0 18px}
.countdown__days .countdown__value{font-family:"Cormorant Garamond","Playfair Display",serif;font-size:clamp(88px,10vw,132px);font-weight:400;line-height:.78;letter-spacing:-.055em;color:var(--petal-deep)}
.countdown__days .countdown__label{margin-top:16px;color:var(--rose);font-size:10px;letter-spacing:.32em}
.countdown__clock{display:flex;align-items:flex-start;justify-content:center;gap:clamp(12px,3vw,30px);width:min(100%,500px);padding:20px 24px 16px;border-top:1px solid rgba(195,165,133,.56);border-bottom:1px solid rgba(195,165,133,.34)}
.countdown__clock .countdown__unit{display:grid;justify-items:center;min-width:70px;padding:0;border:0;text-align:center}
.countdown__clock .countdown__value{color:var(--ink);font-family:"Playfair Display",serif;font-size:clamp(24px,3vw,34px);font-weight:400;line-height:1;font-variant-numeric:tabular-nums}
.countdown__clock .countdown__label{margin-top:8px;color:var(--accent-text);font-size:9px;letter-spacing:.15em}
.countdown__separator{padding-top:1px;color:var(--gold);font-family:"Cormorant Garamond",serif;font-size:29px;line-height:1}
.countdown__date{margin:19px 0 0;color:var(--petal-deep);font-size:9px;font-weight:500;letter-spacing:.2em;text-align:center;text-transform:uppercase}
.countdown__value.is-changing{animation:countdown-tick .32s var(--ease-out) both}
@keyframes countdown-tick{from{opacity:.42;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:700px){
  .countdown__grid{margin-top:24px}
  .countdown__days .countdown__value{font-size:clamp(82px,23vw,108px)}
  .countdown__clock{gap:clamp(8px,3vw,18px);width:min(100%,430px);padding:18px 10px 14px}
  .countdown__clock .countdown__unit{min-width:clamp(54px,17vw,66px);padding:0}
  .countdown__clock .countdown__value{font-size:clamp(23px,6.4vw,29px)}
  .countdown__clock .countdown__label{font-size:9px;letter-spacing:.08em}
  .countdown__separator{font-size:24px}
  .countdown__date{font-size:8px;letter-spacing:.14em}
}
@media(prefers-reduced-motion:reduce){.countdown__value.is-changing{animation:none}}
