:root{--ink:#171514;--paper:#f2eee9;--paper-deep:#e5ded5;--soft:#817b75;--inverse:#ece8e2;--frame:clamp(20px,4vw,64px);--serif:"Playfair Display",Georgia,serif;--sans:"DM Sans",Arial,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.5 var(--sans)}a{color:inherit;text-underline-offset:5px}h1,h2,h3,p{margin-top:0}h2{font:500 clamp(44px,6.5vw,102px)/.92 var(--serif);letter-spacing:-.055em}h3{font:500 clamp(24px,3vw,40px)/1 var(--serif);letter-spacing:-.04em}.meta,.section-heading>p{font-size:13px;font-weight:700;letter-spacing:.14em;text-transform:uppercase}.envelope{position:fixed;z-index:100;inset:0;display:grid;place-items:center;background:var(--paper);transition:opacity .85s,visibility .85s}.envelope.is-open{opacity:0;visibility:hidden;pointer-events:none}.envelope-card{display:grid;place-items:center;position:relative;width:min(86vw,670px);min-height:min(72vh,560px);padding:52px 30px;text-align:center;background:var(--paper-deep);overflow:hidden;animation:envelopeFloat 5s ease-in-out infinite}.envelope-card:before,.envelope-card:after{content:"";position:absolute;inset:0;pointer-events:none}.envelope-card:before{background:linear-gradient(145deg,transparent 49.7%,rgba(23,21,20,.08) 50%,transparent 50.3%)}.envelope-card:after{background:linear-gradient(35deg,transparent 49.7%,rgba(23,21,20,.08) 50%,transparent 50.3%)}.envelope h1{z-index:1;margin:12px 0 42px;font:500 clamp(55px,9vw,104px)/.85 var(--serif);letter-spacing:-.07em}.envelope h1 em{font-size:.65em;font-weight:400}.seal{z-index:1;display:grid;place-items:center;width:112px;height:112px;border:0;border-radius:50%;background:var(--ink);color:var(--inverse);font:500 23px var(--serif);cursor:pointer;transition:transform .25s}.seal:hover{transform:scale(1.08) rotate(-5deg)}.open-copy,.envelope-date{z-index:1;margin:22px 0 0;font-size:13px;font-weight:700;letter-spacing:.13em;text-transform:uppercase}.envelope-date{color:var(--soft)}.progress{position:fixed;z-index:20;inset:0 0 auto;height:4px}.progress span{display:block;width:0;height:100%;background:var(--ink)}.section{padding:clamp(112px,15vw,220px) var(--frame)}.light{background:var(--ink);color:var(--inverse)}.hero{min-height:100svh;position:relative;background:var(--ink);color:var(--inverse);overflow:hidden;padding:24px var(--frame) 30px}.topbar{position:absolute;z-index:2;top:24px;left:var(--frame);right:var(--frame);display:flex;justify-content:space-between;font-size:13px;font-weight:700;letter-spacing:.1em}.monogram,.navlinks a{text-decoration:none}.navlinks{display:flex;gap:24px}.hero-photo{position:absolute;inset:0;margin:0}.hero-photo:after{content:"";position:absolute;inset:0;background:rgba(0,0,0,.38)}.hero-photo img{height:100%;width:100%;object-fit:cover;filter:grayscale(1);animation:drift 18s ease-in-out infinite alternate}.hero-copy{position:absolute;z-index:1;left:var(--frame);right:var(--frame);bottom:clamp(104px,13vh,148px)}.hero-copy h1{margin:14px 0 22px;font:500 clamp(84px,16vw,270px)/.72 var(--serif);letter-spacing:-.075em;white-space:nowrap}.hero-copy h1 em{font-size:.62em;font-weight:400}.hero-note{max-width:30ch;font-size:clamp(16px,1.45vw,21px)}.hero-action{position:absolute;z-index:1;bottom:30px;right:var(--frame);font-size:14px;font-weight:700;text-decoration:none}.hero-action span{font-size:23px;padding-left:8px}.intro{display:grid;grid-template-columns:1.25fr 1.65fr;gap:clamp(30px,8vw,150px);align-items:end}.intro-image{width:100%;max-width:500px}.intro-image img{display:block;width:100%;aspect-ratio:4/5;object-fit:cover;filter:grayscale(1);animation:drift 14s ease-in-out infinite alternate}.intro-copy{font:500 clamp(30px,4.2vw,64px)/1.06 var(--serif);letter-spacing:-.04em;max-width:19ch;margin:0}.aside{grid-column:2;color:var(--soft);margin:0;font-size:14px}.date-section{min-height:100svh;display:grid;grid-template-columns:auto 1fr;position:relative;background:var(--paper-deep);overflow:hidden}.vertical-word{align-self:start;writing-mode:vertical-rl;transform:rotate(180deg);font:500 clamp(31px,4.1vw,64px)/.8 var(--serif);margin:0}.date-number{display:flex;align-items:baseline;gap:.08em;align-self:center;font:500 clamp(106px,16vw,260px)/.7 var(--serif);letter-spacing:-.08em}.date-number b{font:400 .48em/1 var(--serif);letter-spacing:0}.date-details{position:absolute;right:var(--frame);bottom:clamp(70px,12vw,160px);text-align:right}.date-details h2{font-size:clamp(40px,4vw,70px);margin-bottom:20px}.date-details p{margin:3px 0;color:var(--soft)}.section-heading{max-width:730px}.section-heading h2{margin-bottom:0}.family-grid,.dress-notes{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(35px,12vw,200px);margin-top:clamp(74px,10vw,140px)}.family-grid article p,.dress-notes p{font-size:18px;line-height:1.7}.countdown{display:grid;grid-template-columns:1fr 1.8fr;gap:40px;align-items:end}.countdown h2{margin-bottom:0}.timer{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.timer strong{display:block;font:500 clamp(46px,6vw,90px)/.8 var(--serif);letter-spacing:-.06em}.timer span{display:block;margin-top:12px;font-size:13px;text-transform:uppercase;letter-spacing:.08em}.day{background:#dcd4cb}.day-intro{max-width:580px}.day-intro>p:last-child{max-width:38ch;font-size:18px}.event-list{margin-top:clamp(80px,12vw,160px)}.event{display:grid;grid-template-columns:28% 1fr;gap:30px;padding:clamp(35px,5vw,80px) 0;background:var(--paper)}.event+.event{margin-top:18px}.event-time{padding-left:clamp(20px,4vw,64px);font:500 clamp(44px,6vw,96px)/.7 var(--serif);letter-spacing:-.07em;margin:0}.event-info{display:grid;grid-template-columns:1fr minmax(170px,260px);gap:30px;padding-right:clamp(20px,4vw,64px)}.event-icon,.dress-icon{display:block;font:400 28px var(--serif);animation:softPulse 4s ease-in-out infinite}.event h3{margin:9px 0 20px}.event a{font-size:14px;font-weight:700}.map-placeholder{display:flex;position:relative;min-height:150px;align-items:center;justify-content:center;overflow:hidden;background:#c8c0b7;text-align:center;text-decoration:none;font-size:14px}.map-placeholder:before,.map-placeholder:after{content:"";position:absolute;border-radius:50%;border:1px solid rgba(23,21,20,.18)}.map-placeholder:before{width:180px;height:180px}.map-placeholder:after{width:80px;height:80px}.map-placeholder span,.map-placeholder i{position:relative;z-index:1}.map-placeholder i{position:absolute;right:12px;top:9px;font:400 22px var(--serif)}.dress{display:grid;grid-template-columns:1.05fr .95fr;gap:40px}.dress-title h2{font-size:clamp(70px,10vw,150px)}.dress-title>p:last-child{max-width:28ch;font-size:18px}.dress-notes{margin:0;align-self:end}.dress-icon{font-size:42px;margin-bottom:18px}.schedule{background:var(--ink);color:var(--inverse)}.schedule-list{list-style:none;padding:0;margin:clamp(70px,10vw,150px) 0 0;position:relative}.schedule-list:before{content:"";position:absolute;left:calc(32% + 5px);top:0;bottom:0;width:1px;background:#48433f;transform-origin:top;transform:scaleY(0);transition:transform 2s}.schedule-list.is-active:before{transform:scaleY(1)}.schedule-list li{display:grid;grid-template-columns:32% 36px 1fr;align-items:center;padding:18px 0;font:500 clamp(28px,4vw,62px)/1 var(--serif);letter-spacing:-.04em}.schedule-list time{font-size:.7em;color:#aaa29a}.schedule-list i{z-index:1;width:12px;height:12px;border-radius:50%;background:#48433f;color:transparent;font-size:0;transition:.45s}.schedule-list.is-active i{background:var(--inverse);box-shadow:0 0 0 7px #3e3936}.schedule-list.is-active li:nth-child(2) i{transition-delay:.25s}.schedule-list.is-active li:nth-child(3) i{transition-delay:.5s}.schedule-list.is-active li:nth-child(4) i{transition-delay:.75s}.schedule-list.is-active li:nth-child(5) i{transition-delay:1s}.gallery{height:100svh;min-height:820px;position:relative;overflow:hidden;background:#22201f;color:var(--inverse);padding:var(--frame)}.gallery h2{position:absolute;z-index:1;left:var(--frame);top:50%;transform:translateY(-55%);font-size:clamp(100px,16vw,260px);line-height:.76}.gallery p{position:absolute;bottom:var(--frame);left:var(--frame);max-width:26ch}.print{position:absolute;margin:0;width:clamp(165px,22vw,360px);transition:transform .3s;box-shadow:0 18px 40px rgba(0,0,0,.25)}.print:hover{transform:rotate(0) scale(1.04)}.print img{display:block;width:100%;aspect-ratio:3/4;object-fit:cover;filter:grayscale(1)}.print-one{top:10%;left:42%;transform:rotate(-7deg)}.print-two{right:7%;bottom:10%;transform:rotate(6deg)}.print-three{left:22%;bottom:8%;transform:rotate(5deg);width:clamp(120px,16vw,250px)}.print-four{right:28%;top:7%;transform:rotate(8deg);width:clamp(110px,14vw,220px)}.details{display:grid;grid-template-columns:1fr 1fr;gap:clamp(60px,12vw,190px)}.details h2{font-size:clamp(42px,5vw,76px);margin-bottom:26px}.details>article>p:not(.meta){max-width:37ch}.qr-placeholder{margin-top:35px;width:140px;height:140px;display:grid;place-items:center;background:var(--inverse);color:var(--ink);font:500 30px var(--serif)}dl{margin:34px 0 0}dl div{margin-bottom:18px}dt{font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}dt span{font-size:20px;vertical-align:-2px;margin-right:8px}dd{margin:2px 0 0;font-size:18px}.footer{min-height:100svh;position:relative;background:var(--paper);padding:clamp(90px,13vw,180px) var(--frame) 0;overflow:hidden}.footer-copy{max-width:760px}.footer h2{font-size:clamp(70px,10vw,170px);margin:12px 0 26px}.footer-copy>p:not(.meta){font-size:18px;max-width:39ch}.rsvp-form{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}.rsvp-form label{display:grid;gap:7px;font-size:13px;font-weight:700;letter-spacing:.04em}.rsvp-form input,.rsvp-form select{min-width:0;padding:13px 0;border:0;border-bottom:2px solid var(--ink);border-radius:0;background:transparent;color:var(--ink);font:16px var(--sans);outline-offset:6px}.rsvp-button{display:inline-block;margin-top:22px;border:0;background:var(--ink);color:var(--inverse);padding:16px 20px;text-decoration:none;font:700 14px var(--sans);cursor:pointer;transition:transform .2s,background .2s}.rsvp-form .rsvp-button{grid-column:1/-1;justify-self:start}.rsvp-button:hover{transform:translateY(-4px);background:#3b3733}.form-feedback{grid-column:1/-1;margin:0;font-weight:700}.footer-note{position:absolute;bottom:clamp(150px,16vw,240px);font-size:13px}.footer-name{position:absolute;bottom:-.08em;left:var(--frame);font:500 clamp(85px,17vw,280px)/.72 var(--serif);letter-spacing:-.08em;white-space:nowrap;margin:0}.reveal{opacity:0;transform:translateY(24px);transition:opacity .8s,transform .8s}.reveal.is-visible{opacity:1;transform:none}@keyframes drift{to{transform:scale(1.06)}}@keyframes softPulse{50%{transform:translateY(-4px) scale(1.07);opacity:.7}}@keyframes envelopeFloat{50%{transform:translateY(-8px)}}@media(max-width:700px){.section{padding:90px 20px}.hero{padding:18px 20px 24px}.topbar{left:20px;right:20px;top:18px}.navlinks a:first-child{display:none}.hero-copy{left:20px;right:20px;bottom:90px}.hero-copy h1{font-size:22vw;white-space:normal}.hero-action{right:20px}.intro{grid-template-columns:1fr;gap:32px}.intro-copy{font-size:34px}.aside{grid-column:auto}.intro-image{width:85%;max-width:none;justify-self:end}.date-section{min-height:680px;padding:90px 20px}.vertical-word{font-size:38px}.date-number{font-size:19vw;margin-left:16px}.date-details{right:20px;bottom:90px}.family-grid,.dress-notes,.details{grid-template-columns:1fr;gap:42px;margin-top:58px}.countdown,.dress{grid-template-columns:1fr;gap:54px}.timer{grid-template-columns:repeat(2,1fr);gap:34px}.event{grid-template-columns:1fr;gap:24px;padding:36px 20px}.event-time{padding:0}.event-info{grid-template-columns:1fr;padding:0}.map-placeholder{min-height:190px}.schedule-list:before{left:calc(30% + 5px)}.schedule-list li{grid-template-columns:30% 30px 1fr;font-size:32px}.gallery{min-height:720px;padding:20px}.gallery h2{left:20px;font-size:28vw}.gallery p{left:20px;bottom:25px;max-width:20ch}.print{width:43vw}.print-one{left:27%;top:15%}.print-two{right:4%;bottom:18%}.print-three{left:4%;bottom:28%;width:31vw}.print-four{right:10%;top:8%;width:28vw}.footer{padding:90px 20px 0}.footer h2{font-size:21vw}.rsvp-form{grid-template-columns:1fr;gap:20px}.footer-note{left:20px;right:20px;bottom:145px}.footer-name{left:20px;font-size:24vw}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.envelope-card,.reveal{opacity:1;transform:none;animation:none;transition:none}.hero-photo img,.intro-image img{animation:none}.print,.rsvp-button{transition:none}}

