:root{font-family:'DM Sans',sans-serif;color:#fff;background:#0b86ae;scroll-behavior:smooth}*{box-sizing:border-box}html,body{margin:0;overflow-x:hidden}body{background:radial-gradient(ellipse at 50% 10%,#a5ebef,#13a6c6 52%,#075481 100%)}button,a{-webkit-tap-highlight-color:transparent}.invitation{width:min(100%,620px);margin:auto;overflow:hidden;box-shadow:0 0 80px #03547988;isolation:isolate}.scene{position:relative;min-height:100svh;display:grid;place-items:center;overflow:hidden;isolation:isolate;background:#0698ba}.scene-art{position:absolute;z-index:-3;inset:-34px 0;background-size:cover;background-position:center;transform:translate3d(0,var(--drift,0px),0) scale(1.06);will-change:transform}.scene-art img{width:100%;height:100%;object-fit:cover;object-position:center 44%;display:block}.hero{min-height:104svh}.hero::before{content:'';position:absolute;z-index:-1;inset:0;background:linear-gradient(to bottom,#0a65914d 0%,transparent 19%,transparent 47%,#064e6a7d 78%,#04465ace 100%);pointer-events:none}.hero::after,.date-scene::after{content:'';position:absolute;z-index:5;bottom:-1px;left:0;right:0;height:clamp(50px,9svh,105px);background:linear-gradient(transparent,#0aa1c1b8 75%,#0aa1c1);pointer-events:none}.date-scene{min-height:108svh;margin-top:-2px;background:#0aa1c1}.date-scene .scene-art{background-image:url('assets/lagoa.webp');background-position:center 49%}.date-scene::after{background:linear-gradient(transparent,#0b9bc0a9 75%,#0b9bc0)}.venue-scene{min-height:112svh;margin-top:-2px;background:#0b9bc0}.venue-scene .scene-art{background-image:url('assets/corais.webp');background-position:center 50%}.venue-scene::after{content:'';position:absolute;z-index:2;bottom:0;left:0;right:0;height:25%;background:linear-gradient(transparent,#075f838a);pointer-events:none}.surface-shine,.water-light{position:absolute;z-index:0;inset:0;pointer-events:none;background:repeating-linear-gradient(110deg,transparent 0 67px,#ffffff44 105px,transparent 141px);mix-blend-mode:soft-light;opacity:.34;animation:shimmer 14s ease-in-out infinite alternate}.hero-top{position:absolute;top:max(28px,env(safe-area-inset-top));left:0;right:0;z-index:3;text-align:center;color:white;font-size:.82rem;font-weight:800;letter-spacing:.25em;text-transform:uppercase;text-shadow:0 2px 9px #044e6a}.hero-top span{margin-left:6px;color:#ffe09b}.hero-copy{position:absolute;z-index:4;bottom:clamp(85px,12svh,140px);left:0;right:0;padding:0 24px;text-align:center}.age-tag{display:inline-block;padding:8px 17px;border:1px solid #fff9;border-radius:100px;background:#f4b656e8;box-shadow:0 4px 20px #08395d60;color:#173f61;font-size:.88rem;line-height:1;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.hero h1{margin:9px 0 8px;font-family:'Pacifico',cursive;font-size:clamp(3.6rem,15vw,6.2rem);font-weight:400;line-height:1.04;letter-spacing:-.04em;color:#fff9e7;text-shadow:0 4px 0 #056a8c,0 10px 26px #023d5cb8}.hero h1 span{display:block;font-size:.69em;margin-top:5px;color:#ffe093;letter-spacing:0}.hero-subtitle{max-width:340px;margin:12px auto 0;color:#fff;font-size:clamp(1.05rem,4.4vw,1.3rem);line-height:1.32;font-weight:800;text-shadow:0 3px 9px #044462}.dive-link{position:absolute;z-index:7;bottom:3svh;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:9px;color:#fff;text-decoration:none;white-space:nowrap;font-size:.83rem;font-weight:800;text-shadow:0 2px 5px #04435d;animation:bob 2.5s ease-in-out infinite}.dive-link span{font-size:1.75rem;line-height:.5}.scene-content{position:relative;z-index:4;width:100%;padding-left:23px;padding-right:23px;text-align:center}.date-content{padding-top:clamp(205px,35svh,325px);padding-bottom:12svh}.section-kicker{margin:0 0 15px;color:#ffe7a8;font-size:.84rem;font-weight:800;letter-spacing:.17em;text-transform:uppercase;text-shadow:0 2px 8px #0b5a78}.date-content h2{font-family:'Pacifico',cursive;font-weight:400;font-size:clamp(2.9rem,11vw,4.5rem);line-height:1.2;margin:0 0 18px;color:#fffaf0;text-shadow:0 4px 3px #036a8f,0 8px 19px #064d71}.date-day{margin:0;font-size:clamp(7.8rem,34vw,12rem);line-height:.82;font-weight:800;letter-spacing:-.1em;color:#ffe5a1;text-shadow:0 7px 0 #0b7494,0 12px 25px #0746658c}.date-month{margin:14px 0 0;color:#fff;font-size:clamp(1.55rem,7vw,2.5rem);line-height:1.1;font-weight:800;letter-spacing:-.04em;text-shadow:0 3px 8px #085979}.sun-divider{display:flex;align-items:center;gap:13px;width:min(70%,260px);margin:22px auto 10px;color:#ffe094;font-size:1.1rem}.sun-divider::before,.sun-divider::after{content:'';height:1px;flex:1;background:#ffffffb0}.date-hour{margin:0;color:white;font-size:clamp(1.4rem,6vw,2.2rem);font-weight:500;text-shadow:0 3px 8px #075d7e}.date-hour strong{font-weight:800;color:#ffe094}.venue-content{padding-top:clamp(235px,39svh,360px);padding-bottom:17svh}.venue-content h2{font-family:'Pacifico',cursive;font-size:clamp(3rem,11.8vw,5rem);font-weight:400;line-height:1.17;margin:0 auto 26px;color:#fff9eb;text-shadow:0 4px 3px #075475,0 11px 19px #073e6c9c}.venue-address{margin:0 auto;color:#fff;font-size:clamp(1.08rem,4.5vw,1.35rem);line-height:1.48;font-weight:800;text-shadow:0 3px 8px #075d79}.venue-landmark{margin:16px auto 0;max-width:320px;color:#ffe29a;font-size:clamp(.95rem,4vw,1.15rem);line-height:1.36;font-weight:800;text-shadow:0 3px 7px #075d79}.confirm{display:inline-flex;align-items:center;gap:10px;margin:34px auto 0;padding:17px 25px;min-height:58px;border:2px solid #fff3c7;border-radius:100px;background:linear-gradient(145deg,#ffe7a3,#ffc15f 65%,#f6a648);box-shadow:inset 0 2px 3px #fff9,0 7px 0 #bd7935,0 18px 30px #063f5b85;color:#164663;font:800 1rem 'DM Sans',sans-serif;cursor:pointer;transition:transform .2s,box-shadow .2s}.confirm:hover,.confirm:focus-visible{transform:translateY(-3px);box-shadow:inset 0 2px 3px #fff9,0 10px 0 #bd7935,0 22px 30px #063f5b85}.confirm:active{transform:translateY(5px);box-shadow:inset 0 2px 3px #fff9,0 2px 0 #bd7935}.confirm span{font-size:1.35rem;line-height:.5}.farewell{margin:27px 0 0;font-family:'Pacifico',cursive;color:#fff6db;font-size:1.35rem;text-shadow:0 3px 7px #075d79}.bubble-layer{position:absolute;z-index:2;inset:0;pointer-events:none;overflow:hidden}.bubble{position:absolute;top:var(--y);left:var(--x);width:var(--s);height:var(--s);border:1.3px solid #e6ffffc9;border-radius:50%;background:radial-gradient(circle at 30% 23%,#fff 0 9%,transparent 13%),linear-gradient(140deg,#ffffff9c,transparent 56%,#37c6e05e);box-shadow:inset -2px -3px 5px #20779f70,0 0 7px #fff9;opacity:.69;animation:rise var(--t) ease-in-out infinite alternate;animation-delay:var(--delay)}.swimmer{position:absolute;z-index:3;width:var(--w);aspect-ratio:1;pointer-events:none;transform:translateY(var(--move,0px))}.swimmer .sprite{width:100%;height:100%;background:url('assets/vida-marinha.webp') no-repeat;background-size:200% 200%;filter:drop-shadow(0 7px 8px #06456259);animation:swim var(--tempo,6s) ease-in-out infinite alternate}.fish-yellow .sprite{background-position:0 0}.fish-pink .sprite{background-position:0 100%}.jelly .sprite{background-position:100% 100%}.date-scene .fish-yellow{--w:105px;--tempo:7s;right:-39px;top:55%}.venue-scene .fish-pink{--w:99px;--tempo:6.4s;left:-32px;top:57%}.venue-scene .jelly{--w:92px;--tempo:5.6s;right:-35px;bottom:10%;opacity:.85}.reveal{opacity:0;translate:0 28px;transition:opacity .9s ease,translate .9s cubic-bezier(.18,.85,.25,1)}.reveal.shown{opacity:1;translate:0 0}.reveal.delay{transition-delay:.15s}.reveal.later{transition-delay:.3s}dialog{width:min(calc(100% - 32px),420px);border:1px solid #bcf5f7;border-radius:26px;padding:30px 24px 24px;background:#f8fdf7;color:#1d5775;text-align:center;box-shadow:0 24px 80px #022d4f96}dialog::backdrop{background:#063d65b0;backdrop-filter:blur(5px)}dialog h2{margin:0 0 10px;color:#0b7197;font-size:1.5rem}dialog p{font-size:1rem;line-height:1.55;margin:0 0 22px}dialog a{display:block;padding:15px 17px;border-radius:100px;background:#ffc966;color:#164663;font-weight:800;text-decoration:none}dialog button{margin-top:15px;padding:8px;border:0;background:transparent;color:#456785;font:700 1rem 'DM Sans',sans-serif;cursor:pointer}@keyframes rise{from{transform:translate3d(-5px,28px,0)}to{transform:translate3d(11px,-57px,0)}}@keyframes swim{from{transform:translate3d(-12px,-9px,0) rotate(-5deg)}to{transform:translate3d(16px,10px,0) rotate(4deg)}}@keyframes shimmer{from{transform:translateX(-38px)}to{transform:translateX(40px)}}@keyframes bob{50%{translate:0 8px}}@media(max-width:390px){.hero h1{font-size:3.4rem}.date-content{padding-top:34svh}.venue-content{padding-top:38svh}.venue-content h2{font-size:2.9rem}}@media(min-width:621px){.invitation{border-left:1px solid #ffffff80;border-right:1px solid #ffffff80}}@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}*,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}.reveal{opacity:1;translate:none}}
/* Motion remains on small foreground layers, keeping native scrolling responsive. */
:root{scroll-behavior:auto}html,body{overflow-x:clip}.invitation,.scene{overflow:clip}.scene-art{inset:0;transform:none;will-change:auto;opacity:.96;transition:opacity .7s ease}.scene.in-view .scene-art{opacity:1}.surface-shine,.water-light{background:linear-gradient(115deg,transparent 22%,#ffffff23 41%,transparent 58%,#ffffff1a 73%,transparent 87%);mix-blend-mode:screen;opacity:.14;animation:light-breathe 6s ease-in-out infinite alternate}.bubble{box-shadow:none;border:1.4px solid #edffffd9;opacity:.82;animation:bubble-flow var(--t) linear infinite;will-change:transform,opacity}.swimmer{transform:none}.swimmer .sprite{filter:none;animation:fish-glide var(--tempo,8s) ease-in-out infinite alternate;will-change:transform}.date-scene .fish-yellow{right:-28px;top:56%;--tempo:10s}.venue-scene .fish-pink{left:-32px;top:57%;--tempo:11s}.venue-scene .jelly .sprite{animation:jelly-drift 7s ease-in-out infinite alternate}.reveal{translate:none;transform:translateY(24px);transition:opacity .62s ease,transform .62s cubic-bezier(.2,.8,.2,1)}.reveal.shown{transform:none}.scene:not(.in-view) .bubble,.scene:not(.in-view) .swimmer .sprite,.scene:not(.in-view) .water-light,.scene:not(.in-view) .surface-shine{animation-play-state:paused}
@keyframes bubble-flow{0%{transform:translate3d(0,30px,0);opacity:0}12%{opacity:.8}82%{opacity:.8}100%{transform:translate3d(12px,-160px,0);opacity:0}}
@keyframes fish-glide{from{transform:translate3d(10px,-8px,0) rotate(-4deg)}to{transform:translate3d(-84px,10px,0) rotate(4deg)}}
@keyframes jelly-drift{from{transform:translate3d(0,14px,0) rotate(-5deg)}to{transform:translate3d(-28px,-45px,0) rotate(4deg)}}
@keyframes light-breathe{from{opacity:.08}to{opacity:.24}}
@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none}.scene-art{opacity:1}.bubble{opacity:.55}}
/* A short scene entrance gives a camera-like zoom without tying animation to scroll frames. */
.scene-art{transform:scale(1.075);opacity:.78;transition:transform 1.15s cubic-bezier(.18,.7,.2,1),opacity .9s ease}.scene.in-view .scene-art{transform:scale(1);opacity:1}
.date-scene::before,.venue-scene::before,.swim-finale::before{content:'';position:absolute;z-index:1;inset:0;pointer-events:none;background:linear-gradient(180deg,#c3faffad,#52d0e999 42%,#0aa1c14d);opacity:.62;transition:opacity .9s ease}.date-scene.in-view::before,.venue-scene.in-view::before,.swim-finale.in-view::before{opacity:0}
.swim-finale{min-height:82svh;margin-top:-2px;background:#078bb4}.swim-finale .scene-art{background-image:url('assets/corais.webp');background-position:center 82%}.swim-finale::after{content:'';position:absolute;z-index:2;inset:0;pointer-events:none;background:linear-gradient(180deg,#0a9dc130,transparent 42%,#024d749c 100%)}.swim-pair{position:absolute;z-index:4;width:min(100%,650px);left:50%;bottom:8svh;opacity:0;transform:translate3d(-46%,36px,0) scale(.88);transition:transform 1.2s cubic-bezier(.17,.75,.15,1),opacity .8s ease;pointer-events:none}.swim-finale.in-view .swim-pair{opacity:1;transform:translate3d(-50%,0,0) scale(1)}.swim-pair img{display:block;width:100%;height:auto;animation:swim-bob 4.5s ease-in-out infinite alternate}.swim-finale:not(.in-view) .swim-pair img{animation-play-state:paused}
@keyframes swim-bob{from{transform:translate3d(-6px,6px,0) rotate(-1.5deg)}to{transform:translate3d(8px,-10px,0) rotate(1.5deg)}}
@media(prefers-reduced-motion:reduce){.scene-art,.scene.in-view .scene-art{transform:none;opacity:1}.date-scene::before,.venue-scene::before,.swim-finale::before{opacity:0}.swim-pair,.swim-finale.in-view .swim-pair{opacity:1;transform:translate3d(-50%,0,0)}}
/* Storybook text reveals and clearer type over the moving water. */
.reveal{opacity:0;transform:translate3d(0,24px,0) scale(.94);transition:none}.reveal.shown{animation:word-float .72s cubic-bezier(.2,.82,.25,1) both}.reveal.delay.shown{animation-delay:.13s}.reveal.later.shown{animation-delay:.26s}.reveal.later-more.shown{animation-delay:.42s}.reveal.last.shown{animation-delay:.56s}
.hero h1.reveal.shown,.date-content h2.reveal.shown,.venue-content h2.reveal.shown{animation:storybook-pop .9s cubic-bezier(.2,.75,.2,1) both}.date-day.reveal.shown{animation:number-pop .9s cubic-bezier(.16,.8,.24,1) both}.confirm.reveal.shown{animation:word-float .8s cubic-bezier(.2,.82,.25,1) both}
@keyframes word-float{0%{opacity:0;transform:translate3d(0,27px,0) scale(.93)}70%{opacity:1;transform:translate3d(0,-4px,0) scale(1.025)}100%{opacity:1;transform:none}}
@keyframes storybook-pop{0%{opacity:0;transform:translate3d(0,34px,0) scale(.72) rotate(-4deg)}58%{opacity:1;transform:translate3d(0,-7px,0) scale(1.07) rotate(1.5deg)}78%{transform:translate3d(0,2px,0) scale(.985) rotate(-.5deg)}100%{opacity:1;transform:none}}
@keyframes number-pop{0%{opacity:0;transform:translate3d(0,44px,0) scale(.5) rotate(-7deg)}60%{opacity:1;transform:translate3d(0,-10px,0) scale(1.1) rotate(2deg)}80%{transform:translate3d(0,3px,0) scale(.97)}100%{opacity:1;transform:none}}
.date-scene .section-kicker{color:#073d5b;text-shadow:0 1px 8px #c9fbff,0 0 2px #e6ffff}.date-content h2{color:#fffdf1;-webkit-text-stroke:.6px #07547a;text-shadow:0 4px 0 #064f71,0 9px 20px #013a5faa}.date-day{color:#ffe19a;-webkit-text-stroke:1.3px #07506d;text-shadow:0 6px 0 #086787,0 11px 22px #044263b5}.date-month,.date-hour{color:#063e60;text-shadow:0 1px 2px #e1ffff,0 0 14px #d7faff}.date-hour strong{color:#07517a;text-shadow:0 1px 2px #f6ffff,0 0 14px #e0ffff}.date-month{display:inline-block;padding:4px 18px;background:radial-gradient(ellipse,#e5ffffa6,transparent 75%)}
.venue-scene .section-kicker{color:#ffe6a2;text-shadow:0 2px 6px #014366,0 0 2px #013b60}.venue-content h2{color:#fff7df;-webkit-text-stroke:.7px #064a6a;text-shadow:0 4px 0 #064b6c,0 10px 22px #013855c7}.venue-address{width:fit-content;max-width:100%;padding:3px 15px;color:#073d5e;background:radial-gradient(ellipse,#e3fcfbd1,transparent 78%);text-shadow:0 1px 2px #edffff,0 0 12px #d7ffff}.venue-address span{display:block}.venue-landmark{display:table;padding:5px 15px;color:#073d5e;background:radial-gradient(ellipse,#e3fcfbd9,transparent 78%);text-shadow:0 1px 2px #edffff,0 0 12px #d7ffff}.farewell{color:#fff9df;text-shadow:0 3px 8px #06415f,0 0 2px #06415f}
@media(prefers-reduced-motion:reduce){.reveal,.reveal.shown,.hero h1.reveal.shown,.date-content h2.reveal.shown,.venue-content h2.reveal.shown,.date-day.reveal.shown,.confirm.reveal.shown{animation:none;opacity:1;transform:none}}
.hero h1.reveal.delay.shown,.date-content h2.reveal.delay.shown,.venue-content h2.reveal.delay.shown{animation-delay:.14s}.confirm.reveal.last.shown{animation-delay:.56s}
/* Direct RSVP and the final swim together. */
.confirm{text-decoration:none}.swim-finale{min-height:90svh}.swim-pair{width:min(92%,560px);bottom:6svh}.finale-copy{position:absolute;z-index:5;top:clamp(60px,10svh,110px);left:50%;transform:translateX(-50%);width:min(100%,520px);padding:12px 20px 26px;text-align:center;background:radial-gradient(ellipse,#04587891 0%,#04587854 42%,transparent 75%);pointer-events:none}.finale-copy h2{margin:0;color:#ffe3a6;font:400 clamp(2.25rem,9vw,4.2rem)/1.2 'Pacifico',cursive;-webkit-text-stroke:.5px #084763;text-shadow:0 3px 2px #073b5c,0 9px 20px #043958}.finale-copy p{max-width:360px;margin:14px auto 0;color:#fff;font-size:clamp(1.02rem,4.4vw,1.28rem);line-height:1.35;font-weight:800;text-shadow:0 3px 7px #053f5f,0 0 2px #053f5f}.finale-copy h2.reveal.shown{animation:storybook-pop .9s cubic-bezier(.2,.75,.2,1) both}
@media(prefers-reduced-motion:reduce){.finale-copy h2.reveal.shown{animation:none;opacity:1;transform:none}}
