@font-face{font-family:LoveScript;src:url('assets/love-script.woff') format('woff');font-display:swap}@font-face{font-family:LoveSerif;src:url('assets/love-serif.woff') format('woff');font-display:swap}@font-face{font-family:LoveSerif;src:url('assets/love-serif-italic.woff') format('woff');font-style:italic;font-display:swap}@font-face{font-family:LoveSans;src:url('assets/love-sans.woff') format('woff');font-display:swap}@font-face{font-family:DevotionalSerif;src:url('assets/devotional-serif.woff') format('woff');font-display:swap}
:root{--paper:#f9f4e9;--cream:#eee5d2;--red:#8c233b;--ink:#413b34;--gold:#b39154;--green:#3f5849;--serif:LoveSerif,Georgia,serif;--sans:LoveSans,Arial,sans-serif;--script:LoveScript,cursive}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:0}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.65 var(--sans);-webkit-font-smoothing:antialiased}body.intro-lock{overflow:hidden}body.intro-lock .story-header{visibility:hidden}a{color:inherit;text-decoration:none}button,input,textarea,select{font:inherit}button{cursor:pointer;touch-action:manipulation}button,a{-webkit-tap-highlight-color:transparent}p,h1,h2,h3,figure{margin:0;font-weight:400}img{display:block;max-width:100%}button:focus-visible,a:focus-visible,canvas:focus-visible{outline:2px solid #bb914d;outline-offset:5px}[hidden]{display:none!important}.script{font-family:var(--script);font-weight:400}.sanskrit{font-family:DevotionalSerif,'Noto Serif Devanagari',serif}.eyebrow{font:9px/1.7 var(--sans);letter-spacing:.2em;color:#8b7252}.sr-only{position:absolute;clip:rect(0,0,0,0);width:1px;height:1px;overflow:hidden;white-space:nowrap}.skip-link{position:fixed;left:12px;top:12px;z-index:100;background:var(--paper);padding:10px 16px;transform:translateY(-160%)}.skip-link:focus{transform:none}.text-button{border:0;background:none;color:inherit;min-height:44px;padding:9px 4px;font-size:12px;border-bottom:1px solid #b3915460}.primary-button{display:inline-flex;gap:16px;justify-content:center;align-items:center;border:1px solid var(--red);background:var(--red);color:#fff6e8;padding:13px 25px;min-height:48px;font-size:13px;border-radius:3px;transition:transform .25s,background .25s}.primary-button:hover{transform:translateY(-2px);background:#6f172d}.handwritten{font:italic 22px/1.3 var(--serif)}
/* The opening fills the screen; it is never a thumbnail inside a card. */
.film-opening{position:fixed;inset:0;z-index:50;isolation:isolate;background:#050505;color:#e7d1a1;transition:opacity 1.5s,visibility 1.5s}.film-opening.leaving{opacity:0;visibility:hidden;pointer-events:none}.blessing-screen{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;padding:55px 22px 75px;text-align:center;background:#050505;transition:opacity 1.6s,transform 1.8s;overflow:hidden}.devotional-halo{position:absolute;width:min(78vw,460px);aspect-ratio:1;background:radial-gradient(ellipse,#d09c3520,transparent 66%);top:50%;left:50%;transform:translate(-50%,-64%);z-index:-1;animation:breathe 5s ease-in-out infinite}.opening-overline{font:8px var(--sans);letter-spacing:.32em;color:#a68b58;opacity:0;animation:blessing-in 1.5s .3s forwards}.sacred-ganesha{width:clamp(190px,36vh,320px);height:clamp(190px,36vh,320px);object-fit:contain;filter:drop-shadow(0 0 24px #bd8b2530);margin:18px 0 12px;opacity:0;animation:blessing-in 2s .4s forwards}.devotional-title{font-size:clamp(22px,4vw,30px);color:#d4b679;opacity:0;animation:blessing-in 1.8s 1.3s forwards}.devotional-mantra{font-size:clamp(14px,2.5vw,19px);line-height:2.2;margin-top:25px;color:#e0cc9f}.devotional-mantra p{opacity:0;animation:blessing-in 1.8s 2.1s forwards}.devotional-mantra p+p{animation-delay:3s}.devotional-meaning{font:italic 15px/1.7 var(--serif);color:#a29171;margin-top:22px;opacity:0;animation:blessing-in 1.8s 3.8s forwards}.blessing-next{margin-top:27px;color:#d2bd92;opacity:0;animation:blessing-in 1.5s 4.5s forwards}.blessing-next>span{margin-left:18px}.film-opening:not([data-scene=blessing]) .blessing-screen{opacity:0;transform:scale(1.04);pointer-events:none}.opening-skip{position:absolute;z-index:15;bottom:max(20px,env(safe-area-inset-bottom));right:clamp(20px,4vw,50px);border:1px solid #c7a96b50;background:#0c0808a6;border-radius:25px;color:#e4cfaa;font-size:10px;padding:10px 17px;min-height:40px}.film-progress{position:absolute;bottom:0;left:0;right:0;height:2px;background:#b3915425;z-index:20}.film-progress span{height:100%;display:block;width:0;background:#d0af73;transition:width 1.5s}
@keyframes blessing-in{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}@keyframes breathe{50%{opacity:.6;transform:translate(-50%,-64%) scale(1.12)}}
/* Velvet, brass ropes and multi-pose characters. */
.theatre-screen{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 20%,#3b232a,#130c11 80%);opacity:0;visibility:hidden;transition:opacity 1.5s,visibility 1.5s}.film-opening:not([data-scene=blessing]) .theatre-screen{opacity:1;visibility:visible}.theatre-inner{position:relative;max-width:600px;height:100%;margin:auto;overflow:hidden;isolation:isolate;background:radial-gradient(ellipse at 50% 55%,#50303b,#20131c 70%);box-shadow:0 0 150px #a5704120}.theatre-lights{position:absolute;inset:0 3% 15%;z-index:1;opacity:.7;background-image:radial-gradient(ellipse at center,#f4cf83 0 10%,#b78b4e90 16%,transparent 45%),linear-gradient(90deg,transparent 48%,#cfa75e99 49%,#9d774966 50%,transparent 52%);background-size:47px 80px,47px 100%;mask-image:linear-gradient(#000 0%,transparent 80%)}.theatre-top{position:absolute;top:-13%;left:-10%;width:120%;height:23%;border-radius:0 0 50% 50%;background:repeating-linear-gradient(90deg,#32121d,#67303c 12%,#351622 20%);border-bottom:3px solid #af895a;z-index:8;box-shadow:0 10px 22px #07030780}.theatre-curtain{position:absolute;top:0;bottom:5%;width:50.1%;z-index:2;background:repeating-linear-gradient(90deg,#351d27 0,#5b3440 10%,#37202b 20%,#69434a 30%,#2b1521 43%);border-bottom:5px double #bc975e;box-shadow:inset 0 -30px 45px #13081170;transition:transform 4s cubic-bezier(.4,0,.15,1),border-radius 4s}.velvet-left{left:0;transform-origin:0 0}.velvet-right{right:0;transform-origin:100% 0}.theatre-screen.curtains-open .velvet-left{transform:translateX(-88%) scaleX(.27) rotate(4deg);border-radius:0 0 90% 0}.theatre-screen.curtains-open .velvet-right{transform:translateX(88%) scaleX(.27) rotate(-4deg);border-radius:0 0 0 90%}.theatre-heading{position:absolute;top:12%;left:8%;right:8%;text-align:center;z-index:9;transition:opacity 1s}.theatre-heading .eyebrow{font-size:8px;color:#d3b67d;letter-spacing:.16em}.theatre-heading h2{font-size:clamp(29px,6vw,47px);color:#f0dbb4;margin-top:11px;line-height:1.2}.theatre-screen.pulling .theatre-heading{opacity:0}.stage-envelope{position:absolute;top:26%;left:21%;width:58%;height:36%;background:linear-gradient(145deg,#59313b,#371a2a);z-index:3;border:1px solid #d0a56799;box-shadow:0 18px 22px #0b030c70;transition:opacity 1.5s,transform 1.5s;perspective:700px}.envelope-trim{position:absolute;inset:9px;border:1px solid #b48b5b80;pointer-events:none}.envelope-trim:after{content:'❦';position:absolute;top:-18px;left:calc(50% - 12px);font-size:27px;color:#cfab73;background:#4f2a36;padding:0 5px}.envelope-top{position:absolute;top:0;left:0;right:0;height:65%;background:linear-gradient(145deg,#70424b,#402134);clip-path:polygon(0 0,100% 0,50% 96%);filter:drop-shadow(0 4px 4px #100a10);transform-origin:50% 0;transition:transform 2s}.seal{position:absolute;top:48%;left:calc(50% - 30px);width:60px;height:60px;border-radius:50%;display:grid;place-content:center;grid-auto-flow:column;align-items:center;gap:3px;background:radial-gradient(circle at 35% 25%,#b64c48,#7f192b 70%);box-shadow:0 0 0 3px #b13d4166,inset 0 0 0 4px #ce6d4c55,0 3px 10px #11081077;font:16px var(--serif);color:#f5d1a2;transition:opacity .7s}.seal i{font:16px var(--script)}.envelope-caption{position:absolute;bottom:12%;left:12%;right:12%;text-align:center;font-size:6px;letter-spacing:.18em;color:#cbb28c}.inner-letter{position:absolute;left:16%;right:16%;top:23%;height:40%;padding:15% 9% 7%;z-index:1;background:#f9f0dd;color:#7a2940;border:1px solid #d5b77e;outline:1px solid #c7a367;outline-offset:-10px;text-align:center;opacity:0;transform:translateY(45px) scale(.88);transition:opacity 1.8s,transform 2.3s}.inner-letter h2{font-size:clamp(35px,9vw,57px);line-height:1.1;margin:15px 0}.inner-letter>p:not(.eyebrow){font:italic 15px/1.65 var(--serif)}.letter-signed{display:block;font-size:28px;margin-top:22px;line-height:1.2}.letter-heart{display:block;color:#b38b52;font:26px var(--serif);margin-top:14px}.letter-open .inner-letter{z-index:4;opacity:1;transform:none}.letter-open .stage-envelope{opacity:0;transform:translateY(40px) scale(.95)}.letter-open .envelope-top{transform:rotateX(180deg)}.letter-open .seal{opacity:0}.rope{position:absolute;top:-3%;height:78%;width:4px;z-index:6;background:repeating-linear-gradient(35deg,#7d5b32 0 2px,#d6b673 3px 5px,#a98449 6px);box-shadow:1px 0 3px #09040980;transform-origin:50% 0;transition:opacity 1s}.rope-left{left:27%}.rope-right{right:27%}.rope b{position:absolute;bottom:-31px;left:-8px;width:20px;height:35px;background:repeating-linear-gradient(90deg,#b98c4b 0 2px,#ecd19a 3px 4px);clip-path:polygon(42% 0,58% 0,62% 15%,100% 100%,0 100%,38% 15%)}.pulling .rope{animation:rope-pull 2.4s ease-in-out 2}.curtains-open .rope{opacity:0}.animated-pair{position:absolute;inset:0;z-index:7;pointer-events:none;transition:opacity 1.4s,transform 1.4s}.little-person{position:absolute;bottom:10%;width:43%;height:40%;filter:drop-shadow(0 14px 7px #0b050b70);transform-origin:50% 95%;animation:character-breathe 3s ease-in-out infinite}.little-groom{left:3%}.little-bride{right:3%}.pose{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:0}.pose-0{opacity:1}.pulling .pose-0{animation:pose-reach 2.4s linear 2 forwards}.pulling .pose-1{animation:pose-middle 2.4s linear 2 forwards}.pulling .pose-2{animation:pose-down 2.4s linear 2 forwards}.pulling .little-person{animation:character-pull 2.4s ease-in-out 2}.letter-open .animated-pair{opacity:0;transform:translateY(30px)}.theatre-floor{position:absolute;bottom:0;left:-20%;right:-20%;height:12%;background:repeating-linear-gradient(90deg,transparent 0 80px,#3c2219aa 82px 84px),linear-gradient(#805b40,#3b251e);transform:perspective(400px) rotateX(35deg);box-shadow:0 -5px 20px #10040b99;z-index:5}.ribbon-button{position:absolute;z-index:12;left:50%;transform:translateX(-50%);bottom:3.5%;color:#efdbb7;background:#27131bce;border:1px solid #ba945a80;padding:11px 20px;min-height:44px;font:11px var(--sans);white-space:nowrap;border-radius:25px;transition:opacity .6s}.pulling .ribbon-button{opacity:0;pointer-events:none}
@keyframes rope-pull{0%,10%{transform:translateY(-10px)}60%,80%{transform:translateY(75px)}100%{transform:translateY(0)}}@keyframes character-breathe{50%{transform:translateY(-3px) rotate(.4deg)}}@keyframes character-pull{0%,10%{transform:translateY(-4px) rotate(0)}55%,80%{transform:translateY(11px) rotate(-3deg)}100%{transform:none}}@keyframes pose-reach{0%,25%{opacity:1}26%,89%{opacity:0}90%,100%{opacity:1}}@keyframes pose-middle{0%,25%{opacity:0}26%,52%{opacity:1}53%,100%{opacity:0}}@keyframes pose-down{0%,52%{opacity:0}53%,89%{opacity:1}90%,100%{opacity:0}}
/* Permanent scrapbook pages, never disappearing overlays. */
.story-header{position:fixed;top:0;left:0;right:0;z-index:25;display:flex;justify-content:space-between;align-items:center;gap:15px;padding:14px clamp(18px,4vw,55px);background:linear-gradient(#f9f4e9f2,#f9f4e9c9,transparent);pointer-events:none}.story-header a,.story-header button{pointer-events:auto}.monogram{font:24px var(--serif);letter-spacing:-2px;color:var(--red);white-space:nowrap}.monogram i{font:24px var(--script);color:var(--gold);padding:0 2px}.story-actions{display:flex;align-items:center;gap:18px}.story-control,.music-button{border:0;background:#fffaf1b8;color:#776347;padding:7px 12px;font-size:10px;border-radius:30px;min-height:36px}.music-button{display:flex;gap:6px;align-items:center}.rsvp-nav{font-size:10px;letter-spacing:.07em;color:var(--red)}
.story-page{position:relative;min-height:100svh;min-height:100dvh}.scrapbook{background:#e8e0d2;overflow:hidden}.scrapbook-stage{position:relative;isolation:isolate;max-width:600px;width:100%;height:100svh;height:100dvh;min-height:690px;max-height:1040px;margin:auto;overflow:hidden;background-color:#f8f4ea;background-image:url('assets/paper-texture.svg');background-size:cover;box-shadow:0 0 100px #685d3b12}.paper-fold{position:absolute;z-index:-1;inset:-20%;opacity:.4;pointer-events:none;background:conic-gradient(from 112deg at 40% 35%,transparent 0 18deg,#d2c8b8 19deg,transparent 20deg 39deg,#fffdfa 40deg,transparent 42deg 160deg,#dcd0be 161deg,transparent 163deg),conic-gradient(from 12deg at 65% 70%,transparent 0 120deg,#c8bda9 121deg,transparent 123deg 260deg,#fffdf9 261deg,transparent 264deg);transform:rotate(13deg)}.fold-two{transform:rotate(-21deg);opacity:.18}.tape{position:absolute;width:110px;height:30px;background:#dbb9b380;box-shadow:0 1px 2px #6a4d3e15;z-index:3;clip-path:polygon(2% 0,100% 0,97% 12%,100% 20%,96% 35%,100% 50%,97% 65%,100% 90%,98% 100%,0 100%,3% 85%,0 70%,4% 55%,0 40%,4% 15%)}.tape-one{left:-24px;top:4%;transform:rotate(-30deg)}.tape-two{right:-23px;bottom:9%;transform:rotate(-30deg);background:#c1c9ac88}.chapter-number{position:absolute;top:8.5%;left:0;right:0;text-align:center;font-size:8px;letter-spacing:.23em;color:#9a8a72}.scrapbook-heading{position:absolute;top:13.5%;left:5%;right:5%;text-align:center;z-index:4}.scrapbook-heading>.handwritten{font-size:clamp(19px,4vw,26px);color:#4d443b}.scrapbook-heading h2{font-size:clamp(62px,14vw,93px);color:#942d46;line-height:1.05;margin-top:5px}.portrait-subtitle{font:italic clamp(13px,2.8vw,17px)/1.4 var(--serif);color:#8d615f;margin-top:3px}.groom-page .scrapbook-heading h2{color:#415c51}.groom-page .portrait-subtitle{color:#6f816f}.portrait-collage{position:absolute;left:0;right:0;top:32%;bottom:15%;z-index:2}.portrait-aura{position:absolute;inset:10% 21% 0;background:radial-gradient(ellipse,#e4b6af75,transparent 70%);border-radius:50%}.groom-page .portrait-aura{background:radial-gradient(ellipse,#a5baa16b,transparent 70%)}.portrait-model{position:absolute;left:21%;width:58%;height:100%;bottom:0;object-fit:contain;object-position:center bottom;filter:drop-shadow(3px 0 0 #fffefa) drop-shadow(-3px 0 0 #fffefa) drop-shadow(0 -3px 0 #fffefa) drop-shadow(0 5px 6px #695a3a23);z-index:2}.sticker{position:absolute;margin:0;width:22%;z-index:4;transform:rotate(var(--r));text-align:center}.sticker img{width:100%;aspect-ratio:1;object-fit:contain;filter:drop-shadow(0 3px 3px #5c42311d)}.sticker figcaption{font:italic clamp(10px,2.4vw,14px)/1.2 var(--serif);color:#74654f;white-space:nowrap;margin-top:-5px}.sticker-0{top:-9%;left:4%;width:21%}.sticker-1{top:-6%;right:5%;width:22%}.sticker-2{top:27%;left:1%;width:22%}.sticker-3{top:29%;right:1%;width:22%}.sticker-4{bottom:-2%;left:3%;width:24%}.sticker-5{bottom:-1%;right:2%;width:23%}.collage-word{position:absolute;z-index:4;font:italic 22px/1.2 var(--serif);color:#954b5a;transform:rotate(-11deg);background:#fff9eea8;padding:3px 8px;box-shadow:0 2px 3px #56352709}.word-one{left:8%;top:15%}.word-two{right:1%;top:67%;font-size:15px;transform:rotate(8deg)}.groom-page .collage-word{color:#52715d}.drawn-heart{position:absolute;right:14%;top:14%;font:47px var(--script);color:#ae6576;transform:rotate(17deg);z-index:4}.scrapbook-signature{position:absolute;bottom:6.5%;left:5%;right:5%;text-align:center;z-index:5}.scrapbook-signature>p{font-size:9px;letter-spacing:.23em;color:#66533f}.scrapbook-signature>span{display:block;color:#9b6a65;font-size:16px;margin-top:5px}.groom-page .scrapbook-signature>span{color:#667c64}.next-chapter{position:absolute;bottom:2.2%;left:0;right:0;text-align:center;font-size:9px;color:#87755d;letter-spacing:.04em;z-index:5;min-height:32px}.next-chapter span{font-size:18px;margin-left:8px}
.has-js .scrapbook-heading>*,.has-js .portrait-model,.has-js .sticker,.has-js .collage-word,.has-js .drawn-heart,.has-js .scrapbook-signature>*{opacity:0;translate:0 18px;transition:opacity 1s,translate 1.2s cubic-bezier(.2,.65,.2,1)}.has-js .is-seen .scrapbook-heading>*{opacity:1;translate:0 0}.has-js .is-seen .scrapbook-heading>h2{transition-delay:.7s}.has-js .is-seen .scrapbook-heading>.portrait-subtitle{transition-delay:1.3s}.has-js .is-seen .portrait-model{opacity:1;translate:0 0;transition-delay:.4s}.has-js .is-seen .sticker{opacity:1;translate:0 0;transition-delay:calc(1.8s + var(--i)*.55s)}.has-js .is-seen .collage-word,.has-js .is-seen .drawn-heart{opacity:1;translate:0 0;transition-delay:4.5s}.has-js .is-seen .scrapbook-signature>*{opacity:1;translate:0 0;transition-delay:5.4s}
/* The foil itself is a heart, not a heart icon on a rectangle. */
.heart-section{display:grid;place-items:center;overflow:hidden;background:radial-gradient(ellipse at 50% 40%,#fffdf5,#eee6d8);text-align:center;padding:95px 22px 65px}.heart-content{width:100%;max-width:620px}.heart-section h2{font-size:clamp(47px,10vw,73px);line-height:1.04;color:#813349;margin:22px 0 15px}.heart-prompt{font:italic 18px var(--serif);color:#9d8664}.heart-surround{position:relative;width:min(330px,83vw);aspect-ratio:1;margin:35px auto 22px;filter:drop-shadow(0 15px 18px #9a754522)}.scratch-ticket{position:absolute;inset:0;isolation:isolate;clip-path:url(#heart-clip);background:#fff6e4}.date-underlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background:radial-gradient(ellipse,#fffdf7,#f2e6cd);color:#84394b;padding:10% 10% 16%}.date-underlay>p{font-size:8px;letter-spacing:.28em;margin-top:10px}.date-underlay>strong{font:74px/1.1 var(--serif);margin-top:5px}.date-underlay>span{font-size:11px;letter-spacing:.1em}.date-underlay>i{font-size:26px;margin-top:8px}.scratch-ticket canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:crosshair;transition:opacity 1s}.scratch-ticket.revealed canvas{opacity:0;pointer-events:none}.heart-spark{position:absolute;font-size:39px;color:#b58b3e;pointer-events:none}.spark-one{left:-7%;top:24%}.spark-two{right:-3%;bottom:17%;font-size:27px}.heart-section #scratch-instruction{font-size:12px;color:#847359}.heart-section .text-button{color:#945d5d;font-size:11px}.tiny-note{font:italic 14px var(--serif);margin-top:32px;color:#a08c70}.continue-card{font-size:12px;color:var(--red);margin:18px auto 0;width:max-content;display:block}.continue-card span{display:inline-block;margin-left:12px}.heart-section.unlocked h2{color:#517058}
/* The invitation is a keepsake: florals, silk ribbon, wine ink, fine gold rules. */
.invitation-section{padding:90px 20px 65px;background:radial-gradient(ellipse,#eadcc9,#eee5d5 65%);display:grid;place-items:center;text-align:center}.invitation-wrap{width:100%;max-width:530px}.invitation-kicker{margin-bottom:30px}.heirloom-card{position:relative;isolation:isolate;width:100%;aspect-ratio:2/3;background:#fff9ed;box-shadow:0 22px 40px #74603f26,0 0 0 1px #bfa47e66;border-radius:3px;overflow:hidden;transform:translateY(25px) rotate(-1.5deg);opacity:0;transition:opacity 1.7s,transform 2s cubic-bezier(.2,.65,.2,1)}.invitation-section.is-seen .heirloom-card,.no-js .heirloom-card{opacity:1;transform:rotate(-1deg)}.card-botanicals{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;z-index:2;pointer-events:none}.card-border{position:absolute;inset:7% 9%;border:1px solid #b7965b77;outline:1px solid #d8bc8b66;outline-offset:5px;z-index:1}.card-content{position:absolute;inset:19% 13% 13%;display:flex;align-items:center;flex-direction:column;justify-content:center;z-index:3;color:var(--red)}.card-blessing{font-size:clamp(11px,2.7vw,16px);color:#a47a3b}.card-prelude{font:clamp(11px,2.5vw,15px)/1.6 var(--serif);margin-top:16px;color:#8d7960}.card-names{font:clamp(43px,12vw,76px)/.94 var(--script);margin:21px 0 24px;display:flex;flex-direction:column;gap:1px}.card-names i{font:italic 23px/1.2 var(--serif);color:#b19359;margin:5px 0}.card-date{display:flex;align-items:center;justify-content:center;gap:19px;padding:12px 0;border-top:1px solid #c5a77a66;border-bottom:1px solid #c5a77a66;width:90%;color:#795d37}.card-date>span{font-size:8px;letter-spacing:.12em;line-height:1.7}.card-date>strong{font:46px/1 var(--serif);font-weight:400;border-left:1px solid #d3bd9755;border-right:1px solid #d3bd9755;padding:0 17px}.card-city{font:20px var(--serif);margin-top:18px}.card-venue-note{font-size:8px;color:#8c7c67;margin-top:4px}.card-flourish{font:22px var(--serif);color:#b19359;margin-top:16px;line-height:1}.card-tagline{font-size:24px;line-height:1.15;color:#9a5d60;margin-top:10px}.card-footnote{font-size:5px;letter-spacing:.15em;margin-top:21px;color:#a38759}.calendar-download{margin-top:35px}.under-card{font-size:18px;color:#9a8062;margin-top:18px}.calendar-section{padding:65px 28px 80px;background:#f8f1e5}.calendar-frame{background:#8d9a7a;padding:12px;border-radius:210px 210px 4px 4px;max-width:360px;width:100%;margin:auto;box-shadow:0 15px 35px #5c6a3c20;transform:rotate(2deg)}.calendar-paper{position:relative;isolation:isolate;overflow:hidden;border:1px solid #b6ba9455;border-radius:200px 200px 2px 2px;background:#fffaee;text-align:center;padding:72px 23px 30px;color:var(--green)}.calendar-flowers{position:absolute;inset:-30px 0 auto;width:100%;height:160px;object-fit:cover;object-position:top;z-index:-1;opacity:.6;mask-image:linear-gradient(black,transparent)}.calendar-overline{font-size:8px;letter-spacing:.12em}.calendar-paper h3{font:42px/1.2 var(--serif);margin-top:13px}.calendar-year{display:flex;align-items:center;justify-content:center;gap:12px;font:15px var(--serif);color:#8b8f74;margin-top:8px}.calendar-year>span{width:33px;height:1px;background:#c1b995}.wedding-calendar{width:100%;table-layout:fixed;border-collapse:collapse;font:16px/1.3 var(--serif);margin-top:23px}.wedding-calendar th{font:10px var(--sans);height:30px;font-weight:400;color:#95967d}.wedding-calendar td{height:35px;padding:0}.wedding-day span{width:32px;height:32px;border:1px solid #b17673;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;transform:rotate(-9deg)}.calendar-heart{display:block;font:30px var(--serif);color:#b78181;margin-top:15px}.calendar-note{font-size:29px}.calendar-date-note{font-size:9px;letter-spacing:.15em;color:#999176;margin-top:10px}
/* Celebration details and replies. */
.celebrations-section{padding:70px 24px 85px;background:#fff9ef}.section-heading{text-align:center}.section-heading h2{font:43px/1.2 var(--serif);color:var(--red);margin:18px 0}.section-heading>p:last-child{font:italic 17px/1.6 var(--serif);color:#96836b}.event-grid{max-width:880px;margin:45px auto 0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px}.event-card{border:1px solid #c2aa7955;background:#f7edda;border-radius:150px 150px 8px 8px;padding:38px 26px;text-align:center;min-width:0;box-shadow:0 8px 25px #87624209}.event-mehndi{background:#edf0e3}.event-sangeet{background:#f5e6e5}.event-wedding{background:#efe8da}.event-art{font:50px/1.2 var(--serif);color:#af8d50;margin:14px 0 20px}.event-card .eyebrow{font-size:8px;letter-spacing:.14em}.event-card h3{font-size:48px;color:#8c4352;margin:9px 0;line-height:1.3}.event-mehndi h3{color:var(--green)}.event-card>p:not(.eyebrow){font:16px/1.7 var(--serif);max-width:260px;margin:auto}.event-when{border-top:1px solid #bca57355;margin-top:23px;padding-top:20px;font-size:12px}.event-card .event-location{font-size:13px!important;margin-top:5px!important}.event-card>a{display:inline-block;border-bottom:1px solid #b1976b;margin-top:20px;font-size:11px;min-height:37px;padding:5px 0}.event-card small{display:block;font-size:10px;color:#8c7961;margin-top:5px}.countdown-section{padding:68px 22px;text-align:center;background:#3c5147;color:#f9efda}.countdown-section .eyebrow{color:#c8c7a5}.countdown-section h2{font-size:clamp(39px,7vw,58px);line-height:1.1;margin:18px 0 30px}.countdown{display:flex;justify-content:center;gap:24px;font-variant-numeric:tabular-nums}.countdown>div{display:flex;flex-direction:column;min-width:60px}.countdown-number{font:46px/1.2 var(--serif)}.countdown-unit{font-size:9px;letter-spacing:.16em;color:#c6ccb1;margin-top:6px}.countdown-dot{font:30px var(--serif);color:#acb398}.countdown-note{font:italic 14px var(--serif);color:#c4cbae;margin-top:25px}.letter-section{background:#eee4d4;padding:75px 28px}.letter-paper{max-width:750px;margin:auto;background:#fff9ee;border:1px solid #c7ae7b77;outline:1px solid #c7ae7b55;outline-offset:7px;padding:58px 60px;text-align:center}.letter-paper h2{font:clamp(42px,7vw,61px)/1.1 var(--script);color:#834350;margin:24px 0}.letter-paper>p:not(.eyebrow):not(.signatures){font:17px/1.8 var(--serif);color:#86775f;margin:16px auto 0;max-width:500px}.letter-flourish{display:block;font:27px var(--serif);color:#ae7681;margin:20px}.signatures{font-size:41px;color:var(--red);line-height:1.3;margin-top:8px}.rsvp-section{padding:65px 24px 85px;text-align:center;background:#ececdd}.rsvp-flower{font:48px var(--serif);color:#a88550}.rsvp-section h2{font-size:clamp(38px,7vw,57px);line-height:1.1;margin:17px 0;color:var(--green)}.rsvp-section>p:not(.eyebrow){font-family:var(--serif)}#rsvp-form{max-width:460px;margin:30px auto 0;display:grid;gap:16px;text-align:left}#rsvp-form label{display:grid;gap:6px;font-size:12px}#rsvp-form input,#rsvp-form textarea,#rsvp-form select{width:100%;min-width:0;max-width:100%;border:1px solid #bda97c77;border-radius:4px;background:#fffaf1;color:var(--green);font:16px/1.5 var(--serif);padding:12px;min-height:47px}#rsvp-form textarea{resize:vertical}#rsvp-form :focus-visible{outline:2px solid var(--green);outline-offset:3px}.rsvp-help{font-size:11px;line-height:1.7;color:#7a7661;text-align:center}#rsvp-result{max-width:460px;margin:30px auto;padding:25px;border:1px solid #b59a6377;background:#fff9ed}#rsvp-preview{white-space:pre-wrap;overflow-wrap:anywhere;font:16px/1.7 var(--serif);text-align:left}#rsvp-result .reveal-button{display:block;margin:15px auto;border:0;background:none;font-size:12px;color:var(--green);min-height:40px;border-bottom:1px solid #b1a17f}#rsvp-status{font-size:12px}.site-footer{text-align:center;padding:40px 24px 85px;border-top:1px solid #b29b6933}.footer-monogram{font:31px var(--serif);color:var(--red)}.footer-monogram span{font-family:var(--script);color:var(--gold)}.site-footer>p{font-size:9px;letter-spacing:.17em;margin-top:12px;color:#8d806a}.footer-actions{display:flex;justify-content:center;gap:25px;margin-top:20px}.footer-link{border:0;border-bottom:1px solid #b29b6960;background:none;color:#796950;font-size:11px;padding:5px 0;min-height:36px}.footer-note{display:block;font-size:28px;color:#a98a58;margin-top:24px}.toast{position:fixed;bottom:25px;left:50%;transform:translate(-50%,15px);max-width:calc(100vw - 40px);width:max-content;background:#304439;color:#fff5df;padding:12px 19px;z-index:60;font-size:13px;opacity:0;pointer-events:none;transition:opacity .3s,transform .3s}.toast.visible{opacity:1;transform:translate(-50%,0)}.floating-flowers{position:fixed;inset:0;pointer-events:none;z-index:20;overflow:hidden;transition:opacity 1s}.intro-lock .floating-flowers{opacity:0}.falling-flower{position:absolute;top:-10%;left:var(--x);width:var(--size);height:var(--size);opacity:0;animation:petal-fall var(--duration) linear var(--delay) infinite}.falling-flower:before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 30% 20%,#fff3e9,#d7a3a5);border-radius:75% 15% 65% 20%;box-shadow:inset 1px 1px 2px #fff9f399;transform:rotate(25deg)}@keyframes petal-fall{0%{transform:translate3d(0,-5vh,0) rotate(0);opacity:0}10%{opacity:.4}85%{opacity:.35}100%{transform:translate3d(45px,115vh,0) rotate(300deg);opacity:0}}
.story-paused *{animation-play-state:paused!important}.story-paused .scrapbook-stage *{transition-delay:0s!important}
@media(min-width:800px){.scrapbook-stage{min-height:760px}.scrapbook-heading h2{font-size:93px}.story-header{background:none}.story-control,.music-button{background:#fff9e7dc;box-shadow:0 1px 6px #71563110}.portrait-model{width:60%;left:20%}}
@media(max-width:600px){.story-actions{gap:8px}.story-header{padding:11px 14px}.music-button{padding:7px 8px}.story-control{font-size:9px;padding:7px 9px}.rsvp-nav{font-size:9px}.monogram{font-size:23px}.scrapbook-stage{min-height:650px}.scrapbook-heading h2{font-size:80px}.scrapbook-heading>.handwritten{font-size:22px}.portrait-subtitle{font-size:14px}.scrapbook-heading{top:14%}.chapter-number{top:10%}.portrait-collage{top:34%;bottom:16%}.word-one{font-size:18px;left:5%;top:17%}.word-two{font-size:13px;right:1%;top:63%}.scrapbook-signature{bottom:7.5%}.scrapbook-signature>p{font-size:8px}.scrapbook-signature>span{font-size:16px}.sticker figcaption{font-size:10px}.drawn-heart{font-size:36px;right:13%}.sticker-0{top:-10%}.sticker-1{top:-7%}.inner-letter{padding-top:13%;height:39%;top:26%}.inner-letter h2{font-size:43px}.inner-letter>p:not(.eyebrow){font-size:13px}.letter-signed{font-size:25px;margin-top:20px}.letter-heart{margin-top:10px}.inner-letter>.eyebrow{font-size:7px}.stage-envelope{top:28%;height:33%;left:18%;width:64%}.little-person{height:38%;width:45%;bottom:11%}.little-groom{left:2%}.little-bride{right:2%}.opening-skip{font-size:9px;padding:9px 13px;bottom:18px;right:15px}.theatre-heading{top:14%}.ribbon-button{bottom:5.2%;font-size:10px}.theatre-floor{height:13%}.heart-section{padding-top:90px}.heart-surround{width:min(300px,82vw);margin-top:32px}.heart-section h2{font-size:51px}.heart-section>.eyebrow{font-size:8px}.heirloom-card{aspect-ratio:2/3}.card-content{inset:18% 13% 12%}.card-names{font-size:60px;margin:18px 0}.card-prelude{font-size:12px;margin-top:13px}.card-date{gap:13px;padding:9px 0}.card-date>strong{font-size:39px;padding:0 13px}.card-city{font-size:19px;margin-top:14px}.card-venue-note{font-size:7px}.card-tagline{font-size:21px}.card-flourish{margin-top:10px}.card-footnote{margin-top:15px}.invitation-section{padding:82px 21px 55px}.invitation-kicker{font-size:7px}.event-grid{grid-template-columns:minmax(0,1fr);max-width:380px;gap:24px}.event-card{padding:34px 26px}.section-heading h2{font-size:35px}.section-heading>p:last-child{font-size:16px}.countdown{gap:10px}.countdown>div{min-width:50px}.countdown-number{font-size:38px}.countdown-dot{font-size:24px}.letter-paper{padding:45px 25px}.letter-paper>p:not(.eyebrow):not(.signatures){font-size:16px}.letter-section{padding:60px 24px}.letter-paper h2{font-size:45px}.calendar-section{padding:55px 35px 65px}}
@media(max-width:360px){.scrapbook-stage{min-height:620px}.scrapbook-heading h2{font-size:68px}.scrapbook-heading>.handwritten{font-size:19px}.portrait-subtitle{font-size:12px}.chapter-number{font-size:7px}.word-one{font-size:16px}.word-two{font-size:11px}.sticker figcaption{font-size:9px}.portrait-collage{top:34%;bottom:17%}.scrapbook-signature>span{font-size:14px}.next-chapter{font-size:8px}.story-control{font-size:8px;padding:7px}.music-button{font-size:9px}.rsvp-nav{font-size:8px}.opening-overline{font-size:7px}.devotional-mantra{font-size:13px}.sacred-ganesha{width:190px;height:190px}.theatre-heading h2{font-size:29px}.theatre-heading .eyebrow{font-size:6px}.inner-letter h2{font-size:36px;margin:12px 0}.inner-letter>p:not(.eyebrow){font-size:12px}.letter-signed{font-size:21px;margin-top:13px}.inner-letter>.eyebrow{font-size:6px}.inner-letter{height:40%}.stage-envelope .seal{width:48px;height:48px;left:calc(50% - 24px);font-size:13px}.envelope-caption{font-size:5px}.heart-section h2{font-size:44px}.heart-surround{width:255px}.date-underlay>strong{font-size:61px}.date-underlay>span{font-size:9px}.date-underlay>i{font-size:22px}.heart-section .eyebrow{font-size:7px}.card-names{font-size:48px;margin:13px 0}.card-names i{font-size:20px;margin:2px}.card-prelude{font-size:10px;margin-top:9px}.card-blessing{font-size:11px}.card-date{gap:11px;padding:8px 0}.card-date>strong{font-size:32px;padding:0 11px}.card-date>span{font-size:6px}.card-city{font-size:16px;margin-top:10px}.card-venue-note{font-size:6px}.card-flourish{font-size:18px;margin-top:8px}.card-tagline{font-size:18px;margin-top:6px}.card-footnote{font-size:4px;margin-top:12px}.countdown{gap:7px}.countdown>div{min-width:45px}.countdown-number{font-size:33px}.calendar-paper{padding:60px 16px 25px}.calendar-paper h3{font-size:36px}.wedding-calendar{font-size:14px}.wedding-day span{width:28px;height:28px}}
@media(max-height:720px) and (min-width:361px){.sacred-ganesha{height:170px;width:170px;margin:10px}.devotional-mantra{margin-top:15px;font-size:14px}.devotional-meaning{margin-top:15px}.blessing-next{margin-top:17px}.devotional-title{font-size:23px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.blessing-screen>*{opacity:1}.floating-flowers{display:none}.has-js .scrapbook-stage *{opacity:1;translate:0 0}.heirloom-card{opacity:1;transform:none}}
@media print{@page{size:A5;margin:10mm}.film-opening,.story-header,.floating-flowers,.scrapbook,.heart-section,.calendar-section,.celebrations-section,.countdown-section,.letter-section,.rsvp-section,.site-footer,.toast,.invitation-kicker,.calendar-download,.under-card{display:none!important}body{overflow:visible!important;background:white}.invitation-section{padding:0;background:white;min-height:0}.invitation-wrap{width:117mm;max-width:117mm}.heirloom-card{opacity:1!important;transform:none!important;box-shadow:none;width:117mm}.card-names{font-size:64px}.card-prelude{font-size:12px}.card-date>strong{font-size:39px}.card-tagline{font-size:24px}}
.rope{height:55%}
@keyframes rope-pull{0%,15%{transform:translateY(0)}35%,50%{transform:translateY(17%)}65%,87%{transform:translateY(30%)}100%{transform:translateY(0)}}
.little-groom{left:0;width:47%;height:36%;bottom:12%}.little-bride{right:-4%;width:57%;height:40%;bottom:12%}
.pose{object-position:center bottom}.little-groom{left:0;width:47%;height:32%;bottom:12%}.little-bride{right:0;width:53%;height:40%;bottom:12%}.rope-right{height:59%}
.portrait-model{width:86%;left:7%;object-position:center bottom}.portrait-collage{top:32%;bottom:15%}
@media(min-width:800px){.portrait-model{width:82%;left:9%}}
@media(max-width:600px){.portrait-model{width:86%;left:7%}.portrait-collage{top:32%;bottom:16%}}
@keyframes pose-reach{0%,20%{opacity:1}30%,87%{opacity:0}97%,100%{opacity:1}}@keyframes pose-middle{0%,20%{opacity:0}30%,46%{opacity:1}56%,100%{opacity:0}}@keyframes pose-down{0%,46%{opacity:0}56%,87%{opacity:1}97%,100%{opacity:0}}
.heirloom-card{aspect-ratio:2/3.5}.card-content{inset:24% 14% 20%;justify-content:center}.card-blessing{font-size:14px;line-height:1.5}.card-prelude{font-size:14px;line-height:1.4;margin-top:12px}.card-names{font-size:72px;line-height:.95;margin:22px 0;gap:0}.card-names i{font-size:23px;line-height:1;margin:4px 0}.card-date{padding:11px 0;gap:19px}.card-date>strong{font-size:45px;line-height:1}.card-city{font-size:22px;line-height:1.3;margin-top:15px}.card-venue-note{font-size:9px;line-height:1.4;margin-top:5px}.under-card{font-size:23px;line-height:1.3}
@media(max-width:600px){.card-blessing{font-size:12px;line-height:1.5}.card-prelude{font-size:11px;line-height:1.4;margin-top:9px}.card-names{font-size:52px;line-height:.95;margin:15px 0;gap:0}.card-names i{font-size:18px;line-height:1;margin:3px 0}.card-date{padding:8px 0;gap:13px}.card-date>strong{font-size:33px;padding:0 13px}.card-date>span{font-size:7px}.card-city{font-size:17px;line-height:1.3;margin-top:12px}.card-venue-note{font-size:8px;line-height:1.4;margin-top:4px}.under-card{font-size:21px}}
@media(max-width:360px){.card-blessing{font-size:10px}.card-prelude{font-size:9px;margin-top:7px}.card-names{font-size:43px;margin:12px 0}.card-names i{font-size:16px;margin:2px 0}.card-date{padding:7px 0;gap:10px}.card-date>strong{font-size:28px;padding:0 10px}.card-date>span{font-size:6px}.card-city{font-size:15px;margin-top:10px}.card-venue-note{font-size:7px;margin-top:3px}}
@media(max-height:700px){.blessing-screen{padding:35px 18px 65px}.sacred-ganesha{width:150px;height:150px;min-height:120px;margin:8px}.devotional-title{font-size:20px;line-height:1.7}.devotional-mantra{font-size:12px;line-height:2;margin-top:13px}.devotional-meaning{font-size:13px;line-height:1.5;margin-top:12px}.blessing-next{margin-top:12px}.inner-letter{top:23%;height:48%;padding:35px 20px 20px}.inner-letter h2{font-size:36px;margin:12px 0}.inner-letter>p:not(.eyebrow){font-size:13px}.letter-signed{font-size:23px;margin-top:12px}.letter-heart{font-size:22px;margin-top:6px}}
.film-opening.reset-animations .blessing-screen *{animation:none!important}
.theatre-lights{z-index:3;pointer-events:none;opacity:.55}
/* A compact date stack stays within the broad middle of the heart. */
.date-underlay{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto auto auto;align-content:start;justify-items:center;padding:0;padding-top:29%;row-gap:0;text-align:center}
.date-underlay>p{font-size:8px;line-height:1.4;letter-spacing:.22em;margin:0;color:#9c7250}
.date-underlay>strong{font-size:clamp(55px,20vw,71px);line-height:.98;margin:5px 0 4px;font-weight:400}
.date-underlay>span{font-size:10px;line-height:1.5;letter-spacing:.07em;margin:0;white-space:nowrap}
.date-underlay>i{font-size:23px;line-height:1.1;max-width:56%;white-space:nowrap;margin:9px 0 0}
@media(max-width:360px){.date-underlay>p{font-size:7px}.date-underlay>strong{font-size:57px;margin:5px 0 3px}.date-underlay>span{font-size:9px}.date-underlay>i{font-size:20px;margin-top:7px}}
/* Real rose petals descend, while an inner layer gently turns and drifts. */
.floating-flowers{z-index:6}.falling-flower{display:none}.rose-drift{position:absolute;left:var(--x);top:-10%;width:var(--size);height:var(--size);pointer-events:none;will-change:transform;opacity:0;animation:rose-descent var(--duration) linear var(--delay) infinite}
.rose-drift img{width:100%;height:100%;object-fit:contain;will-change:transform;filter:drop-shadow(0 2px 2px #6f252412);animation:rose-flutter var(--flutter) ease-in-out var(--delay) infinite alternate}
@keyframes rose-descent{0%{transform:translate3d(0,-5vh,0);opacity:0}8%{opacity:.65}88%{opacity:.55}100%{transform:translate3d(12px,115vh,0);opacity:0}}
@keyframes rose-flutter{0%{transform:translateX(calc(var(--sway)*-1)) rotate(var(--turn)) rotateY(10deg)}50%{transform:translateX(0) rotate(calc(var(--turn) + 30deg)) rotateY(38deg)}100%{transform:translateX(var(--sway)) rotate(calc(var(--turn) + 70deg)) rotateY(-15deg)}}
/* Matched character heights and restrained motion replace the raised-fist routine. */
.little-groom,.little-bride{width:48%;height:31%;bottom:12%;animation:none;filter:drop-shadow(0 10px 8px #0b050b45)}.little-groom{left:0}.little-bride{right:0}
.pose{inset:auto;bottom:0;left:50%;height:100%;width:auto;max-width:none;object-fit:contain;object-position:bottom;transform:translateX(-50%)}
.pulling .little-person{animation:gentle-pull 4.8s ease-in-out 1 forwards}.little-bride{transform-origin:50% 100%}.rope,.rope-right{height:68%;transition:opacity 1.4s,transform 3.5s ease-in-out}.pulling .rope{animation:none;transform:translateY(7%)}
.pulling .pose-0{animation:gentle-reach 4.8s ease-in-out 1 forwards}.pulling .pose-1{animation:gentle-lower 4.8s ease-in-out 1 forwards}.pulling .pose-2{animation:none;opacity:0}
@keyframes gentle-pull{0%,15%{translate:0 0}75%,100%{translate:0 4px}}
@keyframes gentle-reach{0%,30%{opacity:1}65%,100%{opacity:0}}
@keyframes gentle-lower{0%,30%{opacity:0}65%,100%{opacity:1}}
@media(prefers-reduced-motion:reduce){.rose-drift{display:none}}
.rope-left{left:23%}.rope-right{right:28%}.rope,.rope-right{height:64%}.pulling .rope{transform:translateY(12%)}
.little-groom .pose-1{transform:translateX(-50%) scaleX(-1)}.little-bride .pose-0{transform:translateX(-50%) scaleX(-1)}
.rope-left{left:20%}.rope-right{right:17%}.rope,.rope-right{height:61%}
@keyframes gentle-reach{0%,49.9%{opacity:1}50%,100%{opacity:0}}@keyframes gentle-lower{0%,49.9%{opacity:0}50%,100%{opacity:1}}
