:root{--ink:#17130f;--cream:#f2ede4;--wine:#6b2739;--gold:#aa8c5b}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--ink);color:var(--cream);font-family:Manrope,sans-serif}body.locked{overflow:hidden}h1,h2,h3,p{margin-top:0}i,.script,.married{font-family:Parisienne;font-weight:400}.cream{background:var(--cream);color:var(--ink)}.entry{position:fixed;inset:0;z-index:100;background:#17130f;display:grid;place-items:center;transition:opacity 1.2s,visibility 1.2s}.entry.leave{opacity:0;visibility:hidden}.entryGlow{position:absolute;inset:-20%;background:radial-gradient(circle,#57453266,transparent 42%);animation:breathe 8s ease-in-out infinite alternate}.inviteTitle{position:absolute;top:7%;text-align:center;font-size:9px;letter-spacing:.32em}.inviteTitle h1{font:400 clamp(48px,7vw,90px) Cormorant Garamond;margin:10px}.envelope{position:relative;width:min(520px,87vw);height:320px;border:0;background:none;perspective:1200px;filter:drop-shadow(0 32px 45px #0007);cursor:pointer}.back{position:absolute;inset:0;background:#d8cbb6;border:1px solid #9d8967}.flap{position:absolute;top:0;left:0;width:100%;height:56%;background:#e2d7c5;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;z-index:4;transition:transform 1.45s cubic-bezier(.2,.75,.2,1)}.card{position:absolute;left:7%;right:7%;bottom:6%;height:78%;background:#f6f0e7;color:#1d1813;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:2;border:1px solid #c5b497;transition:transform 1.5s cubic-bezier(.2,.75,.2,1)}.card small{font-size:8px;letter-spacing:.3em}.card b{font:400 34px Cormorant Garamond;margin:15px}.card em{font:25px Parisienne}.wax{position:absolute;z-index:5;left:50%;top:50%;transform:translate(-50%,-50%);width:76px;height:76px;border-radius:50%;background:var(--wine);color:white;display:grid;place-items:center;font:28px Cormorant Garamond;transition:.8s}.envelope.open .flap{transform:rotateX(180deg);z-index:1}.envelope.open .card{transform:translateY(-105px)}.envelope.open .wax{opacity:0;transform:translate(-50%,-50%) scale(.8)}.entry>p{position:absolute;bottom:6%;font-size:8px;letter-spacing:.28em}.site{opacity:0;transform:translateY(16px);transition:1.2s}.site.show{opacity:1;transform:none}header{position:fixed;z-index:50;top:0;left:0;right:0;padding:22px 4vw;display:flex;justify-content:space-between;background:linear-gradient(#0007,transparent)}header a{color:white;text-decoration:none}.mono{font:26px Cormorant Garamond}nav{display:flex;gap:25px}nav a{font-size:8px;letter-spacing:.2em}.hero,.ring,.rsvp{height:100svh;position:relative;overflow:hidden}.hero>img,.ring>img,.rsvp>img,.storyPhoto img,.attirePhoto img,.giftPhoto img,.gallery img{width:100%;height:112%;object-fit:cover;will-change:transform}.shade{position:absolute;inset:0;background:linear-gradient(#0003,#0001 35%,#0009)}.heroCopy{position:absolute;left:7vw;bottom:9vh;z-index:2}.heroCopy small,.sectionTitle>small,.chapters small,.attireText>small,.giftText>small,.rsvpCard>small,.ringCopy small{font-size:9px;letter-spacing:.34em}.heroCopy h1,.sectionTitle h2,.chapters h2,.attireText h2,.giftText h2,.rsvpCard h2{font:400 clamp(50px,6.5vw,92px)/.95 Cormorant Garamond;margin:18px 0}.heroCopy p{font:18px Cormorant Garamond}.letter{padding:140px 20px}.narrow{max-width:760px;margin:auto;text-align:center}.script{font-size:43px;color:var(--wine)}.letter h2{font:400 clamp(48px,6vw,82px)/.96 Cormorant Garamond}.letter p{font:20px/1.7 Cormorant Garamond}.aside{font-style:italic!important}.academy{font:38px Cormorant Garamond;color:var(--wine);margin:30px}.married{font-size:43px;color:var(--wine);border-top:1px solid #b9a78a;padding-top:30px;margin-top:40px}.story{display:grid;grid-template-columns:1fr 1fr;min-height:250vh}.storyPhoto{height:100vh;position:sticky;top:0;overflow:hidden}.chapters{padding:12vh 8vw 18vh;display:flex;flex-direction:column;justify-content:space-around;gap:18vh}.chapters p,.attireText p,.giftText p{line-height:1.9;color:#cfc6b9}.ring:after{content:"";position:absolute;inset:0;background:#0005}.ringCopy{position:absolute;z-index:2;left:7vw;bottom:10vh}.ringCopy h2{font:64px Parisienne}.details,.menu,.travel{padding:130px 7vw}.sectionTitle{max-width:850px;margin-bottom:70px}.sectionTitle p{font:19px/1.7 Cormorant Garamond;max-width:650px}.rows{border-top:1px solid #b9aa91}.rows div{display:grid;grid-template-columns:180px 1fr 1fr;gap:25px;padding:28px 0;border-bottom:1px solid #c8bda9;align-items:center}.rows span{font-size:8px;letter-spacing:.25em}.rows b{font:25px Cormorant Garamond;font-weight:400}.rows p{margin:0;color:#71685b}.attire,.gift{display:grid;grid-template-columns:1.05fr .95fr;min-height:100vh}.attirePhoto,.giftPhoto{overflow:hidden}.attireText,.giftText{padding:10vw 7vw;align-self:center}.attireText blockquote{font:26px/1.4 Cormorant Garamond;border-left:1px solid var(--gold);padding-left:23px;margin:35px 0}.menuGrid,.hotelGrid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #b9aa91}.menuGrid article,.hotelGrid article{padding:35px;border-right:1px solid #cabfaa}.menuGrid h3,.hotelGrid h3{font:30px Cormorant Garamond;font-weight:400}.menuGrid p,.hotelGrid p{line-height:1.7}.menuGrid small,.hotelGrid small{font-size:8px;letter-spacing:.2em}.gallery{display:grid;grid-template-columns:1fr 1.15fr 1fr;height:95vh;overflow:hidden}.gallery img{min-width:0}.rsvpCard{position:absolute;z-index:2;left:50%;top:50%;transform:translate(-50%,-50%);width:min(730px,92vw);background:#f2ede4f2;color:var(--ink);padding:60px;text-align:center;border:1px solid #ae956e}.rsvpCard p{font:18px Cormorant Garamond}.rsvpCard form{display:grid;grid-template-columns:1fr 1fr;gap:13px}.rsvpCard input,.rsvpCard select{padding:13px;background:transparent;border:0;border-bottom:1px solid #9a8d7a}.rsvpCard button{grid-column:1/-1;padding:16px;background:var(--ink);color:white;border:0;font-size:8px;letter-spacing:.23em}.rsvpCard>em{display:block;margin-top:20px;font-size:11px}.rsvpCard h3{font:38px Parisienne}footer{text-align:center;padding:70px;background:#0e0c0a}footer p{font-size:8px;letter-spacing:.25em}.reveal{opacity:0;transform:translateY(34px);transition:opacity 1.1s,transform 1.1s cubic-bezier(.22,.61,.36,1)}.reveal.in{opacity:1;transform:none}@keyframes breathe{to{transform:scale(1.08)}}@media(max-width:800px){nav a:not(:last-child){display:none}.story,.attire,.gift{grid-template-columns:1fr}.story{min-height:auto}.storyPhoto{position:relative;height:72vh}.chapters{padding:80px 7vw;gap:100px}.attirePhoto,.giftPhoto{height:70vh}.rows div{grid-template-columns:1fr;gap:8px}.menuGrid,.hotelGrid{grid-template-columns:1fr}.gallery{grid-template-columns:1fr;height:auto}.gallery img{height:65vh}.rsvpCard{padding:40px 22px}.rsvpCard form{grid-template-columns:1fr}.rsvpCard button{grid-column:1}.envelope{height:260px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* V4 refinement: tactile invitation, Society paper, handwritten correspondence */
.entry{background:radial-gradient(circle at 50% 35%,#2b2118 0,#17130f 47%,#0e0b09 100%)}
.entry.opening .entryGlow{transform:scale(1.08);opacity:1}.entryGlow{transition:transform 1.8s cubic-bezier(.22,.61,.36,1),opacity 1.4s}
.envelope{filter:drop-shadow(0 35px 55px #0009);transition:transform 1.5s cubic-bezier(.22,.61,.36,1),filter 1.5s}.envelope.open{transform:translateY(10px) scale(1.018);filter:drop-shadow(0 45px 75px #000b)}
.back,.flap,.card{background-image:linear-gradient(135deg,rgba(255,255,255,.16),transparent 33%),radial-gradient(circle at 20% 20%,rgba(104,77,47,.06) 0 1px,transparent 1.2px);background-size:auto,5px 5px}
.flap{box-shadow:inset 0 -1px 0 #ad9977}.envelope.open .flap{transform:rotateX(178deg);box-shadow:0 -22px 45px #0003}
.card{box-shadow:0 8px 18px #6e583a22}.envelope.open .card{transform:translateY(-118px) scale(1.025);box-shadow:0 24px 45px #0003}
.wax{width:84px;height:82px;border-radius:52% 48% 46% 54% / 47% 53% 49% 51%;background:radial-gradient(circle at 34% 28%,#98495c 0 8%,#7e3044 24%,#651f32 60%,#4e1525 100%);box-shadow:inset 4px 5px 8px #b45c6c66,inset -6px -8px 10px #340b17aa,0 5px 12px #0005;isolation:isolate}
.wax:before{content:"";position:absolute;inset:8px;border-radius:50%;border:1px solid #c8758566;box-shadow:inset 0 0 0 2px #4b172866,inset 2px 2px 4px #c6728066}
.wax:after{content:"";position:absolute;inset:2px;border-radius:inherit;background:radial-gradient(circle at 28% 21%,#fff3 0 3%,transparent 4%),radial-gradient(circle at 74% 78%,#2b071433 0 4%,transparent 5%);mix-blend-mode:screen;pointer-events:none}
.waxLetters{position:relative;z-index:2;display:flex;align-items:center;justify-content:center;gap:2px;color:#e9b7bd;text-shadow:1px 1px 1px #3e1020,-1px -1px 1px #b46675;font:500 20px Cormorant Garamond;letter-spacing:-1px;line-height:1}.waxLetters b{font-weight:500}.waxLetters i{font:16px Parisienne;margin:0 1px;color:#e2aab4}
.envelope.open .wax{opacity:0;transform:translate(-50%,-50%) scale(.74) rotate(-5deg);filter:blur(.5px)}

.publication{padding:135px 7vw;background:#e9e1d3;background-image:radial-gradient(#b9aa9255 .7px,transparent .8px);background-size:5px 5px}
.paperEdition{max-width:1180px;margin:auto;background:#f7f1e7;color:#191510;border:1px solid #ae9b7d;padding:30px 45px 45px;box-shadow:0 22px 60px #6b51301c;position:relative}
.paperEdition:before,.paperEdition:after{content:"";position:absolute;pointer-events:none}.paperEdition:before{inset:10px;border:1px solid #b49b755e}.paperEdition:after{inset:17px;border:1px solid #b49b7533}
.masthead{display:grid;grid-template-columns:1fr auto 1fr;align-items:end;padding:13px 2px 18px;border-bottom:3px double #2e271f}.masthead span{font:500 clamp(26px,4vw,50px) Cormorant Garamond;letter-spacing:.04em}.masthead em{font:25px Parisienne;color:var(--wine);padding:0 22px}.masthead small{text-align:right;font-size:8px;letter-spacing:.22em}.editionRule{height:1px;background:#2e271f;margin-top:5px}.paperEdition>h2{font:500 clamp(48px,7vw,92px)/.88 Cormorant Garamond;max-width:900px;margin:50px auto 20px;text-align:center}.paperEdition>h2 i{color:var(--wine)}.editionLead{max-width:700px;margin:0 auto 55px;text-align:center;font:20px/1.55 Cormorant Garamond}.editionFacts{display:grid;grid-template-columns:1.08fr 1fr 1fr 1fr;border-top:1px solid #8f816e;border-bottom:1px solid #8f816e}.editionFacts article{padding:30px 25px;border-right:1px solid #b7a990;min-height:220px}.editionFacts article:last-child{border-right:0}.editionFacts article>span{font-size:8px;letter-spacing:.22em}.editionFacts h3{font:29px/1.05 Cormorant Garamond;font-weight:500;margin:16px 0}.editionFacts p{font:16px/1.55 Cormorant Garamond;margin:0}.dateFeature{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center}.dateFeature strong{font:82px/.75 Cormorant Garamond;font-weight:400;color:var(--wine)}.dateFeature span{font:12px!important;letter-spacing:.26em!important;margin:12px 0}.editionClosing{text-align:center;padding-top:28px}.editionClosing span{display:block;font-size:8px;letter-spacing:.26em;margin-bottom:8px}.editionClosing b{font:26px Parisienne;color:var(--wine);font-weight:400}

.correspondence{padding:135px 7vw;background:#d9cebc;position:relative;overflow:hidden}.correspondence:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 20% 10%,#fff8,transparent 35%),linear-gradient(135deg,#6f5b3a10,transparent 40%);pointer-events:none}.letterSheet{max-width:1000px;margin:auto;background:#f7f0e4;color:#1d1812;padding:72px 90px;position:relative;box-shadow:0 28px 75px #4b361f2b,0 3px 10px #0001;transform:rotate(-.22deg);background-image:radial-gradient(#b5a78f55 .65px,transparent .75px);background-size:4px 4px}.letterSheet:before{content:"";position:absolute;inset:16px;border:1px solid #a995743d;pointer-events:none}.letterSheet:after{content:"";position:absolute;right:-26px;bottom:-32px;width:180px;height:180px;background:radial-gradient(ellipse,#4f36101a,transparent 66%);filter:blur(10px);transform:rotate(-18deg)}.paperPin{position:absolute;right:38px;top:35px;width:54px;height:52px;border-radius:50%;display:grid;place-items:center;background:#74293c;color:#f2d9d9;box-shadow:inset 2px 3px 5px #b7647466,inset -4px -5px 7px #3a0e1b99;font:17px Cormorant Garamond}.paperPin i{font-size:12px}.writtenHeading{position:relative;display:inline-block;max-width:100%;margin-bottom:28px}.handTitle{font:clamp(43px,6vw,72px) Parisienne;color:var(--wine);display:inline-block;clip-path:inset(0 100% 0 0);transition:clip-path 2.3s cubic-bezier(.24,.67,.25,1) .15s}.writeScene.in .handTitle{clip-path:inset(0 0 0 0)}.quill{position:absolute;width:84px;height:24px;left:0;top:58%;color:#3a3025;transform:translate(-15px,-50%) rotate(-10deg);opacity:0;transition:transform 2.35s cubic-bezier(.24,.67,.25,1) .12s,opacity .28s ease .1s}.writeScene.in .quill{transform:translate(min(660px,68vw),-50%) rotate(-5deg);opacity:.9}.letterSalute{font:24px Cormorant Garamond;font-style:italic;margin-bottom:12px}.letterIntro{font:18px/1.65 Cormorant Garamond;max-width:680px}.menuScript{margin:50px 0 35px;text-align:center}.menuScript article{padding:10px 20px}.menuScript article small{font:14px Cormorant Garamond;color:var(--wine)}.menuScript h3{font:500 clamp(32px,4vw,48px) Cormorant Garamond;margin:6px 0}.menuScript p{font:17px/1.5 Cormorant Garamond;margin:0;color:#665b4e}.flourish{color:#9b7d4e;font-size:22px;margin:7px 0}.letterSignoff{font:20px Cormorant Garamond;margin-top:38px}.letterSignoff span{font:30px Parisienne;color:var(--wine);margin-left:8px}
.travel.correspondence{background:#cbc0ad}.travelLetter{transform:rotate(.18deg)}.lodgingList{margin:42px 0 28px;border-top:1px solid #b7a990}.lodgingList article{display:grid;grid-template-columns:95px 1fr;gap:25px;padding:25px 0;border-bottom:1px solid #c5b8a2;align-items:center}.distance{width:76px;height:76px;border:1px solid #a5906e;border-radius:50%;display:flex;flex-direction:column;justify-content:center;align-items:center;font:32px Cormorant Garamond;color:var(--wine)}.distance small{font:7px Manrope;letter-spacing:.18em;color:#6e6253}.lodgingList h3{font:500 28px Cormorant Garamond;margin:0 0 7px}.lodgingList p{font:15px/1.55 Cormorant Garamond;margin:0;color:#665b4e}

@media(max-width:800px){.paperEdition{padding:24px 22px 32px}.masthead{grid-template-columns:1fr;text-align:center;gap:6px}.masthead small{text-align:center}.masthead em{padding:0}.editionFacts{grid-template-columns:1fr}.editionFacts article{border-right:0;border-bottom:1px solid #b7a990;min-height:0}.letterSheet{padding:65px 28px 50px}.paperPin{right:22px;top:22px}.writtenHeading{padding-right:20px}.handTitle{font-size:46px}.writeScene.in .quill{transform:translate(min(250px,58vw),-50%) rotate(-5deg)}.lodgingList article{grid-template-columns:72px 1fr;gap:16px}.distance{width:62px;height:62px;font-size:26px}}


/* =========================
   V5 — tactile period details
   ========================= */
:root{--paper:#f3eadb;--paper-deep:#ddcfb8;--inkbrown:#2b221a}

/* Invitation: engraved, period, tactile */
.periodInvite{
  overflow:hidden;
  padding:28px 34px;
  background:
    linear-gradient(115deg,rgba(255,255,255,.38),transparent 26%),
    radial-gradient(ellipse at 70% 22%,#b49b7130,transparent 35%),
    repeating-linear-gradient(0deg,#0000 0 3px,#745e3f08 4px),
    #efe4d2;
  border:1px solid #9c815d;
  outline:1px solid #d2bea0;
  outline-offset:-9px;
}
.periodInvite:before{
  content:"";
  position:absolute; inset:14px;
  border:1px solid #9b7a4f66;
  box-shadow:inset 0 0 28px #70553212;
  pointer-events:none;
}
.periodInvite:after{
  content:"";
  position:absolute; inset:0;
  background:
    radial-gradient(circle at 12% 19%,#5b472b16 0 1px,transparent 1.4px),
    radial-gradient(circle at 76% 63%,#5b472b12 0 1px,transparent 1.3px);
  background-size:7px 8px,9px 10px;
  mix-blend-mode:multiply; opacity:.7; pointer-events:none;
}
.periodInvite small{
  position:relative;z-index:2;
  font:500 7px Manrope;letter-spacing:.29em;
  color:#4a3b2c;
}
.periodInvite .inviteScript{
  position:relative;z-index:2;
  display:block;
  font:400 clamp(48px,6vw,72px)/.92 Italianno,Parisienne,cursive;
  color:#5f2435;
  margin:17px 0 8px;
  text-shadow:0 .6px 0 #3d172266;
  letter-spacing:.01em;
}
.periodInvite .inviteScript b{font-weight:400;font-size:.63em;margin:0 .08em}
.periodInvite .inviteRule{
  position:relative;z-index:2;
  display:flex;align-items:center;gap:11px;
  color:#8a704c;font:15px Cormorant Garamond;margin:2px auto 9px;width:78%;
}
.periodInvite .inviteRule i{height:1px;background:#9a805b;flex:1}
.periodInvite strong{
  position:relative;z-index:2;
  font:500 11px Cormorant Garamond;letter-spacing:.18em;
  color:#2f271f;
}
.periodInvite em{
  position:relative;z-index:2;
  font:400 21px Italianno,Parisienne,cursive;
  color:#3b3026;margin-top:5px;
}
.engravedCorner{position:absolute;z-index:2;color:#80633e99;font:30px Cormorant Garamond;line-height:1}
.engravedCorner.tl{left:22px;top:19px;transform:rotate(-35deg)}
.engravedCorner.tr{right:22px;top:19px;transform:scaleX(-1) rotate(-35deg)}
.engravedCorner.bl{left:22px;bottom:19px;transform:scaleY(-1) rotate(-35deg)}
.engravedCorner.br{right:22px;bottom:19px;transform:scale(-1) rotate(-35deg)}

/* richer wax seal: irregular pooled wax + stamped monogram */
.wax{
  width:90px;height:88px;
  border-radius:51% 49% 46% 54% / 47% 53% 49% 51%;
  background:
    radial-gradient(circle at 31% 25%,#c8717f 0 2%,#a24a5e 8%,transparent 19%),
    radial-gradient(circle at 62% 65%,#551326 0 22%,transparent 45%),
    radial-gradient(circle at 44% 40%,#8f3850 0,#76273e 44%,#54162a 79%,#3d0d1d 100%);
  box-shadow:
    inset 6px 7px 10px #d88a9660,
    inset -8px -10px 13px #260611aa,
    0 7px 14px #0007;
}
.wax:before{
  content:"";position:absolute;inset:-4px;z-index:-1;
  border-radius:43% 57% 52% 48% / 58% 47% 53% 42%;
  background:#612036;
  clip-path:polygon(5% 22%,17% 5%,36% 9%,49% 0,66% 8%,84% 4%,96% 20%,92% 40%,100% 56%,90% 75%,94% 91%,71% 94%,55% 100%,39% 93%,22% 99%,8% 84%,12% 66%,0 52%,7% 38%);
  box-shadow:inset 4px 4px 8px #a84f6260,inset -6px -7px 8px #2e0816;
}
.wax:after{
  content:"";position:absolute;inset:7px;
  border-radius:50%;
  border:1px solid #d88b9966;
  box-shadow:inset 0 0 0 2px #42111f99,inset 2px 2px 4px #d1899660,0 0 0 1px #4d1525;
  background:radial-gradient(circle at 30% 26%,#fff2 0 3%,transparent 4%);
}
.waxInner{
  position:relative;z-index:3;width:65px;height:64px;border-radius:50%;
  display:grid;place-items:center;
}
.waxMonogram{
  display:flex;align-items:baseline;justify-content:center;
  width:58px;
  color:#d99ba6;
  font:500 20px/1 Cormorant Garamond;
  letter-spacing:-.035em;
  text-shadow:1px 1px 1px #3c0d1b,-1px -1px 1px #b96373;
  transform:scaleX(.96);
}
.waxMonogram span{font:400 14px/1 Italianno,Parisienne,cursive;margin:0 2px;transform:translateY(-1px)}

/* Make menu composition deliberately asymmetrical and immersive */
.menuScene{
  position:relative;
  min-height:110vh;
  display:flex;
  align-items:center;
  justify-content:flex-end;
  padding:110px 6vw;
  background:#17130f;
}
.menuBackdrop{position:absolute;inset:0 38% 0 0;overflow:hidden}
.menuBackdrop:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#0003,#17130f 94%)}
.menuBackdrop img{width:100%;height:112%;object-fit:cover;filter:saturate(.82) contrast(1.04)}
.menuLetter{
  width:min(760px,59vw);
  margin:0;
  transform:rotate(.35deg);
  padding:76px 78px 62px;
  z-index:2;
}
.inkStamp{
  font:500 8px Manrope;letter-spacing:.27em;
  color:#6c5840;border:1px solid #80684a66;
  display:inline-block;padding:8px 11px;margin-bottom:18px;
  transform:rotate(-1deg);
}
.realisticQuill{
  width:170px;height:auto;top:44%;
  transform:translate(-28px,-50%) rotate(-14deg);
  filter:drop-shadow(2px 4px 3px #0003);
}
.writeScene.in .realisticQuill{
  transform:translate(min(535px,49vw),-50%) rotate(-8deg);
  opacity:.96;
}
.editorialMenu{margin:34px 0 28px;text-align:left;border-top:1px solid #b8a78c}
.editorialMenu article{
  display:grid;grid-template-columns:54px 1fr;gap:18px;
  padding:24px 0;border-bottom:1px solid #c7b9a3;
  align-items:start;
}
.editorialMenu .courseNo{
  width:38px;height:38px;border-radius:50%;border:1px solid #9b8059;
  display:grid;place-items:center;
  font:18px Cormorant Garamond;color:#6b2739;
}
.editorialMenu h3{font:500 34px/1 Cormorant Garamond;margin:0 0 7px}
.editorialMenu p{font:16px/1.55 Cormorant Garamond;margin:0;color:#5f5549}
.menuFooter{display:flex;justify-content:space-between;align-items:center;gap:20px;padding-top:10px}
.menuFooter>span:first-child{font:500 8px Manrope;letter-spacing:.2em;color:#66594a}
.inkFlourish{font:25px Cormorant Garamond;color:#8c7049}

/* Travel: left letter, image right, no fake mini wax seal */
.travelScene{
  min-height:105vh;
  padding:105px 5vw;
  display:grid;
  grid-template-columns:1.08fr .92fr;
  gap:5vw;
  align-items:center;
  background:#d3c7b3;
}
.travelLetterWrap{position:relative;z-index:2}
.travelLetter{
  max-width:760px;margin:0;
  transform:rotate(-.22deg);
  padding:72px 72px 62px;
}
.travelPortrait{height:78vh;overflow:hidden;box-shadow:0 28px 70px #3c2d1d38}
.travelPortrait img{width:100%;height:112%;object-fit:cover}
.letterDate{font:500 8px Manrope;letter-spacing:.25em;color:#625441;margin-bottom:18px}
.lodgingList{margin-top:34px}
.lodgingList article{grid-template-columns:108px 1fr;padding:24px 0}
.distance{
  width:auto;height:auto;border:0;border-radius:0;
  display:flex;flex-direction:row;align-items:baseline;justify-content:flex-start;
  gap:7px;color:#6b2739;
  font:400 36px/1 Cormorant Garamond;
}
.distance b{font-weight:400}
.distance small{
  font:500 7px/1 Manrope;letter-spacing:.18em;color:#66594a;
  white-space:nowrap;
}
.lodgingList h3{font-size:30px}

/* RSVP must always fit: never crop the response card */
.rsvp{
  min-height:100svh;
  height:auto;
  padding:120px 20px 100px;
  display:grid;
  place-items:center;
  overflow:hidden;
}
.rsvp>img{
  position:absolute;inset:-5% 0 auto 0;
  width:100%;height:115%;
  object-fit:cover;
}
.rsvpCard{
  position:relative;
  left:auto;top:auto;
  transform:none;
  margin:auto;
  max-height:none;
  width:min(760px,94vw);
  padding:58px 62px 50px;
}
.rsvpCard form{margin-top:24px}
.rsvpCard input,.rsvpCard select{min-width:0;font-size:14px}
.rsvpCard>em{margin-top:24px}
#rsvp{scroll-margin-top:72px}

@media(max-width:800px){
  .periodInvite{padding:24px 18px}
  .periodInvite .inviteScript{font-size:43px}
  .periodInvite strong{font-size:8px}
  .periodInvite em{font-size:17px}
  .wax{width:82px;height:80px}
  .waxInner{width:59px;height:58px}
  .waxMonogram{width:52px;font-size:18px}
  .menuScene{min-height:auto;display:block;padding:80px 18px;background:#17130f}
  .menuBackdrop{inset:0;opacity:.48}
  .menuBackdrop:after{background:#17130fa8}
  .menuLetter{width:100%;padding:62px 26px 45px}
  .realisticQuill{width:120px}
  .writeScene.in .realisticQuill{transform:translate(min(255px,56vw),-50%) rotate(-8deg)}
  .editorialMenu article{grid-template-columns:42px 1fr;gap:12px}
  .editorialMenu h3{font-size:29px}
  .travelScene{grid-template-columns:1fr;padding:80px 18px;gap:35px}
  .travelLetter{padding:62px 26px 45px}
  .travelPortrait{height:58vh}
  .lodgingList article{grid-template-columns:88px 1fr}
  .distance{font-size:30px}
  .rsvp{padding:95px 14px 70px}
  .rsvpCard{padding:42px 20px 36px}
  .rsvpCard h2{font-size:clamp(43px,12vw,62px)}
}

/* =========================
   V6 — clean reveal + living ink
   ========================= */

/* The insert is blank before the seal is broken. */
.revealInvite > *{opacity:0;transform:translateY(5px)}
.envelope.open .revealInvite > *{
  animation:inviteInkIn .85s ease forwards;
}
.envelope.open .revealInvite > *:nth-child(1){animation-delay:.54s}
.envelope.open .revealInvite > *:nth-child(2){animation-delay:.66s}
.envelope.open .revealInvite > *:nth-child(3){animation-delay:.78s}
.envelope.open .revealInvite > *:nth-child(4){animation-delay:.88s}
.envelope.open .revealInvite > *:nth-child(5){animation-delay:.96s}
.envelope.open .revealInvite > *:nth-child(6){animation-delay:1.03s}
.envelope.open .revealInvite > *:nth-child(7){animation-delay:1.08s}
.envelope.open .revealInvite > *:nth-child(8){animation-delay:1.12s}
@keyframes inviteInkIn{to{opacity:1;transform:none}}

/* Keep the photographed couple visible; correspondence occupies the architectural side. */
.menuScene{justify-content:flex-start}
.menuBackdrop{inset:0;z-index:0}
.menuBackdrop:after{
  background:linear-gradient(90deg,#17130fe8 0%,#17130fa8 30%,#0000 57%);
}
.menuBackdrop img{object-position:center center}
.menuLetter{
  width:min(690px,52vw);
  margin-left:2vw;
  z-index:2;
}
.menuLetter:before{content:"";position:absolute;inset:0;box-shadow:0 35px 85px #0005;pointer-events:none}

/* The heading is actually revealed like ink while the quill follows the writing line. */
.writtenHeading{position:relative;display:inline-block;max-width:100%}
.handTitle{
  position:relative;display:inline-block;
  clip-path:inset(0 100% 0 0);
  will-change:clip-path;
}
.writeScene.in .handTitle{
  animation:inkWrite 3.15s cubic-bezier(.18,.72,.2,1) .45s forwards;
}
@keyframes inkWrite{to{clip-path:inset(0 0 0 0)}}
.photoQuill{
  position:absolute;
  width:150px;height:auto;
  left:-62px;top:22px;
  transform-origin:13% 88%;
  filter:drop-shadow(3px 7px 5px #0005);
  opacity:0;
  pointer-events:none;
}
.writeScene.in .photoQuill{
  opacity:1;
  offset-path:path("M 0 8 C 145 4, 250 -1, 385 7 C 450 13, 505 8, 555 11");
  offset-distance:0%;
  offset-rotate:auto 8deg;
  animation:quillWrite 3.15s cubic-bezier(.18,.72,.2,1) .45s forwards;
}
@keyframes quillWrite{
  0%{offset-distance:0%;opacity:0}
  5%{opacity:1}
  92%{opacity:1}
  100%{offset-distance:100%;opacity:0}
}

/* Real wax motif returns as a physical object laid on the paper. */
.miniWax{
  position:absolute;
  left:auto;top:auto;right:-30px;bottom:42px;
  width:76px;height:74px;
  transform:rotate(7deg);
  z-index:5;
  box-shadow:inset 5px 6px 9px #d88a9660,inset -7px -9px 12px #260611aa,0 12px 22px #3c241d50;
}
.miniWax .waxInner{width:56px;height:55px}
.miniWax .waxMonogram{width:49px;font-size:17px}
.miniWax .waxMonogram span{font-size:12px}
.travelWax{right:-31px;bottom:52px;transform:rotate(-6deg)}

/* Travel: deliberate two-line script, no duplicate label. */
.travelHeading .handTitle{
  font-size:clamp(45px,4.5vw,67px);
  line-height:.88;
}
.travelHeading .photoQuill{top:37px}
.travelHeading.writeScene.in .photoQuill,
.travelLetter.writeScene.in .photoQuill{
  offset-path:path("M 0 14 C 120 2, 245 4, 370 10 C 430 15, 480 12, 525 13");
}

/* Arabic numerals should look unmistakably like numbers. */
.distance b{
  font:500 31px/1 Manrope,sans-serif;
  letter-spacing:-.07em;
  font-variant-numeric:lining-nums tabular-nums;
}
.distance small{transform:translateY(-1px)}

/* Mobile: keep faces unobstructed, letters become their own scenes. */
@media(max-width:800px){
  .menuScene{padding-top:72vh}
  .menuBackdrop{height:72vh;bottom:auto}
  .menuBackdrop:after{background:linear-gradient(180deg,#0000 58%,#17130f 100%)}
  .menuBackdrop img{height:100%;object-position:center 34%}
  .menuLetter{width:100%;margin:0}
  .photoQuill{width:110px;left:-42px}
  .writeScene.in .photoQuill{
    offset-path:path("M 0 8 C 90 3, 165 0, 245 8");
  }
  .travelHeading .handTitle{font-size:48px}
  .miniWax{right:-5px;bottom:16px;width:67px;height:65px}
  .miniWax .waxInner{width:50px;height:49px}
}

.realisticQuill{display:none!important}

/* =========================
   V7 — slower opening, real writing choreography
   ========================= */

/* Let guests actually read the invitation before the site takes over. */
.flap{transition-duration:2.05s!important}
.letter,.card{transition-duration:2.15s!important}
.envelope.open .letter,.envelope.open .card{transition-timing-function:cubic-bezier(.16,.74,.18,1)!important}
.envelope.open .revealInvite > *{animation-duration:1.35s!important}
.envelope.open .revealInvite > *:nth-child(1){animation-delay:1.05s!important}
.envelope.open .revealInvite > *:nth-child(2){animation-delay:1.25s!important}
.envelope.open .revealInvite > *:nth-child(3){animation-delay:1.48s!important}
.envelope.open .revealInvite > *:nth-child(4){animation-delay:1.66s!important}
.envelope.open .revealInvite > *:nth-child(5){animation-delay:1.82s!important}
.envelope.open .revealInvite > *:nth-child(6){animation-delay:1.96s!important}
.envelope.open .revealInvite > *:nth-child(7){animation-delay:2.1s!important}
.envelope.open .revealInvite > *:nth-child(8){animation-delay:2.22s!important}

/* Menu becomes a deliberate paper moment between photographic scenes. */
.menuScene{
  min-height:112vh;
  display:grid;
  place-items:center;
  padding:120px 5vw;
  background:
    radial-gradient(circle at 50% 30%,#3a2c21 0,#231a14 42%,#100d0a 100%);
  overflow:hidden;
}
.menuBackdrop{display:none!important}
.menuAtmosphere{position:absolute;inset:0;pointer-events:none}
.menuAtmosphere:before{
  content:"";position:absolute;inset:5%;
  border:1px solid #b99c6b24;
  box-shadow:inset 0 0 120px #0008;
}
.menuAtmosphere .ornament{
  position:absolute;color:#aa8b5c1f;
  font:110px Cormorant Garamond;
}
.menuAtmosphere .o1{left:5vw;top:12vh;transform:rotate(-16deg)}
.menuAtmosphere .o2{right:5vw;bottom:10vh;transform:rotate(164deg)}
.menuLetter{
  width:min(780px,88vw);
  margin:0!important;
  transform:rotate(.18deg);
  z-index:2;
  box-shadow:0 40px 110px #0009,0 2px 0 #fff6 inset;
}

/* Stamped means on the paper, not floating beside it. */
.stampedWax{
  right:24px!important;
  bottom:22px!important;
  width:68px!important;height:66px!important;
  transform:rotate(-7deg) scale(.92)!important;
  box-shadow:
    inset 4px 5px 8px #d88a9655,
    inset -6px -7px 10px #26061199,
    0 1px 1px #2a160f66!important;
  filter:saturate(.9);
}
.stampedWax:before{inset:-2px!important}
.stampedWax:after{inset:6px!important}
.stampedWax .waxInner{width:51px!important;height:50px!important}
.stampedWax .waxMonogram{width:46px!important;font-size:16px!important}
.travelWax{right:24px!important;bottom:22px!important}

/* The old straight-across writing effect is disabled. */
.photoQuill,.realisticQuill{display:none!important}
.handTitle{clip-path:none!important;animation:none!important}
.writingQuill{display:none!important}
.handwritingText br{display:block}
.handLine{display:inline-block;color:transparent;background:linear-gradient(90deg,var(--wine) 0 48%,transparent 53% 100%);background-size:220% 100%;background-position:100% 0;background-clip:text;-webkit-background-clip:text;will-change:background-position}
.handwritingScene.handwritingIn .handLine{animation:flowingInk 2.9s cubic-bezier(.42,0,.2,1) .35s forwards}
.handwritingScene.handwritingIn .handLine:nth-of-type(2){animation-delay:2.65s;animation-duration:1.75s}
@keyframes flowingInk{to{background-position:0 0}}

/* Slightly larger paper space so the stamp never collides with menu copy. */
.menuFooter{padding-right:78px}
.travelLetter{padding-bottom:88px!important}

@media(max-width:800px){
  .menuScene{padding:90px 15px;min-height:auto}
  .menuLetter{width:100%;padding-bottom:92px}
  .writingQuill{width:98px}
  .stampedWax{right:14px!important;bottom:14px!important}
}

/* V8 — invitation text appears once the seal opens, then remains on screen long enough to read. */
.revealInvite > *{opacity:0!important;transform:translateY(4px)}
.envelope.open .revealInvite > *{
  opacity:1!important;
  transform:none!important;
  animation:none!important;
  transition:opacity .9s ease,transform .9s ease;
}
.envelope.open .revealInvite > *:nth-child(1){transition-delay:.55s}
.envelope.open .revealInvite > *:nth-child(2){transition-delay:.68s}
.envelope.open .revealInvite > *:nth-child(3){transition-delay:.80s}
.envelope.open .revealInvite > *:nth-child(4){transition-delay:.92s}
.envelope.open .revealInvite > *:nth-child(5){transition-delay:1.04s}
.envelope.open .revealInvite > *:nth-child(6){transition-delay:1.16s}
.envelope.open .revealInvite > *:nth-child(7){transition-delay:1.28s}
.envelope.open .revealInvite > *:nth-child(8){transition-delay:1.40s}

/* Give the date room to breathe; no overlap between 23 / May / 2027. */
.dateFeature strong{line-height:.9!important;margin-bottom:15px!important}
.dateFeature .dateMonth{font:500 10px/1 Manrope!important;letter-spacing:.30em!important;margin:0 0 7px!important}
.dateFeature .dateYear{font:500 22px/1 Cormorant Garamond!important;letter-spacing:.14em!important;margin:0 0 18px!important;color:#2e271f}
.dateFeature p{margin-top:0!important}

.kitchenHeading{
  white-space:nowrap!important;
  font-size:clamp(40px,4.8vw,66px)!important;
  line-height:1!important;
}
@media(max-width:800px){
  .kitchenHeading{font-size:clamp(34px,9.5vw,46px)!important}
}

/* V8 real quill: the nib/tip is the tracking point, not the center of the image. */
.writtenHeading{overflow:visible!important;max-width:none!important}
.menuLetter{overflow:visible!important}
.handwritingText{padding-right:.18em}

/* smooth load: nothing pops in piecewise */
.fadeImg{opacity:0;transition:opacity 1.65s cubic-bezier(.22,.61,.36,1)}
.fadeImg.imageReady.inView{opacity:1}
.entry .envelope,.entry .inviteTitle,.entry>p{transition:opacity 1.4s ease 0s,transform 1.4s cubic-bezier(.22,.61,.36,1)}
body:not(.ready) .entry .envelope{opacity:0;transform:translateY(14px) scale(.985)}
body:not(.ready) .entry .inviteTitle,body:not(.ready) .entry>p{opacity:0}
.entry{transition:opacity 1.6s ease,visibility 1.6s ease}
.site{transition:opacity 1.6s ease,transform 1.6s cubic-bezier(.22,.61,.36,1)}
img{background:transparent}

/* V10 — cinematic opening: one continuous, staggered choreography (no piecewise pops) */
.entry{transition:opacity 1.9s cubic-bezier(.4,0,.2,1),visibility 1.9s}
.entry.opening .inviteTitle{opacity:.22;transform:translateY(-10px);transition:opacity 1.9s ease,transform 2.2s cubic-bezier(.22,.61,.36,1)}
.envelope{transition:transform 2.1s cubic-bezier(.22,.61,.36,1),filter 2.1s ease!important}
.envelope.open{transform:translateY(6px) scale(1.012)!important}
.flap{transition:transform 1.9s cubic-bezier(.33,0,.2,1),box-shadow 1.9s ease!important}
.envelope.open .card{
  transition:transform 2.3s cubic-bezier(.2,.7,.15,1) .45s,box-shadow 2.3s ease .45s!important;
  transform:translateY(-118px) scale(1.022)!important;
}
.envelope.open .wax{transition:opacity 1.1s ease,transform 1.4s cubic-bezier(.22,.61,.36,1),filter 1.1s ease!important}
.envelope.open .revealInvite > *{
  transition:opacity 1.5s cubic-bezier(.33,0,.2,1),transform 1.5s cubic-bezier(.22,.61,.36,1)!important;
}
.envelope.open .revealInvite > *:nth-child(1){transition-delay:1.05s!important}
.envelope.open .revealInvite > *:nth-child(2){transition-delay:1.2s!important}
.envelope.open .revealInvite > *:nth-child(3){transition-delay:1.35s!important}
.envelope.open .revealInvite > *:nth-child(4){transition-delay:1.5s!important}
.envelope.open .revealInvite > *:nth-child(5){transition-delay:1.62s!important}
.envelope.open .revealInvite > *:nth-child(6){transition-delay:1.74s!important}
.envelope.open .revealInvite > *:nth-child(7){transition-delay:1.84s!important}
.envelope.open .revealInvite > *:nth-child(8){transition-delay:1.94s!important}

/* V10 — handwriting flows at a natural, even hand speed on both letters */
.handwritingScene.handwritingIn .handLine{animation:flowingInk 3.5s cubic-bezier(.38,.02,.28,1) .3s forwards!important}
.handwritingScene.handwritingIn .handLine:nth-of-type(2){animation-delay:2.1s!important;animation-duration:2.2s!important}
.travelLetter.handwritingIn .handLine{animation:flowingInk 1.9s cubic-bezier(.38,.02,.28,1) .3s forwards!important}
.travelLetter.handwritingIn .handLine:nth-of-type(2){animation-delay:1.75s!important;animation-duration:1.8s!important}

/* =========================
   V11 — cinematic opening: film fade-in, candlelight, dolly-out exit
   ========================= */

/* The whole scene arrives like a film frame opening, not as separate elements. */
.entry{overflow:hidden}
.entry > *{will-change:transform,opacity,filter}
.entry:before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:6;
  background:radial-gradient(ellipse at 50% 42%,transparent 34%,#0b0806cc 100%);
  opacity:.92;transition:opacity 2.4s ease;
}
.entry:after{
  content:"";position:absolute;inset:-40%;pointer-events:none;z-index:7;opacity:.05;
  background-image:radial-gradient(#fff 0 .5px,transparent .8px);background-size:3px 3px;
  animation:grainDrift 7s steps(6) infinite;
}
@keyframes grainDrift{
  0%{transform:translate3d(0,0,0)}
  25%{transform:translate3d(-1.5%,1%,0)}
  50%{transform:translate3d(1%,-1.5%,0)}
  75%{transform:translate3d(-1%,-1%,0)}
  100%{transform:translate3d(0,0,0)}
}

/* Candlelight breathing on the envelope itself. */
.entryGlow{
  background:radial-gradient(circle at 50% 40%,#7b5c3599 0,#4a362366 26%,transparent 52%)!important;
  filter:blur(2px);
}
.envelope{
  animation:candleLight 6.5s ease-in-out infinite alternate;
  filter:drop-shadow(0 34px 55px #000a) drop-shadow(0 0 34px #a5793e1f)!important;
}
@keyframes candleLight{
  0%{filter:drop-shadow(0 32px 50px #000a) drop-shadow(0 0 26px #a5793e14)}
  100%{filter:drop-shadow(0 36px 58px #000b) drop-shadow(0 0 40px #b98a4a26)}
}

/* Slow film fade-in of the scene: one continuous move, longer and softer. */
body:not(.ready) .entry:before{opacity:1}
body:not(.ready) .entry .envelope{opacity:0;transform:translateY(26px) scale(.955)!important;filter:blur(6px)!important}
.entry .envelope{transition:opacity 2.6s cubic-bezier(.22,.61,.36,1),transform 2.6s cubic-bezier(.22,.61,.36,1),filter 2.6s ease!important}
body:not(.ready) .entry .inviteTitle{opacity:0;transform:translateY(-14px) scale(.99)}
body:not(.ready) .entry > p{opacity:0;transform:translateY(10px)}
.entry .inviteTitle{transition:opacity 2.6s ease .45s,transform 2.8s cubic-bezier(.22,.61,.36,1) .45s}
.entry > p{transition:opacity 2.4s ease .95s,transform 2.4s cubic-bezier(.22,.61,.36,1) .95s}
body.ready .entry > p{animation:sealPulse 3.4s ease-in-out 2.4s infinite}
@keyframes sealPulse{0%,100%{opacity:.5}50%{opacity:.95}}
.entry.opening > p{opacity:0!important;animation:none!important;transition:opacity .7s ease!important}

/* The seal releases first — a beat of light, then it lifts away. */
.envelope.open .wax{
  transition:opacity 1.25s ease .12s,transform 1.5s cubic-bezier(.3,.85,.2,1),filter 1.25s ease!important;
  transform:translate(-50%,-56%) scale(.7) rotate(-8deg)!important;
}
.entry.opening .envelope{animation:none!important}
.envelope.open{transform:translateY(4px) scale(1.02) rotateX(2.4deg)!important;transition:transform 2.6s cubic-bezier(.2,.7,.15,1),filter 2.6s ease!important}
.flap{transition:transform 2.2s cubic-bezier(.36,0,.18,1) .35s,box-shadow 2.2s ease .35s!important}
.envelope.open .card{
  transition:transform 2.6s cubic-bezier(.18,.72,.12,1) 1.05s,box-shadow 2.6s ease 1.05s!important;
  transform:translateY(-124px) scale(1.03)!important;
}
.envelope.open .revealInvite > *{transition:opacity 1.7s cubic-bezier(.33,0,.2,1),transform 1.7s cubic-bezier(.22,.61,.36,1)!important}
.envelope.open .revealInvite > *:nth-child(1){transition-delay:1.85s!important}
.envelope.open .revealInvite > *:nth-child(2){transition-delay:2s!important}
.envelope.open .revealInvite > *:nth-child(3){transition-delay:2.14s!important}
.envelope.open .revealInvite > *:nth-child(4){transition-delay:2.28s!important}
.envelope.open .revealInvite > *:nth-child(5){transition-delay:2.4s!important}
.envelope.open .revealInvite > *:nth-child(6){transition-delay:2.52s!important}
.envelope.open .revealInvite > *:nth-child(7){transition-delay:2.62s!important}
.envelope.open .revealInvite > *:nth-child(8){transition-delay:2.72s!important}
.entry.opening .inviteTitle{opacity:0!important;transform:translateY(-22px) scale(.985)!important;transition:opacity 1.6s ease,transform 2.2s cubic-bezier(.22,.61,.36,1)!important}
.entry.opening:before{opacity:.72}

/* Exit is a slow camera push through the card into the world beyond. */
.entry{transition:opacity 2.2s cubic-bezier(.4,0,.2,1),visibility 2.2s,transform 2.6s cubic-bezier(.4,0,.2,1),filter 2.2s ease!important}
.entry.leave{opacity:0;visibility:hidden;transform:scale(1.09);filter:blur(9px)}
.site{opacity:0;transform:scale(1.035);transition:opacity 2.3s cubic-bezier(.4,0,.2,1),transform 2.8s cubic-bezier(.2,.7,.15,1)!important}
.site.show{opacity:1;transform:none}

@media(max-width:800px){
  .envelope.open .card{transform:translateY(-96px) scale(1.02)!important}
}

/* V13 — the reply card is part of the invitation, then develops into a thank-you. */
.rsvpCard{overflow:hidden;isolation:isolate;box-shadow:0 34px 100px #0008,0 1px 0 #fff8 inset;transition:min-height 1.8s cubic-bezier(.22,.61,.36,1),transform 1.8s cubic-bezier(.22,.61,.36,1),box-shadow 1.8s ease}
.rsvpCard:before{content:"";position:absolute;inset:12px;border:1px solid #9b784b66;pointer-events:none;z-index:-1}
.rsvpCard:after{content:"";position:absolute;inset:-30%;z-index:3;pointer-events:none;background:linear-gradient(108deg,transparent 38%,#fff8 49%,transparent 61%);opacity:0;transform:translateX(-38%)}
.rsvpCard.in{animation:replyCardArrives 1.9s cubic-bezier(.18,.72,.12,1) both}
@keyframes replyCardArrives{0%{opacity:0;transform:translateY(34px) scale(.975);filter:blur(7px)}100%{opacity:1;transform:none;filter:none}}
.rsvpOrnament{font:24px Cormorant Garamond;color:var(--gold);margin:0 auto 12px;opacity:.82}
.rsvpIntro,#rsvpForm,.rsvpDeadline{transition:opacity 1.25s cubic-bezier(.4,0,.2,1),transform 1.5s cubic-bezier(.22,.61,.36,1),filter 1.25s ease}
#rsvpForm{transition-delay:.06s}
#rsvpForm input,#rsvpForm select{transition:border-color .45s ease,background-color .45s ease,opacity .45s ease}
#rsvpForm input:focus,#rsvpForm select:focus{outline:none;border-color:var(--wine);background:#fff3}
#rsvpForm button{position:relative;overflow:hidden;transition:opacity .5s ease,letter-spacing .7s ease,background .5s ease}
#rsvpForm button:after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,#fff3 50%,transparent 70%);transform:translateX(-110%)}
#rsvpForm button:disabled{opacity:.68;cursor:default;letter-spacing:.3em}
#rsvpForm button:disabled:after{animation:replySending 1.4s ease-in-out infinite}
@keyframes replySending{to{transform:translateX(110%)}}
.rsvpCard.settling .rsvpIntro,.rsvpCard.settling #rsvpForm,.rsvpCard.settling .rsvpDeadline{opacity:0;transform:translateY(-14px) scale(.985);filter:blur(7px);pointer-events:none}
.rsvpCard.settling:after{animation:paperGleam 2.4s cubic-bezier(.4,0,.2,1) .45s both}
@keyframes paperGleam{0%{opacity:0;transform:translateX(-38%)}35%{opacity:.2}100%{opacity:0;transform:translateX(38%)}}
#thanks{position:absolute;inset:0;z-index:2;display:grid;place-content:center;text-align:center;padding:54px;opacity:0;transform:translateY(22px) scale(.975);filter:blur(12px);transition:opacity 2s cubic-bezier(.4,0,.2,1),transform 2.4s cubic-bezier(.18,.72,.12,1),filter 2s ease}
#thanks[hidden]{display:none}
#thanks.arrived{opacity:1;transform:none;filter:none}
#thanks .thanksMark,#thanks h3,#thanks p,#thanks small{opacity:0;transform:translateY(12px);transition:opacity 1.5s ease,transform 1.8s cubic-bezier(.22,.61,.36,1)}
#thanks .thanksMark{font:26px Cormorant Garamond;color:var(--gold);transition-delay:.15s}
#thanks h3{transition-delay:.38s}
#thanks p{transition-delay:.72s}
#thanks small{font:500 8px Manrope;letter-spacing:.25em;margin-top:15px;transition-delay:1.02s}
#thanks.arrived .thanksMark,#thanks.arrived h3,#thanks.arrived p,#thanks.arrived small{opacity:1;transform:none}
.rsvpError{opacity:0;transition:opacity .7s ease;font:italic 15px Cormorant Garamond;color:var(--wine);margin:14px 0 0}
.rsvpError.show{opacity:1}
@media(prefers-reduced-motion:reduce){.rsvpCard.in{animation:none}#thanks,.rsvpIntro,#rsvpForm,.rsvpDeadline{transition-duration:.01ms!important}}

/* V14 — embedded one-time menu writing and true mobile paper bounds. */
.menuWriting{position:relative;width:100%;height:clamp(150px,24vw,220px);margin:-30px 0 8px;overflow:hidden;isolation:isolate}
.menuWritingVideo{position:absolute;left:0;bottom:-3%;display:block;width:100%;height:auto;opacity:0;transition:opacity .16s ease}
.menuWriting.playing .menuWritingVideo,.menuWriting.complete .menuWritingVideo{opacity:1}
.menuWriting:after{content:none}
.menuWritingFallback{position:absolute;left:0;bottom:14%;font:clamp(40px,4.8vw,66px)/1 Parisienne;color:var(--wine);opacity:0}
.menuWriting.fallback .menuWritingVideo{display:none}
.menuWriting.fallback .menuWritingFallback{opacity:1}

@media(max-width:800px){
  .menuScene{width:100%;padding:82px 14px!important;overflow:hidden}
  .menuLetter{width:100%!important;max-width:100%;min-width:0;margin:0!important;padding:56px 22px 88px!important;transform:none!important;overflow:hidden!important}
  .menuLetter:before{inset:10px!important}
  .menuWriting{height:clamp(112px,34vw,145px);margin:-18px 0 5px}
  .menuWritingVideo{width:112%;left:-6%;bottom:-2%}
  .menuWritingFallback{font-size:clamp(31px,9vw,42px);white-space:normal}
  .editorialMenu{min-width:0;margin-top:22px}
  .editorialMenu article{min-width:0;grid-template-columns:36px minmax(0,1fr);gap:11px;padding:21px 0}
  .editorialMenu article>div,.editorialMenu h3,.editorialMenu p{min-width:0;max-width:100%;overflow-wrap:anywhere}
  .editorialMenu h3{font-size:27px}
  .menuFooter{max-width:100%;padding-right:58px;align-items:flex-start}
  .menuFooter>span:first-child{overflow-wrap:anywhere}
  .stampedWax{right:10px!important;bottom:12px!important;transform:rotate(-7deg) scale(.82)!important}
}

@media(prefers-reduced-motion:reduce){
  .menuWritingVideo{display:none}
  .menuWritingFallback{opacity:1}
}

/* =========================
   V15 — the quill writes for real
   ========================= */

/* The old gradient sweep is gone; ink now follows the letterforms. */
.handTitle.handReady .handSource{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.handTitle{clip-path:none!important;animation:none!important;display:inline-block}
.handLineSvg{display:block;line-height:0}
.handLineSvg + .handLineSvg{margin-top:-.58em}
.handSvg{display:block;height:1.88em;width:auto;max-width:100%;overflow:visible}
.handInkGroup{fill:currentColor}

/* The quill is drawn, not photographed, so it belongs to the engraving. */
.handQuill{pointer-events:none;filter:drop-shadow(3px 7px 6px rgba(60,40,20,.22))}
.handQuillVane{fill:#f4ecdd;stroke:#a08b6c;stroke-width:.8;stroke-linejoin:round;opacity:.86}
.handQuillBarbs path{stroke:#ab9878;stroke-width:.75;opacity:.42;fill:none}
.handQuillShaft{fill:#8a7052;stroke:#6d5539;stroke-width:.5}
.handQuillNib{fill:#241c14}
.handQuillSlit{stroke:#efe6d6;stroke-width:1;opacity:.7}

/* The menu heading is written now, so the video and its box are retired. */
.menuWriting{display:none!important}
.menuHeading{display:block;margin:-6px 0 14px}

@media(prefers-reduced-motion:reduce){
  .handQuill{display:none}
}
