:root{--paper:#f6f1e7;--ink:#302c27;--red:#934534;--muted:#776f64;--line:#a49b8b;color-scheme:light;font-family:"Kaiti SC","STKaiti","KaiTi","Songti SC",serif;font-size:16px;color:var(--ink);background:#e8e1d5}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-underline-offset:6px}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{cursor:pointer}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--red);outline-offset:5px}.skip{position:absolute;left:12px;top:-100px;z-index:10;background:var(--paper);padding:12px}.skip:focus{top:12px}.paper{position:relative;max-width:680px;margin:28px auto;padding:28px 48px 24px;background:var(--paper);isolation:isolate}.paper:before,.paper:after{content:"";position:absolute;inset:12px;border:1px solid #655d50;pointer-events:none;z-index:-1}.paper:after{inset:17px 16px 16px 17px;border-color:#8c8272;border-radius:2px 7px 3px 5px}.masthead,footer{display:flex;justify-content:space-between;gap:16px;font-size:12px;letter-spacing:.11em;color:var(--muted)}.masthead{padding-bottom:14px;border-bottom:1px solid #b3a999}section{text-align:center;padding:68px 0}p{line-height:2;margin:20px 0}h1,h2,.signature{font-family:"Snell Roundhand","Apple Chancery","URW Chancery L",cursive;font-weight:400}h1{font-size:clamp(60px,13vw,96px);line-height:1.15;margin:24px 0 18px;font-style:italic}h2{font-size:clamp(29px,6.7vw,40px);line-height:1.4;margin:0 0 27px}h3{font-size:23px;font-weight:400;margin:26px 0 10px}.eyebrow{font-family:Georgia,serif;font-size:12px;letter-spacing:.18em;line-height:1.6}.cover{padding-top:45px;padding-bottom:54px}.cover .eyebrow:first-child{font-size:10px;letter-spacing:.16em}.asset{position:relative;width:100%;margin:30px auto}.asset img{display:block;width:100%;height:auto;max-width:100%;object-fit:contain;cursor:zoom-in}.asset.has-image{min-height:0;aspect-ratio:auto}.placeholder{min-height:inherit;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:30px 12px;color:var(--muted);font-size:14px;line-height:1.7;border:1px dashed #c6bdad}.placeholder-mark{font-family:Georgia,serif;font-size:11px;letter-spacing:.17em;color:#8d7764}.placeholder small{font-size:12px}.illustration{min-height:220px}.illustration .placeholder{border-color:#d5ccbe}.cover-art{max-width:390px;min-height:260px;margin:24px auto 38px}.marriage{margin-top:30px}.names{font-size:25px;letter-spacing:.09em;margin:14px 0;white-space:normal}.names em{font-family:Georgia,serif;font-size:20px;color:var(--red);font-weight:400;padding:0 5px}.cover-date{font-family:Georgia,serif;font-size:17px;letter-spacing:.15em}.scroll-note{display:inline-flex;flex-direction:column;align-items:center;font-size:12px;color:var(--muted);text-decoration:none;margin-top:38px;gap:10px}.scroll-note span{font-size:20px}.little-mark{display:block;font-family:Georgia,serif;font-size:30px;color:var(--red);margin-bottom:32px}.lead{font-size:18px}.text-section p{line-height:2.25}.photo-section{padding:50px 0 70px}figure{margin:0 auto;max-width:380px}.photo-frame{padding:9px;margin:0 auto 25px}.photo-frame:before,.photo-frame:after{content:"";position:absolute;inset:0;border:1px solid #514a40;pointer-events:none}.photo-frame:before{transform:rotate(-.65deg);border-radius:3px 1px 6px 2px}.photo-frame:after{inset:4px -4px -4px 4px;transform:rotate(.4deg);border-width:0 1px 1px 0}.photo-frame .placeholder{min-height:390px;border:0;background:#eee7dc}.photo-wide figure{max-width:470px}.photo-wide .placeholder{min-height:290px}figcaption{font-size:15px;line-height:2;margin-top:27px}.date-section{padding:80px 0 85px}.big-day{font-family:Georgia,serif;font-size:120px;line-height:1;letter-spacing:-.06em;color:var(--red);margin:15px 0}.month{font-family:Georgia,serif;font-size:25px;letter-spacing:.2em;margin:10px 0}.year{font-family:Georgia,"Kaiti SC",serif;font-size:16px;margin-top:8px}.year span{padding:0 15px}.date-section>p:last-child{font-size:14px;margin-top:32px}.signature{display:block;font-size:28px;font-style:italic;color:var(--red);margin-top:35px}.venue-art{min-height:230px}.address{font-size:14px;max-width:310px;margin:12px auto}.ink-link{font-size:15px}.schedule{position:relative;max-width:290px;margin:50px auto 30px}.schedule>div{padding:0 0 45px}.schedule>div:last-child{padding-bottom:0}.schedule>div+div:before{content:"";display:block;width:1px;height:36px;background:#bdb19d;margin:0 auto 28px}.schedule-label{font-family:Georgia,serif;letter-spacing:.15em;font-size:16px}.schedule time{font-family:Georgia,serif;font-size:46px;font-style:italic;color:var(--red)}.schedule p{margin:8px 0}.aside-text{font-size:14px}.four-words{font-size:18px}.four-words i{font-style:normal;color:var(--red);padding:0 7px}dl{text-align:left;max-width:350px;margin:35px auto 0}dl>div{display:grid;grid-template-columns:45px 1fr;gap:20px;padding:22px 0;border-top:1px solid #c8bdab}dt{color:var(--red)}dd{margin:0;line-height:2;font-size:15px}.note-end{color:var(--red)}form{max-width:330px;margin:35px auto 0;text-align:left}form label{display:block;font-size:14px;margin:24px 0}input,select{display:block;width:100%;margin-top:8px;border:0;border-bottom:1px solid #8b806f;background:transparent;color:var(--ink);border-radius:0;min-height:44px;padding:8px 0;font-size:16px}.reply-button{width:100%;border:1px solid #87705c;background:transparent;color:var(--ink);padding:14px;margin-top:12px}.reply-button span{margin-left:20px;color:var(--red)}.rsvp-hint{font-size:12px;max-width:300px;margin:18px auto;color:var(--muted)}#reply{max-width:330px;margin:25px auto;text-align:left}textarea{width:100%;background:transparent;border:1px solid #b4a68f;padding:12px;line-height:1.8;margin:12px 0;color:var(--ink)}#copy-reply{background:var(--red);color:var(--paper);border:0;padding:12px 22px}.ending{padding-top:80px;padding-bottom:80px}.ending h2{font-size:clamp(38px,9vw,58px);font-style:italic;margin-top:24px}.ending .names{margin-top:40px;font-size:22px}.end-mark{display:block;color:var(--red);font-size:30px;margin-top:35px}footer{border-top:1px solid #b3a999;padding-top:18px;letter-spacing:0}footer a{text-decoration:none}#editor{max-width:850px;margin:20px auto;padding:24px;background:#fffdf7;border:1px solid #c7b99f;font-family:system-ui,sans-serif}#editor[hidden]{display:none}.editor-head{display:flex;justify-content:space-between;gap:20px}.editor-head p,.editor-note,#asset-status{font-size:13px;line-height:1.8}.editor-head a{font-size:14px;white-space:nowrap}#asset-controls{display:grid;grid-template-columns:1fr 1fr;gap:15px}.asset-control{padding:15px;border:1px solid #d6cdbe;min-width:0}.asset-control label{font-size:14px;display:block}.asset-control input{font-size:12px;max-width:100%;border:0}.asset-control button{font-size:12px;border:0;background:none;text-decoration:underline;padding:10px 0}.asset-control small{display:block;overflow-wrap:anywhere;font-size:12px;line-height:1.7}dialog{border:0;padding:55px 16px 20px;background:var(--paper);max-width:95vw;max-height:95dvh;width:900px}dialog::backdrop{background:#211d19dd}dialog img{display:block;max-width:100%;height:auto;max-height:75dvh;object-fit:contain;margin:auto}dialog button{position:absolute;right:16px;top:12px;padding:10px;border:0;background:transparent}dialog p{font-size:12px;text-align:center;margin:10px 0 0}body.modal-open{overflow:hidden}@media(max-width:600px){.paper{margin:0 auto;padding:25px 35px 23px}.paper:before{inset:9px}.paper:after{inset:13px 14px 13px 12px}.masthead{font-size:9px;letter-spacing:.09em}section{padding:57px 0}.cover{padding-top:38px}.cover-art{min-height:235px}.names{font-size:23px}.photo-frame .placeholder{min-height:330px}.photo-wide .placeholder{min-height:240px}.photo-section figure{width:88%}.photo-wide figure{width:98%}.cover .eyebrow:first-child{font-size:9px}.date-section{padding:72px 0}.four-words{font-size:16px}.four-words i{padding:0 3px}#editor{margin:0;padding:20px}#asset-controls{grid-template-columns:1fr}.editor-head{flex-wrap:wrap}}@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}@media(min-width:900px){.paper{margin-top:42px;margin-bottom:42px}}@media print{body{background:var(--paper)}#editor,.scroll-note{display:none!important}.paper{margin:0;max-width:100%}section{break-inside:avoid}}
/* Original artwork directs the page: warm paper, unframed drawings, quiet photo plates. */
:root{--paper:#faf7ef;--red:#994332;--muted:#756c5e;background:#eae5da}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.cover{padding-top:30px}.cover-art{max-width:450px;margin:6px auto 30px}.cover-art.has-image{width:100%;padding:0}.cover .marriage{margin-top:0}.cover .scroll-note{margin-top:26px}
.photo-section{padding:64px 0 90px}.photo-section figure{position:relative;max-width:350px;width:84%;margin:auto}.photo-note{display:block;text-align:left;font-size:12px;color:var(--muted);letter-spacing:.07em;margin-bottom:17px}.photo-frame{padding:9px;background:var(--paper)}.photo-frame img{position:relative}.photo-frame:before{border-color:#5e5549;border-radius:1px 3px 2px 4px}.photo-frame:after{inset:4px -3px -5px 5px;border-color:#817160}.photo-section figcaption{margin-top:30px}.photo-vintage figure{max-width:375px;width:89%}.photo-vintage .photo-frame{padding:12px}.photo-vintage .photo-frame:before{transform:rotate(.65deg)}.photo-vintage .photo-frame:after{transform:rotate(-.45deg);border-width:1px 0 0 1px;inset:-4px 5px 5px -3px}.photo-vintage .photo-note{text-align:right}.photo-sunshine figure{max-width:345px;width:82%}.photo-sunshine .photo-frame:after{border-width:1px 1px 0 0}
.dance-composition{position:relative;display:grid;grid-template-columns:1fr 1fr;align-items:start;gap:10px;margin:22px -5px 0}.guest-vignette{min-height:0;margin:0}.guest-vignette svg{width:100%;height:auto;display:block;cursor:zoom-in;overflow:hidden}.dance-stage{background:#faf7ef}.dance-one{margin-top:0}.dance-two{margin-top:65px}.guests-section>p{margin-top:30px}.day-guests{width:66%;max-width:290px;margin:30px auto 0}.linger-guests{width:66%;max-width:270px;margin:25px auto 0}.venue-art{max-width:360px;margin:30px auto 15px}.venue-section h3{font-size:22px}.venue-section .address{margin-bottom:0}.venue-section>p:not(.eyebrow):not(.address){margin-top:10px}.text-section{padding:65px 0}.linger{padding-bottom:25px}.ending{padding-top:60px}.asset[hidden]{display:none}
@media(max-width:600px){.paper{padding-left:30px;padding-right:30px}.cover{padding-top:26px}.cover-art.has-image{width:calc(100% + 18px);max-width:none;margin-left:-9px}.cover-whispers{font-size:13px;width:82%;margin-bottom:30px}.cover .names{font-size:23px}.photo-section figure{width:82%}.photo-vintage figure{width:88%}.photo-sunshine figure{width:84%}.photo-section{padding:48px 0 72px}.dance-composition{gap:8px;margin-left:-7px;margin-right:-7px}.dance-two{margin-top:45px}.day-guests,.linger-guests{width:76%}.venue-art{width:90%}.text-section{padding:56px 0}}
.music-player{position:fixed;right:max(18px,env(safe-area-inset-right));top:max(18px,env(safe-area-inset-top));z-index:20;display:flex;flex-direction:column;align-items:flex-end;gap:8px;max-width:200px}.music-player button{border:1px solid #99816b;border-radius:30px;background:#faf7efee;color:#783a2b;padding:10px 15px;font-size:14px;box-shadow:0 2px 10px #302c2710;min-height:44px}.music-player button[aria-pressed=true]{background:#934534;color:#faf7ef}.music-player [role=status]{font-size:12px;background:var(--paper);line-height:1.5}.music-credit{text-align:center;color:var(--muted);font-size:12px;margin:25px auto 5px}.music-credit summary{cursor:pointer}.music-credit p{line-height:1.8}.reply-button:disabled{opacity:.65;cursor:wait}#rsvp-status{color:var(--red);max-width:330px;margin:22px auto;line-height:1.8}@media(max-width:600px){.music-player{top:auto;bottom:max(18px,env(safe-area-inset-bottom))}.music-player button{font-size:13px;padding:10px 13px}}
.wedding-ornament{display:block;line-height:0;margin:0 auto 22px;pointer-events:none}.wedding-ornament svg{display:block;width:100%;height:auto;overflow:hidden}.flower{width:48px}.leaf{width:52px}.bow{width:53px;margin-bottom:30px}.rings{width:82px}.glasses{width:71px}.envelope{width:68px;margin-bottom:30px}.table-setting{width:215px;margin-bottom:30px}.photo-leaf{width:30px}.photo-section figure>.flower,.photo-section figure>.photo-leaf{position:absolute;right:-24px;bottom:75px;width:26px;transform:rotate(24deg);margin:0}.photo-vintage figure>.photo-leaf{right:-20px;bottom:104px;transform:rotate(-15deg)}.guide-section{position:relative}.guide-section>.leaf{position:absolute;right:0;bottom:33px;transform:rotate(13deg);width:32px}.text-section>.flower{width:34px;margin-bottom:24px}.schedule>.illustrated-moment{display:flex;gap:20px;align-items:center;justify-content:center;position:relative;padding-top:35px}.schedule>.illustrated-moment:before{position:absolute;top:0;left:50%;height:18px;margin:0}.illustrated-moment .wedding-ornament{flex-shrink:0;margin:0}.illustrated-moment>div{min-width:160px;text-align:left}.illustrated-moment p{font-size:16px}.text-section h2:after,.guide-section h2:after,.rsvp-section h2:after{content:"";display:block;width:44px;height:1px;background:#9a8c78;margin:15px auto 0;transform:rotate(-3deg)}.date-section{position:relative}.schedule time{font-style:normal}@media(max-width:360px){.illustrated-moment>div{min-width:0}.schedule>.illustrated-moment{gap:12px}.rings{width:65px}.glasses{width:58px}}
@font-face{font-family:'Wedding Pencil';src:url('/fonts/WeddingPencilWeb.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'Wedding Script';src:url('/fonts/Allura-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}:root{font-family:'Wedding Pencil','Kaiti SC',cursive;color:#38342f}h1,h2,.signature{font-family:'Wedding Pencil','Comic Sans MS',cursive;font-weight:700;font-style:normal;color:#a3382d;letter-spacing:.025em}h2{font-size:clamp(36px,8vw,47px);line-height:1.25}.ending h2{font-family:'Wedding Pencil','Comic Sans MS',cursive;font-weight:700;font-size:clamp(47px,10vw,66px)}.names,.year,.address,.photo-note,figcaption,form,.schedule p,.music-player button{font-family:'Wedding Pencil','Kaiti SC',cursive}.names{letter-spacing:.035em}.signature{font-size:35px}.cover-date,.month,.schedule-label,.eyebrow,.schedule time,.big-day{font-family:'Wedding Pencil',cursive}.big-day{font-size:115px}.month{letter-spacing:.15em}.year{font-size:16px}.eyebrow{color:#a3382d;font-weight:700;letter-spacing:.09em}.address{font-size:15px}.text-section p{line-height:2.1}h3{font-family:'Wedding Pencil',cursive}

/* Motion adapted from the supplied H5 demo. */
.cover-motion,.venue-motion{position:relative}.cover-motion .cover-art,.venue-motion .venue-art{position:relative;z-index:1}.couple-stage{display:block;width:100%;height:auto;cursor:zoom-in;overflow:visible}.waving-arm{transform-box:view-box;will-change:transform}.groom-arm{transform-origin:31.64% 36.02%;animation:groom-wave 1.55s ease-in-out infinite}.bride-arm{transform-origin:70.86% 42.08%;animation:bride-wave 1.8s ease-in-out -.35s infinite}.cover-petals{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:2}.cover-petal{position:absolute;top:-18px;width:10px;height:7px;background:var(--red);border-radius:80% 20% 70% 30%;opacity:.85;animation:petal-fall var(--fall-time,8s) linear infinite;animation-delay:var(--fall-delay,0s)}.wave-lines{position:absolute;left:7%;top:17%;width:66px;height:72px;pointer-events:none;z-index:3}.wave-lines i{position:absolute;display:block;border-top:2px solid var(--ink);border-radius:50%;opacity:.55;transform-origin:left center;animation:wave-line 1.8s ease-in-out infinite}.wave-lines i:nth-child(1){--wave-angle:-18deg;width:36px;top:12px;left:8px}.wave-lines i:nth-child(2){--wave-angle:-4deg;width:46px;top:30px;left:13px;animation-delay:.14s}.wave-lines i:nth-child(3){--wave-angle:12deg;width:28px;top:49px;left:19px;animation-delay:.28s}.venue-sparkles{position:absolute;inset:0;z-index:2;pointer-events:none}.venue-sparkle{position:absolute;width:7px;height:7px;background:#fff;transform:rotate(45deg);box-shadow:0 0 8px 2px rgba(255,239,190,.9),0 0 17px 4px rgba(255,222,128,.35);animation:venue-twinkle var(--sparkle-time,2.4s) ease-in-out infinite;animation-delay:var(--sparkle-delay,0s)}.venue-sparkle:before,.venue-sparkle:after{content:"";position:absolute;left:50%;top:50%;background:#fff;transform:translate(-50%,-50%) rotate(-45deg)}.venue-sparkle:before{width:2px;height:15px}.venue-sparkle:after{width:15px;height:2px}.float-motion{animation:photo-float 5.8s ease-in-out infinite}.dancer{transform-box:fill-box;transform-origin:center bottom;will-change:transform;animation-delay:var(--dance-delay,0s)!important}.dance-sway{animation:dance-sway 1.7s ease-in-out infinite alternate}.dance-hop{animation:dance-hop 1.35s cubic-bezier(.45,.05,.55,.95) infinite}.dance-kick{animation:dance-kick 1.85s ease-in-out infinite}.dance-twirl{animation:dance-twirl 1.95s ease-in-out infinite}.reply-button{animation:button-breath 3.6s ease-in-out infinite}html.motion-ready .motion-reveal{opacity:0;transform:translateY(20px);transition:opacity .9s ease,transform .9s ease}html.motion-ready .motion-reveal.motion-visible{opacity:1;transform:none}@keyframes groom-wave{0%,100%{transform:rotate(-1.5deg)}45%{transform:rotate(4deg)}70%{transform:rotate(.5deg)}}@keyframes bride-wave{0%,100%{transform:rotate(1.5deg)}45%{transform:rotate(-3.2deg)}72%{transform:rotate(.4deg)}}@keyframes petal-fall{from{transform:translate3d(0,-12px,0) rotate(0)}to{transform:translate3d(24px,560px,0) rotate(540deg)}}@keyframes wave-line{0%,100%{opacity:.18;transform:translateX(0) rotate(var(--wave-angle))}50%{opacity:.72;transform:translateX(8px) rotate(var(--wave-angle))}}@keyframes venue-twinkle{0%,100%{opacity:.05;transform:scale(.35) rotate(45deg)}45%{opacity:1;transform:scale(1) rotate(45deg)}65%{opacity:.28}}@keyframes photo-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}@keyframes dance-sway{0%,100%{transform:translateX(-2px) rotate(-1.4deg)}50%{transform:translateX(3px) rotate(1.5deg)}}@keyframes dance-hop{0%,100%{transform:translateY(1px) rotate(-.5deg)}45%{transform:translateY(-9px) rotate(1deg)}65%{transform:translateY(-3px) rotate(.3deg)}}@keyframes dance-kick{0%,100%{transform:translate(0,0) rotate(-.7deg)}50%{transform:translate(4px,-5px) rotate(2deg)}}@keyframes dance-twirl{0%,100%{transform:translateX(-2px) rotate(-1.2deg)}50%{transform:translateX(4px) rotate(2.2deg)}}@keyframes button-breath{0%,100%{transform:scale(1)}50%{transform:scale(1.025)}}@media(prefers-reduced-motion:reduce){.waving-arm,.dancer,.cover-petal,.wave-lines i,.venue-sparkle,.float-motion,.reply-button{animation:none!important}html.motion-ready .motion-reveal{opacity:1;transform:none;transition:none}}

.rsvp-cta{display:block;text-align:center;text-decoration:none;font:inherit;font-size:16px}
