﻿/* Neelangan v90: original arrival, linen table and dawn lake artwork.
   Layout is normal document flow. Only the decorative layers move. */
#travel[data-finale-scene],#rsvp[data-finale-scene],#countdown[data-finale-scene],#closing[data-finale-scene]{--scene-ink:#244e6b;--scene-muted:#536d76;--scene-gold:#ae8c50;isolation:isolate;overflow-anchor:none}
#travel[data-finale-scene]{padding:76px 30px 78px;background:linear-gradient(180deg,#faf4e8 0%,#f8f4e9 28%,#e5eeeb 68%,#faf4e8 100%);overflow:clip}
#invitation-page #travel[data-finale-scene] .chapter-heading{padding:0 20px 35px;max-width:660px}
#invitation-page #travel[data-finale-scene] .chapter-heading h2{font-size:clamp(37px,4.4vw,54px);color:var(--scene-ink)}
#invitation-page #travel[data-finale-scene] .chapter-heading p{color:var(--scene-muted);font-size:18px;max-width:400px}
#travel[data-finale-scene] .visit-layout{display:grid;grid-template-columns:minmax(0,1.32fr) minmax(0,1fr);gap:55px;align-items:center;max-width:1180px;margin:0 auto}
#travel[data-finale-scene] .venue-note{max-width:none;width:100%;margin:0;transform:none!important;filter:none!important;opacity:1!important;transition:none!important}
#travel[data-finale-scene] .arrival-stage{position:relative;isolation:isolate;width:100%;aspect-ratio:1.35;overflow:clip;margin:0 auto 7px;pointer-events:none}
#travel[data-finale-scene] .arrival-courtyard{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;object-position:center 63%;mask-image:linear-gradient(transparent,#000 12%,#000 77%,transparent 100%);transform-origin:50% 60%;animation:arrival-breath 19s ease-in-out infinite alternate}
#travel[data-finale-scene] .arrival-sunlight{position:absolute;z-index:1;inset:0;background:linear-gradient(125deg,transparent 5%,#fff9dd65 20%,transparent 36%);opacity:.4;animation:arrival-light 13s ease-in-out infinite alternate;pointer-events:none}
#travel[data-finale-scene] .arrival-parasol{position:absolute;z-index:2;bottom:11%;width:32%;transform-origin:50% 94%;opacity:1}
#travel[data-finale-scene] .arrival-parasol-left{left:-2%}
#travel[data-finale-scene] .arrival-parasol-right{right:-6%;bottom:17%;width:25%;transform:scaleX(-1)}
#travel[data-finale-scene] .arrival-parasol img{width:100%;height:auto;display:block;transform-origin:51% 94%;animation:parasol-breeze 8s ease-in-out infinite alternate;filter:drop-shadow(4px 8px 5px #4852541f)}
#travel[data-finale-scene] .arrival-parasol-right img{animation-duration:11s;animation-delay:-4s}
#travel[data-finale-scene][data-finale-scene-revealed="false"] .arrival-parasol{opacity:0}
#travel[data-finale-scene][data-finale-scene-revealed="true"] .arrival-parasol{animation:parasol-arrive 1700ms cubic-bezier(.2,.65,.25,1) both}
#travel[data-finale-scene] .venue-note h3{font:400 clamp(27px,2.8vw,35px)/1.2 var(--font-display);max-width:520px;margin:0 auto 9px;padding:0 20px;overflow-wrap:anywhere;color:var(--scene-ink)}
#travel[data-finale-scene] .venue-note p{font:400 17px/1.5 var(--font-body);max-width:390px;padding:0 18px;margin:0 auto;color:var(--scene-muted)}
#travel[data-finale-scene] .venue-note a{font:400 16px/1.4 var(--font-body);min-height:44px;margin-top:6px;padding:8px 10px;color:var(--scene-ink);text-decoration-color:var(--scene-gold);text-underline-offset:5px}
#travel[data-finale-scene] #guest-guide{position:relative;isolation:isolate;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;width:100%;margin:0;padding:12px 0;max-width:none}
#travel[data-finale-scene] #guest-guide::before{content:'';position:absolute;z-index:-1;inset:-40px -30px;pointer-events:none;background:repeating-linear-gradient(45deg,#77968c16 0 1px,transparent 1px 35px),repeating-linear-gradient(-45deg,#77968c16 0 1px,transparent 1px 35px);mask-image:radial-gradient(ellipse,#000 25%,transparent 74%)}
#travel[data-finale-scene] .guest-note{position:relative;isolation:isolate;display:block;padding:22px 18px 27px;border:1px solid #b8c9c2;border-radius:58px 58px 13px 13px;background:linear-gradient(145deg,#fffdf7,#faf4e8);box-shadow:0 9px 22px #315e5810,0 2px 0 #b8c9c22e,inset 0 1px 0 #fff;text-align:center;min-height:0;filter:none;transform:none!important;opacity:1!important}
#travel[data-finale-scene] .guest-note::before{content:'';position:relative;display:block;inset:auto;z-index:0;width:88px;height:56px;margin:0 auto 12px;border:0;border-image:none;background:url('assets/guest-porcelain-sprig-v93.webp') center/88px 88px no-repeat;pointer-events:none}
#travel[data-finale-scene] .guest-note::after{content:'';position:absolute;inset:6px;z-index:-1;border:1px solid #c5ab7554;border-radius:51px 51px 8px 8px;pointer-events:none}
#travel[data-finale-scene] .guest-note-number{display:none}
/* Live, editable labels sit below the same decorative porcelain sprig. */
#travel[data-finale-scene] .guest-note-copy h3{font:italic 500 26px/1.2 var(--font-display);margin:0 0 11px;color:var(--scene-ink);overflow-wrap:anywhere;text-wrap:balance}
#travel[data-finale-scene] .guest-note-copy p{font:400 17px/1.6 var(--font-body);color:#435e6a;white-space:pre-line;overflow-wrap:anywhere;margin:0 auto;max-width:45ch;text-wrap:pretty}
#travel[data-finale-scene] #guest-guide:empty{display:none}
#travel[data-finale-scene] .visit-layout:has(#guest-guide:empty){grid-template-columns:1fr;max-width:760px}

/* The live invitation sits on linen. The generated seal belongs to the real button. */
#rsvp[data-finale-scene]{padding:144px 30px 170px;background:#f7f0e2;position:relative;overflow:clip;text-align:center}
#rsvp[data-finale-scene]::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(#faf4e8,transparent 12%,transparent 84%,#faf4e8)}
#rsvp[data-finale-scene] .reply-table{position:absolute;inset:0;z-index:-2;display:block;pointer-events:none}
#rsvp[data-finale-scene] .reply-table img{display:block;width:100%;height:100%;object-fit:cover;object-position:center}
#rsvp[data-finale-scene] .reply-window-light{position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(115deg,transparent 8%,#fffce541 31%,transparent 50%);animation:table-light 15s ease-in-out infinite alternate}
#rsvp[data-finale-scene] .reply-copy{position:relative;z-index:2;max-width:560px;margin:0 auto;padding:0;transform:none!important;opacity:1!important;filter:none!important}
#rsvp[data-finale-scene] .reply-copy h2{font:400 clamp(53px,6.4vw,76px)/1.1 var(--font-script);color:var(--scene-ink);margin:0 auto 24px;max-width:560px;text-shadow:0 1px 8px #fff9e5;overflow-wrap:anywhere}
#rsvp[data-finale-scene] .reply-copy>p[data-bind]{font:400 19px/1.6 var(--font-body);color:#35586a;max-width:410px;margin:0 auto 21px;white-space:pre-line;overflow-wrap:anywhere;text-shadow:0 1px 4px #fffbed}
#rsvp[data-finale-scene] #rsvp-button{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;max-width:100%;min-height:44px;margin:0 auto;padding:4px 17px 9px;border:0;border-radius:3px;background:transparent;color:#244e6b;box-shadow:none;font:400 20px/1.35 var(--font-body);text-decoration:underline;text-decoration-color:#aa8d57;text-underline-offset:6px;overflow-wrap:anywhere;cursor:pointer;transition:background-color 180ms ease}
#rsvp[data-finale-scene] #rsvp-button::before{content:"";display:block;width:78px;height:78px;flex:0 0 78px;background:url('assets/finale-wax-seal-v90.webp') center/contain no-repeat;filter:drop-shadow(1px 4px 4px #25425229);transform:rotate(-9deg);transition:transform 300ms cubic-bezier(.2,.65,.25,1)}
#rsvp[data-finale-scene] #rsvp-button:hover{background:#fffaf02e}
#rsvp[data-finale-scene] #rsvp-button:hover::before{transform:rotate(-2deg) translateY(-2px)}
#rsvp[data-finale-scene] #rsvp-button:active::before{transform:rotate(-2deg) scale(.97)}
#rsvp[data-finale-scene] #rsvp-button:focus-visible{outline:2px solid #244e6b;outline-offset:6px}
#rsvp[data-finale-scene][data-finale-scene-revealed="true"] #rsvp-button::before{animation:seal-settle 1400ms cubic-bezier(.16,.7,.2,1) both}
#rsvp[data-finale-scene] #rsvp-note{font:400 13px/1.5 var(--font-body);max-width:355px;margin:19px auto 0;color:#486373;background:#fbf5e6aa;padding:6px 9px;overflow-wrap:anywhere}
#rsvp[data-finale-scene] .calendar-actions,#countdown[data-finale-scene] .calendar-actions{display:flex;position:relative;z-index:2;align-items:center;justify-content:center;gap:10px 25px;flex-wrap:wrap;max-width:600px;margin:25px auto 0;padding:0 12px;color:var(--scene-ink);font:400 15px/1.4 var(--font-body)}
#rsvp[data-finale-scene] .calendar-actions a,#countdown[data-finale-scene] .calendar-actions a{display:inline-flex;align-items:center;min-height:44px;padding:6px 0;text-underline-offset:5px;text-decoration-color:#aa8d57;color:inherit}

/* Independent countdown/closing sections share one continuous lake scene. */
.lake-finale{position:relative;isolation:isolate;overflow:clip;background:#dce7e6}
.lake-finale::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(#faf4e8 0%,#faf4e8b3 11%,#f8f2e841 30%,transparent 54%,#dbe8e72e)}
.lake-finale .finale-lake-background{position:absolute;inset:0;z-index:-2;display:block;width:100%;height:100%;object-fit:cover;object-position:50% 50%;pointer-events:none}
#countdown[data-finale-scene]{padding:95px 24px 55px;text-align:center;background:transparent;overflow:visible}
#countdown[data-finale-scene] h2{margin:0 auto 32px;max-width:650px;font:400 clamp(36px,4.3vw,52px)/1.15 var(--font-display);color:var(--scene-ink)}
#countdown[data-finale-scene] .countdown-grid{width:100%;max-width:620px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 auto 25px;padding:0}
#countdown[data-finale-scene] .countdown-grid>div{position:relative;padding:0 5px;min-width:0}
#countdown[data-finale-scene] .countdown-grid>div+div::before{content:"";position:absolute;left:-6px;top:12%;bottom:15%;width:1px;background:linear-gradient(transparent,#a98b4f70,transparent)}
#countdown[data-finale-scene] .countdown-grid strong{font:400 clamp(32px,8.6vw,70px)/1 var(--font-display);font-variant-numeric:lining-nums tabular-nums;color:var(--scene-ink);text-shadow:0 1px 0 #fffcf4;overflow-wrap:anywhere}
#countdown[data-finale-scene] .countdown-grid span{font:400 16px/1.4 var(--font-body);margin-top:10px;color:#4b6472}
#countdown[data-finale-scene][data-finale-scene-revealed="true"] .countdown-grid{animation:countdown-light 1800ms ease-out both}
#countdown[data-finale-scene] .save-date{font:italic 400 20px/1.4 var(--font-body);color:#39586b;margin:0 auto;max-width:560px;overflow-wrap:anywhere}
#closing[data-finale-scene]{padding:37px 26px 96px;background:transparent;text-align:center;overflow:visible}
#closing[data-finale-scene] h2{position:relative;z-index:2;font:400 clamp(50px,6.4vw,80px)/1.25 var(--font-script);font-style:normal;max-width:800px;margin:0 auto 20px;color:var(--scene-ink);text-shadow:0 1px 12px #fffaf3b8;overflow-wrap:anywhere}
#closing[data-finale-scene] h2 em{font-family:var(--font-display);font-size:.55em;padding:0 9px;color:#a38245}
#closing[data-finale-scene]>p{position:relative;z-index:2;font:400 19px/1.55 var(--font-body);max-width:480px;margin:0 auto 10px;color:#36596d;overflow-wrap:anywhere;text-shadow:0 1px 6px #fffaf2}
#closing[data-finale-scene]>p[data-date]{font-size:17px;font-style:italic;margin-bottom:0}
#closing[data-finale-scene] .farewell-water{position:relative;isolation:isolate;width:min(82vw,600px);max-width:100%;aspect-ratio:1.35;margin:22px auto 0;pointer-events:none}
#closing[data-finale-scene] .farewell-arrival{position:relative;z-index:2;width:100%}
#closing[data-finale-scene] .farewell-vessel{position:relative;width:100%;animation:farewell-rock 9s ease-in-out infinite alternate;transform-origin:50% 94%}
#closing[data-finale-scene] .farewell-boat{display:block;width:100%;height:auto;aspect-ratio:1280/853;object-fit:contain;mask-image:linear-gradient(#000 89%,#000e 94%,transparent 99%)}
#closing[data-finale-scene] .farewell-reflection{position:absolute;z-index:-1;top:94%;left:0;width:100%;height:auto;transform:scaleY(-1);transform-origin:center center;opacity:.28;filter:blur(1.3px);mask-image:linear-gradient(transparent 68%,#0009 90%,#000 100%)}
#closing[data-finale-scene] .farewell-wake{position:absolute;z-index:1;left:3%;right:3%;top:83%;height:10%;border:1px solid #fffcec42;border-radius:50%;box-shadow:0 2px 8px #a5c0c145;animation:farewell-ripple 7s ease-in-out infinite alternate}
#closing[data-finale-scene][data-finale-scene-revealed="false"] .farewell-arrival{opacity:0}
#closing[data-finale-scene][data-finale-scene-revealed="true"] .farewell-arrival{animation:farewell-arrive 2400ms cubic-bezier(.15,.65,.2,1) both}
#closing[data-finale-scene] .quiet-link{position:relative;z-index:3;font:400 15px/1.4 var(--font-body);min-height:44px;padding:10px 14px;color:#244e6b;text-underline-offset:5px;background:#f6f4e84d}
#closing[data-finale-scene] footer{position:relative;z-index:3;font:400 13px/1.5 var(--font-body);margin:24px auto 0;color:#355367;max-width:500px;padding:0 16px}
#closing[data-finale-scene] footer a{color:inherit;text-underline-offset:3px}
#travel[data-finale-scene] a:focus-visible,#rsvp[data-finale-scene] a:focus-visible,#countdown[data-finale-scene] a:focus-visible,#closing[data-finale-scene] a:focus-visible,#closing[data-finale-scene] button:focus-visible{outline:2px solid #244e6b;outline-offset:4px}
/* Runtime only starts and pauses clocks; geometry never follows scroll. */
[data-finale-scene][data-finale-motion="paused"] *,[data-finale-scene][data-finale-motion="paused"] *::before,[data-finale-scene][data-finale-motion="paused"] *::after{animation-play-state:paused!important}
@keyframes arrival-breath{from{transform:scale(1.006)}to{transform:scale(1.025)}}
@keyframes arrival-light{from{opacity:.2;transform:translateX(-3%)}to{opacity:.65;transform:translateX(2%)}}
@keyframes parasol-breeze{from{transform:rotate(-.7deg)}to{transform:rotate(.7deg)}}
@keyframes parasol-arrive{from{opacity:0;translate:0 12px}to{opacity:1;translate:0 0}}
@keyframes table-light{from{opacity:.15;transform:translateX(-3%)}to{opacity:.7;transform:translateX(3%)}}
@keyframes seal-settle{from{opacity:.4;translate:0 -10px;rotate:-8deg}to{opacity:1;translate:0 0;rotate:0deg}}
@keyframes countdown-light{from{opacity:.62;filter:brightness(1.25)}to{opacity:1;filter:brightness(1)}}
@keyframes farewell-arrive{from{opacity:0;transform:translate3d(-25px,8px,0)}to{opacity:1;transform:translate3d(0,0,0)}}
@keyframes farewell-rock{from{transform:translate3d(-2px,1px,0) rotate(-.35deg)}to{transform:translate3d(2px,-2px,0) rotate(.35deg)}}
@keyframes farewell-ripple{from{transform:scaleX(.97);opacity:.35}to{transform:scaleX(1.04);opacity:.7}}
@media(max-width:900px){
 #travel[data-finale-scene] .visit-layout{gap:32px;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}
 #travel[data-finale-scene] .arrival-stage{aspect-ratio:1.05}
 #travel[data-finale-scene] #guest-guide{grid-template-columns:1fr}
 #travel[data-finale-scene] .guest-note-copy p{font-size:16px}
 #rsvp[data-finale-scene]{padding-top:125px;padding-bottom:150px}
}
@media(max-width:759px){
 #travel[data-finale-scene]{padding:54px 24px 65px}
 #invitation-page #travel[data-finale-scene] .chapter-heading{padding:0 10px 18px}
 #invitation-page #travel[data-finale-scene] .chapter-heading h2{font-size:38px}
 #invitation-page #travel[data-finale-scene] .chapter-heading p{font-size:17px;margin-top:12px}
 #travel[data-finale-scene] .visit-layout{display:flex;flex-direction:column;gap:33px;max-width:540px}
 #travel[data-finale-scene] .arrival-stage{width:calc(100% + 48px);max-width:none;margin-left:-24px;aspect-ratio:1.12;margin-bottom:2px}
 #travel[data-finale-scene] .arrival-courtyard{object-position:57% 61%}
 #travel[data-finale-scene] .arrival-parasol-left{width:30%;left:-5%;bottom:11%}
 #travel[data-finale-scene] .arrival-parasol-right{width:22%;right:-4%;bottom:18%}
 #travel[data-finale-scene] .venue-note h3{font-size:29px}
 #travel[data-finale-scene] .venue-note p{font-size:16px}
 #travel[data-finale-scene] #guest-guide{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 14px;padding:0;max-width:none}
 #travel[data-finale-scene] #guest-guide::before{inset:-30px -18px}
 #travel[data-finale-scene] .guest-note{padding:19px 13px 24px;border-radius:44px 44px 12px 12px}
 #travel[data-finale-scene] .guest-note::before{width:74px;height:48px;background-size:74px 74px;margin-bottom:10px}
 #travel[data-finale-scene] .guest-note::after{inset:5px;border-radius:39px 39px 8px 8px}
 #travel[data-finale-scene] .guest-note-copy h3{font-size:23px}
 #travel[data-finale-scene] .guest-note-copy p{font-size:16px;line-height:1.6}
 #rsvp[data-finale-scene]{padding:136px 28px 253px}
 #rsvp[data-finale-scene] .reply-copy{max-width:390px}
 #rsvp[data-finale-scene] .reply-copy h2{font-size:56px;margin-bottom:23px}
 #rsvp[data-finale-scene] .reply-copy>p[data-bind]{font-size:18px;line-height:1.55;max-width:300px}
 #rsvp[data-finale-scene] #rsvp-button{font-size:19px}
 #rsvp[data-finale-scene] #rsvp-button::before{width:72px;height:72px;flex-basis:72px}
 #rsvp[data-finale-scene] #rsvp-note{font-size:12px;max-width:290px;margin-top:15px}
 #rsvp[data-finale-scene] .calendar-actions{font-size:14px;gap:3px 22px;margin-top:19px}
 #countdown[data-finale-scene]{padding:78px 22px 45px}
 #countdown[data-finale-scene] h2{font-size:36px;margin-bottom:27px}
 #countdown[data-finale-scene] .countdown-grid{gap:8px;margin-bottom:23px}
 #countdown[data-finale-scene] .countdown-grid strong{font-size:clamp(32px,10.5vw,46px)}
 #countdown[data-finale-scene] .countdown-grid span{font-size:14px;margin-top:9px}
 #countdown[data-finale-scene] .save-date{font-size:18px}
 #closing[data-finale-scene]{padding:32px 22px 91px}
 #closing[data-finale-scene] h2{font-size:50px;line-height:1.2;margin-bottom:17px}
 #closing[data-finale-scene]>p{font-size:17px;max-width:325px}
 #closing[data-finale-scene]>p[data-date]{font-size:16px}
 #closing[data-finale-scene] .farewell-water{width:100%;max-width:490px;aspect-ratio:1.2;margin-top:24px}
 #closing[data-finale-scene] .farewell-wake{top:76%}
 #closing[data-finale-scene] .quiet-link{font-size:14px}
 #closing[data-finale-scene] footer{font-size:12px;margin-top:22px}
}
@media(max-width:374px){
 #travel[data-finale-scene] #guest-guide{grid-template-columns:1fr;gap:18px;max-width:320px}
 #travel[data-finale-scene] .guest-note{padding:21px 24px 27px}
 #travel[data-finale-scene] .guest-note-copy h3{font-size:26px}
 #travel[data-finale-scene] .guest-note-copy p{max-width:28ch}
}
@media(max-width:359px){
 #rsvp[data-finale-scene]{padding:127px 24px 225px}
 #rsvp[data-finale-scene] .reply-copy h2{font-size:50px}
 #rsvp[data-finale-scene] .reply-copy>p[data-bind]{font-size:17px}
 #countdown[data-finale-scene] h2{font-size:33px}
 #closing[data-finale-scene] h2{font-size:44px}
}
body.card-preview [data-finale-scene] *,body.card-preview [data-finale-scene] *::before,body.card-preview [data-finale-scene] *::after{animation:none!important;transition:none!important}
body.card-preview [data-finale-scene] .arrival-parasol,body.card-preview [data-finale-scene] .farewell-arrival{opacity:1!important;translate:0 0!important}
@media(prefers-reduced-motion:reduce){[data-finale-scene] *,[data-finale-scene] *::before,[data-finale-scene] *::after{animation:none!important;transition:none!important}[data-finale-scene] .arrival-parasol,[data-finale-scene] .farewell-arrival{opacity:1!important;translate:0 0!important}}
