@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;1,400;1,500&family=DM+Sans:wght@400;500;600;700&display=swap');
:root{--cream:#f7f4ee;--rose:#f8e9e9;--wine:#754553;--ink:#3d3033;--muted:#7d7070;--gold:#b7986e;--border:#e4d3c0;--paper:linear-gradient(130deg,#fdfaf4,#f8eeee);--shade:0 18px 38px #5d414314;--serif:'Cormorant Garamond',Georgia,serif}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--cream);color:var(--ink);font:14px/1.85 'DM Sans',sans-serif}.closed{overflow:hidden}[hidden]{display:none!important}.symbols{position:absolute;width:0;height:0}button,input,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit}p,h1,h2,h3,h4{margin:0}h1,h2,h3,h4,.hero-verse,.venue-name,.rsvp-copy,.signoff{font-family:var(--serif);font-style:italic;font-weight:400;line-height:1.05}h2{font-size:clamp(32px,9vw,44px)}h3{font-size:28px;color:var(--wine)}.caps{font-size:10px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;line-height:1.85}
.cover{position:fixed;z-index:50;inset:0;display:grid;place-items:center;text-align:center;background:linear-gradient(138deg,#faf7ee,#f8f5f1 63%,#f5f4ef);transition:opacity .75s ease,visibility .75s}.cover.is-open{opacity:0;visibility:hidden;pointer-events:none}.cover-content{width:min(88%,480px);color:#8d6270}.wheel{display:block;margin:0 auto 30px;width:clamp(82px,22vw,116px);stroke:currentColor;stroke-width:.83;fill:none;animation:turn 18s linear infinite}@keyframes turn{to{transform:rotate(360deg)}}.cover h1{font-size:clamp(40px,11vw,58px);margin-bottom:13px}.cover .caps{letter-spacing:.36em}.cover button{margin-top:35px;padding:14px 31px;min-width:204px;background:transparent;border:1px solid var(--wine);border-radius:5px;color:var(--wine);text-transform:uppercase;letter-spacing:.28em;font-size:11px;box-shadow:0 10px 23px #a87e7412}.cover button:hover{background:#f5e8e9}
.nav-bar{position:sticky;top:12px;z-index:8;max-width:720px;margin:12px auto 0;width:calc(100% - 32px);height:66px;display:flex;align-items:center;justify-content:space-between;padding:0 21px;background:#f8e9e9f5;border:1px solid var(--border);border-radius:100px;box-shadow:var(--shade);backdrop-filter:blur(10px)}.monogram{font:italic 24px/1 var(--serif);letter-spacing:.12em;color:var(--wine);text-decoration:none}.menu-button{width:43px;height:44px;border:0;background:none;display:grid;align-content:center;gap:8px;padding:4px;color:#746565}.menu-button span{height:2px;border-radius:4px;background:currentColor}.menu{position:absolute;inset:calc(100% + 10px) 0 auto;display:grid;padding:12px 24px;background:#fcf8f0;border:1px solid var(--border);border-radius:16px;box-shadow:var(--shade);text-align:center}.menu a,footer a{padding:12px;text-decoration:none;font-size:11px;letter-spacing:.19em;text-transform:uppercase}.menu a+a{border-top:1px solid #e9ded2}
section{scroll-margin-top:95px;text-align:center}section>h2{margin-bottom:22px}.hero-wrap{padding:59px 16px 25px}.hero,.parents,.event-card,.directions,.rsvp-card,.wish-form,.blessing{position:relative;background:var(--paper);border:1px solid var(--border);box-shadow:var(--shade)}.hero{max-width:650px;margin:auto;border-radius:45% 45% 27px 27px / 29% 29% 27px 27px;padding:61px 24px 41px}.stitched:before{content:'';position:absolute;inset:7px;border:1px dashed #e8dcd0;border-radius:inherit;pointer-events:none}.hero-cross{width:27px;height:35px;color:var(--gold);margin-bottom:14px}.hero-verse{font-size:17px;color:var(--wine);line-height:1.32}.verse-source{margin-top:9px;color:var(--muted)}.hero-intro{max-width:365px;margin:30px auto 17px;color:#9b7851}.hero h2{font-size:clamp(39px,12vw,64px);color:var(--wine)}.hero-date{margin-top:19px}.ornament{width:min(100%,315px);margin:25px auto 28px;display:flex;align-items:center;justify-content:center;gap:13px;color:var(--gold);font-size:19px;line-height:1}.ornament:before,.ornament:after{content:'';height:1px;flex:1;background:linear-gradient(90deg,transparent,#bd9d78)}.ornament:after{transform:rotate(180deg)}.ornament.small{width:60px;margin:45px auto}.ornament.heart{font-size:26px;margin-bottom:0}
.countdown-section{padding:75px 22px 79px;background:radial-gradient(ellipse at top,#f0e8dc,#f7f5ef 72%)}.countdown-section>.caps{color:var(--wine)}.countdown{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(8px,2.7vw,18px);max-width:515px;margin:36px auto}.countdown>div{background:var(--paper);border:1px solid var(--border);border-radius:19px;box-shadow:inset 0 0 0 4px #f8f0ea,0 12px 30px #71564b0e;padding:26px 2px 24px;min-width:0}.countdown strong{display:block;color:var(--wine);font:400 clamp(30px,10vw,58px)/1 var(--serif);font-variant-numeric:tabular-nums}.countdown span{display:block;margin-top:12px;font-size:clamp(8px,2.1vw,10px);letter-spacing:.15em;text-transform:uppercase;color:#92704f}.countdown-section .count-date{color:var(--muted);font-weight:500}
.family-section{padding:62px 16px 67px;background:radial-gradient(ellipse at 95% 68%,#f1dcd5,#fbf5ed 85%)}.photo-card{max-width:545px;margin:44px auto 0;position:relative;overflow:hidden;border:1px solid #c9ad89;border-radius:31px;padding:29px 26px 27px;background:#fcf8f0;box-shadow:var(--shade)}.photo-card:before{content:'';position:absolute;inset:8px;border:1px solid var(--border);border-radius:24px;pointer-events:none}.sprig{position:absolute;width:100px;height:116px;pointer-events:none;z-index:1}.s1{bottom:4px;left:-29px}.s2{bottom:11px;right:-14px;transform:rotate(89deg)}.s3{top:10px;right:-20px;transform:rotate(155deg);opacity:.56}.portrait{position:relative;z-index:2;aspect-ratio: .86;border-radius:24px;overflow:hidden;background:linear-gradient(145deg,#f2e1d3,#f8ebed);display:grid;place-items:center;box-shadow:0 13px 25px #5c42331b}.portrait img{height:100%;width:100%;object-fit:cover;position:absolute;inset:0}.portrait-placeholder svg{width:45px;height:55px;color:var(--gold)}.photo-card h3{position:relative;z-index:2;font-size:clamp(34px,8.6vw,50px);margin:26px auto 13px}.photo-card .caps{color:var(--muted)}.parents{max-width:515px;margin:auto;border-radius:23px;padding:33px 20px 37px}.parents .caps{color:#98734d}.parents h3{margin-top:13px}
.events-section,.wishes-section{padding:75px 24px 70px}.section-lede{max-width:480px;color:var(--muted);margin:0 auto 48px}.event-card,.directions,.rsvp-card,.wish-form,.blessing{max-width:510px;margin:0 auto 36px;border-radius:23px}.event-card{overflow:hidden;text-align:left;padding:41px 32px 36px;border-top:6px solid var(--gold)}.event-card.lunch{border-top-color:var(--wine)}.event-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:23px;border-bottom:1px dashed #e6d8cf}.event-heading .caps,.event-time{color:#8b6268}.event-heading h3{margin-top:11px;font-size:clamp(39px,9vw,53px)}.event-icon{width:52px;height:52px;flex:none;display:grid;place-items:center;border-radius:50%;border:1px solid #e8d7d1;background:#f3e6e6;font-size:25px}.event-detail{padding-top:20px}.event-date{font-weight:600}.event-time{margin-top:4px}.event-detail h4,.venue-name{font-size:19px;line-height:1.24}.event-detail h4{margin:25px 0 4px}.location,.event-note{color:var(--muted)}.event-note{margin-top:21px}.map-link,.solid,.submit{display:inline-flex;align-items:center;justify-content:center;gap:6px;text-transform:uppercase;letter-spacing:.15em;font-size:10px;font-weight:700;text-decoration:none}.map-link{color:var(--wine);margin-top:12px;border-bottom:1px dashed var(--wine);padding:2px 0}.map-link svg,.solid svg{width:13px;height:13px}.directions{padding:43px 25px}.directions h3{font-size:32px;margin-bottom:35px}.directions .caps{color:#8b6268}.venue-name{margin:12px 0 20px;color:#635557}.solid,.submit{background:var(--wine);color:#fff9f5;border:0;border-radius:5px;padding:12px 22px;box-shadow:0 7px 15px #75455319}.directions hr{width:57px;border:0;border-top:1px solid var(--border);margin:34px auto}
.rsvp-section{padding:12px 24px 24px}.rsvp-card{text-align:left;overflow:hidden}.rsvp-heading{background:linear-gradient(135deg,#3e3033,#754553);padding:47px 29px 51px;color:#fff8f3}.rsvp-heading .caps{color:#d5b990}.rsvp-heading h2{font-size:clamp(32px,9vw,44px);margin:22px 0}.rsvp-copy{font-size:16px;line-height:1.5;margin-top:27px;color:#f3e3e5}.rsvp-form,.wish-form{padding:37px 29px}.rsvp-form>label,legend{display:block;text-transform:uppercase;letter-spacing:.19em;color:#805c63;font-size:10px;font-weight:600;margin-bottom:8px}input:not([type=radio]),textarea{display:block;background:linear-gradient(145deg,#f9f0ee,#f6eaea);border:1px solid var(--border);border-radius:10px;width:100%;padding:13px 15px;font-size:15px;color:var(--ink)}textarea{min-height:87px;resize:vertical;line-height:1.4}fieldset{border:0;margin:20px 0;padding:0;min-inline-size:0}.attendance{display:grid;grid-template-columns:1fr 1fr;gap:8px}.attendance label:last-child{grid-column:1/-1}.attendance label{position:relative;cursor:pointer}.attendance input{position:absolute;opacity:0}.attendance span{display:grid;place-items:center;text-align:center;text-transform:uppercase;line-height:1.3;background:#f6eaea;border:1px solid var(--border);border-radius:9px;padding:11px 6px;min-height:49px;font-size:11px}.attendance input:checked+span{color:#fff;background:var(--wine);border-color:var(--wine)}.attendance input:focus-visible+span{outline:2px solid #a57b4c;outline-offset:2px}.submit{margin-top:29px;background:linear-gradient(115deg,var(--wine),#3e3033);border-radius:10px;min-height:44px}.rsvp-form .submit{width:100%}.status{font-size:13px;color:var(--wine);margin-top:11px}.status:empty{display:none}.wish-form{text-align:left}.wish-form h3{font-size:21px;margin-bottom:25px}.wish-form textarea{margin-top:14px}.corners i{position:absolute;width:19px;height:19px;border:solid var(--gold);border-width:2px 0 0 2px;top:8px;left:8px;pointer-events:none}.corners i:nth-child(2){left:auto;right:8px;transform:rotate(90deg)}.corners i:nth-child(3){top:auto;bottom:8px;transform:rotate(-90deg)}.corners i:nth-child(4){top:auto;left:auto;right:8px;bottom:8px;transform:rotate(180deg)}.blessing{text-align:left;padding:25px;margin-bottom:18px;overflow-wrap:anywhere}.blessing p{font:italic 17px/1.3 var(--serif)}.blessing small{color:var(--wine);display:flex;justify-content:space-between;gap:12px;margin-top:15px}.blessing small time{color:var(--muted)}
footer{text-align:center;background:linear-gradient(#754553,#433437);color:#e6d0d1;padding:68px 24px 62px}footer .ornament{margin:0 auto 42px}footer h2{color:#d3b38b;font-size:36px}footer .caps{margin-top:20px;font-weight:400}footer nav{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;margin:30px auto 35px;max-width:440px}footer a{padding:7px 9px}.signoff{color:#d3b38b;font-size:18px}.music{position:fixed;right:max(18px,env(safe-area-inset-right));bottom:max(18px,env(safe-area-inset-bottom));z-index:9;border-radius:50%;border:1px solid var(--gold);box-shadow:0 7px 20px #45353b32;background:#3e3033;color:#d3b38b;width:54px;height:54px;font-size:23px;display:grid;place-items:center}.music.playing span{font-size:0;display:block;width:14px;height:13px;border-inline:4px solid currentColor;transform:rotate(-14deg)}.celebration{position:fixed;z-index:40;inset:0;pointer-events:none;overflow:hidden}.celebration i{position:absolute;top:-15px;width:6px;height:9px;border-radius:1px;animation:fall var(--duration) linear var(--delay) both}@keyframes fall{to{transform:translate(var(--drift),110dvh) rotate(var(--spin));opacity:0}}@media(max-width:360px){.event-card,.rsvp-form,.wish-form{padding-inline:22px}.hero{padding-inline:17px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.wheel,.celebration i{animation:none}.cover{transition:none}}

.parents-greeting {
  font: italic 17px/1.3 var(--serif);
  color: var(--ink);
}
.parents .parents-greeting + h3 {
  margin-top: 18px;
}

.music.playing span {
  animation: music-spin 3s linear infinite;
}
@keyframes music-spin {
  from { transform: rotate(-14deg); }
  to { transform: rotate(346deg); }
}
@media (prefers-reduced-motion: reduce) {
  .music.playing span { animation: none; }
}


/* Keep the full portrait visible within the floral frame. */
.portrait {
  aspect-ratio: 2 / 3;
}
.portrait img {
  object-fit: contain;
}
.event-heading h3 {
  font-size: clamp(32px, 8.5vw, 46px);
}
.directions h3 {
  font-size: clamp(22px, 6vw, 30px);
}
.venue-name {
  font-size: clamp(18px, 4.6vw, 23px);
}
