:root{--wine:#704658;--rose:#aa7384;--pink:#e9c8ce;--ivory:#fffaf0;--gold:#c69a62;--text:#5f4952;--serif:'Cormorant Garamond',Georgia,serif;--script:'Great Vibes',cursive;--sans:'DM Sans',sans-serif}
*{box-sizing:border-box}html{scroll-behavior:auto}body{margin:0;min-width:290px;overflow-x:clip;background:#e6d4c4;color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased}body.is-locked{overflow:hidden;height:100svh}button,input,select,textarea{font:inherit}button{cursor:pointer}.honeypot{display:none!important}.scroll-story{height:390svh;position:relative}.stage{height:100svh;position:sticky;top:0;overflow:hidden;isolation:isolate;background:#e9d9c8 url('assets/tabletop.webp') center center/cover no-repeat}
/* Natural sun is stationary relative to the table; the paper alone moves. */
.sunlight,.sun-shadow,.table-edge-glow{position:absolute;inset:0;pointer-events:none}.sunlight{background:linear-gradient(136deg,rgba(255,255,244,.76) 0%,rgba(255,247,227,.1) 29%,transparent 61%);mix-blend-mode:screen}.sun-shadow{opacity:.65;background:linear-gradient(112deg,transparent 30%,rgba(106,79,54,.075) 33%,transparent 36%,transparent 42%,rgba(103,77,57,.065) 45%,transparent 49%);filter:blur(10px)}.table-edge-glow{box-shadow:inset 0 0 110px rgba(120,72,60,.1)}.scatter{position:absolute;z-index:1;pointer-events:none;color:#ba8491;font-family:Georgia,serif;text-shadow:1px 3px 7px rgba(79,43,43,.26);opacity:.72}.scatter-a{left:8%;bottom:21%;font-size:37px;transform:rotate(28deg)}.scatter-b{right:7%;top:29%;font-size:24px;transform:rotate(-42deg)}.scatter-c{right:11%;bottom:13%;font-size:40px;transform:rotate(16deg)}
.scene-header{position:absolute;z-index:5;top:clamp(22px,5svh,55px);left:50%;width:min(94%,550px);text-align:center;transform:translateX(-50%);pointer-events:none;will-change:opacity,transform}.overline{font-size:9px;font-weight:600;letter-spacing:.38em;color:var(--wine);margin:0}.scene-header h1{font-family:var(--serif);font-weight:500;font-size:clamp(38px,6vw,60px);letter-spacing:-.035em;line-height:.92;color:var(--wine);margin:11px 0 4px}.scene-header h1 em{font-style:normal;display:block}.lead{font:italic 20px var(--serif);margin:12px 0 0;color:#98717b}
/* Geometry: both the folded card and flap are shorter than the physical envelope. */
.rig{--ew:min(86vw,430px);--eh:calc(var(--ew)/1.48);--pull:0px;position:absolute;z-index:8;top:clamp(278px,45svh,490px);left:50%;width:var(--ew);height:var(--eh);transform:translateX(-50%);perspective:1200px;overflow:visible}.ground-shadow{position:absolute;left:2%;top:89%;height:25%;width:96%;border-radius:50%;background:rgba(65,35,40,.25);filter:blur(19px);transform:scaleY(.52);z-index:-1}.envelope-back,.envelope-front,.flap{position:absolute;inset:0;border-radius:5px 5px 11px 11px}.envelope-back{z-index:1;background:linear-gradient(130deg,#f5e0d7,#e2b6b9 52%,#e6c2c7);box-shadow:0 18px 38px rgba(67,41,47,.21),inset 0 0 0 1px rgba(255,255,255,.65)}.envelope-back:after{content:'';position:absolute;inset:7px;border:1px solid rgba(255,248,232,.56);border-radius:5px}
/* Folded card: 72% of envelope height, entirely INSIDE the pocket initially */
.paper{position:absolute;top:10%;left:50%;width:75%;height:75%;z-index:2;transform:translate3d(-50%,calc(-1 * var(--pull)),0) rotate(var(--tilt,0deg)) scale(var(--scale,1));transform-origin:center center;transform-style:preserve-3d;will-change:transform;filter:drop-shadow(0 6px 9px rgba(78,43,54,.15))}.paper-face,.paper-fold{width:100%;height:100%;position:absolute;background:#fff9ed;background-image:repeating-linear-gradient(25deg,rgba(176,133,94,.018) 0 1px,transparent 1px 5px),linear-gradient(150deg,rgba(255,255,255,.97),rgba(249,237,219,.97));box-shadow:inset 0 0 16px rgba(151,102,76,.07),0 6px 17px rgba(69,45,44,.1);border-radius:5px;border:1px solid rgba(177,139,100,.47);text-align:center;backface-visibility:hidden}.paper-face{padding:clamp(8px,2vw,18px) 9px 4px}.paper-border{position:absolute;inset:6px;border:1px solid rgba(190,147,100,.55);pointer-events:none}.paper-border:after{content:'❦';position:absolute;top:-11px;left:50%;transform:translateX(-50%);background:#fffaf0;color:#bb9264;font:14px Georgia;padding:0 6px}.ornament{color:var(--gold);font-size:14px;line-height:1.1}.paper-overline{font-size:clamp(5px,.85vw,8px);letter-spacing:1.1px;color:#966f65;margin:7px 0 2px}.paper-invite{font:italic clamp(12px,1.8vw,17px) var(--serif);margin:4px 0 0;color:#86666c}.paper-face h2{font:normal clamp(27px,5vw,48px)/1.1 var(--script);color:#8a4f5c;margin:7px 0 0}.paper-of{font:italic 14px var(--serif);margin:0;color:#a47c7d}.paper-names{font:600 clamp(24px,4.5vw,40px)/1 var(--serif);color:var(--wine);margin:1px 0 0;white-space:nowrap}.paper-names span{font:normal 24px var(--script);color:#c19570}.little-flourish{color:#c49b70;margin-top:4px;font-size:11px}
/* Lower half unfolds physically: no second card, no hard screen transition */
.paper-fold{top:calc(100% - 1px);left:0;transform-origin:center top;transform:rotateX(-180deg);z-index:0;padding:clamp(13px,2vw,26px) 11px 10px;display:flex;align-items:center;flex-direction:column;justify-content:center;gap:clamp(7px,1.4vw,12px);will-change:transform}.date-caption{font:600 clamp(12px,2.1vw,17px) var(--serif);letter-spacing:.09em;color:#855968;margin:0}.event-times{display:flex;width:100%;justify-content:space-evenly;gap:6px}.event-times>div{flex:1}.event-times>div:first-child{border-right:1px solid rgba(185,140,100,.35)}.event-times span{display:block;font-size:clamp(7px,1.2vw,9px);letter-spacing:.06em;color:#98707a}.event-times strong{display:block;font:600 clamp(17px,2.7vw,24px) var(--serif);color:#734656}.gold-divider{color:#c09560;font-size:18px}.paper-message{font:italic clamp(13px,1.7vw,18px)/1.2 var(--serif);margin:0;max-width:90%;color:#795c60}.venue-caption{font-size:8px;letter-spacing:.13em;margin:0;color:#987884}
/* Front pocket masks paper until its bottom edge actually clears the envelope. */
.envelope-front{z-index:4;background:linear-gradient(150deg,#f5dcd4 3%,#e9c0c2 42%,#dcaeb8 100%);clip-path:polygon(0 0,50% 58%,100% 0,100% 100%,0 100%);box-shadow:inset 0 -15px 20px rgba(135,80,96,.12)}.envelope-front:after{content:'';position:absolute;inset:0;background:linear-gradient(32deg,rgba(255,255,255,.36),transparent 46%);pointer-events:none}.flap{z-index:5;height:58%;clip-path:polygon(0 0,100% 0,50% 100%);border-radius:0;background:linear-gradient(170deg,#ffe9df,#e1b4b8 75%);transform-origin:50% 0;backface-visibility:visible;box-shadow:0 5px 15px rgba(88,58,66,.14);will-change:transform}
.wax-seal{position:absolute;z-index:10;left:50%;top:51%;display:grid;place-items:center;width:clamp(59px,15vw,76px);aspect-ratio:1;transform:translate(-50%,-50%);border:4px solid #a76d7a;border-radius:46% 54% 50% 47%;background:radial-gradient(circle at 28% 24%,#d5a1a9,#a15a6a 63%,#743d50);box-shadow:0 7px 15px rgba(99,44,65,.32),inset 0 0 0 2px rgba(255,220,211,.35),inset -5px -5px 8px rgba(83,26,43,.29);color:#fff2e4;padding:0}.seal-ring{display:grid;place-items:center;width:79%;height:79%;border:1px solid rgba(255,225,207,.8);border-radius:50%;font:600 18px var(--serif)}.seal-ring small{font-size:14px;font-weight:400}.wax-seal:focus-visible{outline:3px solid #fff;outline-offset:5px}.wax-seal:disabled{cursor:default}
.guide{position:absolute;z-index:12;left:50%;bottom:clamp(20px,7svh,75px);transform:translateX(-50%);white-space:nowrap;background:rgba(255,250,239,.83);border:1px solid rgba(174,117,122,.33);border-radius:99px;box-shadow:0 8px 24px rgba(102,70,67,.12);padding:13px 19px;font:italic clamp(15px,3.5vw,19px) var(--serif);color:var(--wine);display:flex;align-items:center;gap:12px;backdrop-filter:blur(10px)}.guide-ornament{font-size:10px;color:var(--gold)}.scroll-progress{position:absolute;z-index:10;bottom:16px;left:50%;width:min(42vw,210px);height:2px;transform:translateX(-50%);background:rgba(100,55,66,.16);opacity:0;transition:opacity .4s}.scroll-progress span{height:100%;width:0%;display:block;background:#88556b}.is-open .scroll-progress{opacity:1}
/* RSVP is a real interactive form, not part of the painted card. */
.rsvp-section{min-height:100svh;padding:clamp(45px,8vw,92px) 17px 100px;background:#ede0d4 url('assets/tabletop.webp') center center/cover;position:relative}.rsvp-section:before{content:'';position:absolute;inset:0;background:rgba(255,249,240,.45)}.rsvp-paper{position:relative;max-width:560px;margin:0 auto;padding:clamp(30px,6vw,60px) clamp(20px,5vw,55px);background:linear-gradient(130deg,rgba(255,253,247,.98),rgba(250,239,224,.97));box-shadow:0 35px 70px rgba(74,43,52,.19),inset 0 0 0 8px rgba(255,255,255,.45);border:1px solid #d8bd9e;text-align:center}.rsvp-paper:before{content:'';position:absolute;inset:13px;border:1px solid rgba(185,140,99,.56);pointer-events:none}.rsvp-ornament{font-size:29px;color:var(--gold);margin:0 0 9px}.rsvp-paper h2{font:500 clamp(38px,8vw,57px)/.97 var(--serif);color:var(--wine);margin:15px 0}.rsvp-paper h2 em{display:block;font:normal clamp(36px,8vw,54px) var(--script);margin-top:7px;color:var(--rose)}.rsvp-description{font:italic 19px/1.3 var(--serif);color:#8c6874;margin:14px auto 25px;max-width:360px}#rsvpForm{display:grid;gap:7px;text-align:left}#rsvpForm label{font-size:12px;font-weight:600;color:var(--wine);margin-top:12px}#rsvpForm label span{font-weight:400}#rsvpForm input:not([type=hidden]):not([type=checkbox]),#rsvpForm select,#rsvpForm textarea{width:100%;border:1px solid #dac4b9;border-radius:3px;padding:13px 14px;background:rgba(255,255,251,.78);color:#573e4a;outline:none}#rsvpForm input:focus-visible,#rsvpForm textarea:focus-visible,#rsvpForm select:focus-visible{border-color:#9a657b;box-shadow:0 0 0 3px rgba(168,112,139,.18)}.send-button{margin-top:20px;border:0;border-radius:99px;padding:14px 15px;color:white;background:linear-gradient(135deg,#ab7182,#794a61);box-shadow:0 12px 24px rgba(121,61,82,.23)}.send-button span{margin-left:15px}.send-button:disabled{opacity:.7;cursor:wait}.form-status{min-height:1em;text-align:center;font-size:13px}.closing{font:italic 19px var(--serif);color:#946f73;margin:25px 0 0}.closing span{display:block;font:normal 31px var(--script);color:#8b5264}
@media (max-width:400px){.rig{--ew:min(85vw,340px);top:clamp(258px,43svh,390px)}.scene-header h1{font-size:38px}.scene-header{top:35px}.paper-face h2{font-size:29px}.paper-names{font-size:25px}.paper-overline{font-size:6px}.paper-invite{font-size:13px}.paper-fold{padding:9px 7px}.date-caption{font-size:13px}.guide{bottom:22px;padding:11px 13px}.scatter{opacity:.47}}
@media (max-height:690px){.scene-header{top:12px}.scene-header h1{font-size:35px}.scene-header .lead{margin-top:4px;font-size:16px}.rig{top:40svh}.guide{bottom:9px}}
@media (prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

.wax-seal[hidden]{display:none!important}

/* Photo-derived flowers, visually anchored to the same sunlit table. */
.rose-photo{position:absolute;z-index:1;pointer-events:none;object-fit:contain;filter:drop-shadow(8px 12px 13px rgba(88,49,49,.24))}
.rose-left{width:clamp(130px,20vw,260px);left:-30px;top:24%;transform:rotate(-12deg)}
.rose-right{width:clamp(140px,20vw,250px);right:-58px;bottom:11%;transform:rotate(8deg)}
@media(max-width:480px){.rose-left{width:145px;left:-57px;top:22%}.rose-right{width:145px;right:-65px;bottom:14%}}

.envelope-front{background-image:linear-gradient(155deg,rgba(249,224,220,.72),rgba(226,173,188,.75)),url('assets/pink-paper.webp');background-position:center;background-size:cover}
.envelope-back{background-image:linear-gradient(140deg,rgba(255,226,217,.76),rgba(228,178,188,.78)),url('assets/pink-paper.webp');background-position:center;background-size:cover}
