:root{--ink:#273028;--cream:#f4f0e7;--gold:#9a7b52}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--cream);color:var(--ink);font-family:'Be Vietnam Pro',sans-serif;font-weight:300}.hero{height:100svh;position:relative;color:white;overflow:hidden}.hero>img,.quote>img,.ending>img{width:100%;height:100%;object-fit:cover}.shade{position:absolute;inset:0;background:linear-gradient(#0005,#0001 45%,#0008)}.heroText{position:absolute;inset:auto 20px 9vh;text-align:center}.heroText small,.eyebrow{letter-spacing:.28em;font-size:11px}.heroText h1{font:500 clamp(48px,11vw,100px)/.85 'Playfair Display';margin:22px 0}.heroText h1 i{font:400 .75em Allura}.heroText p{letter-spacing:.3em}.heroText a,.events a{display:inline-block;color:inherit;text-decoration:none;border:1px solid currentColor;padding:11px 18px;font-size:11px;letter-spacing:.12em}.paper{max-width:720px;margin:auto;padding:90px 25px;text-align:center}.paper h2,.script{font:400 54px Allura;margin:10px}.guest{font:500 34px 'Playfair Display'}.line{width:60px;border-top:1px solid var(--gold);margin:25px auto}.families{max-width:950px;margin:auto;padding:40px 25px 100px;display:grid;grid-template-columns:1fr auto 1fr;gap:35px;text-align:center}.families b{font-size:12px;letter-spacing:.2em}.families h3{font:500 20px/1.6 'Playfair Display'}.families span,.flower{font:36px Allura;color:var(--gold)}.couple{background:#263129;color:#f7f3ea;display:grid;grid-template-columns:1fr 1fr;align-items:center}.couple img{width:100%;height:700px;object-fit:cover}.couple>div{text-align:center;padding:50px}.couple p{font-size:10px;letter-spacing:.2em}.couple h2{font:500 38px 'Playfair Display'}.couple h2 small{display:block;font:30px Allura;color:#d9c7a6}.couple i{font:46px Allura}.events{padding:90px 20px;text-align:center}.cards{max-width:1050px;margin:40px auto;display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.cards article{border:1px solid #b8b2a5;padding:40px 22px;min-height:290px}.cards h3{letter-spacing:.14em;font-size:14px}.cards b{font:500 20px 'Playfair Display'}.cards p{line-height:1.8;font-size:13px}.cards a{color:var(--ink)}.quote{height:75vh;position:relative;color:white}.quote:after,.ending:after{content:"";position:absolute;inset:0;background:#0006}.quote blockquote{position:absolute;z-index:1;left:8%;bottom:12%;font:italic 30px/1.5 'Playfair Display'}.count{text-align:center;padding:80px 20px;background:#e7e2d6}.count>div{display:flex;justify-content:center;gap:35px}.count b{font:500 38px 'Playfair Display'}.count small{display:block;font:300 10px 'Be Vietnam Pro'}.timeline{padding:90px 20px;text-align:center}.timeline>div{max-width:560px;margin:40px auto;text-align:left;border-left:1px solid var(--gold);padding-left:35px}.timeline p{display:grid;grid-template-columns:80px 1fr}.gallery{text-align:center;padding:70px 12px 100px}.grid{max-width:1000px;margin:40px auto;columns:3 260px;column-gap:10px}.grid img{width:100%;margin-bottom:10px}.rsvp{padding:90px 20px;text-align:center;background:#dfe3d8}.rsvp form{max-width:600px;margin:30px auto;display:grid;gap:12px}.rsvp input,.rsvp select,.rsvp textarea{border:0;border-bottom:1px solid #8b9185;background:transparent;padding:14px;font:inherit}.rsvp textarea{min-height:90px}.rsvp button{border:0;background:#354239;color:white;padding:15px}.ending{height:90vh;position:relative;color:white;text-align:center}.ending>div{position:absolute;z-index:1;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center}.ending h2{font:70px Allura;margin:15px}.ending h3{font:500 30px 'Playfair Display'}.music{position:fixed;z-index:10;right:18px;bottom:18px;width:44px;height:44px;border-radius:50%;border:1px solid #fff8;background:#273028dd;color:white}.reveal{opacity:0;transform:translateY(25px);transition:.9s}.reveal.on{opacity:1;transform:none}@media(max-width:700px){.families{grid-template-columns:1fr}.flower{display:none}.couple{grid-template-columns:1fr}.couple img{height:70vh}.cards{grid-template-columns:1fr}.quote blockquote{left:20px;right:20px;font-size:21px}.count>div{gap:15px}.count b{font-size:28px}.heroText h1{font-size:56px}}

.music.playing{animation:musicPulse 1.2s ease-in-out infinite;}@keyframes musicPulse{50%{transform:scale(1.08)}}
