*{box-sizing:border-box}body{--paper:#f6f3e8;--ink:#304b3d;--soft:#e7eadc;--accent:#8a7551;margin:0;background:var(--paper);color:var(--ink);font:18px/1.65 Arial,sans-serif}button,input,textarea,summary{font:inherit}button,a,summary{touch-action:manipulation}button,summary{cursor:pointer}a{color:inherit;text-underline-offset:5px}button{border:1px solid currentColor;background:transparent;color:inherit;border-radius:30px;padding:10px 22px;min-height:46px}button:hover{background:var(--soft)}:focus-visible{outline:3px solid var(--accent);outline-offset:5px}[hidden]{display:none!important}h1,h2,p{margin:0}h1,h2{font-family:Garden,Georgia,serif;font-weight:400;line-height:1.2;white-space:pre-line;overflow-wrap:normal;word-break:normal}h1{font-size:clamp(64px,7.8vw,116px)}h2{font-size:clamp(32px,3.8vw,54px);margin-bottom:28px}p[data-field]{white-space:pre-line}.eyebrow{font-size:16px;letter-spacing:.09em;text-transform:uppercase;margin-bottom:30px}.toolbar{height:76px;padding:12px 30px;display:flex;align-items:center;justify-content:space-between;gap:16px;background:#fffaf1;color:#304b3d;position:relative;z-index:20;font-size:16px;border-bottom:1px solid #d7d4c5}.toolbar button{background:#304b3d;color:#fffaf1}.toolbar strong{font-weight:400}.scene{padding:96px 8%;position:relative}.hero{min-height:750px;display:grid;grid-template-columns:1fr 1.1fr;align-items:center;padding-top:110px;padding-bottom:30px;gap:26px 4%}.hero-copy{position:relative;z-index:2}.subtitle{font:italic clamp(25px,2.5vw,36px)/1.4 Georgia,serif;max-width:490px;margin:32px 0}.date{font-size:20px;display:inline-block;border-top:1px solid var(--accent);padding-top:20px}.art-stage{width:100%;animation:breathe 8s ease-in-out infinite}.art-stage img{display:block;width:100%;height:auto;max-height:650px;object-fit:contain}.hero-foot{grid-column:1/-1;border-top:1px solid color-mix(in srgb,var(--ink) 25%,transparent);padding-top:20px;margin-top:25px;font-size:16px}#music-toggle{position:absolute;right:28px;top:24px;font-size:16px;z-index:3}.intro{display:grid;grid-template-columns:.8fr 1.5fr;gap:10%;align-items:center;background:var(--soft)}.copy>p:last-child{max-width:760px}.letter-art{position:relative;padding:25px 0;max-width:320px;margin:auto;width:100%;transform:rotate(-7deg)}.letter-paper{padding:46px 30px 60px;background:#fffcf2;color:#5b624b;box-shadow:0 12px 30px #172e1f0c;border:1px solid #d8cfb9;min-height:235px}.letter-paper span{font:italic 32px Georgia,serif}.letter-paper i{display:block;border-bottom:1px solid #b7b899;margin-top:24px}.letter-paper i:last-child{width:65%}.letter-seal{position:absolute;right:20px;bottom:5px;border:5px double #bbc6a2;background:#748362;width:60px;height:60px;border-radius:50%;font:italic 26px/50px Georgia;text-align:center;color:#f5edda}.venue{display:grid;grid-template-columns:1fr 190px;gap:45px;align-items:center}.venue-copy{max-width:800px}.venue-mark{width:150px;color:var(--accent);justify-self:center}.venue-mark svg{display:block;width:100%;height:auto}#venue-photo{grid-column:1/-1;margin:0;text-align:center}#venue-photo img{max-width:100%;max-height:550px}.program{display:grid;grid-template-columns:1fr 1.15fr;gap:8%;border-block:1px solid color-mix(in srgb,var(--ink) 22%,transparent)}.schedule-row{display:grid;grid-template-columns:75px 1fr;gap:24px;padding:23px 0;border-top:1px solid color-mix(in srgb,var(--ink) 25%,transparent)}.schedule-row time{color:var(--accent)}.invitation-details{display:grid;grid-template-columns:160px 1fr;gap:9%;align-items:center;background:var(--soft)}.leaf-art{width:140px;height:auto;color:var(--accent)}.details-copy{max-width:800px}.details-copy h2{font-size:clamp(30px,3vw,44px)}.gallery-section{text-align:center}.gallery{display:flex;justify-content:center;flex-wrap:wrap;gap:24px;margin-top:24px}.gallery figure{margin:0;max-width:420px;flex:1 1 280px}.gallery img{width:100%;height:auto}.rsvp{padding-bottom:50px;text-align:center}.rsvp-copy{max-width:720px;margin:auto}.rsvp summary{display:block;list-style:none;border-radius:40px;background:var(--ink);color:var(--paper);padding:17px 25px;font-size:18px;max-width:500px;margin:0 auto}.rsvp summary::-webkit-details-marker{display:none}.rsvp form{text-align:left;border:1px solid var(--accent);padding:28px;margin-top:28px}.rsvp fieldset{border:0;padding:0;margin:0 0 20px}.rsvp form label{display:block;margin:12px 0}.rsvp form input{width:22px;height:22px;vertical-align:middle;margin-right:10px}.rsvp form textarea{width:100%;min-height:90px}.rsvp-status,#rsvp-status{font-size:16px;margin-top:18px}.closing{text-align:center;padding-top:30px}.closing img{width:240px;height:190px;object-fit:contain;display:block;margin:0 auto 20px}.closing h2{font-style:italic;max-width:800px;margin:auto}footer{text-align:center;padding:55px 20px;border-top:1px solid #87978140}footer a{font-size:14px;text-decoration:none}.night{--paper:#102f2a;--ink:#f0ecd8;--soft:#1b3c33;--accent:#ccba82}.night .hero{background:radial-gradient(ellipse at 80% 50%,#37544955,transparent 55%)}.night .hero .eyebrow{color:#d5bd85}.night .art-stage{filter:drop-shadow(0 0 50px #baaa5b0d)}.night .venue{background:#eeeada;color:#183c31}.night .program{border:0}.night .closing{background:#122d28}.herbarium{--paper:#faf1e8;--ink:#4e4940;--soft:#efe2de;--accent:#a96869}.herbarium .hero-copy{text-align:center}.herbarium .hero .subtitle{margin:30px auto}.herbarium .hero{grid-template-columns:1.1fr 1fr}.herbarium .intro{background:#f4e7df}.herbarium .letter-art{transform:rotate(5deg)}.herbarium .venue{margin:40px 5%;border:1px solid #aa7e6944;padding:65px 6%}.herbarium .program{background:#e8eadf}.herbarium .invitation-details{background:transparent}.herbarium .rsvp{background:#efe2de}.herbarium .closing{background:#efe2de}.herbarium .hero-foot{text-align:center}
#editor{display:none;position:fixed;top:76px;bottom:0;left:0;width:300px;overflow:auto;padding:24px;background:#fffcf5;color:#304b3d;z-index:15;border-right:1px solid #d7d4c5}#editor h2{font-size:28px}#editor label{display:block;font-size:16px;margin:18px 0}#editor input:not([type=checkbox]),#editor textarea{display:block;width:100%;margin-top:7px;padding:10px;border:1px solid #c8c8b7;border-radius:8px;background:#fff;font-size:16px;color:#243e32}#editor textarea{min-height:80px}#editor input[type=checkbox]{width:20px;height:20px;vertical-align:middle}#editor button{font-size:16px;margin:8px 0;padding:9px 13px}#save-status{font-size:16px}.editing #editor{display:block}.editing main{margin-left:300px}.editing .toolbar{position:sticky;top:0}.edit-only,.mobile-close,.mobile-settings{display:none}.editing .edit-only{display:inline-block}.editing [data-field]{outline:1px dashed #a18d64;outline-offset:5px;min-height:1.3em;position:relative}.editing [data-field]:after{content:'✎';font:16px/26px Arial;background:#e1d7bc;color:#304b3d;width:26px;height:26px;border-radius:50%;position:absolute;right:-9px;top:-15px}.editing [data-field]:empty:before{content:attr(data-label);font:18px Arial;opacity:.6}.settings{font-size:16px;margin-top:20px}.editing .hero{min-height:650px}.editing h1{font-size:70px}.editing .scene{padding-left:6%;padding-right:6%}.editing .mobile-settings{display:none}.reveal-part{transition:opacity .8s ease,transform .8s ease;transition-delay:var(--delay,0ms)}.waiting{opacity:0;transform:translateY(22px)}@keyframes breathe{50%{transform:translateY(-7px)}}
@media(max-width:900px){.scene{padding:70px 6%}.hero{min-height:650px;padding-top:110px;padding-bottom:25px;gap:20px}.intro{gap:8%}.editing .hero{grid-template-columns:1fr}.editing .hero-copy{text-align:center}.editing .art-stage{max-width:420px;margin:auto}.editing .intro,.editing .program,.editing .invitation-details{grid-template-columns:1fr}.editing .leaf-art{margin:auto}.editing h1{font-size:64px}}
@media(max-width:760px){.toolbar{height:68px;padding:10px 16px}.toolbar strong{display:none}.toolbar button{font-size:16px;padding:9px 16px}.scene{padding:60px 24px}.hero{grid-template-columns:1fr;padding-top:105px;padding-bottom:26px;gap:15px;text-align:center;min-height:0}.hero h1{font-size:clamp(60px,14vw,88px)}.hero .subtitle{margin:24px auto;font-size:28px}.hero .eyebrow{margin-bottom:18px}.art-stage{max-width:480px;margin:0 auto}.hero-foot{margin-top:0;padding-top:22px}.hero .date{font-size:18px}#music-toggle{right:16px;top:16px}.intro,.program,.invitation-details{grid-template-columns:1fr;gap:36px}.letter-art{max-width:230px}.letter-paper{min-height:200px;padding:30px 24px 50px}.eyebrow{margin-bottom:22px;font-size:16px;letter-spacing:.06em}h2{font-size:34px}.venue{grid-template-columns:1fr;gap:25px}.venue-mark{width:100px;grid-row:1}.venue-copy{text-align:center}.leaf-art{width:90px;max-height:125px;margin:auto}.details-copy h2{text-align:center;font-size:32px}.details-copy .eyebrow{text-align:center}.schedule-row{gap:15px}.closing{padding-top:28px}.closing img{width:200px;height:160px}.closing h2{font-size:32px}.rsvp{padding-bottom:30px}.rsvp form{padding:20px}.herbarium .hero{grid-template-columns:1fr}.herbarium .venue{margin:0;padding:60px 24px;border:0;border-block:1px solid #aa7e6944}.editing main{margin-left:0}.editing #editor{display:none;top:auto;right:0;width:auto;max-height:75dvh;border-radius:22px 22px 0 0;z-index:30;box-shadow:0 -20px 60px #0003}.editing #editor.open{display:block}.editing .mobile-settings,.mobile-close{display:block}.editing .toolbar>a{display:none}.editing .scene{padding-left:24px;padding-right:24px}.editing .hero{min-height:0}.editing h1{font-size:clamp(60px,14vw,88px)}.editing .hero .subtitle{margin-inline:auto}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.waiting{opacity:1;transform:none}}
.letter-seal{display:flex;align-items:center;justify-content:center}
/* Wedding edition: tactile paper, muted botanicals and candlelight. */
.wedding{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23766647' opacity='.045' filter='url(%23n)' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}.olive-wedding{--paper:#efecdf;--ink:#424936;--soft:#dedfcb;--accent:#7c714d}.plum-wedding{--paper:#352630;--ink:#eee5d6;--soft:#44313e;--accent:#bea48a}.ivory-wedding{--paper:#f3eddf;--ink:#564d40;--soft:#e9e1d0;--accent:#9a8261}.wedding h1{font-size:clamp(58px,6vw,86px);font-weight:400!important;max-width:620px}.wedding h2{font-weight:400!important}.wedding .hero{min-height:760px}.wedding .art-stage{animation:none}.wedding .subtitle{font-size:clamp(24px,2.2vw,32px);font-style:normal}.wedding .letter-paper{background:#f6f0e1;box-shadow:0 8px 25px #30241c0c}.wedding .letter-paper span{font-size:27px}.wedding .letter-seal{background:#77795c}.plum-wedding .letter-seal{background:#725361;border-color:#a0868b}.wedding .hero-foot{font-size:16px;letter-spacing:.04em}.plum-wedding .hero{background:radial-gradient(ellipse at 75% 55%,#8c626215,transparent 65%)}.plum-wedding .hero .eyebrow{color:var(--accent)}.plum-wedding .venue{background:#e7ded0;color:#493644}.plum-wedding .closing{background:#352630}.ivory-wedding .intro{background:#e9e1d0}.ivory-wedding .program{background:#e1dfd0}.ivory-wedding .rsvp,.ivory-wedding .closing{background:#e9e1d0}.closing-ornament{width:160px;margin:0 auto 26px;color:var(--accent)}.closing-ornament svg{display:block;width:100%}.wedding .closing{padding-top:50px}.wedding .closing h2{font-size:clamp(32px,3.5vw,48px)}.wedding .venue-mark{opacity:.7}.wedding .letter-art{transform:rotate(-3deg)}.wedding.editing h1{font-size:60px}
@media(max-width:760px){.wedding .hero{min-height:0}.wedding h1,.wedding.editing h1{font-size:clamp(46px,12vw,72px);max-width:100%;line-height:1.16}.wedding .hero .subtitle{font-size:25px}.wedding .art-stage{max-width:370px}.wedding .hero .eyebrow{font-size:16px;letter-spacing:.04em}.wedding .closing h2{font-size:32px}.wedding .hero-foot{letter-spacing:0}}
/* Ivory invitation: the invitation itself is a ruled, sealed postcard. */
.ivory-wedding .postcard-intro{display:block;background:transparent;padding:80px 8% 100px}
.ivory-wedding .ruled-postcard{position:relative;max-width:960px;margin:auto;padding:55px 64px 95px;background:#faf5e8;box-shadow:0 18px 40px #51443112,0 2px 4px #51443112;border:1px solid #d9cfb9;transform:rotate(-.7deg)}
.ivory-wedding .ruled-postcard:before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.32;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='130' height='130'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.7' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23918261' opacity='.15' filter='url(%23p)' d='M0 0h130v130H0z'/%3E%3C/svg%3E")}
.ivory-wedding .ruled-postcard .eyebrow{font-size:16px;color:#7b715e;letter-spacing:.06em;margin-bottom:26px}
.ivory-wedding .ruled-postcard h2{font-size:clamp(30px,3.6vw,46px);margin-bottom:24px;font-style:italic}
.ivory-wedding .ruled-postcard .invitation-prose{max-width:none;font-size:18px;line-height:36px;padding:0 0 36px;background:repeating-linear-gradient(to bottom,transparent 0,transparent 34px,#a49e813b 34px,#a49e813b 35px,transparent 35px,transparent 36px);position:relative}
.ivory-wedding .ruled-postcard .letter-seal{right:42px;bottom:-31px;width:88px;height:86px;border:0;border-radius:46% 51% 44% 49% / 50% 43% 53% 46%;background:radial-gradient(ellipse at 33% 23%,#a0a080 0,#787b58 36%,#575d3f 79%,#868969 100%);box-shadow:inset 2px 3px 4px #dad6b37a,inset -3px -4px 5px #323b246e,2px 6px 8px #413b322c;color:#d0ccb0;z-index:2}
.ivory-wedding .ruled-postcard .letter-seal:before{content:'';position:absolute;inset:10px;border:1px solid #bdbea085;border-radius:50%;box-shadow:inset 2px 2px 3px #303b2470,1px 1px 2px #dedbc475}
.ivory-wedding .ruled-postcard .letter-seal svg{width:40px;height:40px;filter:drop-shadow(0 1px 1px #26311c);opacity:.8}
@media(max-width:760px){.ivory-wedding .postcard-intro{padding:44px 20px 70px}.ivory-wedding .ruled-postcard{padding:32px 25px 65px;transform:none}.ivory-wedding .ruled-postcard h2{font-size:32px}.ivory-wedding .ruled-postcard .invitation-prose{font-size:18px;line-height:36px}.ivory-wedding .ruled-postcard .letter-seal{width:76px;height:76px;right:25px;bottom:-27px}.ivory-wedding.editing .postcard-intro{padding-inline:20px}}
/* A country-house vignette on the ivory wedding stationery. */
.ivory-wedding .estate-venue{display:flex;flex-direction:column;gap:0;align-items:center;margin:0;padding:60px 8% 80px;border:0;background:transparent;text-align:center}
.ivory-wedding .estate-venue .venue-mark{order:-1;width:min(540px,100%);opacity:1;margin:0 auto 30px;color:var(--accent)}
.ivory-wedding .estate-venue .venue-mark img{display:block;width:100%;height:auto;max-height:340px;object-fit:contain}
.ivory-wedding .estate-venue .venue-copy{width:100%;max-width:800px;padding:30px 20px 0;border-top:1px solid #9a82614d}
.ivory-wedding .estate-venue .eyebrow{margin-bottom:22px;letter-spacing:.07em}
.ivory-wedding .estate-venue h2{margin-bottom:20px;font-size:clamp(32px,3.5vw,48px)}
.ivory-wedding .estate-venue .invitation-prose{text-align:center!important}
.ivory-wedding .estate-venue #map{display:inline-block;margin-top:22px;padding-bottom:4px}
.ivory-wedding .estate-venue #venue-photo{margin-top:30px}
@media(max-width:760px){.ivory-wedding .estate-venue{padding:35px 24px 55px}.ivory-wedding .estate-venue .venue-mark{max-width:440px;margin-bottom:18px}.ivory-wedding .estate-venue .venue-copy{padding:26px 0 0}.ivory-wedding .estate-venue h2{font-size:32px}}
.ivory-wedding .silk-details{display:flex;flex-direction:column;gap:24px;padding:60px 8% 70px;background:#f4eee1;text-align:center}
.ivory-wedding .silk-details .silk-art{display:block;width:min(410px,100%);height:230px;object-fit:contain;margin:0 auto}
.ivory-wedding .silk-details .details-copy{width:100%;max-width:820px}
.ivory-wedding .silk-details h2{font-size:clamp(30px,3.2vw,44px);margin-bottom:24px;text-align:center}
@media(max-width:760px){.ivory-wedding .silk-details{padding:40px 24px 50px;gap:18px}.ivory-wedding .silk-details .silk-art{height:190px;max-width:350px}.ivory-wedding .silk-details h2{font-size:32px}}
.ivory-wedding .rings-closing{padding:34px 24px 76px;background:#f3eddf}
.ivory-wedding .rings-closing .closing-rings{width:min(320px,85%);height:215px;object-fit:contain;margin:0 auto 22px}
.ivory-wedding .rings-closing h2{font-size:clamp(32px,3.4vw,46px);font-weight:400;line-height:1.4;max-width:850px}
@media(max-width:760px){.ivory-wedding .rings-closing{padding-top:28px;padding-bottom:58px}.ivory-wedding .rings-closing .closing-rings{width:270px;height:180px;margin-bottom:16px}.ivory-wedding .rings-closing h2{font-size:32px}}
/* A single sparse floral frame around the ivory cover. */
.ivory-wedding .hero{isolation:isolate}
.ivory-wedding .hero>.vine-frame{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none;z-index:-1;opacity:.72}
.ivory-wedding .hero .art-stage{position:relative;z-index:1}
@media(max-width:760px){.ivory-wedding .hero>.vine-frame{opacity:.52}.ivory-wedding .hero{padding-left:35px;padding-right:35px}}
@media(max-width:760px){.ivory-wedding .hero>.vine-frame{height:460px;opacity:.62;mask-image:linear-gradient(#000 0%,#000 78%,transparent 100%)} }
/* Cotton paper and natural wax, keeping the letter live and editable. */
.ivory-wedding .ruled-postcard{background:linear-gradient(112deg,#fffaf0 0%,#f6efdd 58%,#f0e7d3 100%);border:1px solid #d9ceb9;border-radius:1px 3px 2px 1px;box-shadow:0 2px 2px #5f4d2926,0 12px 20px -9px #5f4d2940,0 28px 48px -24px #5f4d294d,inset 0 0 24px #a28b5110}
.ivory-wedding .ruled-postcard:before{opacity:.65;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.52 .82' numOctaves='4' stitchTiles='stitch'/%3E%3CfeDiffuseLighting lighting-color='%23fff7e7' surfaceScale='1.4' diffuseConstant='.8'%3E%3CfeDistantLight azimuth='225' elevation='55'/%3E%3C/feDiffuseLighting%3E%3C/filter%3E%3Cpath filter='url(%23p)' d='M0 0h220v220H0z'/%3E%3C/svg%3E");mix-blend-mode:multiply}
.ivory-wedding .ruled-postcard>.eyebrow,.ivory-wedding .ruled-postcard>h2{position:relative}
.ivory-wedding .ruled-postcard .letter-seal{background:none;border:0;box-shadow:none;border-radius:0;width:112px;height:112px;bottom:-40px;right:30px;color:transparent}
.ivory-wedding .ruled-postcard .letter-seal:before{display:none}
.ivory-wedding .ruled-postcard .letter-seal img{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(2px 5px 3px #463d2926)}
@media(max-width:760px){.ivory-wedding .ruled-postcard .letter-seal{width:100px;height:100px;right:15px;bottom:-35px}}
.ivory-wedding .ruled-postcard:before{opacity:.27}
/* Keep the candle composition spacious at tablet widths. */
.ivory-wedding .hero .art-stage img{aspect-ratio:2/3;width:100%;height:auto;object-fit:contain}
@media(min-width:761px) and (max-width:1050px){
.ivory-wedding .hero{grid-template-columns:1fr;gap:30px;padding:110px 12% 40px;min-height:0}
.ivory-wedding .hero-copy{width:100%;text-align:center}
.ivory-wedding .hero h1{max-width:100%;margin-inline:auto}
.ivory-wedding .hero .subtitle{margin-inline:auto}
.ivory-wedding .hero .art-stage{width:440px;max-width:100%;margin-inline:auto}
.ivory-wedding .hero>.vine-frame{height:650px;mask-image:linear-gradient(#000 0%,#000 75%,transparent 100%)}
}
.ivory-wedding .rings-closing .closing-rings{width:min(450px,100%);height:auto;aspect-ratio:320/215}
@media(max-width:760px){.ivory-wedding .rings-closing .closing-rings{width:min(350px,100%);height:auto}}
/* Compact candle vignette on phones. */
@media(max-width:760px){
.ivory-wedding .hero .art-stage{width:160px;max-width:100%;margin-inline:auto}
.ivory-wedding .hero .art-stage img{width:100%;height:auto;max-height:none;aspect-ratio:2/3}
}
