@font-face{font-family:VowsScript;src:url('assets/GreatVibes-Regular.ttf') format('truetype');font-display:swap}
:root{--ivory:#f7f4ed;--paper:#fffdfa;--navy:#10243e;--ink:#232d38;--muted:#68645d;--gold:#b89a59;--line:#d8ccb6;--serif:Georgia,'Times New Roman',serif;--script:VowsScript,cursive;--sans:Arial,Helvetica,sans-serif;color-scheme:light}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:75px}body{margin:0;background:var(--ivory);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.65;overflow-x:clip}body.locked{overflow:hidden}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #bb944e;outline-offset:5px}button{touch-action:manipulation}img{max-width:100%;display:block}svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.45;stroke-linecap:round;stroke-linejoin:round}p{margin:0 0 18px}h1,h2,h3{font-family:var(--serif);font-weight:400;margin:0}section{scroll-margin-top:72px}body.has-js .reveal{opacity:0;transform:translateY(24px);transition:opacity .85s ease,transform .85s ease}body.has-js .reveal.visible{opacity:1;transform:none}
.toolbar{position:absolute;inset:0 0 auto;z-index:15;display:flex;align-items:center;gap:14px;padding:20px max(22px,calc((100vw - 1080px)/2));height:76px;color:#fff}.wordmark{font:500 24px var(--serif);letter-spacing:-4px;color:#e6cf91;padding-right:5px}.wordmark span{color:#fff}.prototype-label{font-size:12px;letter-spacing:1.2px}.tools{margin-left:auto;display:flex;gap:8px}.tool{width:42px;height:42px;border:1px solid #ffffff45;color:#fff;background:#10243e33;border-radius:50%;display:grid;place-items:center;font-size:13px;backdrop-filter:blur(8px)}.tool[aria-pressed=true]{color:#e5ca8d;border-color:#e5ca8d}.script{font-family:var(--script);font-size:clamp(43px,6vw,65px);font-weight:400;line-height:1.35}.eyebrow{font-size:12px;font-weight:500;letter-spacing:2.5px;line-height:1.8;color:#856c3c;margin-bottom:20px}.section{padding:88px 30px;text-align:center;max-width:1100px;margin:0 auto}.chapter{display:flex;justify-content:center;align-items:center;gap:13px;font-size:11px;letter-spacing:2.4px;color:#7f7565;margin-bottom:48px}.chapter>span:first-child{height:1px;width:34px;background:var(--gold)}.section-title{font-size:clamp(30px,4vw,45px);line-height:1.25;margin:0 0 42px}.button{border:1px solid var(--navy);background:var(--navy);color:#fff;min-height:52px;padding:14px 25px;letter-spacing:.5px;border-radius:3px}.button.secondary{background:transparent;color:var(--navy)}.text-link{color:var(--navy);font-size:14px;letter-spacing:.5px;text-underline-offset:7px;text-decoration:underline;background:none;border:0;padding:10px 0;display:inline-block}.form-note{font-size:12px;line-height:1.6;color:var(--muted);margin:16px 0 0}
.opening{position:fixed;inset:0;z-index:20;display:grid;place-items:center;background:#101a25;color:#fff;text-align:center;isolation:isolate;overflow:hidden;transition:opacity 1.25s ease,visibility 1.25s}.opening-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:grayscale(1);opacity:.52;transform:scale(1.035);transition:transform 2.3s cubic-bezier(.2,.8,.2,1),filter 2.3s}.opening-shade{position:absolute;inset:0;background:linear-gradient(0deg,#07131af0,#07131a20 70%)}.opening::after{content:'';position:absolute;inset:24px;border:1px solid #dcc48a70;pointer-events:none;transition:transform 1.4s,opacity 1.4s}.opening-inner{position:relative;padding:70px 25px 45px;z-index:1}.opening .eyebrow{color:#eadac0;font-size:12px}.opening-monogram{font-family:var(--serif);font-size:clamp(74px,12vw,135px);line-height:1.2;letter-spacing:-5px;color:#fff6de;margin-bottom:25px}.opening-monogram span{font-family:var(--script);font-size:.8em;font-weight:400;padding:0 9px;color:#d6c08e}.opening h1{font-size:clamp(27px,4vw,44px);line-height:1.3}.opening h1 span{font-family:var(--script);font-size:1.3em;color:#dcc48a;padding:0 6px}.opening-date{font-size:14px;letter-spacing:1px;color:#e8e1d8;margin:20px 0 35px}.open-button{background:#f6f0e5;color:#182a3d;padding:16px 32px;border:1px solid #dfc892;border-radius:2px;min-height:54px;letter-spacing:1.2px}.opening-guest{display:block;font-size:13px;color:#dfd8cc;margin-top:23px}.opening-footnote{position:absolute;bottom:34px;font-size:10px;letter-spacing:4px;color:#dfcfac}.opening.is-open{opacity:0;visibility:hidden;pointer-events:none}.opening.is-open .opening-photo{transform:scale(1.12)}.opening.is-open::after{transform:scale(1.04);opacity:0}.opening.is-open .opening-inner{animation:openingExit 1.1s both}@keyframes openingExit{to{opacity:0;transform:translateY(-16px)}}
.hero{position:relative;height:min(1000px,110svh);min-height:760px;color:#fff;background:#111a20;display:flex;align-items:flex-end;justify-content:center;text-align:center;overflow:hidden;isolation:isolate}.hero-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 35%;filter:grayscale(1);z-index:-2;transform:scale(1.06)}.hero-shade{position:absolute;inset:0;background:linear-gradient(180deg,#08111a55 0%,#0000 28%,#05111b60 48%,#06101cef 100%);z-index:-1}.hero-copy{padding:0 24px 72px;width:100%;max-width:750px}.hero-prelude{font-size:11px;letter-spacing:3px;color:#f4ead8;margin-bottom:10px}.hero-script{font-size:clamp(78px,11vw,145px);line-height:1.05;text-shadow:0 2px 18px #0004;margin-bottom:18px}.couple-names{font-size:clamp(27px,4vw,44px);letter-spacing:3px;line-height:1.3}.couple-names span{font-family:var(--script);font-size:1.5em;letter-spacing:0;color:#e9d2a1;margin-inline:6px}.hero-invite{font-size:13px;color:#e2ded7;margin:12px 0 28px;letter-spacing:.6px}.hero-date{max-width:480px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:20px;margin:0 auto}.hero-date span{border-top:1px solid #cfbf9a99;border-bottom:1px solid #cfbf9a99;padding:10px 0;font-size:11px;letter-spacing:1.6px}.hero-date strong{font:400 52px var(--serif);color:#f3e5c7}.hero-location{font-size:12px;letter-spacing:1px;margin:10px 0 25px;color:#e1dacd}.scroll-hint{font-size:11px;letter-spacing:1.5px;color:#eee1c7;text-decoration:none;padding:12px}.scroll-hint::after{content:'';width:1px;height:28px;display:block;background:#d4c09a;margin:14px auto 0}.hero-number{position:absolute;bottom:27px;left:24px;font-size:9px;letter-spacing:2px;color:#d6cdbb}.fairy-lights{position:absolute;left:-3%;top:120px;width:106%;height:65px;border-bottom:1px solid #dec88f99;border-radius:0 0 50% 50%;transform:rotate(-6deg);display:flex;align-items:flex-end;justify-content:space-evenly}.fairy-lights i{width:5px;height:8px;border-radius:50%;background:#fff4cc;box-shadow:0 0 8px 3px #fff0bf80,0 0 24px 7px #e9b96555;animation:twinkle 3s ease-in-out infinite alternate}.fairy-lights i:nth-child(2n){animation-delay:1.5s}.fairy-lights i:nth-child(3n){animation-delay:.7s}@keyframes twinkle{to{opacity:.6;box-shadow:0 0 3px 2px #fff0bf70,0 0 13px 5px #e9b96533}}body.opened .hero-photo{animation:photoEnter 2.4s cubic-bezier(.2,.7,.3,1) both}body.opened .hero-prelude,body.opened .hero-script,body.opened .couple-names,body.opened .hero-invite,body.opened .hero-date,body.opened .hero-location{animation:copyEnter 1.3s both}body.opened .hero-script{animation-delay:.18s}body.opened .couple-names{animation-delay:.38s}body.opened .hero-invite{animation-delay:.5s}body.opened .hero-date{animation-delay:.68s}body.opened .hero-location{animation-delay:.8s}@keyframes photoEnter{from{transform:scale(1.1)}to{transform:scale(1)}}@keyframes copyEnter{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.countdown-section{padding-top:78px;padding-bottom:72px;border-bottom:1px solid var(--line)}.countdown-section .script{margin-bottom:38px}.countdown{display:grid;grid-template-columns:repeat(4,1fr);max-width:540px;margin:0 auto 22px}.countdown>div{border-right:1px solid var(--line);min-width:0}.countdown>div:last-child{border:0}.countdown b{font:400 clamp(29px,4vw,44px) var(--serif);font-variant-numeric:tabular-nums;display:block;line-height:1.3}.countdown span{display:block;font-size:11px;letter-spacing:1.2px;color:var(--muted);margin-top:8px}.forever-mark{font:400 94px/1.2 var(--serif);color:var(--gold);display:block}.promise{font-size:clamp(31px,4vw,44px);max-width:480px;margin:0 auto}.welcome{max-width:760px;padding-bottom:85px}.guest-name{font-size:clamp(34px,5vw,49px);line-height:1.3;margin-bottom:28px}.guest-name span{font-style:italic;color:#7f6b49;font-size:.68em;display:block;margin-top:9px}.body-copy{max-width:540px;margin:0 auto;font-family:var(--serif);font-size:20px;line-height:1.8}.signature{font-size:52px;color:#89713f;margin:32px 0 30px}.verse{font-family:var(--serif);font-style:italic;max-width:480px;margin:0 auto 15px;font-size:17px;color:var(--muted);line-height:1.7}.verse-ref{font-size:11px;letter-spacing:1.3px;color:#857d70}
.venues{background:#efe9dc;max-width:none;padding-inline:max(30px,calc((100vw - 1030px)/2))}.venue-grid{display:grid;grid-template-columns:1fr 1fr;gap:35px;max-width:1000px;margin:0 auto}.venue{background:var(--paper);border:1px solid #d9cdb6;overflow:hidden}.ceremony{padding:56px 28px 35px;display:flex;flex-direction:column;align-items:center;justify-content:center}.venue-icon{width:50px;height:50px;color:#a58950;margin-bottom:28px}.venue h3{font-size:29px;line-height:1.3;margin-bottom:12px}.venue p:not(.eyebrow){font-size:14px;color:#666158}.venue-when{display:flex;justify-content:center;gap:20px;align-items:center;font-size:14px;padding:17px 0;border-block:1px solid #e2d8c7;margin:20px 0 12px;width:100%}.venue-when b{font-family:var(--serif);font-size:21px;font-weight:400}.reception>img{width:100%;height:245px;object-fit:cover}.reception-copy{padding:30px 30px 22px}.reception .eyebrow{font-size:11px}.programme{max-width:760px}.timeline{margin:50px auto 40px;max-width:470px;text-align:left}.timeline-item{position:relative;padding:0 0 36px 78px;min-height:112px}.timeline-item::before{content:'';position:absolute;width:1px;top:49px;bottom:0;left:23px;background:var(--line)}.timeline-item:last-child::before{display:none}.timeline-icon{position:absolute;top:0;left:0;width:48px;height:48px;border:1px solid #cbb78f;border-radius:50%;display:grid;place-items:center;color:#96804f}.timeline-item time{font-size:13px;letter-spacing:1.5px;color:#8a7141}.timeline-item h3{font-size:23px;line-height:1.4;margin:5px 0}.timeline-item p{font-size:13px;line-height:1.5;color:var(--muted)}.host{display:flex;justify-content:center;align-items:center;gap:20px;padding-top:26px;border-top:1px solid var(--line);text-align:left}.host img{width:65px;height:65px;object-fit:cover;border-radius:50%;border:2px solid #c7aa6f}.host .eyebrow{font-size:10px;margin-bottom:4px}.host h3{font-size:22px}
.moments{padding-top:10px;max-width:960px}.moments .script{margin-bottom:30px}.gallery{aspect-ratio:4/3;position:relative;overflow:hidden;background:#112438;border:9px solid #fff;box-shadow:0 15px 45px #574b3514;touch-action:pan-y;user-select:none}.slide{position:absolute;inset:0;margin:0;opacity:0;transition:opacity .6s ease;pointer-events:none}.slide.active{opacity:1;pointer-events:auto}.slide img{width:100%;height:100%;object-fit:cover}.slide::after{content:'';position:absolute;inset:55% 0 0;background:linear-gradient(transparent,#071321a8)}.slide figcaption{position:absolute;bottom:22px;left:20px;right:20px;color:#fff;font:400 34px var(--script);z-index:1;text-shadow:0 1px 8px #0005}.gallery-button{position:absolute;top:50%;transform:translateY(-50%);width:42px;height:48px;border:1px solid #ffffff66;background:#10243e77;color:#fff;font:400 32px var(--serif);z-index:2;border-radius:2px}.gallery-button.prev{left:12px}.gallery-button.next{right:12px}.gallery-dots{display:flex;justify-content:center;gap:6px;margin-top:18px}.gallery-dots button{border:0;background:transparent;padding:14px 10px}.gallery-dots button::after{content:'';display:block;width:6px;height:6px;border-radius:50%;background:#b8b4ac}.gallery-dots button.active::after{background:#9d7940;transform:scale(1.4)}.dress{padding-top:15px;padding-bottom:70px;max-width:720px}.dress .section-title{margin-bottom:18px}.dress>p:not(.eyebrow){font-size:15px;color:var(--muted)}.palette{display:flex;justify-content:center;gap:28px;margin-top:28px}.palette span{font-size:11px;letter-spacing:.6px}.palette i{width:37px;height:37px;border-radius:50%;border:4px solid var(--paper);box-shadow:0 0 0 1px #d8ccb9;display:block;margin:0 auto 9px}
.responses{border-top:1px solid var(--line)}.rsvp-monogram{font:400 100px/.85 var(--serif);color:#a78c55;letter-spacing:-6px;width:230px;margin:0 auto 34px;position:relative}.rsvp-monogram span{display:inline-block;margin-left:12px;color:#b7a17a}.responses>p,.wishes>p{font-size:15px;color:var(--muted)}.response-form{text-align:left;width:100%;max-width:440px;margin:32px auto 0}.response-form>label,.response-form>div>label,.response-form legend{font-size:14px;display:block;color:#504a41;margin-bottom:8px}.response-form input:not([type=radio]),.response-form select,.response-form textarea{display:block;width:100%;border:1px solid #c9bda7;background:#fffdfa;color:var(--navy);min-height:51px;padding:12px 14px;margin-bottom:22px;border-radius:3px;resize:vertical;font-size:16px}.response-form fieldset{border:0;margin:0 0 25px;padding:0}.choice{display:flex;align-items:center;gap:12px;min-height:49px;margin-bottom:8px;font-size:15px;border-bottom:1px solid #e0d6c5}.choice input{accent-color:var(--navy);width:18px;height:18px}.response-form .button{width:100%}.response-form .form-note{text-align:center}.form-result{font-size:14px;color:#10243e;line-height:1.65;padding:0;border:0;margin:0}.form-result:not(:empty){margin-top:20px;border:1px solid #cbbb96;padding:16px;background:#eee7d8}.wishes{padding-top:30px;max-width:760px}.wishes .script{margin-bottom:20px}.entry{padding-top:25px;padding-bottom:75px;max-width:740px}.entry-ticket{display:grid;grid-template-columns:1fr 160px;text-align:left;border:1px solid #bdaa88;background:#fffcf6;max-width:550px;margin:28px auto 0;padding:28px 30px;gap:25px}.ticket-label{font-size:10px;letter-spacing:1.6px;color:#796a51}.entry-ticket h2{font-size:33px;letter-spacing:2px;margin-top:10px}.entry-ticket p{font-size:13px;color:var(--muted)}.entry-code{font:400 24px var(--serif);letter-spacing:5px}.qr{display:flex;flex-direction:column;justify-content:center;border-left:1px dashed #bdaa88;padding-left:22px;align-items:center}.qr img{width:115px;height:115px;background:#fff;padding:5px}.qr span{font-size:9px;letter-spacing:1.6px;white-space:nowrap;margin-top:9px;color:#786748}.closing{text-align:center;background:#182839;color:#fff;padding:64px 25px 45px}.closing .script{font-size:clamp(37px,5vw,60px);max-width:550px;margin:0 auto 25px;line-height:1.4;color:#e5d2a6}.closing>p{font-family:var(--serif);font-size:25px;letter-spacing:1px}.closing .forever-mark{font-size:70px;margin-bottom:13px}.closing-date{font-size:11px;letter-spacing:4px;color:#cfb983}.closing .made-by{font:400 10px var(--sans);letter-spacing:2px;color:#aab2b9;margin-top:50px}.made-by span{display:block;color:#c3b89f;margin-top:12px;font-size:9px}.closing .text-link{font-size:11px;color:#dfd0b0}
@media(min-width:1000px){.hero{height:950px;min-height:850px}.hero-photo{object-position:50% 42%}.hero-copy{padding-bottom:68px}.hero-script{font-size:140px}.fairy-lights{top:150px}.toolbar{padding-inline:45px}.opening-photo{object-position:center 40%}.hero-shade{background:linear-gradient(180deg,#07162455,#07162400 20%,#07162455 42%,#06101cf2 100%)}}
@media(max-width:600px){.toolbar{gap:10px;padding:16px 18px}.prototype-label{font-size:10px;letter-spacing:.6px}.tools{gap:5px}.tool{width:38px;height:38px}.hero{height:100svh;min-height:790px}.hero-photo{object-position:52% 30%}.hero-copy{padding:0 20px 54px}.hero-script{font-size:86px}.hero-date{gap:13px}.hero-date span{font-size:9px;letter-spacing:1.1px}.hero-prelude{font-size:9px;letter-spacing:2px}.couple-names{font-size:29px;letter-spacing:1.7px}.hero-invite{font-size:12px}.hero-location{font-size:10px}.hero-number{font-size:8px;bottom:18px;left:18px}.fairy-lights{top:95px}.section{padding:67px 23px}.chapter{font-size:9px;letter-spacing:1.7px;margin-bottom:35px;gap:10px}.chapter>span:first-child{width:20px}.countdown-section{padding-top:65px;padding-bottom:54px}.countdown span{font-size:10px;letter-spacing:.7px}.promise{font-size:36px}.welcome .body-copy{font-size:18px}.venue-grid{grid-template-columns:1fr;gap:24px}.venue h3{font-size:27px}.ceremony{padding:40px 23px 28px}.reception>img{height:215px}.venues{padding-inline:23px}.timeline{margin-top:38px}.timeline-item{padding-left:69px}.timeline-item h3{font-size:22px}.host h3{font-size:20px}.moments{padding-top:20px;padding-inline:15px}.gallery{aspect-ratio:3/4;border-width:6px}.gallery img{object-position:center}.slide figcaption{font-size:32px;bottom:18px}.gallery-button{width:38px;height:44px}.dress{padding-top:20px;padding-bottom:56px}.rsvp-monogram{font-size:91px}.responses .script{font-size:51px}.wishes{padding-top:20px}.entry{padding-top:10px}.entry-ticket{padding:22px 18px;grid-template-columns:1fr 114px;gap:15px}.entry-ticket h2{font-size:25px}.qr{padding-left:13px}.qr img{width:95px;height:95px}.ticket-label{font-size:9px}.entry-code{font-size:23px}.entry-ticket p{font-size:12px}.opening::after{inset:17px}.opening h1{font-size:32px}.opening-monogram{font-size:90px}.opening-date{font-size:12px}.opening-footnote{bottom:29px}.opening-inner{padding-inline:27px}.closing{padding-top:48px}}
@media(max-width:350px){.prototype-label{display:none}.hero-script{font-size:73px}.couple-names{font-size:25px}.hero{min-height:745px}.hero-date{gap:10px}.hero-date span{letter-spacing:.5px}.entry-ticket{padding:18px 13px;grid-template-columns:1fr 100px;gap:12px}.entry-ticket h2{font-size:23px}.section{padding-inline:18px}}
/* Readable secondary labels at every size; retain the invitation's editorial hierarchy. */
.prototype-label,.chapter,.hero-prelude,.hero-date span,.hero-location,.hero-number,.scroll-hint,.opening-footnote,.countdown span,.verse-ref,.reception .eyebrow,.host .eyebrow,.palette span,.ticket-label,.qr span,.closing-date,.closing .made-by,.made-by span,.closing .text-link{font-size:12px}
.hero-date span{letter-spacing:.8px}.hero-number{letter-spacing:1.5px}.venue p:not(.eyebrow),.venue-when,.timeline-item p,.dress>p:not(.eyebrow),.responses>p,.wishes>p{font-size:16px}.entry-ticket p{font-size:14px}
@media(max-width:600px){.prototype-label{letter-spacing:.2px}.chapter{letter-spacing:1px}.hero-prelude{letter-spacing:1.5px}.hero-number{font-size:12px}.hero-location{letter-spacing:.4px}.qr span{letter-spacing:.5px}.ticket-label{letter-spacing:.7px}.opening-date{font-size:14px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}body.has-js .reveal{opacity:1;transform:none}.hero-photo{transform:none}}
