@font-face{font-family:'Pinyon Script';src:url(../fonts/pinyon-script-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Great Vibes';src:url(../fonts/great-vibes-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Cinzel';src:url(../fonts/cinzel-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Jost';font-weight:400;src:url(../fonts/jost-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Jost';font-weight:500;src:url(../fonts/jost-latin-500-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Cormorant Garamond';font-weight:400;src:url(../fonts/cormorant-garamond-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Cormorant Garamond';font-weight:400;font-style:italic;src:url(../fonts/cormorant-garamond-latin-400-italic.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Cormorant Garamond';font-weight:500;src:url(../fonts/cormorant-garamond-latin-500-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Cormorant Garamond';font-weight:600;src:url(../fonts/cormorant-garamond-latin-600-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Playfair Display';font-weight:400;src:url(../fonts/playfair-display-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Playfair Display';font-weight:400;font-style:italic;src:url(../fonts/playfair-display-latin-400-italic.woff2) format('woff2');font-display:swap}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}
body.locked{overflow:hidden}
img{max-width:100%}
a{color:var(--primary)}
.paper{background-color:var(--ground);background-image:var(--paper);background-size:1240px auto}
.script{font-family:var(--script);font-weight:400;line-height:1.08;color:var(--primary)}
.serif{font-family:var(--serif)}
.label{font-family:var(--label);font-size:12px;letter-spacing:4px;text-transform:uppercase;color:var(--labelc)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:54px;padding:0 32px;border:none;border-radius:999px;background:var(--primary);color:var(--onPrimary);font-family:var(--sans);font-size:13px;letter-spacing:3px;text-transform:uppercase;text-decoration:none;cursor:pointer}
.btn.ghost{background:transparent;color:var(--primary);border:1px solid var(--primary)}
.shadow{filter:drop-shadow(0 18px 24px rgba(50,44,30,.24))}
.wrap{max-width:1140px;margin:0 auto;padding:0 24px}
section{position:relative}

/* nav */
.nav{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;max-width:1180px;margin:0 auto;padding:20px 24px}
.nav .mono{font-family:var(--script);font-size:34px;line-height:1;color:var(--primary);text-decoration:none}
.nav .links{display:flex;flex-wrap:wrap;align-items:center;gap:24px;font-size:12px;letter-spacing:3px;text-transform:uppercase}
.nav .links a{text-decoration:none}
.nav .links .btn{min-height:44px;padding:0 22px;font-size:12px}
@media(max-width:760px){.nav .links a:not(.btn){display:none}}

/* hero collage */
.hero{overflow:hidden;padding:0 12px 24px}
.stage{position:relative;width:min(1100px,100%);margin:0 auto;aspect-ratio:1100/780;container-type:inline-size}
.stage>*{position:absolute}
.rise{animation:rise 1.4s cubic-bezier(.22,.8,.24,1) both;animation-play-state:paused}
body.revealed .rise{animation-play-state:running}
@keyframes rise{from{opacity:0;translate:0 34px}to{opacity:1;translate:0 0}}
.pola{background:#FBF9F4;padding:.9cqw .9cqw 3.6cqw;box-shadow:0 1.2cqw 2.4cqw rgba(40,36,24,.22)}
.pola img{display:block;width:100%;aspect-ratio:4/5;object-fit:cover}
.pola p{position:absolute;left:0;right:0;bottom:.6cqw;margin:0;text-align:center;font-family:var(--script);font-size:2cqw;color:var(--primary)}
.cardtext{position:absolute;left:13%;right:13%;text-align:center;display:flex;flex-direction:column;align-items:center}
.cardtext .k{margin:0;font-size:.85cqw;letter-spacing:.3cqw;text-transform:uppercase;color:var(--muted)}
.cardtext h1{margin:1.1cqw 0 0;font-family:var(--script);font-weight:400;font-size:3.9cqw;line-height:1.05;color:var(--primary)}
.cardtext h1 span{display:block;font-family:var(--serif);font-style:italic;font-size:1.6cqw;color:var(--accent)}
.cardtext .p{margin:1.1cqw 0 0;font-family:var(--serif);font-size:1.2cqw;line-height:1.35}
.cardtext .d{margin:1.1cqw 0 0;font-family:var(--serif);font-size:1.35cqw;letter-spacing:.2cqw}
.cardtext .v{margin:.3cqw 0 0;font-size:.8cqw;letter-spacing:.2cqw;text-transform:uppercase;color:var(--muted)}
.music{right:1%;bottom:3%;z-index:6;display:flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border-radius:999px;border:1px solid var(--line);background:rgba(250,247,240,.88);font-family:var(--sans);font-size:12px;letter-spacing:2px;text-transform:uppercase;color:var(--primary);cursor:pointer}
.below{text-align:center;display:flex;flex-direction:column;align-items:center;gap:6px;margin-top:8px}
.below .place{font-family:var(--script);font-size:clamp(48px,7vw,84px);line-height:1.1;color:var(--primary);margin:0}
.below .when{font-family:var(--serif);font-size:22px;letter-spacing:1px;margin:0}
.below .venue{font-family:var(--serif);font-size:20px;font-style:italic;color:var(--muted);margin:0}
@media(max-width:600px){.cardtext .k{font-size:6px}.cardtext .p{font-size:8px}.cardtext .v{font-size:6px}.below .when{font-size:18px}}

/* petals */
.petal{position:absolute;width:30px;z-index:4;pointer-events:none;filter:drop-shadow(0 4px 4px rgba(50,44,30,.18));animation:drift 16s linear infinite,sway 5s ease-in-out infinite}
@keyframes drift{0%{top:-6%;rotate:0deg;opacity:0}10%{opacity:.9}100%{top:102%;rotate:260deg;opacity:.9}}
@keyframes sway{0%,100%{translate:0 0}50%{translate:40px 0}}

/* dividers */
.trim{height:96px;background-image:var(--trimtile);background-size:520px auto;background-position:center;background-repeat:repeat-x;mix-blend-mode:multiply}
.line{display:flex;align-items:center;justify-content:center;gap:18px;padding:28px 24px}
.line::before,.line::after{content:"";height:1px;width:min(240px,30vw);background:var(--line)}
.line img{width:46px}

/* painted sections */
.painted{color:#FBF7EE;text-align:center;background-color:#333;background-image:linear-gradient(rgba(var(--ov),.5),rgba(var(--ov),.6)),var(--painting);background-size:cover;background-position:center}
.count{padding:110px 24px}
.count .script{color:#FBF7EE;font-size:clamp(40px,5vw,64px);margin:0}
.cd{max-width:760px;margin:32px auto 0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.cd b{display:block;font-family:var(--serif);font-weight:400;font-size:clamp(40px,6vw,76px);line-height:1}
.cd span{display:block;margin-top:10px;font-size:12px;letter-spacing:4px;text-transform:uppercase;color:#E9E1CC}
.band{padding:150px 24px;color:#FBF7EE;text-align:center;background-image:linear-gradient(rgba(24,22,16,.25),rgba(24,22,16,.6)),var(--venue);background-size:cover;background-position:center 60%}
.band .script{color:#FBF7EE;font-size:clamp(46px,6vw,80px);margin:8px 0 0}

/* story */
.story{padding:110px 24px}
.story .grid{max-width:1120px;margin:0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:64px}
.story .pics{flex:1 1 380px;min-width:0;position:relative;height:520px}
.story .pics .p1,.story .pics .p2{position:absolute;background:#FBF9F4;box-shadow:0 18px 36px rgba(40,36,24,.2)}
.story .pics .p1{left:4%;top:2%;width:58%;rotate:-5deg;padding:14px 14px 56px}
.story .pics .p2{right:2%;top:30%;width:50%;rotate:6deg;padding:12px 12px 50px}
.story .pics img.ph{display:block;width:100%;object-fit:cover}
.story .pics p{position:absolute;left:0;right:0;bottom:10px;margin:0;text-align:center;font-family:var(--script);font-size:26px;color:var(--primary)}
.story .txt{flex:1 1 420px;min-width:0;display:flex;flex-direction:column;gap:18px}
.story h2,.sec h2{margin:0;font-family:var(--serif);font-weight:500;font-size:clamp(36px,4vw,52px);line-height:1.08}
.story .txt p{margin:0;font-size:17px;color:var(--muted)}
@media(max-width:600px){.story .pics{height:420px}}

/* events */
.sec{padding:110px 24px}
.sec .head{text-align:center;display:flex;flex-direction:column;gap:10px;align-items:center;margin-bottom:44px}
.sec .head p{margin:0;max-width:560px;color:var(--muted)}
.events{max-width:1160px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:28px;justify-items:center}
.ev{position:relative;width:100%;max-width:340px;aspect-ratio:var(--cardAr)}
.ev:nth-child(odd){rotate:-1.2deg}.ev:nth-child(even){rotate:1deg}
.ev>img.bg{position:absolute;inset:0;width:100%;height:100%;filter:drop-shadow(0 18px 24px rgba(50,44,30,.2))}
.ev .in{position:absolute;inset:var(--cardTop) 12% 10%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;text-align:center}
.ev .in .label{font-size:11px;letter-spacing:3px}
.ev h3{margin:0;font-family:var(--script);font-weight:400;font-size:44px;line-height:1.05;color:var(--primary)}
.ev .t{margin:0;font-family:var(--serif);font-size:19px}
.ev .n{margin:0;font-size:14px;color:var(--muted)}
.ev .dr{margin:0;font-size:12px;letter-spacing:2px;text-transform:uppercase;color:var(--muted)}

/* travel */
.travel .grid{max-width:1120px;margin:0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:56px}
.framed{flex:1 1 420px;min-width:0;padding:14px;background:linear-gradient(135deg,#b59a5e,#7a6436 40%,#c8ad6c 70%,#7d6638);box-shadow:0 24px 50px rgba(40,36,24,.3)}
.framed img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border:6px solid #f4ecd8}
.travel .txt{flex:1 1 380px;min-width:0;display:flex;flex-direction:column;gap:20px}
.travel h3{margin:0;font-family:var(--serif);font-weight:600;font-size:24px}
.travel .txt p{margin:4px 0 0;color:var(--muted)}

/* rsvp */
.rsvp{padding:60px 24px 110px}
.rcard{max-width:820px;margin:0 auto;position:relative;background:var(--cardc);box-shadow:0 24px 60px rgba(40,36,24,.16);padding:96px clamp(20px,5vw,48px) 48px;display:flex;flex-direction:column;gap:22px}
.rcard>img.seal{position:absolute;left:50%;top:-58px;width:116px;translate:-50% 0;filter:drop-shadow(0 8px 12px rgba(40,10,15,.35))}
.rcard .top{text-align:center}
.rcard .top .script{font-size:clamp(46px,5vw,64px);margin:0}
.rcard .top p{margin:6px 0 0;color:var(--muted)}
.f{display:grid;gap:16px}
.f label{display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--muted)}
.f input[type=text],.f input[type=email],.f input[type=number],.f select,.f textarea{min-height:50px;padding:10px 14px;border:1px solid var(--line);border-radius:4px;background:var(--ground);font-family:var(--sans);font-size:16px;color:var(--ink)}
.f .row{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
.f fieldset{border:1px solid var(--line);border-radius:6px;padding:14px 16px;margin:0}
.f legend{padding:0 6px;font-family:var(--serif);font-size:20px;font-weight:600;color:var(--ink)}
.f .ev-choice{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}
.f .ev-choice:last-child{border-bottom:none}
.f .ev-choice span{font-family:var(--serif);font-size:19px;color:var(--ink)}
.f .yn{display:flex;gap:6px}
.f .yn label{flex-direction:row;align-items:center;gap:6px;padding:8px 14px;border:1px solid var(--line);border-radius:999px;color:var(--ink);cursor:pointer}
.f .yn input{accent-color:var(--primary)}
.hp{position:absolute;left:-9999px}
.done{display:none;text-align:center}
.done .script{font-size:52px;margin:0}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

/* faq, registry, footer */
.faq{max-width:760px;margin:0 auto}
.faq details{border-bottom:1px solid var(--line);padding:18px 0}
.faq summary{cursor:pointer;list-style:none;font-family:var(--serif);font-size:25px;font-weight:600}
.faq summary::-webkit-details-marker{display:none}
.faq p{margin:10px 0 0;color:var(--muted)}
.registry{text-align:center;display:flex;flex-direction:column;align-items:center;gap:18px;padding:0 24px 110px}
.registry img{width:220px}
.registry p{margin:0;max-width:520px;color:var(--muted)}
.registry .links{display:flex;flex-wrap:wrap;justify-content:center;gap:12px}
.foot{padding:120px 24px;display:flex;flex-direction:column;gap:10px;align-items:center}
.foot .script{color:#FBF7EE;font-size:clamp(56px,7vw,96px);margin:0}
.foot small{display:block;margin-top:26px;font-size:12px;letter-spacing:1px;color:#E9E1CC;opacity:.85}
.foot small a{color:#E9E1CC}

/* envelope intro */
.intro{position:fixed;inset:0;z-index:50;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:24px;text-align:center;transition:opacity .9s ease 1.1s}
.intro .greet{transition:opacity .5s}
.intro .greet p{margin:0}
.intro .greet .who{margin-top:6px;font-family:var(--serif);font-style:italic;font-size:28px}
.env{position:relative;width:min(380px,86vw);transition:transform 1.2s cubic-bezier(.22,.8,.24,1),opacity 1.1s}
.env>img.e{display:block;width:100%;filter:drop-shadow(0 22px 28px rgba(50,44,30,.28))}
.env>img.e.blend{mix-blend-mode:multiply;filter:none}
.env .sealbtn{position:absolute;width:27%;aspect-ratio:1;translate:-50% -50%;padding:0;border:none;background:none;border-radius:50%;cursor:pointer;animation:pulse 2.6s ease-in-out infinite;transition:transform .7s cubic-bezier(.22,.8,.24,1),opacity .6s}
.env .sealbtn img{width:100%;display:block;filter:drop-shadow(0 6px 10px rgba(40,10,15,.35))}
.env .sprig{position:absolute;width:26%;left:58%;top:20%;rotate:58deg;filter:drop-shadow(0 6px 8px rgba(50,44,30,.22))}
@keyframes pulse{0%,100%{scale:1}50%{scale:1.05}}
.intro .names{font-family:var(--script);font-size:44px;line-height:1;color:var(--primary);margin:0}
.intro .date{margin:4px 0 0;font-family:var(--serif);font-size:18px;letter-spacing:1px}
.intro .skip{background:none;border:none;color:var(--muted);text-decoration:underline;font-family:var(--sans);font-size:13px;cursor:pointer;min-height:44px}
.intro.opening .env{transform:translateY(70vh) rotate(6deg);opacity:0}
.intro.opening .sealbtn{transform:scale(1.8) rotate(32deg);opacity:0;animation:none}
.intro.opening .greet,.intro.opening .after{opacity:0}
.intro.opening{opacity:0;pointer-events:none}
.intro .after{transition:opacity .4s}

@media (prefers-reduced-motion: reduce){
  .rise,.petal,.env .sealbtn{animation:none!important}
  .rise{opacity:1}
  .intro,.env,.sealbtn{transition:none!important}
}
@media(max-width:480px){.btn{letter-spacing:2px;padding:0 22px;font-size:12px}}

/* ---- polish pass ---- */
.below .names{font-family:var(--script);font-weight:400;font-size:clamp(58px,9vw,104px);line-height:1.05;color:var(--primary);margin:2px 0 4px;letter-spacing:0}
.below .label{margin:0}
.count.photo{background-image:linear-gradient(180deg,rgba(var(--ov),.35),rgba(var(--ov),.72)),var(--couple);background-position:center 32%;min-height:min(88vh,820px);display:flex;flex-direction:column;justify-content:center;gap:6px}
.count.photo .script{font-size:clamp(48px,6vw,76px)}
.story .txt p{font-size:18px;line-height:1.7}
.faq p{font-size:17px;line-height:1.65}
.registry p{font-size:17px;line-height:1.65}
.story .pics .p1 p{text-align:left;padding-left:18px}
.f .yn label{white-space:nowrap;font-size:15px}
@media(max-width:600px){
  .ev{max-width:300px}
  .events{gap:22px}
  .story .pics p{font-size:22px}
  .f .yn{width:100%}
  .f .yn label{flex:1;justify-content:center;padding:10px 8px;font-size:14px}
  .count.photo{min-height:78vh}
}

/* ---- directions + order of the day ---- */
.below a.venue{display:inline-flex;align-items:center;gap:6px;font-family:var(--serif);font-size:20px;font-style:italic;color:var(--muted);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s}
.below a.venue:hover{border-bottom-color:currentColor}
.ev .dir{margin-top:4px;font-family:var(--sans);font-size:11px;letter-spacing:2.5px;text-transform:uppercase;color:var(--primary);text-decoration:none;border-bottom:1px solid currentColor;padding-bottom:2px}
.timeline{padding-top:40px}
.tl-grid{max-width:1100px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:28px 40px}
.tl{background:var(--cardc);border:1px solid var(--line);border-radius:4px;padding:34px 32px 30px;box-shadow:0 18px 40px rgba(40,36,24,.08)}
.tl .label{text-align:center;margin:0}
.tl h3{margin:6px 0 22px;text-align:center;font-family:var(--script);font-weight:400;font-size:46px;line-height:1.05;color:var(--primary)}
.tl ol{list-style:none;margin:0;padding:0;position:relative}
.tl ol::before{content:'';position:absolute;left:92px;top:8px;bottom:8px;width:1px;background:var(--line)}
.tl li{display:grid;grid-template-columns:76px 1fr;gap:32px;align-items:baseline;padding:9px 0;position:relative}
.tl li::before{content:'';position:absolute;left:88px;top:16px;width:9px;height:9px;border-radius:50%;background:var(--cardc);border:1.5px solid var(--accent)}
.tl .tt{font-family:var(--serif);font-size:19px;text-align:right;color:var(--ink);white-space:nowrap}
.tl .ti{font-size:16px;color:var(--muted);line-height:1.5}
@media(max-width:420px){.tl{padding:28px 20px 24px}.tl ol::before{left:78px}.tl li{grid-template-columns:64px 1fr;gap:28px}.tl li::before{left:74px}.tl .tt{font-size:17px}}
/* small phones (iPhone SE / 320px) */
.f .row{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr))}
.f,.f label,.f fieldset{min-width:0}
.f input,.f textarea,.f select{width:100%;box-sizing:border-box;min-width:0}
@media(max-width:360px){
  .rsvp{padding-left:12px;padding-right:12px}
  .rcard{padding-left:16px;padding-right:16px}
  .f fieldset{padding:12px 10px}
  .f .yn label{font-size:13px;padding:10px 4px;gap:4px}
  .sec,.story{padding-left:16px;padding-right:16px}
}
/* desktop: keep the couple's names on the first screen */
@media(min-width:900px){.stage{width:min(1100px,100%,calc((100svh - 300px) * 1100 / 780))}}
/* large monitors: scale the content so it doesn't float in empty space */
@media(min-width:1700px){#story,#events,#schedule,#travel,#rsvp,#faq,.registry,.foot,.count .cd,.count .script,.count .label{zoom:1.15}}
@media(min-width:2300px){#story,#events,#schedule,#travel,#rsvp,#faq,.registry,.foot,.count .cd,.count .script,.count .label{zoom:1.35}}
/* ---- event cards grow with their content (long notes never spill out) ---- */
.ev{aspect-ratio:auto;display:grid}
.ev::before{content:'';grid-area:1/1;aspect-ratio:var(--cardAr);width:100%}
.ev>img.bg{object-fit:fill}
.ev .in{grid-area:1/1;position:relative;inset:auto;padding:var(--evPadTop) 12% var(--evPadBot);gap:8px;min-width:0}
.ev h3{overflow-wrap:anywhere}
.ev .evseal{width:22%;max-width:64px;margin:-4% 0 2px;filter:drop-shadow(0 4px 6px rgba(40,10,15,.3))}
.ev .acts{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 16px;margin:4px 0 0}
/* ---- RSVP ---- */
.f label small{font-size:12px;opacity:.8}
.f .party select{max-width:140px}
.gnames{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px}
.gnames:empty{display:none}
.f .ev-choice small{font-family:var(--sans);font-size:12px;color:var(--muted)}
.f .meals{flex-basis:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:10px;padding:6px 0 4px}
.f .meals label{font-size:13px}
.f select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:34px}
.f .yn label:has(input:checked){border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}
.f .ev-choice.missing .yn label{border-color:#B4483C}
.rsvp .err{margin:0;min-height:1em;text-align:center;color:#9A3B30;font-size:15px}
.prev{text-align:center;background:color-mix(in srgb,var(--primary) 6%,transparent);border:1px solid var(--line);border-radius:6px;padding:14px 16px;font-size:15px;color:var(--ink)}
.prev button,.done .skip{background:none;border:none;color:var(--primary);text-decoration:underline;font:inherit;cursor:pointer;padding:6px}
.done .cal{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:14px}
.done .cal a{font-size:12px;letter-spacing:2px;text-transform:uppercase;color:var(--primary);border:1px solid var(--line);border-radius:999px;padding:10px 16px;text-decoration:none}
/* countdown after the day */
.count .married{font-family:var(--serif);font-size:clamp(22px,3vw,30px);letter-spacing:2px;margin:18px 0 0;color:#FBF7EE}
.ev{grid-template-columns:minmax(0,1fr)}
.ev .in>*{max-width:100%}
.ev .in .label{white-space:normal;overflow-wrap:anywhere}
.ev .t,.ev .n,.ev .dr{overflow-wrap:anywhere}
/* story photos: the first polaroid sits on top so its caption is never hidden */
.story .pics .p1{z-index:2}
.story .pics .p2{top:36%}
