/* An ivory invitation, plum silk, and fine champagne-gold rules. */
:root{--paper:#f8f4ed;--ink:#4c3045;--plum:#68465c;--muted:#786d70;--gold:#ac8955;--line:#d7c6a9;--serif:'Cormorant Garamond',Georgia,serif;--sans:'DM Sans',Arial,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:80px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.6}body:before{content:'';position:fixed;inset:0;pointer-events:none;z-index:20;opacity:.12;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.2' filter='url(%23n)'/%3E%3C/svg%3E")}body.cover-visible{overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid var(--gold);outline-offset:6px}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.08}h2{font-size:clamp(2.6rem,5vw,4.5rem)}em{font-weight:400;color:var(--plum)}[hidden]{display:none!important}.eyebrow{text-transform:uppercase;font-size:.75rem;letter-spacing:.23em;font-weight:500;line-height:1.9;color:var(--muted)}.ornament{display:flex;align-items:center;justify-content:center;gap:16px;color:var(--gold);font-size:20px;margin:24px 0}.ornament i{width:58px;height:1px;background:var(--line)}.primary{display:inline-flex;align-items:center;justify-content:center;gap:12px;border:1px solid var(--plum);border-radius:100px;background:var(--plum);color:#fffaf3;padding:17px 29px;font-size:.875rem;letter-spacing:.06em;text-decoration:none;transition:transform .25s,box-shadow .25s,background .25s;min-height:54px}.primary:hover{transform:translateY(-3px);background:#543449;box-shadow:0 8px 24px #56364420}.primary svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.4}.ambient{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:10}.ambient span{position:absolute;bottom:-70px;color:#987184;opacity:0;font-family:Georgia,serif;font-size:20px;animation:float-heart 19s linear infinite}.ambient span:nth-child(1){left:6%;animation-delay:0s}.ambient span:nth-child(2){left:22%;animation-delay:8s;font-size:14px}.ambient span:nth-child(3){left:43%;animation-delay:3s}.ambient span:nth-child(4){left:77%;animation-delay:12s;font-size:16px}.ambient span:nth-child(5){left:91%;animation-delay:5s}.ambient span:nth-child(6){left:61%;animation-delay:15s;font-size:12px}.ambient span:nth-child(7){left:14%;animation-delay:16s}.ambient span:nth-child(8){left:85%;animation-delay:1s;font-size:12px}@keyframes float-heart{0%{transform:translate3d(0,0,0) rotate(-15deg);opacity:0}12%,75%{opacity:.32}100%{transform:translate3d(40px,-110vh,0) rotate(20deg);opacity:0}}
.cover{position:fixed;inset:0;z-index:30;display:grid;place-items:center;text-align:center;overflow-y:auto;overflow-x:hidden;background:radial-gradient(ellipse at 0 10%,#e2d0d753,transparent 48%),radial-gradient(ellipse at 100% 85%,#e2d0b740,transparent 48%),var(--paper);transition:opacity .8s,transform 1.2s cubic-bezier(.22,1,.36,1);padding:60px 25px}.cover.opening{opacity:0;transform:scale(1.055);pointer-events:none}.cover-frame{position:absolute;inset:25px;border:1px solid var(--line);pointer-events:none}.cover-frame:after{content:'';position:absolute;inset:7px;border:1px solid #d7c6a969}.corner{position:absolute;font-size:35px;color:var(--gold);line-height:1;background:var(--paper);padding:0 6px}.corner-tl{left:13px;top:13px}.corner-tr{right:13px;top:13px}.corner-bl{left:13px;bottom:13px}.corner-br{right:13px;bottom:13px}.cover-content{position:relative;padding:15px 0}.monogram{font-family:var(--serif);font-size:28px;border:1px solid var(--line);border-radius:50%;width:74px;height:74px;margin:0 auto 28px;display:flex;align-items:center;justify-content:center;letter-spacing:-3px;color:var(--gold)}.monogram span{font-size:22px;font-style:italic;margin:0 5px}.cover h1{font-size:clamp(3.4rem,6.3vw,6.1rem);margin:18px 0 0;letter-spacing:-.035em}.ampersand{display:block;color:var(--gold);font-size:.57em;font-style:italic;line-height:.95;margin:8px auto 11px}.cover-date{font-size:.9rem;letter-spacing:.3em;margin:0 0 28px}.cover-date span{padding:0 5px;color:var(--gold)}.small-note{font-family:var(--serif);font-size:1.1rem;font-style:italic;color:var(--muted);margin-top:17px}.cover-foot{position:absolute;bottom:44px;font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.topbar{height:78px;display:flex;align-items:center;justify-content:space-between;max-width:1400px;margin:auto;padding:0 5%;border-bottom:1px solid #d7c6a961;gap:16px}.brand{font-family:var(--serif);font-size:29px;text-decoration:none;white-space:nowrap}.brand span{font-style:italic;color:var(--gold);font-size:23px}.topbar>span{color:var(--muted);font-size:.75rem;letter-spacing:.15em;text-transform:uppercase}.text-button{border:0;background:none;color:var(--muted);font-size:.8rem;padding:12px 0;text-decoration:underline;text-underline-offset:5px}.hero{position:relative;isolation:isolate;min-height:870px;overflow:hidden;text-align:center;padding:66px 20px 45px}.hero-arch{position:absolute;z-index:-1;top:27px;bottom:105px;left:50%;width:min(690px,calc(100% - 40px));transform:translateX(-50%);border:1px solid #d7c6a98a;border-radius:50% 50% 0 0;background:radial-gradient(ellipse at center,#fffdfa 15%,#f4e9e930 80%)}.hero-arch:after{content:'';position:absolute;inset:10px;border:1px solid #d7c6a954;border-radius:inherit}.hero-copy h2{font-size:clamp(3.2rem,6vw,5.75rem);letter-spacing:-.025em;margin-top:26px}.honour{font-family:var(--serif);font-size:1.35rem;font-style:italic;color:var(--muted);margin-top:25px}.ceremony-date{font-family:var(--serif);font-size:2rem;letter-spacing:.13em}.hero-sub{font-size:.875rem;color:var(--muted);margin-top:6px}.hero-sub span{margin:0 12px;color:var(--gold)}.couple-stage{position:relative;width:340px;height:250px;margin:12px auto 0}.figure{position:absolute;inset:0;background-image:url('assets/couple.png?v=pink-back');background-size:contain;background-repeat:no-repeat;background-position:center bottom;opacity:0}.groom-figure{clip-path:inset(0 50% 0 0);transform:translateX(-130px)}.bride-figure{clip-path:inset(0 0 0 50%);transform:translateX(130px)}.is-open .groom-figure{animation:groom-enter 2.6s .2s cubic-bezier(.22,1,.36,1) forwards}.is-open .bride-figure{animation:bride-enter 2.6s .2s cubic-bezier(.22,1,.36,1) forwards}@keyframes groom-enter{to{opacity:1;transform:translateX(5.2%)}}@keyframes bride-enter{to{opacity:1;transform:translateX(-5.2%)}}.meeting-heart{position:absolute;left:calc(50% - 8px);top:43%;color:#936078;font-size:18px;opacity:0}.is-open .meeting-heart{animation:heart-meet 2s 2.3s ease-out forwards}@keyframes heart-meet{0%{opacity:0;transform:translateY(12px) scale(.2)}25%{opacity:1;transform:translateY(0) scale(1.15)}100%{opacity:0;transform:translateY(-70px) scale(.8)}}.scroll-cue{display:block;margin:12px auto 0;color:var(--muted);text-decoration:none;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase}.scroll-cue span{display:block;font-size:24px;line-height:1.4;color:var(--gold)}.portraits-section{text-align:center;padding:100px 24px 110px;max-width:1000px;margin:auto}.portraits-section>h2{margin-top:18px}.portraits{display:grid;grid-template-columns:1fr 70px 1fr;align-items:center;max-width:740px;margin:55px auto 0;gap:20px}.portrait-frame{padding:10px;border:1px solid var(--line);border-radius:160px 160px 5px 5px}.portrait img{display:block;width:100%;height:350px;object-fit:cover;border-radius:150px 150px 2px 2px;filter:saturate(.8)}.groom-portrait img{object-position:47% 24%}.bride-portrait img{object-position:50% 28%}.portrait figcaption{margin-top:23px}.portrait h3{font-size:2.05rem;margin-top:8px}.portrait-amp{font:italic 4.5rem var(--serif);color:var(--gold);align-self:center;margin-top:-65px}.countdown-section{position:relative;text-align:center;background:#ede4e9;padding:90px 24px;border-top:1px solid #d7c6a957;border-bottom:1px solid #d7c6a957}.countdown-section .eyebrow{color:#71566a}.countdown-section h2{margin-top:14px}.countdown{display:flex;align-items:flex-start;justify-content:center;max-width:860px;gap:23px;margin:47px auto 28px}.countdown div{min-width:98px}.countdown span{display:block;font-family:var(--serif);font-variant-numeric:tabular-nums;font-size:4rem;line-height:1.1}.countdown small{display:block;font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;margin-top:14px}.countdown b{font:2rem var(--serif);color:#b396a7;margin-top:8px;font-weight:400}.countdown-note{font-size:.8rem;color:var(--muted)}.venue-section{max-width:1040px;margin:auto;padding:120px 40px;display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:center}.venue-intro h2{margin:23px 0}.venue-intro>p:not(.eyebrow){color:var(--muted);font-size:1rem;line-height:1.9}.venue-intro .ornament{justify-content:flex-start}.venue-card{position:relative;border:1px solid var(--line);padding:49px 28px 45px;text-align:center;border-radius:180px 180px 4px 4px;background:#fffcf64a}.venue-card:before{content:'';position:absolute;inset:9px;border:1px solid #d7c6a970;border-radius:inherit;pointer-events:none}.venue-mark{display:block;color:var(--gold);font-size:35px;margin-bottom:15px}.venue-card h3{font-size:2.6rem;margin:18px 0 8px}.venue-card>p:not(.eyebrow){color:var(--muted)}.venue-rule{width:60px;height:1px;background:var(--line);margin:25px auto}.venue-card .event-day{font-size:.9rem;margin-bottom:7px}.venue-card .primary{margin-top:30px}.ist{font-size:.75rem}.closing{background:#543a4c;text-align:center;color:#faf5ed;padding:75px 25px 40px;position:relative}.closing-heart{display:block;font:4rem var(--serif);line-height:1;margin-bottom:25px;color:#d6b893}.closing .eyebrow{color:#d5c4cc}.closing h2{font-size:clamp(2.1rem,4vw,3.7rem);line-height:1.18;margin:25px 0}.closing em{color:#e6c9ad}.closing .ornament{margin:35px 0}.signoff{font:2.7rem var(--serif)}.signoff span{color:#d6b893;font-style:italic}.footer-date{font-size:.75rem;letter-spacing:.2em;margin-top:10px;color:#dfcfd7}.back-top{display:inline-block;margin-top:50px;font-size:.75rem;color:#dfcfd7;text-underline-offset:5px}.reveal{transition:opacity .9s,transform .9s}.js-motion .reveal:not(.visible){opacity:0;transform:translateY(24px)}.noscript{position:relative;z-index:40;background:var(--paper);padding:35px}.burst-heart{position:fixed;left:50%;top:65%;z-index:35;pointer-events:none;color:#a47890;font-family:Georgia,serif;animation:burst 1.9s ease-out forwards}@keyframes burst{0%{opacity:0;transform:translate(0,0) scale(.3)}15%{opacity:.8}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(1.2) rotate(var(--rotate))}}
@media(min-width:1500px){.hero{min-height:920px}}@media(max-width:700px){.cover{padding:48px 30px}.cover-frame{inset:16px}.corner-tl{left:4px;top:4px}.corner-tr{right:4px;top:4px}.corner-bl{left:4px;bottom:4px}.corner-br{right:4px;bottom:4px}.cover h1{font-size:clamp(2.8rem,10vw,4rem);line-height:1.12}.monogram{width:64px;height:64px;margin-bottom:24px;font-size:25px}.cover-foot{bottom:30px;font-size:.65rem}.cover .eyebrow{font-size:.7rem}.cover .ornament{margin:22px 0}.topbar{height:65px;padding:0 6%;gap:10px}.topbar>span{font-size:.65rem;letter-spacing:.04em}.text-button{font-size:.7rem}.brand{font-size:24px}.hero{padding:65px 20px 35px;min-height:815px}.hero-copy>.eyebrow{font-size:.7rem;letter-spacing:.16em}.hero-copy h2{font-size:clamp(2.6rem,10vw,4rem);margin-top:26px}.honour{font-size:1.14rem;margin-top:25px}.ceremony-date{font-size:1.8rem}.hero-arch{top:24px;bottom:100px;border-radius:210px 210px 0 0}.couple-stage{width:300px;height:250px;margin-top:22px}.portraits-section{padding:65px 20px}.portraits-section .eyebrow{font-size:.68rem;letter-spacing:.12em}.portraits-section>h2{font-size:2.55rem}.portraits{grid-template-columns:1fr 1fr;gap:20px;margin-top:35px;position:relative}.portrait-amp{position:absolute;top:45%;left:calc(50% - 12px);font-size:2rem;margin:0;z-index:1;background:var(--paper);border-radius:50%;width:24px}.portrait-frame{padding:6px}.portrait img{height:clamp(210px,52vw,300px)}.portrait h3{font-size:1.6rem}.portrait figcaption .eyebrow{font-size:.65rem;letter-spacing:.13em}.portrait figcaption{margin-top:18px}.countdown-section{padding:65px 18px}.countdown-section h2{font-size:2.6rem}.countdown{gap:8px;margin:35px auto 27px}.countdown div{min-width:0;flex:1;max-width:72px}.countdown span{font-size:2.65rem}.countdown small{font-size:.65rem;letter-spacing:.04em;margin-top:10px}.countdown b{font-size:1.2rem;margin-top:8px}.countdown-note{font-size:.75rem;max-width:270px;margin:auto}.venue-section{grid-template-columns:1fr;gap:30px;padding:65px 25px}.venue-intro{text-align:center}.venue-intro h2 br{display:none}.venue-intro h2{font-size:3.2rem}.venue-intro .ornament{justify-content:center}.venue-card{width:100%;max-width:390px;margin:auto;padding:43px 22px}.closing{padding-top:60px}.closing .eyebrow{font-size:.65rem;letter-spacing:.14em}.closing h2 br{display:none}.closing h2{font-size:2.6rem;max-width:480px;margin:22px auto}.closing .signoff{font-size:2.4rem}}
@media(max-height:740px) and (min-width:701px){.cover{padding:30px}.monogram{width:58px;height:58px;font-size:24px;margin-bottom:14px}.cover h1{font-size:4.6rem}.cover-date{margin-bottom:20px}.cover .ornament{margin:17px 0}.cover-foot{bottom:36px}}@media(max-height:670px) and (max-width:700px){.cover{position:absolute;min-height:670px}.cover-foot{bottom:25px}body.cover-visible{overflow:auto}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-delay:0ms!important;transition-duration:.01ms!important}.ambient,.burst-heart{display:none}.js-motion .reveal:not(.visible){opacity:1;transform:none}.figure{opacity:1}.groom-figure{transform:translateX(5.2%)}.bride-figure{transform:translateX(-5.2%)}}

@media (max-height:850px){.hero{padding-top:32px;min-height:0}.hero-copy h2{font-size:clamp(2.5rem,5.1vw,4rem);margin-top:16px}.hero-copy .ampersand{margin:5px auto}.honour{margin-top:16px}.hero .ornament{margin:14px 0}.ceremony-date{font-size:1.6rem}.couple-stage{height:180px;width:270px;margin-top:12px}.hero-arch{bottom:73px}.scroll-cue{margin-top:8px}.meeting-heart{top:35%}}


/* Keep every part of the invitation inside its stationery arch. */
.hero{padding:112px 24px 68px;min-height:0}
.hero-arch{top:24px;bottom:24px;border-radius:345px 345px 0 0}
.hero-copy{position:relative;max-width:600px;margin:0 auto}
.hero-copy>.eyebrow{max-width:300px;margin:0 auto}
.couple-stage{width:340px;height:227px;margin:22px auto 0}
.scroll-cue{margin:20px auto 0;max-width:280px}
.scroll-cue span{margin-top:4px}
@media(max-width:700px){.hero{padding:110px 26px 64px}.hero-arch{width:calc(100% - 32px);border-radius:190px 190px 0 0}.hero-copy>.eyebrow{max-width:240px;letter-spacing:.13em}.hero-copy h2{font-size:clamp(2.5rem,9vw,3.6rem)}.couple-stage{width:min(300px,100%);height:200px}.scroll-cue{max-width:250px;font-size:.68rem;margin-top:18px}}

/* Separate the new artwork at its transparent gap and bring its fingertips together. */
.groom-figure{clip-path:inset(0 41.08% 0 0)}
.bride-figure{clip-path:inset(0 0 0 58.92%)}
@keyframes groom-enter{to{opacity:1;transform:translateX(1.76%)}}
@keyframes bride-enter{to{opacity:1;transform:translateX(-1.76%)}}
.meeting-heart{left:calc(58.92% - 8px);top:35%}
@media(prefers-reduced-motion:reduce){.groom-figure{transform:translateX(1.76%)}.bride-figure{transform:translateX(-1.76%)}}
