/* The invitation is staged like a piece of folded stationery. */
:root{--ink:#25153b;--muted:#776785;--paper:#fffaff;--lavender:#b89ae0;--blue:#a5c8ee;--line:#dfcfe8;--gold:#ecd0a1;--night:#211032}body{background:var(--paper)}body.gated{overflow:hidden}header{height:86px;position:absolute;top:0;left:0;right:0;z-index:5;color:#fbf1ff;border-color:#ffffff26}.monogram span{color:#dfc6ed}header nav a{border-color:#d3b3de}.hero{min-height:100svh;background:#221230;color:#fff3ff;overflow:hidden;padding-top:135px;padding-bottom:95px;gap:8%;isolation:isolate}.hero:before{content:'';position:absolute;inset:0;z-index:-2;background:radial-gradient(ellipse at 10% 10%,#734e93aa,transparent 55%),radial-gradient(ellipse at 90% 100%,#507dada0,transparent 50%),linear-gradient(135deg,#341a48,#1d112f 65%,#2e365b)}.hero:after{content:'';position:absolute;inset:22px;pointer-events:none;border:1px solid #ddbbf124;z-index:-1}.hero h1{font-size:clamp(85px,9vw,145px);text-shadow:0 5px 40px #d7a2ef20}.hero .amp{color:#edcda1}.hero .eyebrow{color:#dfc0f0}.hero-note{color:#eadbec}.hero .date-line{color:#f4d7b4}.hero .date-line>span:last-child{border-color:#e2c1ed50}.hero .button{color:#30193e;background:linear-gradient(115deg,#efd3a7,#f6e6cd);border-color:#f5d9b0;box-shadow:0 8px 40px #12082244}.hero .button:hover{background:#fff1d8}.hero-photo{height:min(69vw,660px);max-width:500px;box-shadow:0 35px 100px #13072099}.hero-photo:before{border-color:#e6c89799;inset:-15px 15px 15px -15px}.hero-photo>img{object-position:center 42%;animation:portrait-breathe 18s ease-in-out infinite alternate}.hero-photo{overflow:visible}.hero-photo>img{clip-path:inset(0 round 48% 48% 2px 2px)}.photo-tag{color:#3a234b;background:linear-gradient(135deg,#ead6f8,#b9c6ed);box-shadow:0 9px 40px #16092550}.side-note{color:#d9c3e7}.photo-caption{font-size:38px}.letter{background:radial-gradient(ellipse at 0 0,#c7b6ed80,transparent 55%),radial-gradient(ellipse at 100% 100%,#afcaef60,transparent 60%),#fffaff}.letter h2{font-size:clamp(46px,5.5vw,80px)}h2 em{color:#9160ab}.letter .signature{color:#825799}.countdown{gap:24px}.countdown div{border-top:1px solid #af8bc480;border-bottom:1px solid #af8bc480;padding:13px 16px;min-width:105px}.countdown strong{font-size:64px}.program{background:#fdf9ff}.event{transition:background .4s}.event:hover{background:#eae0f22e}.event-num{color:#9765b4}.event-time{color:#6b3e8c}.gallery{background:#251237;color:#f8edfc;padding-top:90px;position:relative;overflow:hidden}.gallery h2 em{color:#dfb9ef}.gallery .eyebrow{color:#d3abdF}.gallery .section-heading>p{color:#ddc6e7}.gallery-photo{perspective:900px}.gallery-photo img{box-shadow:0 20px 60px #0c001d66;transition:transform .7s cubic-bezier(.2,.7,.2,1),filter .5s;outline:1px solid #ead2f444;outline-offset:-12px}.gallery-photo:hover img{transform:translateY(-9px) rotate(-1.3deg);filter:brightness(1.08)}.gallery-photo:nth-child(2):hover img{transform:translateY(-9px) rotate(1.3deg)}.gallery-photo span{color:#e9d2f0}.dress{background:linear-gradient(120deg,#ede0f5,#d4dff3);position:relative}.rsvp{background:radial-gradient(ellipse at 100% 100%,#c2d2f366,transparent 65%),#fffaff}.rsvp .button{background:linear-gradient(110deg,#643484,#37204e);border:0}.rsvp form{padding:35px;background:#ffffff80;border:1px solid #dacbe1;box-shadow:0 16px 60px #47205e0a}footer{background:#21112e;color:#eadcef}.text-link{position:relative}.text-link:after{content:'';position:absolute;bottom:-1px;left:0;width:100%;height:2px;background:#a87fc1;transform:scaleX(0);transform-origin:left;transition:transform .3s}.text-link:hover:after{transform:scaleX(1)}.scroll-progress{position:fixed;top:0;left:0;height:3px;width:100%;transform:scaleX(0);transform-origin:left;background:linear-gradient(90deg,#d9a4f0,#e9cc93,#9bc6f0);z-index:60;pointer-events:none}.hero-copy>*{will-change:auto}body.is-open .hero-copy>.eyebrow{animation:enter-up 1s .2s both}body.is-open h1{animation:name-reveal 1.8s .35s both}body.is-open .hero-note{animation:enter-up 1.1s .75s both}body.is-open .date-line{animation:enter-up 1.1s .95s both}body.is-open .hero-copy>.button{animation:enter-up 1.1s 1.15s both}body.is-open .hero-photo{animation:portrait-reveal 1.7s .25s both}.hero-stars{position:absolute;inset:0;pointer-events:none;z-index:-1;overflow:hidden}.mote{position:absolute;width:3px;height:3px;border-radius:50%;background:#f5d5ff;box-shadow:0 0 12px #f4d5ff;animation:mote-drift var(--duration,12s) var(--delay,0s) ease-in-out infinite;opacity:0}.scroll-cue{position:absolute;left:50%;bottom:20px;transform:translateX(-50%);display:flex;align-items:center;gap:12px;font-size:10px;letter-spacing:2px;color:#e8d2ed}.scroll-cue i{height:30px;width:1px;background:linear-gradient(transparent,#ead2f2);animation:scroll-line 2.2s ease-in-out infinite}.replay{border:0;background:transparent;color:inherit;font-size:12px;border-bottom:1px solid #ad8cc5;padding:4px 0}.gate{position:fixed;inset:0;z-index:100;background:radial-gradient(ellipse at 50% 30%,#674479 0%,#30203f 48%,#160f25 100%);color:#f7eafc;display:grid;place-items:center;overflow:hidden;perspective:1300px;isolation:isolate}.gate:before,.gate:after{content:'';position:absolute;inset:3%;border:1px solid #d6afdc2b;pointer-events:none}.gate:after{inset:calc(3% + 7px);border-color:#d6afdc12}.gate-light{position:absolute;width:70vw;height:70vw;top:-50vw;left:15vw;background:#d8b4ef36;filter:blur(65px);border-radius:50%;animation:light-sway 14s ease-in-out infinite alternate;pointer-events:none}.gate-content{display:flex;flex-direction:column;align-items:center;text-align:center;width:100%;padding:45px 25px}.gate-kicker{font-size:11px;letter-spacing:4px;color:#e1c1e9;margin-bottom:12px}.gate-title{font:400 clamp(42px,5vw,69px)/1.1 var(--serif);margin-bottom:20px}.gate-title em{color:#e8c999}.gate-date{font-size:11px;letter-spacing:3px;color:#d4b7e0;margin-bottom:65px}.envelope-wrap{width:min(490px,78vw);aspect-ratio:1.52;position:relative;perspective:1400px;filter:drop-shadow(0 35px 38px #09011270);transform:rotate(-4deg);animation:envelope-arrival 1.6s cubic-bezier(.2,.7,.2,1) both}.envelope{position:absolute;inset:0;background:linear-gradient(135deg,#a382bb,#795696);border:1px solid #d0a6db55;border-radius:4px;transform-style:flat;isolation:isolate;perspective:1400px}.envelope-card{position:absolute;inset:10% 6% 3%;background:linear-gradient(120deg,#fff7ed,#eadff4);border:1px solid #d2b186;z-index:1;display:flex;flex-direction:column;justify-content:center;align-items:center;color:#553168;box-shadow:0 0 15px #29163830;transition:transform 1.15s 1.1s cubic-bezier(.2,.65,.2,1),opacity .5s 2s}.envelope-card:before{content:'';position:absolute;inset:11px;border:1px solid #b9997070}.envelope-card small{font-size:9px;letter-spacing:2px}.envelope-card strong{font:italic 40px var(--serif);margin:12px 0}.envelope-card span{font-size:10px;letter-spacing:2px}.pocket-left,.pocket-right,.pocket-bottom{position:absolute;inset:0;z-index:3;border-radius:3px}.pocket-left{clip-path:polygon(0 0,58% 56%,0 100%);background:linear-gradient(125deg,#d8b9e8,#b18cc9)}.pocket-right{clip-path:polygon(100% 0,43% 56%,100% 100%);background:linear-gradient(220deg,#bda0d9,#8e6bb1)}.pocket-bottom{clip-path:polygon(0 100%,0 96%,50% 42%,100% 96%,100% 100%);background:linear-gradient(0deg,#ba98d0,#d7bce6);box-shadow:inset 0 -2px 1px #e7ccf266}.envelope-flap{position:absolute;inset:0;z-index:5;transform-origin:50% 0;clip-path:polygon(0 0,100% 0,50% 58%);background:linear-gradient(165deg,#e0c4ed,#b493cf 70%);transition:transform 1.1s .35s cubic-bezier(.45,.05,.2,1);backface-visibility:visible}.seal{position:absolute;left:50%;top:52%;width:88px;height:88px;transform:translate(-50%,-50%);z-index:6;border-radius:50%;border:4px solid #bd8851;color:#69411f;background:radial-gradient(circle at 32% 25%,#ffebbb,#dbb374 48%,#ba803b 80%,#f3d49c);box-shadow:0 5px 10px #45234a55,inset 0 0 0 3px #f4dba4,inset 0 0 0 5px #ad793d;transition:transform .7s,opacity .6s;font:italic 27px var(--serif);text-shadow:0 1px 1px #ffe8b3}.seal:before{content:'';position:absolute;inset:-10px;border:1px solid #e7c49655;border-radius:50%;animation:seal-pulse 3s infinite}.seal:hover{transform:translate(-50%,-50%) scale(1.08)}.gate-hint{font-size:12px;letter-spacing:1px;margin:40px 0 15px;color:#ecd9f0}.gate-open{background:none;border:0;border-bottom:1px solid #b999c5;padding:8px 0;color:#fff0ff;font-size:13px;letter-spacing:.5px}.gate-skip{position:absolute;right:6%;bottom:5%;border:0;background:none;color:#d5bfe0;font-size:12px;padding:10px}.gate.opening .seal{transform:translate(-50%,-80%) scale(1.6) rotate(25deg);opacity:0;pointer-events:none}.gate.opening .envelope-flap{transform:rotateX(180deg);z-index:0;transition:transform 1.1s .35s cubic-bezier(.45,.05,.2,1),z-index 0s .85s}.gate.opening .envelope-card{transform:translateY(-63%) rotate(4deg);opacity:0}.gate.opening .envelope-wrap{animation:envelope-exit 1.4s 1.5s forwards}.gate.opening .gate-kicker,.gate.opening .gate-title,.gate.opening .gate-date,.gate.opening .gate-hint,.gate.opening .gate-open,.gate.opening .gate-skip{transition:opacity .5s;opacity:0;pointer-events:none}.gate.departing{animation:gate-depart 1s forwards;pointer-events:none}.burst{position:fixed;inset:0;z-index:120;pointer-events:none;overflow:hidden}.burst i{position:absolute;left:50%;top:50%;width:5px;height:8px;background:var(--spark);animation:celebrate 2.2s var(--wait) ease-out both}.motion .reveal{transform:translateY(40px);transition:opacity 1s var(--stagger,0s),transform 1s var(--stagger,0s)}.motion .gallery-photo.reveal{transform:translateY(65px) rotate(2deg)}.motion .gallery-photo.reveal.visible{transform:none}.event.visible .event-time{animation:enter-up .8s both}.digit-change{animation:digit-in .4s both}
@keyframes seal-pulse{0%,100%{transform:scale(1);opacity:.3}50%{transform:scale(1.13);opacity:.8}}@keyframes light-sway{to{transform:translate(20vw,15vw)}}@keyframes envelope-arrival{from{opacity:0;transform:translateY(40px) rotate(-9deg) scale(.93)}to{opacity:1;transform:translateY(0) rotate(-4deg) scale(1)}}@keyframes envelope-exit{to{transform:translateY(55vh) rotate(8deg);opacity:0}}@keyframes gate-depart{to{opacity:0;filter:blur(8px);visibility:hidden}}@keyframes name-reveal{from{opacity:0;transform:translateY(28px);filter:blur(12px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes enter-up{from{opacity:0;transform:translateY(25px)}to{opacity:1;transform:none}}@keyframes portrait-reveal{from{opacity:0;clip-path:inset(100% 0 0);transform:translateY(40px) rotate(3deg)}to{opacity:1;clip-path:inset(-20% -20% -20% -20%);transform:none}}@keyframes portrait-breathe{to{filter:brightness(1.06)}}@keyframes mote-drift{0%,100%{opacity:0;transform:translateY(25px) scale(.5)}40%,65%{opacity:.6}80%{transform:translate(20px,-65px) scale(1)}}@keyframes scroll-line{50%{transform:translateY(7px);opacity:.4}}@keyframes celebrate{0%{opacity:0;transform:translate(0,0) rotate(0)}15%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(420deg)}}@keyframes digit-in{from{opacity:.2;transform:translateY(8px)}to{opacity:1;transform:none}}
@media(max-width:1000px){.hero{gap:7%;padding-top:135px}.hero-photo{height:570px}.rsvp form{padding:25px}.countdown div{min-width:85px}}@media(max-width:700px){header{height:70px}.hero{padding:110px 8% 75px;gap:35px;min-height:100svh}.hero h1{font-size:92px}.hero .eyebrow{font-size:10px}.hero-photo{height:480px;max-width:340px}.hero:after{inset:12px}.hero .amp{font-size:44px}.hero .hero-note{font-size:14px}.hero .photo-caption{font-size:29px}.hero-copy>.button{min-height:50px;padding:13px 23px}.countdown{gap:7px}.countdown div{min-width:57px;padding:10px 7px}.countdown strong{font-size:43px}.countdown span{font-size:9px}.letter h2{font-size:44px}.rsvp form{padding:23px 18px;margin:0 -2%}.gallery{padding-top:65px}.gate-title{font-size:44px}.gate-date{margin-bottom:57px;font-size:10px;letter-spacing:2px}.gate-content{padding-top:35px}.gate-kicker{font-size:9px;letter-spacing:2.5px}.seal{width:73px;height:73px;font-size:24px}.envelope-card strong{font-size:28px}.envelope-card small{font-size:8px}.envelope-card span{font-size:8px}.gate-hint{margin-top:35px;font-size:11px}.gate-skip{bottom:3%;right:5%;font-size:11px}.gate-light{width:100vw;height:100vw;top:-30vw;left:0}.scroll-cue{bottom:17px}}@media(max-height:640px){.gate-content{transform:scale(.8)}.gate-date{margin-bottom:40px}.gate-title{margin-bottom:10px}.gate-hint{margin-top:23px}}@media(prefers-reduced-motion:reduce){.gate.opening .envelope-card{opacity:1}.gate.departing{display:none}.hero-photo>img,.mote,.seal:before{animation:none!important}.motion .reveal{transform:none!important;opacity:1!important}.gate.opening .envelope-wrap{opacity:0}.scroll-cue i{animation:none}}
