/* Art-directed finish, matching the approved paper / watercolor reference. */
:root{--paper-texture:url("assets/paper.svg");--paper:#f6f2e6;--ink:#4c502e;--serif:'Cormorant Garamond',Georgia,serif}
[data-palette=terracotta]{--paper:#f7f3e8;--ink:#4c502e;--olive:#777b4a;--line:#d8d3be;--paper-tint:#FEFAE0;--accent:#D4A373;--sage:#CCD5AE;--wash:#E9EDC9;--cream:#FAEDCD}
[data-palette=sky]{--paper:#f5f0e8;--paper-tint:#F0C8A8}
body{background-image:var(--paper-texture);background-size:700px 700px}body:after{opacity:.018}.invitation{background-color:var(--paper);background-image:var(--paper-texture),radial-gradient(ellipse at 50% 40%,#ffffff80,transparent 75%);background-size:700px 700px,100% 100%;perspective:2200px;transition:none}.invitation-top>span{opacity:0}.invitation-top{top:30px}.invitation-top .languages{margin-left:auto}.gatefold{width:min(83vw,1160px);height:auto;aspect-ratio:1.94;max-height:65vh;perspective:2100px;transform:translateY(-10px);filter:none;isolation:isolate}.card-underlay{box-shadow:0 30px 40px -14px #3f34174d,0 3px 6px #382e222b;background:var(--paper);border:1px solid #e6e1d4}.wing{background-color:var(--paper);background-image:var(--paper-texture),linear-gradient(110deg,#fff8,var(--paper-tint,#FEFAE0) 150%);background-size:600px 600px,100% 100%;box-shadow:inset 0 2px 2px #fff9,inset 0 -3px 4px #76694d25,0 2px 2px #4d44232b;transform-style:preserve-3d;backface-visibility:visible;transition:none;will-change:transform;z-index:2}.wing:before{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,#76664b00,#76664b05 85%,#76664b16);opacity:0;transition:opacity .8s}.wing:after{opacity:.16;mix-blend-mode:multiply}.left-wing{border-right:1px solid #aaa38d88;transform-origin:0 50%}.right-wing{border-left:1px solid #fff8;transform-origin:100% 50%;background-position:310px 0,0 0}.right-wing:before{transform:scaleX(-1)}.border{inset:15px;border-color:#77794e;border-width:1px}.border:after{inset:5px;border-color:#92936a}.seal{width:128px;height:128px;filter:none;transition:opacity .45s,transform .6s}.seal-face{font-size:0;background:transparent;box-shadow:none;border-radius:0;text-shadow:none;color:transparent;inset:0;background-image:url("assets/wax-seal.png");background-size:contain;background-position:center;background-repeat:no-repeat;filter:drop-shadow(2px 5px 4px #3c361c55)}.seal-face:before{display:none}.seal-face span{font-size:0}.seal-orbit{inset:1px;border:1px solid #b6a477;border-left-color:transparent;border-bottom-color:transparent;opacity:0;animation:none;transform:rotate(-80deg);transition:opacity .5s,transform 1.5s cubic-bezier(.2,.6,.3,1);box-shadow:none!important}.seal-orbit:after{inset:7px;border:1px solid #b3a47f;opacity:.4}.seal:hover .seal-orbit,.seal:focus-visible .seal-orbit{opacity:.8;transform:rotate(100deg)}.seal:hover .seal-face{transform:translateY(-3px) scale(1.025)}[data-palette=sky] .seal-face{filter:hue-rotate(90deg) saturate(.65) drop-shadow(2px 5px 4px #293e4455)}.invitation-caption{bottom:9%;transition:opacity .5s,transform .5s}.invitation-caption .eyebrow{display:none}.invitation-caption p{font-size:13px;font-style:normal;text-transform:uppercase;letter-spacing:3px;font-family:var(--serif);font-weight:500}.invitation-foot{opacity:.35;font-size:8px}.is-opening .invitation-caption{opacity:0;transform:translateY(8px)}.is-opening .invitation-top,.is-opening .invitation-foot{opacity:0}.is-opening .wing:before{opacity:1}.is-opening .seal{opacity:0;transform:translate(-50%,-50%) translateY(-6px) scale(1.08)}.is-opening{pointer-events:none}.is-opening .card-underlay{opacity:0;transition:opacity .2s .4s}.portal-world{position:fixed;overflow:hidden;background:var(--paper);box-shadow:0 5px 35px #483e2320;z-index:0;pointer-events:none;opacity:0;isolation:isolate}.portal-world .hero{position:absolute;left:0;top:0;min-height:0!important;max-height:none!important;margin:0;transform-origin:top left;transition:none!important;opacity:1!important}.portal-world .scroll-hint,.portal-world .side-note{display:none}.portal-world .hero .button{pointer-events:none}.gatefold{z-index:1}.invitation.is-opening .portal-world{opacity:1}.invitation-closed #site{opacity:0;visibility:hidden}.nav{height:86px;padding:0 6.5%}.nav nav{gap:36px}.nav nav a,.nav nav button{font-size:9px;letter-spacing:2px}.nav .nav-rsvp{border:0}.hero{height:100svh;min-height:780px;max-height:1100px;transform:none!important;transition:none!important;padding-top:118px;background-color:var(--paper);background-image:var(--paper-texture);background-size:700px}.hero-copy .eyebrow{display:none}.hero h1{font-size:clamp(95px,10.4vw,160px);font-weight:400;letter-spacing:-5px;line-height:1;margin:0 0 18px}.hero h1 i{font-size:.8em}.hero-date{font-size:11px;letter-spacing:3.4px;margin-bottom:22px}.hero .button{padding:11px 28px;min-height:36px;font-size:9px;background:transparent;position:relative}.hero .button:hover{background:var(--ink)}.harbor{height:84%;width:100%;bottom:5px;object-fit:cover;object-position:center 61%;mask-image:linear-gradient(transparent 0%,#000 20%,#000 88%,transparent 100%);opacity:1;mix-blend-mode:multiply}.scroll-hint{font-size:15px;bottom:13px}.scroll-hint .down-arrow{font-size:19px}.button{min-height:42px;border-color:#777b55;letter-spacing:2.2px;border-radius:0}.solid{background:#6e7345;border-color:#6e7345;color:#fffbee}.solid:hover{background:#4c502e}.section{padding-top:100px;padding-bottom:100px}.story{padding-top:95px}.little-sun{font-size:0;width:52px;height:52px;margin:35px auto 0;background:url("assets/sun.svg") center/contain no-repeat}.festival{background:#071c28;min-height:850px;isolation:isolate}.festival-image{position:absolute;inset:-3%;width:106%;height:106%;object-fit:cover;object-position:center;z-index:-2;transform:scale(1.035);animation:festival-drift 22s ease-in-out infinite alternate}.festival:before{background:linear-gradient(#061d2720,transparent);opacity:1;height:160px}.festival:after{background:linear-gradient(transparent,#061a2560);height:120px}.festival-atmosphere{inset:0;background:radial-gradient(ellipse at 50% 48%,#051a2633,transparent 70%);filter:none;animation:none;z-index:-1}.festival-content{padding:85px 25px 100px}.festival h2{font-size:clamp(70px,7.5vw,112px);margin:23px 0;line-height:.96;letter-spacing:-2.8px}.festival-content p{font-size:23px;margin:25px 0 30px}.festival .light{border-color:#d9cfad99;font-size:9px;background:#061c241a}.festival .light:hover{background:#eee9d8}.sun-symbol{width:185px;height:104px;background:url("assets/sun.svg") center top/185px 185px no-repeat;margin-bottom:22px}.sun-symbol:before,.sun-symbol div{display:none}.laser-fan{opacity:.18;mix-blend-mode:screen;top:9%;height:45%;filter:drop-shadow(0 0 1px #67c6d7)}.left-lasers{left:-12%;transform:rotate(18deg)}.right-lasers{right:-12%;transform:scaleX(-1) rotate(18deg);filter:hue-rotate(82deg)}.laser-fan i{height:.6px;animation-duration:18s}.embers{opacity:.8}.embers i{width:1.5px;height:2px;box-shadow:0 0 5px #f7b45e}.water-lines{height:28%;bottom:-40px;opacity:.2;mix-blend-mode:screen}.small-secret{font-size:15px;margin-top:24px;opacity:.6}.stay-feature{gap:65px}.hotel-art{background:transparent;min-height:350px}.hotel-art img{mask-image:linear-gradient(transparent,#000 15%,#000 85%,transparent)}.rsvp{max-width:1220px}.rsvp .section-heading{margin-bottom:10px}.envelope-scene{--flap-rotation:0deg;--letter-offset:145px;--letter-opacity:.1;max-width:980px;padding:110px 75px 85px;perspective:1600px}.envelope-back{inset:34% 0 0;background-color:#70764b;background-image:var(--paper-texture);background-blend-mode:multiply;background-size:450px;box-shadow:0 26px 28px -18px #302f2766,0 1px 3px #47452d55;border:1px solid #646b41}.envelope-flap{z-index:0!important;top:34%;height:260px;background-color:#7b8255;background-image:var(--paper-texture);background-blend-mode:multiply;background-size:450px;clip-path:polygon(0 0,100% 0,50% 100%);transform:rotateX(var(--flap-rotation))!important;transition:none;filter:drop-shadow(0 2px 2px #30321725)}.letter{background-color:#fbf8ed;background-image:var(--paper-texture);background-size:650px;padding:48px 52px 60px;min-height:540px;box-shadow:0 5px 20px #332f201a,inset 0 0 0 1px #ffffff80;transform:translateY(var(--letter-offset))!important;opacity:var(--letter-opacity)!important;transition:none;border:1px solid #e9e2d1}.letter-heading h3{font-size:46px;line-height:1.1;letter-spacing:-1px}.letter-heading .eyebrow{display:none}.letter-heading p{font-size:22px;margin-bottom:23px}.envelope-front{height:155px;background-image:var(--paper-texture),linear-gradient(22deg,#747b4c,#898c5f 55%,#656c3d);background-blend-mode:multiply,normal;background-size:450px,100% 100%;clip-path:polygon(0 0,50% 70%,100% 0,100% 100%,0 100%);filter:drop-shadow(0 -1px 1px #333b1d50)}.envelope-front:after{content:'';position:absolute;left:-5%;bottom:20%;width:110%;height:1px;background:#b8b68a50;transform:rotate(13deg)}.envelope-edge{height:66px;background-color:#7b8250;background-image:var(--paper-texture);background-blend-mode:multiply;background-size:450px}.form-grid{gap:22px;margin:20px 0}.letter input:not([type=radio]):not([type=checkbox]),.letter select,.letter textarea{border:1px solid #b9b69d;padding:10px 11px;min-height:38px;margin-top:9px;background:#fff8e51a;font-size:13px}.letter textarea{min-height:72px}.letter label>span,legend{font-size:8px;font-weight:500;letter-spacing:1.8px}.letter .radio span{font-size:19px;font-weight:400;letter-spacing:0}.preview-note{background:transparent;border:0;padding:0;text-align:center;font-size:9px;opacity:.65;margin-bottom:22px}.guest-note{font-size:10px}.letter .solid{font-size:9px;min-height:40px;padding:12px 26px}.envelope-scene.sealing .letter{transition:transform 1s ease,opacity .5s!important;transform:translateY(100px)!important;opacity:.15!important}.envelope-scene.sealed .letter{transition:transform .85s ease,opacity .8s!important;transform:translateY(0)!important;opacity:1!important}.palette-tools #palette-toggle{box-shadow:0 4px 18px #282f1810;background-color:var(--paper);background-image:var(--paper-texture)}#palette-panel,dialog{background-image:var(--paper-texture)}.nav .languages button{font-size:9px}.palette-tools{bottom:18px;right:18px}[data-palette=sky] .solid{background:var(--seal-low);border-color:var(--seal-low)}[data-palette=sky] .envelope-back,[data-palette=sky] .envelope-front,[data-palette=sky] .envelope-edge{background-color:#648f98;background-image:var(--paper-texture);background-blend-mode:multiply}[data-palette=sky] .envelope-flap{background-color:#9fc4cc}[data-palette=sky] .border{border-color:#79969a}
@keyframes festival-drift{from{transform:scale(1.035) translate3d(-.5%,0,0)}to{transform:scale(1.08) translate3d(.5%,.6%,0)}}
@media(max-width:800px){.gatefold{width:88vw;height:auto;aspect-ratio:1.45;max-height:none}.seal{width:104px;height:104px}.border{inset:10px}.border:after{inset:4px}.invitation-caption{bottom:17%;max-width:80%}.invitation-caption p{font-size:11px;line-height:1.9;letter-spacing:2px}.hero{padding-top:125px;min-height:730px;max-height:1000px}.hero h1{font-size:clamp(66px,13.5vw,105px);letter-spacing:-2.5px}.hero-date{font-size:8px;letter-spacing:2.2px}.harbor{height:76%;width:170%;left:-35%;object-position:center 62%;mask-image:linear-gradient(transparent,#000 20%,#000 88%,transparent)}.hero-copy{z-index:2}.hero .button{font-size:8px;min-height:35px}.nav{padding:0 6%;height:78px}.nav nav{margin-right:20px}.nav .nav-rsvp{border:1px solid var(--line);padding:8px 10px}.nav .languages{gap:10px}.section{padding:75px 24px}.festival{min-height:790px}.festival-content{padding:75px 20px 90px}.festival-image{width:140%;left:-20%;object-position:center}.festival h2{font-size:70px;letter-spacing:-1.5px}.sun-symbol{width:145px;height:86px;background-size:145px 145px}.festival-content p{font-size:22px}.rsvp{padding-left:12px;padding-right:12px}.envelope-scene{padding:70px 18px 60px}.envelope-flap{height:180px}.letter{padding:32px 23px 42px;min-height:570px}.letter-heading h3{font-size:35px}.letter-heading p{font-size:19px}.envelope-front{height:115px}.envelope-edge{height:52px}.form-grid{gap:16px}.letter label>span,legend{font-size:8px}.letter .radio span{font-size:17px}.seal-orbit{opacity:.25;animation:seal-breath 4s ease-in-out infinite}.seal:hover .seal-orbit{animation:none}.hotel-art{min-height:270px}}
@keyframes seal-breath{50%{opacity:.65;transform:rotate(20deg)}}
@media(prefers-reduced-motion:reduce){.envelope-scene{--flap-rotation:180deg;--letter-offset:0px;--letter-opacity:1}.letter{transform:none!important;opacity:1!important}.festival-image{animation:none}.seal-orbit{animation:none;opacity:.4}}
/* English-first edition and a hand-painted weekend itinerary. */
.timeline-content{position:relative;padding-right:150px;min-height:160px}.timeline-art{position:absolute;right:-8px;top:0;width:140px;height:155px;object-fit:contain;filter:drop-shadow(0 3px 5px #685c2110);pointer-events:none}.timeline-item:nth-child(2) .timeline-art{height:180px;top:-10px}.timeline-item{padding-bottom:75px}.festival{min-height:940px;align-items:flex-start}.festival-image{inset:0;width:100%;height:100%;object-position:center bottom;animation:festival-drift 24s ease-in-out infinite alternate}.festival-content{padding:65px 25px 320px}.festival h2{font-size:clamp(70px,7vw,105px)}.festival-atmosphere{background:linear-gradient(180deg,#06192715,transparent 56%)}.water-lines{opacity:.09;height:38%}.festival:after{height:75px;opacity:.5}.small-secret{margin-top:20px}
@media(max-width:800px){.timeline-content{padding-right:0;padding-top:80px}.timeline-art{width:105px;height:100px;left:-7px;right:auto;top:-15px}.timeline-item:nth-child(2) .timeline-art{height:115px;top:-25px}.timeline-item{padding-bottom:45px}.festival{min-height:900px}.festival-content{padding:65px 20px 315px}.festival-image{width:145%;height:100%;left:-22.5%;object-position:50% 100%}.festival h2{font-size:68px}.festival .sun-symbol{margin-bottom:14px}.nav .languages{gap:9px}.nav nav{margin-right:17px}.nav .languages button{font-size:8px}}
/* Uniform invitation paper: no directional tint or mismatched panel tones. */
.invitation{background-image:var(--paper-texture);background-size:700px 700px}
.wing,.left-wing,.right-wing{background-color:var(--paper);background-image:var(--paper-texture);background-size:600px 600px;background-position:0 0}
.wing:before{background:none!important}
/* Give the Saturday date its own clear hierarchy above the party title. */
.festival .eyebrow[data-t="partyDate"]{font-size:clamp(16px,1.6vw,21px);font-weight:500;letter-spacing:3.2px;line-height:1.6;margin:8px 0 20px;color:#f5eedc}
@media(max-width:800px){.festival .eyebrow[data-t="partyDate"]{font-size:16px;letter-spacing:2.6px;margin:8px 0 20px}}
/* Travel illustrations echo the watercolor weekend schedule. */
.route-illustration{height:135px;position:relative;display:flex;align-items:center;margin-bottom:12px}.route-illustration img{width:125px;height:125px;object-fit:contain;pointer-events:none}.route-illustration .route-number{font-size:23px;margin-left:16px;opacity:.65}.route-dash{padding-top:150px}.travel-route{gap:24px}.travel-route h3{margin-top:0}
@media(max-width:800px){.route-illustration{justify-content:center;height:120px;margin-bottom:8px}.route-illustration img{width:115px;height:115px}.route-illustration .route-number{position:absolute;right:28px;font-size:22px}.travel-route{gap:34px}}

/* Keep lettering out of the cropped portal; reveal it only at full viewport. */
.portal-world .hero-copy,.portal-world .nav{visibility:hidden!important}
#site.intro-reveal .hero-copy{animation:intro-lettering 1000ms cubic-bezier(.2,.65,.3,1) 100ms both}
#site.intro-reveal .nav{animation:intro-lettering 800ms ease 250ms both}
#site.intro-reveal .scroll-hint,#site.intro-reveal .side-note{animation:intro-lettering 700ms ease 450ms both}
@keyframes intro-lettering{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){#site.intro-reveal .hero-copy,#site.intro-reveal .nav,#site.intro-reveal .scroll-hint,#site.intro-reveal .side-note{animation:none}}

.mood-board-image{display:block;width:100%;height:auto;margin:24px 0 28px}.mood-concept{line-height:1.7}#moodboard{width:min(94vw,1000px);max-height:90svh;overflow-y:auto}

/* Personal photo essay, using the couple's original photographs. */
.story{max-width:1240px;padding-top:100px}.story-heading{max-width:800px;margin:0 auto 80px}.story-chapters{display:grid;gap:100px}.story-chapter{display:grid;grid-template-columns:1fr 1fr;gap:8%;align-items:center;text-align:left}.story-chapter > figure{margin:0;padding:14px 14px 18px;background:#fbf9f2;box-shadow:0 10px 35px #302f1812}.story-chapter img{display:block;width:100%;height:auto}.story-chapter > figure > figcaption{display:flex;justify-content:space-between;font-family:var(--serif);font-size:17px;font-style:italic;padding-top:14px}.story-chapter:nth-child(even) > figure{order:2}.chapter-copy h3{font-size:clamp(36px,4vw,58px);font-weight:400;line-height:1.1;margin:22px 0}.chapter-copy p{font-size:15px;line-height:1.95}.story>.signature{display:block;margin-top:70px}.nav nav{gap:24px}.invitation-foot{font-size:16px;letter-spacing:3.5px;opacity:.75}
@media(max-width:800px){.story-chapters{gap:65px}.story-chapter{grid-template-columns:1fr;gap:28px}.story-chapter:nth-child(even) > figure{order:0}.story-heading{margin-bottom:45px}.chapter-copy p{font-size:14px}.invitation-foot{font-size:14px;letter-spacing:3px}}

/* Shared interface colours: every control follows the selected palette. */
html[data-palette=terracotta]{--ink:#4c502e;--olive:#777b4a;--control:#636d45;--control-hover:#4c502e;--control-border:#777b55;--control-wash:#E9EDC9;--surface:#fbf8ed;--field-border:#b9b69d;--muted:#858965}
html[data-palette=sky]{--ink:#364f54;--olive:#5E97A8;--control:#437b8b;--control-hover:#305e6a;--control-border:#5E97A8;--control-wash:#dcecf0;--surface:#fcf7f0;--field-border:#8daeb6;--muted:#658b96;--line:#bfd1d5}
html[data-palette] .button:not(.light){color:var(--control);border-color:var(--control-border)}
html[data-palette] .button:not(.light):hover,html[data-palette] .button.solid{background:var(--control);color:#fffdf5;border-color:var(--control)}
html[data-palette] .button.solid:hover{background:var(--control-hover);border-color:var(--control-hover)}
html[data-palette] .text-link{color:var(--control);border-color:var(--control-border)}
html[data-palette] .text-link:hover{color:var(--control-hover);border-color:var(--accent)}
html[data-palette] .code-button{color:var(--control);border-color:var(--control-border);background:var(--control-wash)}
html[data-palette] .route-number{color:var(--muted)}
html[data-palette] .border,html[data-palette] .border:after{border-color:var(--control-border)}
html[data-palette] .languages button.active,html[data-palette] .mood-tabs button.active{color:var(--control);border-color:var(--control)}
html[data-palette] .nav .nav-rsvp{color:var(--control);border-color:var(--control-border)}
html[data-palette] .hotel-list a:hover{color:var(--control);border-color:var(--control-border)}
html[data-palette] .letter{background-color:var(--surface);border-color:var(--line)}
html[data-palette] .letter input:not([type=radio]):not([type=checkbox]),html[data-palette] .letter select,html[data-palette] .letter textarea{border-color:var(--field-border);background-color:var(--surface)}
html[data-palette] input[type=radio],html[data-palette] input[type=checkbox]{accent-color:var(--control)}
html[data-palette] button:focus-visible,html[data-palette] a:focus-visible,html[data-palette] input:focus-visible,html[data-palette] select:focus-visible,html[data-palette] textarea:focus-visible{outline-color:var(--control)}
html[data-palette] .palette-option.selected{border-color:var(--control);box-shadow:0 0 0 1px var(--control);background:var(--control-wash)}
html[data-palette] .envelope-back,html[data-palette] .envelope-front,html[data-palette] .envelope-edge{background-color:var(--seal-low);background-image:var(--paper-texture);background-blend-mode:multiply}
html[data-palette] .envelope-flap{background-color:var(--seal-mid)}

/* Full-width Palace illustration; retain the entire painted waterfront. */
.stay-feature{grid-template-columns:1fr;gap:30px}
.hotel-art{width:100%;min-height:0;max-height:none;overflow:visible;background:transparent;display:block}
.hotel-art img{display:block;width:100%;max-width:100%;height:auto;object-fit:contain;transform:none;mask-image:linear-gradient(transparent,#000 10%,#000 92%,transparent)}
.hotel-art span{position:static;display:block;margin:12px 0 0;font-size:9px;letter-spacing:2px}
.stay-feature .hotel-info{max-width:620px;margin-left:auto;padding-right:5%}
.stay-feature.reveal{transform:translateX(-45px);transition:opacity 1.2s ease,transform 1.4s cubic-bezier(.2,.65,.3,1)}
.stay-feature.reveal.visible{transform:translateX(0)}
.hero-video{opacity:0;transition:opacity 1s ease;pointer-events:none}
.hero-video.is-playing{opacity:1}
.agency-credit{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:45px;font-size:10px;letter-spacing:1px;color:var(--ink)}
.agency-credit a{display:inline-flex;align-items:center;gap:8px}
.agency-credit strong{font-family:var(--sans);font-size:15px;letter-spacing:-.5px}
.agency-credit img{width:20px;height:23px;object-fit:contain}
@media(max-width:700px){.stay-feature .hotel-info{margin-left:0;padding-right:0}.stay-feature{gap:25px}}
@media(prefers-reduced-motion:reduce){.hero-video{display:none}.stay-feature.reveal{transform:none;transition:none}}

.monogram img{display:block;width:42px;height:42px;object-fit:contain}

/* Opaque full-viewport media: never multiply video with its fallback image. */
.hero{height:100svh;min-height:640px;max-height:none;isolation:isolate}
.hero .harbor{inset:0;width:100%;height:100%;max-width:none;object-fit:cover;object-position:center;mix-blend-mode:normal;mask-image:none;-webkit-mask-image:none;transform:none}
.hero img.harbor{z-index:0;opacity:1;visibility:visible}
.hero video.harbor{z-index:1;opacity:0;transition:none;visibility:hidden}
.hero.video-playing img.harbor{opacity:0;visibility:hidden}
.hero.video-playing video.harbor{opacity:1;visibility:visible}
.hero .hero-copy,.hero .scroll-hint,.hero .side-note{z-index:2}
@media(max-width:700px){.hero{min-height:560px}.hero .harbor{width:100%;height:100%;left:0;object-position:center}}
@media(prefers-reduced-motion:reduce){.hero.video-playing img.harbor{opacity:1;visibility:visible}.hero.video-playing video.harbor{display:none}}

/* Unexpected: use the supplied film without layering the fallback/effects over it. */
.festival .party-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center bottom;z-index:0;opacity:0;visibility:hidden;mix-blend-mode:normal;pointer-events:none}
.festival.video-playing .party-video{opacity:1;visibility:visible}
.festival.video-playing .festival-image,.festival.video-playing .laser-fan,.festival.video-playing .embers,.festival.video-playing .water-lines,.festival.video-playing .festival-atmosphere{visibility:hidden}
@media(prefers-reduced-motion:reduce){.festival .party-video{display:none}.festival.video-playing .festival-image{visibility:visible}}

/* More legible navigation and controls, retaining the stationery character. */
.nav nav a,.nav nav button{font-size:12px;font-weight:600;letter-spacing:1.25px;min-height:44px;display:inline-flex;align-items:center}
.languages button,.nav .languages button{font-size:12px;font-weight:600;min-height:44px;min-width:28px;opacity:.75}
.languages button.active{opacity:1}
.button,.festival .light{font-size:12px;font-weight:600;letter-spacing:1.5px;min-height:44px}
.text-link,.mood-tabs button{font-size:13px;font-weight:500}
.story-chapter:last-child > figure{background:none;box-shadow:none;padding:0}
.story-chapter:last-child img{mix-blend-mode:multiply}
.journey-map{margin:45px -6vw 55px}
.journey-map a{display:block}
.journey-map img{display:block;width:100%;height:auto;mix-blend-mode:multiply;mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);-webkit-mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent)}
.journey-map figcaption{font-size:11px;letter-spacing:1.4px;text-align:center;margin-top:18px;color:var(--muted)}
@media(max-width:1100px){.nav{padding-left:4%;padding-right:4%}.nav nav{gap:15px}.nav nav a,.nav nav button{font-size:11px;letter-spacing:.7px}}
@media(max-width:700px){.nav nav a:not(.nav-rsvp),.nav nav button{display:none}.nav nav{margin-right:15px}.nav .languages{gap:9px}.nav .languages button{font-size:11px}.nav nav .nav-rsvp{font-size:12px}.journey-map{margin:30px -5vw 35px}.journey-map figcaption{font-size:10px;letter-spacing:.7px;padding:0 15px}}

/* The Saturday dress code belongs to its own midnight festival world. */
#moodboard[data-world="party"]{--ink:#f5eedc;--line:#b9a46966;background-color:#061b29;background-image:linear-gradient(180deg,#061b2922,#061b29ed 680px),url('assets/festival.png');background-size:100% 100%,100% auto;background-repeat:no-repeat;color:#f5eedc;border:1px solid #be9e5c66;box-shadow:0 30px 100px #000b,0 0 60px #45bcc51a}
#moodboard[data-world="party"]::backdrop{background:#020e1de0;backdrop-filter:blur(10px)}
#moodboard[data-world="party"] h2{color:#fff0ce;font-size:clamp(42px,5vw,68px);line-height:1.05}
#moodboard[data-world="party"] .modal-heading>.eyebrow{color:#dfc17f;letter-spacing:2px}
#moodboard[data-world="party"] .mood-tabs{border-color:#c9ac6860}
html[data-palette] #moodboard[data-world="party"] .mood-tabs button{color:#b8cdd4;min-height:44px}
html[data-palette] #moodboard[data-world="party"] .mood-tabs button.active{color:#f4d897;border-color:#e1bf70}
#moodboard[data-world="party"] #close-moodboard{color:#f5eedc;background:#071c29b3;border:1px solid #c5a76d80;width:44px;height:44px;border-radius:50%;font-size:28px}
#moodboard[data-world="party"] .mood-concept{font-size:14px;color:#d3e1e5;max-width:580px;line-height:1.8}
#moodboard[data-world="party"] .mood-board-image{border:1px solid #d5b66d55;box-shadow:0 12px 45px #0005}
#moodboard[data-world="party"] .mood-columns{padding:24px;background:#071c2bbd;border-top:1px solid #b99b5a55}
#moodboard[data-world="party"] .mood-columns h3{color:#efd18e}
#moodboard[data-world="party"] .mood-columns p{color:#dce7e9;font-size:14px}
#moodboard[data-world="party"] .mood-foot{color:#e9c77e}
#moodboard[data-world="party"] :focus-visible{outline:2px solid #eac67a;outline-offset:4px}
.venue{padding-bottom:50px}.venue .stay-feature{margin-bottom:0}#stay .other-hotels{margin-top:45px}
@media(max-width:700px){#moodboard[data-world="party"]{padding:24px 20px}#moodboard[data-world="party"] .mood-columns{padding:18px 12px;gap:18px}}

/* Tactile stationery: separate sheets, folded seams and a real postage illustration. */
html[data-palette=terracotta]{--envelope-paper:#dcdcc9;--envelope-fold:#cecfb9;--envelope-lining:#b9bea0}
html[data-palette=sky]{--envelope-paper:#cfdee0;--envelope-fold:#b9cdd0;--envelope-lining:#9ab9c0}
.envelope-scene{padding:110px 60px 120px;max-width:980px;filter:drop-shadow(0 22px 20px #3c382417)}
html[data-palette] .envelope-back{inset:34% 0 0;background-color:var(--envelope-paper);background-image:url('assets/cotton-paper.png');background-size:720px;background-blend-mode:multiply;border:1px solid #a7a58e70;border-radius:3px;box-shadow:inset 0 4px 12px #4c4a3224,0 2px 3px #514c3020}
html[data-palette] .envelope-flap{background-color:var(--envelope-lining);background-image:url('assets/cotton-paper.png');background-size:720px;background-blend-mode:multiply;clip-path:polygon(0 0,100% 0,52% 96%,50% 98%,48% 96%);border-top:1px solid #8e927c80;filter:drop-shadow(0 3px 3px #363a2d30)}
html[data-palette] .letter{background-color:#faf7f0;background-image:url('assets/cotton-paper.png');background-size:720px;background-blend-mode:multiply;border:1px solid #e4dece;padding:135px 52px 65px;box-shadow:0 14px 26px #3b352226,0 2px 3px #4d432a1c,inset 0 0 0 2px #fffaf3b0;clip-path:polygon(0 .2%,18% 0,46% .15%,73% 0,100% .2%,99.9% 40%,100% 75%,99.8% 100%,68% 99.85%,34% 100%,0 99.9%,.1% 60%)}
.letter:before{content:'';position:absolute;left:0;right:0;top:51%;height:2px;background:linear-gradient(transparent,#9d94791c);box-shadow:0 1px 0 #ffffff70;pointer-events:none}
.letter-postage{position:absolute;top:24px;right:27px;width:160px;height:115px;pointer-events:none}
.letter-postage img{position:absolute;right:0;top:0;width:82px;height:108px;object-fit:contain;transform:rotate(5deg);filter:drop-shadow(1px 2px 1px #4d45312b)}
.postmark{position:absolute;left:0;top:26px;display:flex;align-items:center;justify-content:center;text-align:center;width:90px;height:68px;border:2px double #4e564c6b;border-radius:50%;font:8px/1.6 var(--sans);letter-spacing:1px;color:#4e564c99;transform:rotate(-15deg)}
.postmark:after{content:'';position:absolute;left:75px;top:18px;width:58px;height:28px;background:repeating-linear-gradient(transparent 0 6px,#4e564c66 6px 7px);transform:rotate(4deg)}
.letter-heading h3{font-size:clamp(34px,4vw,46px)}
html[data-palette] .letter input:not([type=radio]):not([type=checkbox]),html[data-palette] .letter select,html[data-palette] .letter textarea{background:#fffdf538;border:0;border-bottom:1px solid #8d927a99;border-radius:0;box-shadow:inset 0 -1px 0 #fff9;min-height:44px;font-size:16px}
.letter label>span,.letter legend{font-size:10px;font-weight:600;letter-spacing:1.4px}
.letter .radio span{font-family:var(--serif);font-size:19px;font-weight:400;letter-spacing:0}
html[data-palette] .envelope-front{height:155px;background-color:var(--envelope-paper);background-image:url('assets/cotton-paper.png');background-size:720px;background-blend-mode:multiply;clip-path:polygon(0 0,50% 65%,100% 0,100% 100%,0 100%);filter:drop-shadow(0 -2px 2px #5a54312b)}
.envelope-front:after{left:0;bottom:0;width:50%;height:100%;background:linear-gradient(21deg,transparent 48.8%,#898b7650 49%,#fff9 49.4%,transparent 50%);transform:none}
html[data-palette] .envelope-edge{height:85px;background-color:var(--envelope-fold);background-image:url('assets/cotton-paper.png');background-size:720px;background-blend-mode:multiply;clip-path:polygon(0 100%,50% 0,100% 100%);filter:drop-shadow(0 -1px 1px #78796355)}
.plus-one{margin:26px 0 8px;border-top:1px solid #a8ac9066;padding-top:20px}.plus-one-toggle{cursor:pointer}.plus-one .guest-note{font-size:12px;line-height:1.6;margin:8px 0 18px}.plus-one fieldset{border:1px solid #b5b79d80;padding:20px;margin-top:18px}.plus-one fieldset legend{padding:0 8px}.plus-one fieldset[hidden]{display:none}
.agency-credit img.futrlab-wordmark{width:125px;height:auto;max-height:none;object-fit:contain}
@media(max-width:700px){.envelope-scene{padding:85px 12px 95px}html[data-palette] .letter{padding:120px 22px 50px}.letter-postage{top:20px;right:18px;transform:scale(.85);transform-origin:top right}.letter-heading h3{font-size:34px}html[data-palette] .envelope-front{height:115px}html[data-palette] .envelope-edge{height:60px}.plus-one fieldset{padding:15px 10px}.letter .radio span{font-size:17px}}

.story-chapter:last-child > figure{padding:14px 14px 18px;background:#fbf9f2;box-shadow:0 10px 35px #302f1812}.story-chapter:last-child img{mix-blend-mode:normal}
.island-finale{margin:0 auto -60px;max-width:1600px;overflow:hidden}.island-finale img{display:block;width:100%;height:auto;mix-blend-mode:multiply;mask-image:linear-gradient(transparent,#000 15%,#000 75%,transparent);-webkit-mask-image:linear-gradient(transparent,#000 15%,#000 75%,transparent)}

/* A continuous scroll track connects the three days. */
#timeline{position:relative;--track-x:170px;--track-start:13px;--track-height:0px;--track-progress:0}
#timeline:before,#timeline:after{content:'';position:absolute;left:var(--track-x);top:var(--track-start);width:2px;height:var(--track-height);pointer-events:none}
#timeline:before{background:var(--line)}
#timeline:after{background:var(--control);transform:scaleY(var(--track-progress));transform-origin:top}
#timeline .timeline-item:before{display:none}
#timeline .timeline-item:after{z-index:1;left:calc(var(--track-x) - 4px);width:8px;height:8px;top:9px;transition:background .35s,box-shadow .35s,border-color .35s}
#timeline .timeline-item.is-active:after{background:var(--control);border-color:var(--control);box-shadow:0 0 0 6px var(--control-wash)}
#timeline .timeline-item.is-complete:after{background:var(--control);border-color:var(--control)}
#timeline .timeline-date{transition:color .4s,transform .5s;transform-origin:right top}
#timeline .is-active .timeline-date{color:var(--control);transform:scale(1.08)}
#timeline .timeline-content h3{transition:color .4s}
#timeline .is-active .timeline-content h3{color:var(--control)}
#timeline .timeline-art{transform:scale(.9);opacity:.66;transform-origin:center;transition:transform .65s cubic-bezier(.2,.65,.3,1),opacity .5s,filter .5s;will-change:transform}
#timeline .is-active .timeline-art{transform:scale(1.24);opacity:1;filter:drop-shadow(0 8px 9px #685c2120)}
#timeline .timeline-content{padding-right:175px}
html[data-palette] .letter{padding-top:225px}
.letter-postage{top:28px;right:32px;width:245px;height:185px}
.letter-postage img{width:140px;height:180px}
.postmark{top:70px;left:0;width:115px;height:82px;font-size:10px}
.postmark:after{left:100px;width:80px}
@media(max-width:800px){#timeline{--track-x:94px}#timeline .timeline-item{grid-template-columns:78px 1fr;gap:35px}#timeline .timeline-content{padding-right:0;padding-top:115px}#timeline .timeline-art{transform-origin:left center}#timeline .is-active .timeline-art{transform:scale(1.15)}#timeline .is-active .timeline-date{transform:scale(1.04)}}
@media(max-width:700px){html[data-palette] .letter{padding-top:195px}.letter-postage{top:22px;right:22px;width:210px;height:160px;transform:none}.letter-postage img{width:115px;height:150px}.postmark{top:55px;width:100px;height:72px;font-size:9px}.postmark:after{left:85px;width:60px}}
@media(prefers-reduced-motion:reduce){#timeline .timeline-art,#timeline .timeline-date,#timeline .timeline-content h3,#timeline .timeline-item:after{transition:none}#timeline .timeline-art,#timeline .is-active .timeline-art,#timeline .is-active .timeline-date{transform:none;opacity:1}}

/* Address and greeting share the top of the sheet with the postage. */
html[data-palette] .letter{padding-top:56px;clip-path:inset(0 0 var(--letter-hidden,100%) 0)}
.letter-heading{text-align:left;min-height:165px;padding-right:205px;display:flex;flex-direction:column;justify-content:center}
.letter-heading h3{font-size:clamp(32px,3.5vw,43px);line-height:1.1;margin:0 0 14px}
.letter-heading p{font-size:21px;margin:0 0 16px}
.letter .preview-note{text-align:left;margin:22px 0 30px}
.envelope-scene{--letter-hidden:100%;clip-path:inset(-320px -70px 0 -70px)}
html[data-palette] .envelope-flap{z-index:var(--flap-layer,2)!important;backface-visibility:visible}
@media(max-width:700px){html[data-palette] .letter{padding-top:30px}.letter-heading{padding-right:125px;min-height:170px;justify-content:center}.letter-heading h3{font-size:29px}.letter-heading p{font-size:17px}.letter-postage{right:16px;width:130px}.postmark{left:-15px;top:115px;transform:rotate(-15deg) scale(.72);transform-origin:left top}.letter-postage img{width:105px;height:140px}}
@media(max-width:380px){.letter-heading h3{font-size:25px}.letter-heading{padding-right:110px}.letter-postage img{width:92px;height:125px}}
@media(prefers-reduced-motion:reduce){html[data-palette] .letter{clip-path:none}.envelope-scene{--letter-hidden:0%}}

/* Two little personalities, floating above the family story. */
.story-heading{margin-bottom:25px}
.family-bubbles{display:flex;justify-content:center;align-items:center;gap:85px;margin:0 auto 65px;padding:15px 20px 5px;max-width:650px;pointer-events:none}
.family-bubble{margin:0;width:135px;text-align:center;animation:family-float 7.5s ease-in-out infinite;filter:drop-shadow(0 5px 6px #55503414)}
.family-bubble img{display:block;width:135px;height:135px;object-fit:contain}
.family-bubble figcaption{font-family:var(--serif);font-style:italic;font-size:33px;font-weight:500;line-height:1.1;letter-spacing:.5px;margin-top:8px;color:var(--ink);transform:rotate(-5deg)}
.nico-bubble{animation:family-float-other 9s ease-in-out infinite;animation-delay:-3s}
.nico-bubble figcaption{transform:rotate(4deg)}
.mystery-portrait{width:135px;height:135px;border-radius:49% 51% 50% 48%;border:1px solid #89906c8c;background:#f2f1e5 url('assets/cotton-paper.png') center/240px;display:grid;place-items:center;box-shadow:inset 0 0 22px #b3bea938,inset 0 0 0 5px #ffffff45}
.mystery-portrait span{font-family:var(--serif);font-style:italic;font-size:87px;line-height:1;color:var(--control);transform:rotate(7deg)}
@keyframes family-float{0%,100%{transform:translate(-7px,3px) rotate(-4deg)}50%{transform:translate(9px,-12px) rotate(3deg)}}
@keyframes family-float-other{0%,100%{transform:translate(8px,-7px) rotate(3deg)}50%{transform:translate(-6px,8px) rotate(-3deg)}}
/* Slightly imperfect cotton-paper mounts, like keepsake photo prints. */
.story .story-chapter > figure{padding:16px 16px 23px;background:#f8f5eb url('assets/cotton-paper.png') center/620px;border:1px solid #ded8c887;box-shadow:0 16px 30px -15px #403b344f,0 2px 4px #403b3414,inset 0 0 0 2px #fffcf48c;transform:rotate(-2.2deg);transform-origin:center}
.story .story-chapter:nth-child(2) > figure{transform:rotate(2.3deg)}
.story .story-chapter:nth-child(3) > figure{transform:rotate(-1.5deg)}
.story .story-chapter > figure img{box-shadow:0 0 0 1px #6a62501c}
.story .story-chapter > figure > figcaption{padding-top:17px;font-size:19px}
@media(max-width:800px){.family-bubbles{gap:55px;margin-bottom:45px}.family-bubble,.family-bubble img,.mystery-portrait{width:105px}.family-bubble img,.mystery-portrait{height:105px}.family-bubble figcaption{font-size:29px}.mystery-portrait span{font-size:70px}.story .story-chapter > figure{margin:0 7px;padding:12px 12px 18px;transform:rotate(-1.3deg)}.story .story-chapter:nth-child(2) > figure{transform:rotate(1.4deg)}.story .story-chapter:nth-child(3) > figure{transform:rotate(-1deg)}}
@media(prefers-reduced-motion:reduce){.family-bubble,.nico-bubble{animation:none}}
