:root{--ink:#143d72;--ink-soft:#476aa0;--blue:#39b7d4;--blue-deep:#087ca8;--rose:#bb75bc;--gold:#e1b953;--cream:#eaf8ff;--paper:#f4fbff;--line:#9b78bc;--journey:0;--px:0px;--py:0px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#063a76;color:var(--ink);font-family:Cormorant Garamond,serif;overflow-x:hidden;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}.portal{height:100svh;min-height:620px;position:relative;display:grid;place-items:center;overflow:hidden;background:#087ca8}.portal-bg,.journey-bg{position:absolute;inset:-5%;background-image:url(/assets/luna-undersea-kingdom.png);background-position:center center;background-size:cover;background-repeat:no-repeat}.portal-bg{filter:saturate(1.05) contrast(1.02);transform:scale(1.04);animation:breath 12s ease-in-out infinite}.portal:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#051d5c1a,#022c5c1f 46%,#03164947)}.hero-copy{position:relative;z-index:3;text-align:center;width:min(90%,440px);padding:34px 22px 32px;border-radius:48% 48% 22px 22px;background:radial-gradient(ellipse,rgba(242,255,255,.88),rgba(220,247,255,.6) 58%,transparent 73%);text-shadow:0 1px #fff;animation:reveal 1.2s ease both}.eyebrow{text-transform:uppercase;letter-spacing:.19em;font-size:.7rem;font-weight:600;color:var(--gold);margin-inline:auto}h1{margin:.12em 0 0;font-family:Parisienne,cursive;color:#7d4ba1;font-size:clamp(4.8rem,22vw,7.3rem);line-height:.74;font-weight:400}h1 span{font:600 1.08rem/1.2 Cormorant Garamond;display:block;color:#164478;letter-spacing:.06em;margin-bottom:12px}.subtitle{font-size:1.38rem;font-style:italic;margin:20px 0 22px;color:#176c96}.key-button,.submit-button{min-height:52px;border:0;color:#fff;background:linear-gradient(135deg,#36b9d3,#2169ad);box-shadow:0 10px 26px #0b3a7b40,inset 0 1px #ffffff80;border-radius:999px;padding:15px 22px;font:600 1.03rem Cormorant Garamond;display:inline-flex;gap:10px;align-items:center;justify-content:center;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.key-button:hover,.submit-button:hover{transform:translateY(-1px);box-shadow:0 13px 30px #533b1f40,inset 0 1px #ffffff80}.key-button:active,.submit-button:active{transform:scale(.985)}.key-icon{font-size:1.15rem}.hint{font-size:.82rem;letter-spacing:.04em;opacity:.78;margin-top:13px}.bubbles{position:absolute;inset:0;z-index:2;overflow:hidden;pointer-events:none}.bubbles i{position:absolute;bottom:-14%;display:block;width:clamp(10px,2.6vw,27px);aspect-ratio:1;border-radius:50%;border:1px solid rgba(230,255,255,.85);background:radial-gradient(circle at 32% 28%,rgba(255,255,255,.95) 0 8%,rgba(255,255,255,.28) 15%,rgba(126,236,255,.1) 52%,transparent 60%);box-shadow:inset -2px -3px 6px #005baa29,0 0 8px #d3ffff73;animation:rise linear infinite}.bubbles i:nth-child(1){left:6%;animation-duration:10s;animation-delay:-2s}.bubbles i:nth-child(2){left:17%;width:16px;animation-duration:14s;animation-delay:-9s}.bubbles i:nth-child(3){left:31%;width:24px;animation-duration:12s;animation-delay:-4s}.bubbles i:nth-child(4){left:44%;width:12px;animation-duration:9s;animation-delay:-7s}.bubbles i:nth-child(5){left:56%;width:30px;animation-duration:15s;animation-delay:-11s}.bubbles i:nth-child(6){left:68%;width:17px;animation-duration:11s;animation-delay:-5s}.bubbles i:nth-child(7){left:78%;width:25px;animation-duration:13s;animation-delay:-1s}.bubbles i:nth-child(8){left:88%;width:13px;animation-duration:9.5s;animation-delay:-6s}.bubbles i:nth-child(9){left:95%;width:21px;animation-duration:14.5s;animation-delay:-12s}.floating{position:absolute;z-index:4;filter:drop-shadow(0 3px 4px #4664);animation:float 6s ease-in-out infinite;color:#fff9;font-family:Georgia,serif}.b1{top:14%;left:9%;font-size:1.45rem}.b2{right:12%;bottom:23%;font-size:1.6rem;animation-delay:-2s}.mist{position:absolute;z-index:2;width:90vw;height:18vh;border-radius:50%;background:#ffffff6b;filter:blur(38px);animation:mist 14s linear infinite}.mist-one{bottom:10%;left:-40%}.mist-two{top:8%;right:-50%;animation-delay:-7s}.sparkles{position:absolute;inset:0;z-index:2;background-image:radial-gradient(circle,#fff 0 1px,transparent 1.8px);background-size:67px 79px;opacity:.55;animation:sparkle 4s steps(2) infinite}.journey{height:300svh;position:relative;background:#065c9d}.journey-scene{height:100svh;position:sticky;top:0;overflow:hidden}.journey-bg{inset:-10%;transform:translate(var(--px),calc((var(--journey) * 18%) + var(--py))) scale(calc(1.31 - var(--journey) * .25));transform-origin:50% 30%;will-change:transform;filter:saturate(1.08) brightness(1.02)}.journey-light{position:absolute;inset:0;background:radial-gradient(circle at 58% 22%,rgba(107,255,242,calc(.18 + var(--journey)*.32)),transparent 30%),linear-gradient(180deg,#03428b14,#01165559);pointer-events:none}.journey-copy{position:absolute;z-index:3;text-align:center;left:50%;width:86%;max-width:430px;transform:translate(-50%,14px);opacity:0;color:#173f79;text-shadow:0 1px 7px #fff,0 1px 2px #fff;background:radial-gradient(ellipse,rgba(231,255,255,.9),transparent 72%);padding:30px 12px;transition:opacity .18s}.journey-copy span{color:var(--gold)}.journey-copy p{font:500 italic clamp(1.65rem,7.5vw,2.55rem)/1.12 "Cormorant Garamond";margin:8px}.copy-one{top:58%;opacity:clamp(0,calc(1 - var(--journey)*5),1)}.copy-two{top:46%;opacity:clamp(0,calc((var(--journey) - .25)*7),calc((.62 - var(--journey))*7))}.copy-three{top:38%;opacity:clamp(0,calc((var(--journey) - .68)*6),1)}.journey-bubbles{z-index:2}.journey-bubbles i:nth-child(10){left:11%;width:19px;animation-duration:16s;animation-delay:-14s}.journey-bubbles i:nth-child(11){left:25%;width:11px;animation-duration:8.5s;animation-delay:-3s}.journey-bubbles i:nth-child(12){left:38%;width:28px;animation-duration:17s;animation-delay:-13s}.journey-bubbles i:nth-child(13){left:50%;width:15px;animation-duration:10.5s;animation-delay:-8s}.journey-bubbles i:nth-child(14){left:64%;width:22px;animation-duration:13.5s;animation-delay:-10s}.journey-bubbles i:nth-child(15){left:83%;width:18px;animation-duration:12.5s;animation-delay:-15s}.scroll-progress{position:absolute;right:12px;top:31%;height:36%;width:1px;background:#fff9;z-index:5}.scroll-progress span{display:block;width:100%;height:0;background:var(--gold);box-shadow:0 0 7px #fff;transition:.1s}.invitation{position:relative;padding:42px 13px 72px;background:#087daa url(/assets/luna-undersea-kingdom.png) center/cover fixed}.invitation:before{content:"";position:absolute;inset:0;background:#032b70ad;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.paper{position:relative;max-width:590px;margin:auto;padding:38px 22px 32px;text-align:center;background:#f6fdfff5;border:1px solid rgba(136,92,175,.72);border-radius:150px 150px 24px 24px;box-shadow:0 22px 54px #03235959,inset 0 0 0 5px #fff9,inset 0 0 0 7px #59c4d842}.ornament{font-size:1.9rem;color:var(--gold)}h2{font:500 1.4rem/1.2 Italiana,serif;color:#9c777d;margin:7px 0 22px;letter-spacing:.02em}h2 span{display:block;font:400 clamp(4.7rem,20vw,5.6rem)/.92 Parisienne,cursive;color:#a57c54;margin-bottom:8px}.invitation-quote{max-width:390px;margin:-8px auto 25px;font:500 italic 1.12rem/1.45 Cormorant Garamond;color:#4e6667}.quote{font-style:italic;font-size:1.16rem;line-height:1.42;max-width:430px;margin:0 auto 30px;color:#526d71}.event-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}.event-item{padding:17px 9px;border:1px solid #72cce5;border-radius:52px 52px 14px 14px;background:linear-gradient(160deg,#effdff,#d9f8ff 54%,#eef4ff);box-shadow:inset 0 1px #fff,0 8px 16px #045d981a}.event-icon{display:block;color:var(--gold);font-size:1.55rem}.event-item small{display:block;text-transform:uppercase;letter-spacing:.13em;color:#a47b82;font-weight:600}.event-item strong{display:block;font-size:1.17rem;margin:5px 0}.event-item p{font-size:.94rem;margin:0;color:#617579}.map-link{display:inline-block;color:#63858d;margin:17px 8px 8px;font-weight:600;text-underline-offset:4px;padding:7px 4px}.divider{display:flex;align-items:center;gap:10px;color:var(--gold);margin:24px 0}.divider:before,.divider:after{content:"";height:1px;background:#d1bb91;flex:1}.rsvp-panel{scroll-margin-top:22px}.rsvp-kicker{font-style:italic;color:#a77d84;margin:0 0 4px;font-size:1rem}.rsvp-intro{max-width:440px;margin:-7px auto 20px;line-height:1.42;color:#667b7e}h3{font:500 1.7rem/1.25 Italiana,serif;margin:6px 0 18px;color:#49686e}form{text-align:left}label,legend{display:block;font-weight:600;margin:14px 0 7px}label span{font-weight:400;font-style:italic}input,select,textarea{appearance:none;width:100%;border:1px solid #d3c4aa;border-radius:13px;background:#fffefb;padding:14px 13px;color:#38545a;font:500 1rem Cormorant Garamond;outline:none;min-height:49px;transition:border-color .2s,box-shadow .2s,background .2s}textarea{resize:vertical;line-height:1.35}input:focus,select:focus,textarea:focus{border-color:#9cb7bd;box-shadow:0 0 0 3px #8faeb829;background:#fff}fieldset{border:0;padding:0;margin:10px 0}.choice{margin:8px 0}.choice input{position:absolute;opacity:0;width:1px;height:1px}.choice span{display:block;border:1px solid #d3c4aa;border-radius:13px;padding:13px;background:#fffefb;font-style:normal;transition:.2s;min-height:49px}.choice input:checked+span{border-color:#91adb4;background:#f0f7f7;box-shadow:0 0 0 2px #8faeb826}.choice input:focus-visible+span{outline:2px solid #6f909a;outline-offset:2px}.choice b{float:right;color:#b77d88}.submit-button{width:100%;margin-top:16px;background:linear-gradient(135deg,#86a7af,#6d9098);box-shadow:0 10px 24px #455f6433;font-size:1.08rem}.deadline{font-style:italic;font-size:.94rem;line-height:1.35;margin:21px auto 0;max-width:390px;color:#6d7f81}.bottom-ornament{color:var(--gold);font-size:1.12rem;margin-top:26px}.success{padding:18px 5px 8px}.success-icon{margin:auto;width:62px;height:62px;display:grid;place-items:center;border-radius:50%;background:#eef6f5;color:#779ca4;font-size:1.75rem;animation:pop .45s}.success p{font-size:1.08rem;line-height:1.4}.success button{border:0;background:none;color:#5c7b82;text-decoration:underline;text-underline-offset:3px;font:600 1rem Cormorant Garamond;cursor:pointer;padding:10px}.gift-divider{margin-top:28px}.gift-note{padding:0 7px 8px}.gift-note>p:not(.rsvp-kicker){max-width:430px;margin:0 auto;line-height:1.45;color:#66797d}.gift-note h3{margin-bottom:12px}.gift-illustration{display:block;width:100%;aspect-ratio:3/2;object-fit:cover;margin:22px auto 18px;border:1px solid #d6c5a8;border-radius:76px 76px 18px 18px;box-shadow:0 12px 28px #45534f24}.gift-sizes{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 auto 20px}.gift-sizes a{padding:14px 7px 12px;background:linear-gradient(155deg,#effdff,#d6f7ff);border:1px solid #77cfe6;border-radius:38px 38px 12px 12px;box-shadow:inset 0 1px #fff,0 7px 14px #03619f17;text-decoration:none;transition:transform .2s,box-shadow .2s}.gift-sizes a:hover{transform:translateY(-2px);box-shadow:inset 0 1px #fff,0 10px 18px #03619f29}.gift-sizes span{display:block;color:#9b65bc;font-size:1.25rem;margin-bottom:4px}.gift-sizes strong{display:block;color:#1b5684;font-size:1.02rem}.gift-sizes p{margin:3px 0 0;font-size:.88rem;line-height:1.2;color:#477897}.favorites{padding:19px 13px 15px;background:linear-gradient(145deg,#e8fbff,#dbf3ff 54%,#f6edff);border:1px solid #70c9e3;border-radius:20px;text-align:left;box-shadow:inset 0 1px #fff,0 10px 22px #034f8f21}.favorites-title{text-align:center;margin:0 0 4px!important;font:500 1.35rem Italiana,serif;color:#71439d!important}.favorites-hint{text-align:center!important;margin:0 auto 14px!important;font-size:.9rem!important;color:#36769b!important}.favorites-gallery{display:grid;grid-template-columns:1fr 1fr;gap:10px}.favorite-card{overflow:hidden;min-height:158px;position:relative;display:flex;align-items:flex-end;border-radius:15px;border:1px solid rgba(77,155,194,.52);background:#e9fbff;color:#fff;text-decoration:none;box-shadow:0 7px 14px #03539024;transition:transform .2s,box-shadow .2s}.favorite-card:hover{transform:translateY(-2px);box-shadow:0 11px 18px #03539033}.favorite-card:focus-visible{outline:3px solid #8351af;outline-offset:2px}.favorite-card img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:6px;background:radial-gradient(circle,#fff 0,#d9f8ff 75%)}.favorite-card.kitty img,.favorite-card.paw img{object-fit:cover}.favorite-card span{position:relative;z-index:1;width:100%;padding:9px 10px 8px;background:linear-gradient(90deg,#103f7beb,#714199d4);font-weight:700;text-align:center;text-shadow:0 1px 2px #1138}.favorite-card small{display:block;font-size:.75rem;font-weight:500}.favorite-toys{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:10px}.favorite-toys a{display:flex;align-items:center;justify-content:center;gap:6px;min-height:46px;border:1px solid #75c9df;border-radius:13px;background:#f6feff;color:#245d8a;text-align:center;text-decoration:none;font-weight:700}.favorite-toys a:hover{background:#fff}.favorite-toys b{font-size:1.1rem}.closing-quote{max-width:390px;margin:24px auto 0;font-style:italic;line-height:1.4;color:#586e6e}.site-credit{margin-top:18px;font-size:.88rem}.site-credit a{color:#39789c;text-decoration:none}.site-credit a:hover{text-decoration:underline}.sound-button{position:fixed;z-index:20;top:max(14px,env(safe-area-inset-top));right:14px;width:44px;height:44px;border:1px solid #fff9;border-radius:50%;color:#6f6553;background:#fffffff0;box-shadow:0 5px 18px #3c4b4b20;font-size:1.05rem;cursor:pointer}.sound-button[aria-pressed=true] .sound-off,.sound-button:not([aria-pressed=true]) .sound-on{display:none}.sound-toast{position:fixed;z-index:30;top:70px;left:50%;transform:translate(-50%,-8px);padding:8px 15px;border-radius:50px;background:#fff;color:#6d604b;box-shadow:0 8px 24px #3343;opacity:0;transition:.3s;white-space:nowrap}.sound-toast.show{opacity:1;transform:translate(-50%)}[hidden]{display:none!important}@keyframes reveal{0%{opacity:0;transform:translateY(18px)}to{opacity:1}}@keyframes float{50%{transform:translateY(-10px) rotate(5deg)}}@keyframes breath{50%{transform:scale(1.075)}}@keyframes mist{to{transform:translate(150vw)}}@keyframes sparkle{50%{opacity:.28}}@keyframes rise{to{transform:translate3d(12px,-128svh,0) scale(1.15);opacity:0}}@keyframes pop{50%{transform:scale(1.1)}}@media(min-width:700px){body{background:#314d50}.portal,.journey,.invitation{max-width:680px;margin:auto}.portal,.journey-scene{box-shadow:0 0 70px #1c3133}.paper{padding:48px 52px}.invitation{padding-inline:40px}}@media(max-width:480px){.portal{min-height:580px}.hero-copy{padding-inline:18px}.journey{height:260svh}.paper{padding:34px 18px 30px}.event-grid{gap:9px}.event-item{padding:15px 7px}.event-item strong{font-size:1.08rem}.invitation{background-attachment:scroll}.key-button{max-width:92%;font-size:1rem}.rsvp-intro{font-size:.98rem}.gift-sizes{grid-template-columns:1fr}.gift-sizes div{display:grid;grid-template-columns:34px 1fr;align-items:center;text-align:left;border-radius:12px;padding:10px 12px}.gift-sizes span{grid-row:1/3;margin:0}.gift-sizes p{margin-top:1px}.gift-illustration{border-radius:52px 52px 14px 14px}}@media(max-width:360px){.event-grid{grid-template-columns:1fr}.paper{padding-inline:15px;border-radius:120px 120px 22px 22px}h2 span{font-size:4.4rem}}@media(prefers-reduced-motion:reduce){*{animation:none!important;scroll-behavior:auto!important}.journey{height:115svh}.journey-bg{transform:scale(1.06)}.journey-copy,.scroll-progress{display:none}}.favorite-card.kitty img,.favorite-card.paw img,.favorite-card.baby img{object-fit:contain}.admin-page{min-height:100svh;background:linear-gradient(#022464a8,#012b69c7),url(/assets/luna-undersea-kingdom.png) center/cover fixed}.admin-shell{width:min(92%,780px);margin:auto;padding:clamp(32px,8vw,76px) 0}.admin-login,.guest-dashboard{padding:clamp(26px,6vw,48px);border:1px solid rgba(170,235,255,.78);border-radius:42px 42px 20px 20px;background:#f4fdfff0;box-shadow:0 24px 60px #00154e61,inset 0 0 0 5px #ffffff80;color:#17406f}.admin-login{text-align:center}.admin-login h1,.dashboard-header h1{font-size:clamp(4.2rem,16vw,6.4rem);margin:.12em 0 .3em}.admin-login>p:not(.eyebrow){font-size:1.15rem;color:#416b89}.admin-form{max-width:430px;margin:26px auto 0;text-align:left}.admin-form label{color:#315b7b}.form-feedback{min-height:1.4em;text-align:center;color:#8d3e8c}.dashboard-header{display:flex;gap:18px;align-items:flex-start;justify-content:space-between}.dashboard-header h1{font-size:clamp(3.4rem,13vw,5.4rem)}.logout-button{border:1px solid #71bcd5;border-radius:999px;background:#eefcff;color:#1f628a;padding:10px 14px;font-weight:600;cursor:pointer}.guest-totals{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:22px 0}.guest-totals article{padding:16px 8px;border:1px solid #79c9e3;border-radius:20px;background:linear-gradient(145deg,#effdff,#d7f5ff);text-align:center}.guest-totals strong{display:block;font:500 clamp(2rem,8vw,3rem)/1 Italiana,serif;color:#75469b}.guest-totals span{display:block;margin-top:5px;font-size:.86rem;color:#336d92}.guest-list-wrap{padding:18px;border:1px solid #7bc6dd;border-radius:20px;background:#ecfbffbd}.dashboard-note{margin:0 0 12px;color:#407897;font-style:italic}.guest-list{display:grid;gap:10px}.guest-entry{padding:15px 16px;border-radius:15px;border:1px solid #abd9e8;background:#fff}.guest-entry h2{margin:0;color:#244f79;font:600 1.45rem/1.1 Italiana,serif}.guest-status{margin:6px 0 3px;font-weight:600}.guest-entry.confirmed .guest-status{color:#15786c}.guest-entry.declined .guest-status{color:#a75675}.guest-entry time{font-size:.83rem;color:#698194}.guest-message{margin:10px 0 0;color:#4f6680;font-style:italic;line-height:1.35}.guest-empty{text-align:center;padding:20px;color:#55768e}.submit-button:disabled{cursor:wait;opacity:.72}@media(max-width:420px){.dashboard-header{display:block}.logout-button{margin-top:8px}.guest-totals{grid-template-columns:1fr}.guest-totals article{display:flex;gap:9px;align-items:baseline;justify-content:center}.guest-totals span{margin:0}}
