@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=DM+Sans:wght@400;500&display=swap');
*{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-width:none}::-webkit-scrollbar{display:none}body{margin:0;color:var(--ink);background:var(--paper);font:14px/1.8 'DM Sans',sans-serif;overflow-x:clip}body.cartagena{--ink:#244b45;--paper:#fcf6ea;--accent:#a37541;--line:#244b4530}body.buenosaires{--ink:#422330;--paper:#fcf5e9;--accent:#986d35;--line:#42233030}body.casablanca{--ink:#384533;--paper:#f4f0e5;--accent:#7b523b;--line:#38453330}h1,h2,h3,p,figure{margin:0}h1,h2,h3,.names{font-family:'Cormorant Garamond',Georgia,serif;font-weight:400}h1{font-size:clamp(48px,14vw,78px);line-height:.88;letter-spacing:-2px}h1 em{font-size:.55em;display:block;line-height:1.4}h2{font-size:39px;line-height:1.05;margin:12px 0 22px}h3{font-size:25px;line-height:1.2}p+p{margin-top:15px}.kicker{text-transform:uppercase;letter-spacing:2.5px;font-size:9px;font-weight:500}.button,button{font:11px 'DM Sans',sans-serif;letter-spacing:.8px;cursor:pointer}button,.button{border:1px solid var(--ink);background:var(--ink);color:var(--paper);padding:16px 20px;min-height:46px;display:inline-flex;justify-content:center;align-items:center;text-decoration:none;border-radius:0}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #b38d4e;outline-offset:5px}.button.ghost{background:transparent;color:var(--ink)}a{color:inherit}main{overflow:clip}section{position:relative}.section{padding:64px 30px;text-align:center}.section p{max-width:420px;margin-left:auto;margin-right:auto}.section .button{margin-top:24px}.section-number{font:italic 17px 'Cormorant Garamond';color:var(--accent);display:block;margin-bottom:18px}.hairline{height:1px;background:var(--line);width:68%;margin:28px auto}.hero{min-height:100svh;text-align:center;display:flex;flex-direction:column;justify-content:center;padding:55px 24px 40px;position:relative}.hero .kicker{margin-bottom:24px}.hero .date{margin-top:25px;letter-spacing:2px;font-size:11px}.hero .down{margin:26px auto 0;font-size:25px;text-decoration:none;animation:down 2s ease-in-out infinite}.hero .hero-photo{width:100%;height:auto;display:block}.photo{position:relative;margin:24px 24px 46px;padding:10px;border:1px solid var(--line);background:#fffdf6;box-shadow:0 18px 35px #34231915;rotate:-1.5deg}.photo:nth-of-type(even){rotate:1.5deg}.photo img{display:block;width:100%;height:auto}.photo figcaption{font:italic 18px 'Cormorant Garamond';padding:14px 4px 5px;text-align:center}.photo:after{content:'';position:absolute;inset:5px;border:1px solid var(--line);pointer-events:none}.count{display:flex;justify-content:center;gap:0;margin:35px auto 0}.count div{flex:1;border-right:1px solid var(--line)}.count div:last-child{border:0}.count b{font:36px 'Cormorant Garamond';display:block}.count span{font-size:8px;letter-spacing:1.5px}.agenda{list-style:none;padding:0;margin:30px auto;text-align:left;max-width:420px}.agenda li{display:grid;grid-template-columns:60px 1fr;gap:16px;border-top:1px solid var(--line);padding:24px 0}.agenda time{color:var(--accent);font-size:12px}.agenda p{font-size:12px;margin-top:8px}.venue-map{width:100%;height:250px;border:0;margin-top:28px;filter:saturate(.65)}.venue-address{font-size:12px}.details{text-align:left;border-top:1px solid var(--line);margin-top:25px}.details details{border-bottom:1px solid var(--line)}summary{cursor:pointer;list-style:none;padding:20px 24px 20px 0;position:relative;font-size:13px}summary:after{content:'+';position:absolute;right:2px}details[open] summary:after{content:'−'}details p{padding-bottom:20px;font-size:12px}form{text-align:left;margin-top:25px}label{display:block;font-size:11px;margin:16px 0}input,textarea,select{font:14px 'DM Sans',sans-serif;width:100%;border:1px solid var(--line);background:transparent;color:inherit;border-radius:0;padding:13px;margin-top:7px}form button{width:100%;margin-top:10px}.form-message{white-space:pre-line;font-size:12px;margin-top:20px}.reply-actions[hidden]{display:none}.closing{text-align:center;padding:75px 28px 115px}.closing h2{font-size:45px}.music{position:fixed;right:15px;bottom:67px;z-index:20;width:43px;height:43px;min-height:0;border-radius:50%;padding:0;box-shadow:0 3px 20px #0002}.music[hidden],.entry[hidden]{display:none}.music svg{width:19px;height:19px}.music[aria-pressed=true] svg{animation:musicBeat 2s infinite}.invite-nav{position:fixed;bottom:0;left:0;right:0;z-index:19;display:flex;justify-content:center;gap:0;background:var(--paper);border-top:1px solid var(--line);padding:13px 8px max(15px,env(safe-area-inset-bottom))}.invite-nav a{flex:1;text-align:center;text-decoration:none;font-size:9px;letter-spacing:.7px}.invite-nav[hidden]{display:none}.emblem{width:65px;height:65px;margin:0 auto 15px;display:block;fill:none;stroke:var(--accent);stroke-width:1}.emblem .draw{stroke-dasharray:240;stroke-dashoffset:240;transition:stroke-dashoffset 2.4s}.visible .emblem .draw{stroke-dashoffset:0}.reveal{transition:opacity 1s,translate 1s}.motion-ready .reveal:not(.visible){opacity:0;translate:0 22px}
.entry{position:fixed;inset:0;z-index:50;overflow:hidden;display:grid;place-items:center;background:var(--paper);perspective:1000px}.entry-copy{position:relative;z-index:3;text-align:center;padding:35px 20px;width:100%;transition:opacity .5s,transform .8s}.entry .names{font-size:clamp(48px,14vw,74px);line-height:.98;display:block}.entry .names i{font-size:.45em;display:block;margin:10px}.entry .kicker{margin-bottom:30px}.entry .date{font-size:10px;letter-spacing:2px;margin:30px 0}.entry button{display:flex;margin:0 auto;min-width:190px;position:relative;overflow:hidden}.entry button:after{content:'';position:absolute;inset:-40%;background:linear-gradient(110deg,transparent 40%,#fff5 50%,transparent 60%);transform:translateX(-100%);animation:buttonLight 6s 2s infinite}.entry small{display:block;font-size:9px;margin-top:12px;opacity:.8}.entry.is-open .entry-copy{opacity:0;transform:translateY(-12px);pointer-events:none}.closed{overflow:hidden!important;height:100%}.closed body{position:fixed;inset:0;width:100%;overflow:hidden}.panel{position:absolute;top:0;bottom:0;width:50.5%;transition:transform 1.8s cubic-bezier(.65,0,.2,1);z-index:2}.panel.left{left:0;transform-origin:left center}.panel.right{right:0;transform-origin:right center}.entry.is-open .panel.left{transform:translateX(-103%)}.entry.is-open .panel.right{transform:translateX(103%)}
/* Cartagena: carved shutters, courtyard light, palm silhouettes. */
.cartagena .entry{background:radial-gradient(ellipse at 50% 45%,#fef7db,#baaa80)}.cartagena .panel{background:repeating-linear-gradient(0deg,#173a33 0 16px,#254d43 17px 30px,#102f2a 32px 35px);border:12px solid #24493f;box-shadow:inset 0 0 0 2px #9b8860,8px 0 25px #0005}.cartagena .panel:before{content:'';position:absolute;inset:20px 14px;border:1px solid #ac966565;border-radius:100px 100px 0 0}.cartagena .entry-copy{color:#fcf2d9;text-shadow:0 2px 18px #10251a}.cartagena .entry button{background:#f6edda;color:#244b45;border-color:#e5d3ab}.cartagena .entry.is-open .panel.left{transform:rotateY(-100deg)}.cartagena .entry.is-open .panel.right{transform:rotateY(100deg)}.cartagena .hero{background:radial-gradient(ellipse at top,#f0dfb6,transparent 65%),#fcf6ea;min-height:700px}.cartagena .hero h1{position:relative;z-index:1}.cartagena .hero .arch-photo{margin:34px auto 0;width:85%;border-radius:150px 150px 0 0;overflow:hidden;border:6px solid #eee2c9;box-shadow:0 0 0 1px #ac976d}.cartagena .section:nth-of-type(even){background:#e7ebdd}.palm{position:absolute;width:135px;height:200px;z-index:0;opacity:.35;transform-origin:bottom center;animation:palmBreeze 8s infinite alternate ease-in-out;pointer-events:none}.palm.left{top:12px;left:-45px;rotate:22deg}.palm.right{right:-45px;top:90px;scale:-1 1;animation-delay:-4s}.cartagena .closing{background:#244b45;color:#f9efdc}.cartagena .closing .kicker{color:#d7c39a}
/* Buenos Aires: theatrical fabric and a restrained printed programme. */
.buenosaires .entry{background:#3b1024}.buenosaires .panel{background:repeating-linear-gradient(90deg,#2b0818 0%,#7b2944 6%,#4c122b 12%,#220913 17%);box-shadow:inset -12px 0 24px #0004}.buenosaires .panel:after{content:'';position:absolute;inset:14px;border:1px solid #c6a56b65;border-bottom:4px double #c6a56b;border-radius:0 0 48% 48%}.buenosaires .entry-copy{color:#f6e9cc;text-shadow:0 3px 12px #0009}.buenosaires .entry button{background:#f4e9d5;color:#4a1d2c;border-color:#e2c48e}.buenosaires .hero{background:#3d1426;color:#f7ecd5;padding:70px 22px 35px;min-height:730px}.buenosaires .hero:before{content:'';position:absolute;inset:24px 14px;border:1px solid #b9915e70;pointer-events:none}.buenosaires .hero h1{font-size:62px}.buenosaires .hero .hero-photo{margin-top:30px;border:5px solid #d3b985;box-shadow:0 0 0 2px #4f2836,0 0 0 3px #a5824d}.buenosaires .section-number{font-size:12px;font-style:normal;letter-spacing:3px}.buenosaires .agenda li{grid-template-columns:1fr;text-align:center;gap:8px}.buenosaires .agenda time{letter-spacing:3px}.buenosaires .quote{background:#3d1426;color:#f5e7d0}.buenosaires .quote h2{font-style:italic;font-size:44px}.buenosaires .closing{border-top:5px double #9d7951}.chandelier{display:block;width:110px;height:105px;margin:0 auto 20px;fill:none;stroke:#d5b77b;stroke-width:1;transform-origin:top center;animation:chandelier 7s infinite alternate ease-in-out}.chandelier .light{fill:#fff0b4;stroke:none;animation:candleLight 2s infinite alternate}
/* Casablanca: tactile folded paper, vineyard engraving and open space. */
.casablanca .entry{background:#e0ddcd}.casablanca .panel{width:100%;left:0;right:0;height:50.5%;border:1px solid #b4b49a;background-color:#f6f2e6;background-image:repeating-linear-gradient(3deg,#575a3c04 0 1px,transparent 1px 4px);box-shadow:0 4px 30px #43492b22}.casablanca .panel.left{top:0;transform-origin:center top}.casablanca .panel.right{top:auto;bottom:0;transform-origin:center bottom}.casablanca .entry.is-open .panel.left{transform:rotateX(105deg)}.casablanca .entry.is-open .panel.right{transform:rotateX(-105deg)}.casablanca .entry-copy{padding:25px}.casablanca .entry-copy:before{content:'';display:block;width:44px;height:1px;background:var(--accent);margin:0 auto 30px}.casablanca .hero{min-height:600px;background:#f4f0e5}.casablanca .hero .kicker{font-size:9px}.casablanca .hero h1{font-size:68px}.vineyard{width:100%;height:160px;margin-top:25px;stroke:#657254;stroke-width:.8;fill:none}.vineyard .vine-lines{stroke-dasharray:700;stroke-dashoffset:700;animation:vineDraw 5s ease forwards}.casablanca .hero .hero-photo{margin-top:28px;aspect-ratio:auto}.casablanca .photo{rotate:0;background:transparent;border:0;box-shadow:none;padding:0;margin:0 25px}.casablanca .photo:after{display:none}.casablanca .photo figcaption{text-align:left;border-bottom:1px solid var(--line);padding:18px 0}.casablanca .section{text-align:left;padding:65px 28px}.casablanca .count{text-align:center}.casablanca .quote{background:#dce1d1}.casablanca .closing{background:#384533;color:#f4f0e5}.casablanca .venue-map{filter:saturate(.3)}
@keyframes palmBreeze{to{transform:rotate(7deg)}}@keyframes chandelier{to{transform:rotate(2deg)}}@keyframes candleLight{to{opacity:.55}}@keyframes vineDraw{to{stroke-dashoffset:0}}@keyframes down{50%{translate:0 6px}}@keyframes buttonLight{20%,100%{transform:translateX(100%)}}@keyframes musicBeat{50%{transform:scale(.9)}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.motion-ready .reveal{opacity:1;translate:none}.vineyard .vine-lines{stroke-dashoffset:0}.emblem .draw{stroke-dashoffset:0}}
@media(max-height:520px){.entry .names{font-size:45px}.entry .kicker{margin-bottom:14px}.entry .date{margin:18px 0}.entry-copy{padding:20px}.entry small{margin-top:8px}}

.entry .vineyard{height:105px;width:85%;margin:0 auto 20px}.entry .chandelier{height:85px;margin-bottom:18px}.entry .names{overflow-wrap:normal}.entry-copy .names{position:relative}.hero>*:not(.palm){position:relative;z-index:1}@media(max-height:600px){.entry .vineyard,.entry .chandelier{height:65px;margin-bottom:10px}.entry .kicker{margin-bottom:16px}.entry .date{margin:18px 0}.entry-copy{padding:20px}.entry .names{font-size:50px}.entry-copy:before{display:none!important}}
