*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}:root{--color-pink: #f9c8d4;--color-lavender: #c9b8e8;--color-mint: #b8e8d8;--color-peach: #f8d8b8;--color-sky: #b8d8f8;--color-white: #fdfcfb;--color-text: #2e2a28;--color-muted: #8a7f7a;--glass-bg: rgba(255, 255, 255, .72);--color-paper: #fcf9f4;--color-plum: #4a3a48;--color-rose: #9a5c74;--color-ivory: #fdfaf4;--hairline: rgba(46, 42, 40, .14);--shadow-paper: 0 1px 2px rgba(46, 42, 40, .04), 0 10px 30px rgba(46, 42, 40, .05);--font-serif: "Cormorant Garamond", "Trirong", Georgia, serif;--font-sans: "DM Sans", "IBM Plex Sans Thai Looped", system-ui, sans-serif;--radius-sm: 8px;--radius-md: 16px;--radius-lg: 24px;--shadow-soft: 0 4px 28px rgba(0, 0, 0, .055);--shadow-card: 0 8px 48px rgba(0, 0, 0, .06);--border-glass: 1.5px solid rgba(255, 255, 255, .88);--transition-ease: cubic-bezier(.23, 1, .32, 1);--transition-fast: .22s ease;--transition-med: .45s var(--transition-ease);--transition-slow: .85s var(--transition-ease)}html,body{height:100%;overflow:hidden;-webkit-text-size-adjust:100%}body{font-family:var(--font-sans);color:var(--color-text);background:var(--color-white);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.snap-wrap{height:100%;overflow-y:scroll;overflow-x:hidden;scroll-snap-type:y mandatory;scrollbar-width:none}.snap-wrap::-webkit-scrollbar{display:none}img,svg{display:block;max-width:100%}button{cursor:pointer;font-family:var(--font-sans);touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}a{color:inherit;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}img,svg,canvas{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-user-drag:none}.bg-gradient{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2;background:radial-gradient(ellipse 70% 45% at 0% 0%,rgba(249,200,212,.22),transparent 70%),radial-gradient(ellipse 60% 40% at 100% 100%,rgba(201,184,232,.18),transparent 70%),var(--color-paper)}.bg-gradient:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.18 0 0 0 0 0.16 0 0 0 0 0.16 0 0 0 0.08 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");background-size:180px 180px;opacity:.55;mix-blend-mode:multiply;pointer-events:none}#hero,#countdown,#details,#rsvp,#guestbook,#gallery,#finale,footer{scroll-snap-align:start;scroll-snap-stop:always;min-height:100svh;display:flex;flex-direction:column;justify-content:center}footer{min-height:auto;scroll-snap-align:end}.section-inner{width:100%;max-width:760px;margin:0 auto;padding:80px 24px}.section-label{font-family:var(--font-sans);font-size:13px;font-weight:400;letter-spacing:0;color:var(--color-rose);margin-bottom:16px;display:block}.section-label:lang(en){font-size:11px;letter-spacing:.22em;text-transform:uppercase}hr.divider{border:none;height:1px;background:var(--hairline);max-width:320px;margin:0 auto 48px;opacity:.65}.glass-card{background:var(--glass-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius-md);border:var(--border-glass);box-shadow:var(--shadow-soft);position:relative;overflow:hidden}.glass-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.18 0 0 0 0 0.16 0 0 0 0 0.16 0 0 0 0.08 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");background-size:180px 180px;opacity:.15;mix-blend-mode:multiply;pointer-events:none;z-index:-1}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.text-center{text-align:center}.touch-target{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}.heading-serif{font-family:var(--font-serif);font-weight:400;font-style:italic;color:var(--color-text);line-height:1.15}.heading-xl{font-size:clamp(52px,12vw,96px);font-weight:300;line-height:.95;letter-spacing:-.01em}.heading-lg{font-size:clamp(30px,5.5vw,44px)}.heading-md{font-size:clamp(22px,4vw,32px)}.body-lg{font-family:var(--font-sans);font-size:clamp(15px,2vw,17px);line-height:1.7;color:var(--color-text)}.body-sm{font-family:var(--font-sans);font-size:13px;line-height:1.65;color:var(--color-muted)}.label-text{font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:var(--color-muted)}.ampersand{font-style:italic;color:var(--color-rose)}.reveal{opacity:0;transform:translateY(36px);transition:opacity .85s var(--transition-ease),transform .85s var(--transition-ease)}.reveal.visible{opacity:1;transform:translateY(0)}.reveal-delay-1{transition-delay:.1s}.reveal-delay-2{transition-delay:.22s}.reveal-delay-3{transition-delay:.36s}.reveal-delay-4{transition-delay:.5s}.reveal-delay-5{transition-delay:.64s}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-24px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scrollPulse{0%,to{opacity:.35;transform:scaleY(1)}50%{opacity:1;transform:scaleY(1.18)}}@keyframes heartPop{0%{transform:scale(0) rotate(-15deg);opacity:0}60%{transform:scale(1.25) rotate(5deg)}to{transform:scale(1) rotate(0);opacity:1}}@keyframes musicPulse{0%,to{transform:scale(1);box-shadow:0 4px 20px #c9b8e859}50%{transform:scale(1.06);box-shadow:0 6px 28px #c9b8e88c}}.petal-rain-particle{position:fixed;top:-24px;z-index:0;pointer-events:none;opacity:0;animation:petalFall 22s linear infinite}.petal-rain-particle svg{width:100%;height:100%;animation:petalFlutter 2.6s ease-in-out infinite alternate}@keyframes petalFlutter{0%{transform:rotateY(0) rotate(-8deg)}to{transform:rotateY(65deg) rotate(10deg)}}@keyframes petalFall{0%{transform:translateY(-20px) translate(0) rotate(0);opacity:0}10%{opacity:var(--petal-max-opacity, .35)}25%{transform:translateY(25vh) translate(22px) rotate(40deg)}50%{transform:translateY(50vh) translate(-10px) rotate(95deg)}75%{transform:translateY(75vh) translate(26px) rotate(150deg)}90%{opacity:var(--petal-max-opacity, .35)}to{transform:translateY(110vh) translate(4px) rotate(200deg);opacity:0}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none;transition:none}.bg-gradient{animation:none}.petal-rain-particle{display:none!important}}.section-title-block{text-align:center;margin-bottom:48px}.section-title-block .section-label{margin-bottom:12px}.section-title-block .heading-serif{margin:0;letter-spacing:-.01em}.floral-divider{display:flex;align-items:center;justify-content:center;gap:12px;width:190px;margin:0 auto 28px}.floral-divider-line{flex:1;height:1px;background:#2e2a281a;box-shadow:0 1px #ffffffd9}.floral-divider-ornament{flex:none;width:90px;height:30px;color:#ebe3d9;filter:drop-shadow(-.7px -.8px 0 rgba(255,255,255,.95)) drop-shadow(.8px 1px .6px rgba(90,65,65,.36))}@media (prefers-reduced-motion: no-preference){.floral-divider.reveal .floral-divider-ornament{transform:scale(1.3);filter:drop-shadow(-2px -2px 3px rgba(255,255,255,.6)) drop-shadow(3px 5px 6px rgba(90,65,65,.22));transition:transform .55s cubic-bezier(.2,1.4,.4,1) .2s,filter .55s ease .2s}.floral-divider.reveal.visible .floral-divider-ornament{transform:none;filter:drop-shadow(-.7px -.8px 0 rgba(255,255,255,.95)) drop-shadow(.8px 1px .6px rgba(90,65,65,.36))}}.icon-circle{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;flex-shrink:0}.botanical-svg{pointer-events:none;-webkit-user-select:none;user-select:none;overflow:visible}#share-toast{position:fixed;bottom:88px;right:24px;background:var(--color-plum);color:var(--color-ivory);font-family:var(--font-sans);font-size:13px;padding:10px 18px;border-radius:10px;z-index:200;opacity:0;transform:translateY(8px);transition:opacity .25s ease,transform .25s ease;pointer-events:none}#share-toast.show{opacity:1;transform:translateY(0)}.gradient-rule{display:block;width:100%;max-width:280px;height:1px;margin:0 auto;background:linear-gradient(90deg,transparent,var(--color-lavender) 30%,var(--color-pink) 60%,transparent);opacity:.55;border:none}.form-input,.form-select,.form-textarea{width:100%;border:1px solid rgba(46,42,40,.2);border-radius:8px;padding:13px 16px;font-family:var(--font-sans);font-size:16px;color:var(--color-text);background:#fff;outline:none;transition:border-color .2s ease,box-shadow .2s ease}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--color-plum);box-shadow:0 0 0 3px #4a3a481f}#envelope-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;background:radial-gradient(ellipse at center,#ece7e1,#d9d1c9);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;perspective:1200px}.envelope-body{position:relative;width:280px;height:200px;cursor:pointer;perspective:900px;perspective-origin:50% 30%;-webkit-user-select:none;user-select:none;touch-action:manipulation}.env-stage{position:absolute;top:0;right:0;bottom:0;left:0;transform-style:preserve-3d;will-change:transform}.env-back{position:absolute;top:0;right:0;bottom:0;left:0;background:#ebe4dd;border-radius:5px;box-shadow:0 1px 2px #3c283214,0 16px 40px #3c283224;z-index:1}.env-letter{position:absolute;top:14px;left:16px;right:16px;height:172px;background:#fffdfb;border:1px solid rgba(80,60,70,.1);border-radius:4px;z-index:2;display:flex;align-items:center;justify-content:center;will-change:transform}.env-letter-inner{position:absolute;top:0;right:0;bottom:0;left:0;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px}.env-letter-content{display:none}.env-letter--open{position:fixed;top:0;right:0;bottom:0;left:0;margin:auto;width:min(88vw,420px);height:-webkit-fit-content;height:fit-content;padding:58px clamp(26px,6vw,42px) clamp(34px,7vw,50px);text-align:left;background:transparent;border:0;border-radius:0;box-shadow:none;transform:perspective(1100px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg));transform-style:flat}.env-letter--open:before{content:"";position:absolute;top:-90px;right:-90px;bottom:-90px;left:-90px;background:var(--letter-shadow, none) center / 100% 100% no-repeat;transform:translate(var(--shadow-dx, 0px),var(--shadow-dy, 0px));z-index:-1;pointer-events:none}.env-letter--open:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--letter-face, linear-gradient(#fffdf9, #fffdf9)) center / 100% 100% no-repeat;z-index:-1;pointer-events:none}.letter-sheen{display:none}.env-letter--open .letter-sheen{display:block;position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(ellipse 70% 55% at var(--sheen-x, 35%) var(--sheen-y, 20%),rgba(255,255,255,.28),rgba(255,255,255,0) 70%);-webkit-mask:var(--letter-face, none) center / 100% 100% no-repeat;mask:var(--letter-face, none) center / 100% 100% no-repeat}#envelope-overlay.env-dissolving .env-letter--open:before,#envelope-overlay.env-dissolving .env-letter--open:after,#envelope-overlay.env-dissolving .letter-sheen{opacity:0}.env-letter--open .env-letter-content{display:block}.env-letter-names{font-family:var(--font-serif);font-style:italic;font-size:21px;color:var(--color-text)}.env-letter-rule{width:36px;height:1px;background:#9c486266}.env-letter-sub{font-family:var(--font-sans);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--color-muted)}.env-pocket{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;clip-path:polygon(0 0,50% 58%,100% 0,100% 100%,0 100%);background:linear-gradient(180deg,#f8f3ee,#f4efe9);border-radius:5px}.env-address{position:absolute;left:16px;right:16px;top:144px;text-align:center;pointer-events:none;z-index:4}.env-address:has(.env-to[style*=block]){top:150px}.env-to{font-family:Charm,Trirong,serif;font-size:16px;line-height:1.2;color:#5a4a4e;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.env-couple{font-family:var(--font-serif);font-style:italic;font-size:19px;font-weight:500;color:#b27f72}.env-to[style*=block]+.env-couple{font-size:17px}.env-flap{position:absolute;top:0;left:0;width:280px;height:200px;transform-origin:50% 0;transform-style:preserve-3d;z-index:5;pointer-events:none;will-change:transform}.env-flap-face{position:absolute;top:0;right:0;bottom:0;left:0;clip-path:polygon(0 0,100% 0,50% 58%);border-radius:5px 5px 0 0;backface-visibility:hidden;-webkit-backface-visibility:hidden}.env-flap-front{background:linear-gradient(180deg,#f1ebe5,#f7f2ec);filter:drop-shadow(0 1px 1px rgba(60,40,50,.12))}.env-flap-liner{transform:rotateY(180deg);background-color:#ddd3e6;background-image:radial-gradient(rgba(255,253,250,.7) 1.1px,transparent 1.2px);background-size:12px 12px}.env-flap-shade{position:absolute;top:0;right:0;bottom:0;left:0;background:#5a3a55;opacity:0;pointer-events:none}.flap-dot{display:none}.flap-dot-c{width:8px;height:8px;background:#f9c8d4e6;top:18%;left:50%;transform:translate(-50%,-50%)}.flap-dot-l{width:6px;height:6px;background:#b8e8d8d9;top:29%;left:38%;transform:translate(-50%,-50%)}.flap-dot-r{width:6px;height:6px;background:#b8d8f8d9;top:29%;left:62%;transform:translate(-50%,-50%)}.env-seal{position:absolute;top:92px;left:116px;width:48px;height:48px;border-radius:50%;background:radial-gradient(circle at 38% 32%,#b8627c,#9c4862 60%,#7e3850);box-shadow:0 2px 4px #3c14234d,inset 0 1px 1px #ffffff40,inset 0 -2px 3px #0000002e;z-index:6;display:flex;align-items:center;justify-content:center;pointer-events:none;will-change:transform}.env-particles{position:absolute;top:0;right:0;bottom:0;left:0;z-index:7;pointer-events:none}.env-particle{position:absolute;border-radius:50%;pointer-events:none}.envelope-label{font-family:var(--font-sans);font-size:14px;letter-spacing:0;color:var(--color-muted);text-align:center;opacity:0;animation:fadeIn .6s ease .8s forwards}.env-skip{position:absolute;top:calc(20px + env(safe-area-inset-top,0px));right:20px;padding:8px 16px;border:1px solid rgba(201,184,232,.45);border-radius:50px;background:#ffffffb8;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-family:var(--font-sans);font-size:12px;letter-spacing:0;color:var(--color-muted);cursor:pointer;opacity:0;z-index:10}.env-controls{position:absolute;bottom:28px;left:0;right:0;display:flex;justify-content:space-between;padding:0 28px;pointer-events:none;opacity:0;animation:fadeIn .5s ease 1.2s forwards}.env-controls button{pointer-events:all;width:40px;height:40px;border-radius:50%;border:none;background:#ffffffb8;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:var(--color-muted);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 12px #c9b8e833;transition:transform .2s ease,opacity .2s ease;opacity:.72}.env-controls button:hover{opacity:1;transform:scale(1.1)}#music-btn.is-playing,#env-music-btn.is-playing{animation:musicPulse 2s ease-in-out infinite}#envelope-overlay.env3d .env-stage{visibility:hidden}#envelope-overlay.env-dissolving{background:transparent}.env-letter--open .letter-to,.env-letter--open .letter-sign{font-family:Charm,Trirong,serif;font-style:normal;color:#3a2a33;letter-spacing:0}.env-letter--open .letter-to{font-size:clamp(24px,6vw,30px);line-height:1.5}.env-letter--open .letter-sign{font-size:21px;clip-path:none}.env-tilt{display:inline-flex;align-items:center;gap:6px;margin-top:-16px;min-height:36px;padding:7px 14px;border-radius:999px;border:1px solid rgba(74,58,72,.18);background:#fffdf999;font-family:var(--font-sans);font-size:13px;color:var(--color-muted);cursor:pointer;opacity:0;animation:fadeIn .6s ease 1.4s forwards;-webkit-tap-highlight-color:transparent}.env-tilt[hidden]{display:none}.letter-date{font-family:var(--font-sans);font-size:12px;letter-spacing:0;color:var(--color-muted);text-align:right;margin-bottom:10px;opacity:0;transform:translateY(8px)}.letter-to{font-family:var(--font-serif);font-style:italic;font-size:clamp(20px,5vw,26px);color:var(--color-text);margin-bottom:18px;min-height:1.4em}.letter-to.typing:after{content:"";display:inline-block;width:2px;height:1em;margin-left:3px;vertical-align:-.12em;background:var(--color-text);animation:caretBlink .9s steps(1) infinite}@keyframes caretBlink{0%,to{opacity:1}50%{opacity:0}}.letter-body{font-family:var(--font-sans);font-size:15px;line-height:2;color:var(--color-text);margin-bottom:22px;opacity:0;transform:translateY(10px)}.letter-sign-row{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-bottom:28px}.letter-sign{font-family:var(--font-serif);font-style:italic;font-size:17px;color:var(--color-muted);clip-path:inset(0 100% 0 0)}.letter-stamp{width:26px;height:26px;border-radius:50%;background:radial-gradient(circle at 38% 32%,#b8627c,#9c4862 60%,#7e3850);box-shadow:0 1px 2px #3c14234d,inset 0 1px 1px #ffffff38,inset 0 -1px 2px #0000002e;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;opacity:0}.letter-continue{display:block;margin:0 auto;min-height:48px;padding:12px 32px;border-radius:10px;font-family:var(--font-sans);font-size:15px;font-weight:500;letter-spacing:0;cursor:pointer;transition:transform .3s var(--transition-ease),box-shadow .3s ease;opacity:0;transform:translateY(10px)}.letter-continue:hover{transform:translateY(-1px)}#hero{min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:60px 24px;position:relative;width:100%;max-width:760px;margin:0 auto}#hero:before{content:"";position:absolute;inset:clamp(14px,3vw,28px);border:1px solid var(--hairline);pointer-events:none;opacity:0;animation:fadeIn 1.4s ease .6s forwards}.hero-badge{font-family:var(--font-sans);font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--color-muted);margin-bottom:32px;animation:fadeInDown 1s ease both;display:inline-flex;align-items:center;justify-content:center;gap:14px}.hero-badge-line{display:inline-block;width:26px;height:1px;background:var(--hairline)}.hero-photo{display:flex;justify-content:center;margin-bottom:clamp(16px,3vw,28px)}.hero-photo img{width:min(clamp(124px,30vw,168px),19svh);aspect-ratio:3 / 4;object-fit:cover;border-radius:999px 999px 16px 16px;border:5px solid var(--color-ivory);outline:1px solid var(--hairline);box-shadow:var(--shadow-paper);animation:fadeInUp .9s var(--transition-ease) both}.hero--photo .floral-top{display:none}@media (prefers-reduced-motion: reduce){.hero-photo img{animation:none}}.guest-greeting{font-family:var(--font-serif);font-style:italic;font-size:clamp(16px,2.5vw,20px);color:var(--color-muted);margin-bottom:12px;animation:fadeInDown 1s ease .1s both}.guest-name{color:var(--color-rose)}.hero-names{font-family:var(--font-serif);font-weight:300;font-size:min(clamp(64px,14vw,112px),12svh);line-height:.95;letter-spacing:-.01em;color:var(--color-text);display:flex;flex-direction:column;align-items:center;gap:8px}.hero-name{display:block}.hero-name--first{animation:fadeInUp 1.1s cubic-bezier(.23,1,.32,1) .15s both}.hero-name--second{animation:fadeInUp 1.1s cubic-bezier(.23,1,.32,1) .45s both}.ampersand-wrap{display:flex;align-items:center;justify-content:center;gap:clamp(14px,3vw,24px);width:100%;max-width:280px;margin:clamp(4px,1vw,10px) auto;animation:fadeIn 1s ease .3s both}.ampersand-rule{flex:1;height:1px;background:var(--hairline)}.hero-names .ampersand{display:inline-block;font-style:italic;font-family:var(--font-serif);font-weight:400;font-size:clamp(40px,7vw,64px);line-height:1;color:var(--color-rose);letter-spacing:0;flex-shrink:0;transform:translateY(-2px)}.hero-date-frame{margin-top:clamp(28px,4vw,40px);display:flex;flex-direction:column;align-items:center;gap:14px;animation:fadeInUp 1.1s cubic-bezier(.23,1,.32,1) .65s both}.hero-date-rule{display:block;width:clamp(40px,8vw,64px);height:1px;background:var(--hairline)}.hero-date{font-family:var(--font-serif);font-style:italic;font-size:clamp(17px,3vw,24px);font-variant-numeric:lining-nums;font-weight:400;color:var(--color-text);letter-spacing:0;opacity:.86;min-height:1.4em}.typewriter-active:after{content:"|";display:inline-block;margin-left:2px;color:var(--color-muted);opacity:1;animation:tw-blink .7s step-start infinite}@keyframes tw-blink{0%,to{opacity:1}50%{opacity:0}}.hero-scroll-hint{position:absolute;bottom:clamp(28px,4vw,48px);left:0;right:0;width:max-content;margin:0 auto;display:flex;flex-direction:column;align-items:center;gap:8px;animation:fadeInUp 1.4s ease 1.4s both}.hero-scroll-hint span{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--color-muted);opacity:.7}.scroll-line{width:1px;height:40px;background:linear-gradient(to bottom,rgba(46,42,40,.3),transparent);animation:scrollPulse 2s ease-in-out infinite}.floral-top{position:absolute;top:clamp(64px,11vh,110px);left:50%;color:var(--color-muted);opacity:.7;pointer-events:none;transform:translate(calc(-50% + var(--px, 0px))) translateY(var(--py, 0px));transition:transform .05s linear}@media (max-width: 480px){.ampersand-wrap{max-width:220px}.hero-badge-line{width:18px}}@media (min-width: 768px) and (max-height: 860px){.hero-scroll-hint{display:none}}#countdown{text-align:center;width:100%;max-width:760px;margin:0 auto;padding:80px 24px}.countdown-heading{font-variant-numeric:lining-nums;font-family:var(--font-serif);font-size:clamp(28px,5vw,40px);font-weight:400;font-style:italic;margin-bottom:48px;color:var(--color-text)}.countdown-grid{display:flex;justify-content:center;gap:clamp(12px,4vw,64px);flex-wrap:nowrap;width:100%}.countdown-unit{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0}.countdown-number{font-family:var(--font-serif);font-size:clamp(32px,9vw,84px);font-weight:300;line-height:1.1;color:var(--color-text);position:relative;display:inline-block;padding-bottom:8px;white-space:nowrap;font-variant-numeric:lining-nums tabular-nums}.countdown-number:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:40px;height:1px;background:var(--hairline)}.countdown-label{font-family:var(--font-sans);font-size:13px;font-weight:400;letter-spacing:0;color:var(--color-muted)}#countdown-dayof{flex-direction:column;align-items:center;gap:14px;padding:24px 16px 8px;animation:fadeInUp .8s ease both}.dayof-title{font-family:var(--font-serif);font-size:clamp(34px,7vw,52px);font-weight:400;font-style:italic;color:var(--color-rose);margin:0}.dayof-sub{font-size:16px;color:var(--color-text);margin:0 0 10px}#countdown-ended{flex-direction:column;align-items:center;gap:16px;padding:24px 16px 8px;animation:fadeInUp .8s ease both}.countdown-ended-heart{color:var(--color-rose);opacity:.8;line-height:0;animation:heartPop .7s cubic-bezier(.23,1,.32,1) both}.countdown-ended-thanks{font-family:var(--font-serif);font-size:clamp(26px,5vw,40px);font-weight:400;font-style:italic;color:var(--color-text);margin:0}.countdown-ended-names{font-family:var(--font-serif);font-size:clamp(20px,4vw,28px);font-weight:500;font-style:italic;color:var(--color-rose);margin:0}.countdown-ended-sub{font-size:15px;color:var(--color-muted);margin:0}.flap{--flap-pad: 6px clamp(8px, 2.4vw, 16px) 4px;position:relative;width:100%;max-width:150px;perspective:640px;padding:var(--flap-pad);background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border:1px solid var(--hairline);border-radius:5px;box-shadow:0 1px 2px #2e2a280f,0 8px 20px #2e2a280f}.flap:after{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:#2e2a281a;box-shadow:0 1px #ffffffb3;z-index:3;pointer-events:none}.flap .countdown-number{padding-bottom:0;font-size:clamp(30px,8vw,60px)}.flap .countdown-number:after{display:none}.flap-leaf{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--flap-pad);background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border-radius:5px;display:flex;justify-content:center;backface-visibility:hidden;transform-origin:50% 50%;z-index:2}.flap-leaf--top{clip-path:inset(0 0 50% 0)}.flap-leaf--bottom{clip-path:inset(50% 0 0 0)}#details{text-align:center;width:100%;max-width:1000px;margin:0 auto;padding:80px 24px}.details-heading{font-family:var(--font-serif);font-size:clamp(34px,7vw,52px);font-weight:300;font-style:italic;margin-bottom:48px;color:var(--color-text)}.details-cards,.travel-items{width:100%;max-width:560px;margin:0 auto;background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border:1px solid var(--hairline);border-radius:4px;box-shadow:var(--shadow-paper);padding:8px clamp(24px,6vw,48px);outline:1px solid rgba(46,42,40,.07);outline-offset:-8px}.detail-card,.travel-item{padding:28px 0;text-align:center}.detail-card+.detail-card,.travel-item+.travel-item{border-top:1px solid var(--hairline)}.detail-card-icon,.travel-item-icon{display:none}.detail-card h3{font-family:var(--font-sans);font-size:13px;font-weight:400;letter-spacing:0;color:var(--color-rose);margin-bottom:8px}.detail-card p{font-family:var(--font-serif);font-size:clamp(19px,4.6vw,22px);line-height:1.55;font-variant-numeric:lining-nums;color:var(--color-text)}.map-actions{display:flex;gap:12px;margin-top:40px;justify-content:center}@media (max-width: 480px){.map-actions{flex-direction:column}}.map-btn{min-height:48px;padding:12px 24px;border-radius:10px;font-family:var(--font-sans);font-size:15px;font-weight:500;letter-spacing:0;display:inline-flex;align-items:center;justify-content:center;gap:10px;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);cursor:pointer}.map-btn svg{flex-shrink:0;width:16px;height:16px}.map-btn.is-done{background:#b8e8d84d;border-color:#6f9c8a;color:#2f5a4a}.map-actions-alt{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:8px 22px;margin-top:18px}.cal-alt-link{display:inline-flex;align-items:center;gap:6px;background:none;border:none;box-shadow:none;padding:6px 2px;font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;color:var(--color-muted);cursor:pointer;text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--hairline);transition:color var(--transition-fast)}.cal-alt-link:hover{color:var(--color-text)}.cal-alt-link svg{width:14px;height:14px;flex-shrink:0}.cal-alt-link[hidden]{display:none}.cal-alt-link.is-done{color:#2b8a63;text-decoration-color:currentColor}.travel-info{margin-top:64px}.travel-info-heading{font-family:var(--font-sans);font-size:13px;font-weight:400;letter-spacing:0;color:var(--color-rose);margin-bottom:20px;text-align:center}.travel-item-text strong{display:block;font-family:var(--font-serif);font-size:19px;font-weight:500;color:var(--color-text);margin-bottom:4px}.travel-item-text span{font-size:14px;color:var(--color-muted);line-height:1.6}.dress-palette{display:flex;justify-content:center;gap:10px;margin-top:14px}.dress-swatch{width:16px;height:16px;border-radius:50%;box-shadow:inset 0 0 0 1px #2e2a281f}.map-card{display:block;max-width:440px;margin:36px auto 0;padding:14px 14px 10px;background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border:1px solid var(--hairline);border-radius:4px;box-shadow:var(--shadow-paper);text-decoration:none;color:inherit}.map-card svg{display:block;width:100%;height:auto;overflow:visible}.map-card text{font-family:var(--font-sans)}.map-sea{fill:#b8d8f838}.map-coast,.map-waves path,.map-ink path,.map-ink circle{fill:none;stroke:#6a5a66;stroke-width:1.1;stroke-linecap:round;stroke-linejoin:round}.map-coast{stroke-width:1.4}.map-waves path{stroke:#8fb3cf}.map-sea-label{font-size:9px;fill:#7d9bb3}.map-label{font-size:10px;fill:var(--color-plum);text-anchor:middle}.map-label--muted{font-size:9px;fill:var(--color-muted);text-anchor:end}.map-label--venue{font-size:11px;font-weight:500;fill:var(--color-rose)}.map-dotted{fill:none;stroke:var(--color-muted);stroke-width:1;stroke-dasharray:1 4;stroke-linecap:round}.map-route{fill:none;stroke:var(--color-plum);stroke-width:2;stroke-dasharray:5 4;stroke-linecap:round}.map-route-mask{fill:none;stroke:#fff;stroke-width:8;stroke-dasharray:1;stroke-dashoffset:0}.map-pin-wax{fill:#9c4862}.map-pin-heart{fill:#fff;opacity:.95}.map-pin-shadow{fill:#3c28322e}.map-card-note{display:block;margin-top:6px;font-size:11px;color:var(--color-muted);text-align:center}@media (prefers-reduced-motion: no-preference){.map-card.reveal .map-route-mask{stroke-dashoffset:1;transition:stroke-dashoffset 1.8s cubic-bezier(.45,0,.3,1) .5s}.map-card.reveal.visible .map-route-mask{stroke-dashoffset:0}.map-card.reveal .map-pin{opacity:0;transform:translateY(-14px);transform-box:fill-box;transition:opacity .3s ease 2.1s,transform .5s cubic-bezier(.34,1.56,.64,1) 2.1s}.map-card.reveal.visible .map-pin{opacity:1;transform:none}}#rsvp{text-align:center;width:100%;max-width:760px;margin:0 auto;padding:80px 24px;position:relative}.rsvp-heading{font-family:var(--font-serif);font-size:clamp(30px,5vw,42px);font-weight:400;font-style:italic;margin-bottom:12px;color:var(--color-text);letter-spacing:-.01em}.rsvp-sub{font-size:14px;color:var(--color-muted);margin-bottom:48px;opacity:.85}.rsvp-form{background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border-radius:4px;padding:clamp(32px,6vw,56px) clamp(24px,5vw,48px);border:1px solid var(--hairline);box-shadow:var(--shadow-paper);outline:1px solid rgba(46,42,40,.07);outline-offset:-8px;text-align:left;position:relative;overflow:hidden}.rsvp-letterhead{text-align:center;margin-bottom:28px}.rsvp-letterhead-to{font-family:var(--font-serif);font-style:italic;font-size:clamp(19px,4.5vw,24px);color:var(--color-text);margin-bottom:10px}.rsvp-letterhead-rule{display:inline-block;width:44px;height:1px;background:var(--hairline)}.rsvp-send-env{position:fixed;left:calc(50% - 140px);top:calc(50% - 100px);width:280px;height:200px;perspective:900px;opacity:0;pointer-events:none;z-index:30}.ty-calendar{margin-top:28px;padding-top:24px;border-top:1px solid var(--hairline)}.ty-calendar-label{font-size:13px;letter-spacing:0;color:var(--color-muted);margin-bottom:14px}.ty-calendar-btns{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.ty-cal-btn{min-height:44px;padding:10px 18px;font-size:14px}.ty-cal-alt{margin-top:10px}.form-row{margin-bottom:32px;position:relative}.form-label{display:block;font-size:14px;font-weight:400;letter-spacing:0;color:var(--color-muted);margin-bottom:8px;transition:color .3s ease}.form-row:focus-within .form-label{color:var(--color-plum)}.form-input.error,.form-select.error,.form-textarea.error{border-color:#b5566e;background:snow}.form-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:44px}.form-textarea{resize:vertical;min-height:120px}.form-select-wrapper{position:relative}.form-select-wrapper:after{content:"";position:absolute;right:20px;top:50%;width:8px;height:8px;border-right:1px solid var(--color-muted);border-bottom:1px solid var(--color-muted);transform:translateY(-65%) rotate(45deg);pointer-events:none}.radio-group{display:flex;gap:16px;flex-wrap:wrap}.radio-option{flex:1;min-width:130px}.radio-option input[type=radio]{display:none}.radio-option label{display:flex;align-items:center;justify-content:center;gap:10px;min-height:48px;padding:12px 16px;border-radius:8px;border:1px solid rgba(46,42,40,.2);cursor:pointer;font-size:15px;font-weight:400;color:var(--color-muted);background:#fff;transition:border-color .2s ease,color .2s ease,background .2s ease;-webkit-user-select:none;user-select:none}.radio-option input[type=radio]:checked+label{border-color:var(--color-plum);background:#4a3a480a;color:var(--color-text)}.radio-dot{width:10px;height:10px;border-radius:50%;border:1px solid var(--color-muted);background:transparent;transition:all .2s ease;position:relative}.radio-option input[type=radio]:checked+label .radio-dot{background:var(--color-plum);box-shadow:inset 0 0 0 2px #fff;border-color:var(--color-plum)}.btn-submit{width:100%;min-height:52px;padding:14px 24px;border-radius:10px;font-family:var(--font-sans);font-size:16px;font-weight:500;letter-spacing:0;cursor:pointer;transition:background .2s ease;margin-top:8px}.field-error{font-size:13px;color:#a4455e;margin-top:8px;display:none;font-weight:500;padding-left:4px}.char-counter{font-size:11px;color:var(--color-muted);text-align:right;margin-top:8px;opacity:.6}.form-label-optional{font-weight:400;font-size:12px;opacity:.7;margin-left:4px}#rsvp-closed-banner{flex-direction:column;align-items:center;gap:6px;max-width:440px;margin:0 auto;padding:44px 32px;background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border-radius:4px;border:1px solid var(--hairline);box-shadow:var(--shadow-paper);text-align:center}.rsvp-closed-icon{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1px solid var(--hairline);color:var(--color-rose);margin-bottom:10px}.rsvp-closed-title{font-family:var(--font-serif);font-size:22px;font-weight:500;color:var(--color-text)}.rsvp-closed-sub{font-size:13px;color:var(--color-muted)}.rsvp-closed-contact{font-size:14px;line-height:1.7;color:var(--color-text);margin-top:14px;padding-top:18px;border-top:1px solid var(--hairline)}.thank-you{display:none;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:64px 24px;gap:24px}.thank-you-heart{width:36px;height:36px}.thank-you-heart path{fill:var(--color-rose);opacity:.8}.thank-you h2{font-family:var(--font-serif);font-size:clamp(28px,6vw,40px);font-weight:400;font-style:italic;color:var(--color-text)}.thank-you p{font-size:16px;color:var(--color-muted);max-width:360px;line-height:1.8}.rsvp-stamp{position:absolute;top:12px;right:12px;width:clamp(84px,24vw,108px);color:#9c4862;opacity:0;transform:rotate(-10deg);pointer-events:none;mix-blend-mode:multiply;z-index:2}.rsvp-stamp[data-tone=no]{color:#8a7f7a}.rsvp-stamp svg{display:block;width:100%;height:auto}.rsvp-stamp-frame{fill:none;stroke:currentColor;stroke-width:2.6}.rsvp-stamp-frame--inner{stroke-width:1.1}.rsvp-stamp-text{font-family:var(--font-sans);font-size:19px;font-weight:600;text-anchor:middle;fill:currentColor}.rsvp-stamp--pressed{opacity:.86;animation:stamp-press .45s cubic-bezier(.3,1.5,.5,1) both}@keyframes stamp-press{0%{opacity:0;transform:scale(1.7) rotate(-18deg)}55%{opacity:.9;transform:scale(.94) rotate(-9deg)}to{opacity:.86;transform:scale(1) rotate(-10deg)}}@media (prefers-reduced-motion: reduce){.rsvp-stamp--pressed{animation:none}}#guestbook{text-align:center;width:100%;max-width:760px;margin:0 auto;padding:80px 24px}.guestbook-heading{font-family:var(--font-serif);font-size:clamp(28px,5vw,40px);font-weight:400;font-style:italic;margin-bottom:12px;color:var(--color-text);letter-spacing:-.01em}.guestbook-sub{font-size:15px;color:var(--color-muted);margin-bottom:16px;line-height:1.6;opacity:.85}.heart-altar{display:flex;flex-direction:column;align-items:center;gap:6px;margin-bottom:36px;padding:8px 0}.heart-invite{font-family:var(--font-serif);font-size:15px;font-weight:400;font-style:italic;color:var(--color-rose);letter-spacing:0;text-align:center;line-height:1.5;margin-bottom:4px}.heart-tap-btn{background:none;border:none;padding:14px;line-height:0;border-radius:50%;transition:filter .2s ease}.heart-tap-btn:hover{filter:brightness(1.08)}.heart-svg{display:block;overflow:visible;transform-origin:center;animation:heartBreathe 3s ease-in-out infinite}@keyframes heartBreathe{0%,to{transform:scale(1)}50%{transform:scale(1.07)}}.heart-path{fill:none;stroke:var(--color-rose);stroke-width:.9;stroke-linecap:round;stroke-linejoin:round;transition:fill .4s cubic-bezier(.34,1.2,.64,1),stroke .4s ease,stroke-width .35s ease}.heart-tap-btn.heart-filled .heart-path{fill:var(--color-rose);stroke:var(--color-rose);stroke-width:0}.heart-tap-btn.heart-pop .heart-svg{animation:heartPop .52s cubic-bezier(.34,1.3,.64,1) forwards}@keyframes heartPop{0%{transform:scale(1)}28%{transform:scale(1.32)}55%{transform:scale(.9)}78%{transform:scale(1.1)}to{transform:scale(1)}}.heart-hint{font-size:12px;color:var(--color-muted);letter-spacing:0;opacity:.75;overflow:hidden}.heart-hint.hidden{pointer-events:none}.session-counter-wrap{height:22px;display:flex;align-items:center;justify-content:center;pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .18s ease,transform .18s ease}.session-counter-wrap.sc-active{opacity:1;transform:translateY(0)}.session-count{font-family:var(--font-sans);font-size:15px;font-weight:500;color:var(--color-rose);display:inline-block}.heart-count-wrap{font-size:13px;color:var(--color-muted)}.inline-heart{display:inline-block;vertical-align:-1px;color:var(--color-rose)}.heart-float{position:fixed;pointer-events:none;z-index:9999;-webkit-user-select:none;user-select:none;line-height:1;opacity:0;will-change:transform,opacity}.heart-milestone-float{font-family:var(--font-sans);font-size:32px;font-weight:400;font-family:var(--font-serif);color:var(--color-rose);line-height:1}.gb-slot{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:56px;padding:16px 20px;margin-bottom:20px;border:1px dashed rgba(46,42,40,.28);border-radius:4px;background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);cursor:pointer;font-family:var(--font-sans);font-size:15px;letter-spacing:0;color:var(--color-muted);transition:border-color .2s ease,color .2s ease}.gb-slot svg{color:var(--color-rose);flex-shrink:0}.gb-slot:hover{border-color:var(--color-plum);color:var(--color-text)}.gb-composer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:none}.gb-composer.open{display:block}.gb-composer-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#4b152847;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);touch-action:none}.gb-composer-paper{position:absolute;inset:10vh 0 auto 0;margin:0 auto;width:min(90vw,440px);background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border:1px solid var(--hairline);border-radius:4px;padding:clamp(26px,6vw,40px) clamp(22px,5vw,36px) clamp(22px,5vw,32px);box-shadow:0 18px 60px #4b15282e;text-align:left;overflow:hidden;will-change:transform}.gb-paper-to{font-family:var(--font-serif);font-style:italic;font-size:clamp(19px,4.5vw,23px);color:var(--color-text);margin-bottom:8px}.gb-paper-rule{display:block;width:40px;height:1px;background:var(--hairline);margin-bottom:18px}.gb-composer-close{position:absolute;top:12px;right:12px;width:36px;height:36px;border-radius:50%;border:1px solid var(--hairline);background:transparent;color:var(--color-muted);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .25s ease,color .25s ease}.gb-composer-close:hover{background:#2e2a280d;color:var(--color-text)}.gb-entry--flying{transition:none}.gb-entry--new:after{animation:gbStampIn .45s cubic-bezier(.2,1.6,.4,1) .5s backwards}@keyframes gbStampIn{0%{opacity:0;transform:rotate(-18deg) scale(1.9)}to{opacity:1;transform:rotate(-8deg) scale(1)}}.guestbook-feed{display:flex;flex-direction:column;gap:16px;margin-bottom:32px;text-align:left}.gb-entry{--tilt: -.4deg;display:flex;align-items:flex-start;gap:16px;background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border-radius:4px;border:1px solid var(--hairline);box-shadow:var(--shadow-paper);padding:20px 48px 20px 20px;position:relative;overflow:hidden;transform:rotate(var(--tilt));transition:transform .3s var(--transition-ease),box-shadow .3s ease}.gb-entry:nth-child(2n){--tilt: .4deg}.gb-entry:hover{transform:rotate(0)}.gb-entry:after{content:"";position:absolute;top:14px;right:14px;width:20px;height:20px;border-radius:50%;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' opacity='.95' d='M12 20.5l-1.3-1.2C6 15.1 3 12.3 3 8.9 3 6.1 5.2 4 7.9 4c1.6 0 3.1.7 4.1 1.9C13 4.7 14.5 4 16.1 4 18.8 4 21 6.1 21 8.9c0 3.4-3 6.2-7.7 10.5L12 20.5z'/%3E%3C/svg%3E"),radial-gradient(circle at 35% 30%,#b07489,var(--color-rose) 62%,#85495f);background-size:11px 11px,cover;background-position:center,center;background-repeat:no-repeat;box-shadow:0 1px 2px #2e2a2833;transform:rotate(-8deg)}.gb-entry-avatar{width:44px;height:44px;min-width:44px;border-radius:50%;border:1px solid var(--hairline);background:#f9c8d440;display:flex;align-items:center;justify-content:center;font-family:var(--font-serif);font-size:18px;font-weight:500;color:var(--color-rose)}.gb-entry-body{flex:1;min-width:0}.gb-entry-name{font-size:14px;font-weight:500;color:var(--color-text);margin-bottom:4px}.gb-entry-msg{font-family:var(--font-serif);font-size:17px;color:var(--color-text);line-height:1.65;word-break:break-word}.gb-show-more{display:block;width:100%;min-height:48px;margin:0 0 32px;padding:12px 20px;border-radius:10px;font-size:15px;font-weight:500;cursor:pointer;transition:border-color .2s ease,background .2s ease}.guestbook-thanks{display:flex;flex-direction:column;align-items:center;gap:16px;padding:36px 24px;margin-bottom:20px;text-align:center;position:relative;overflow:hidden;background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) var(--color-ivory);border:1px solid var(--hairline);border-radius:4px;box-shadow:var(--shadow-paper)}.guestbook-thanks-icon{width:48px;height:48px;border-radius:50%;background:var(--color-rose);display:flex;align-items:center;justify-content:center}.guestbook-thanks h3{font-family:var(--font-serif);font-size:clamp(24px,5vw,32px);font-weight:400;font-style:italic;color:var(--color-text)}.guestbook-thanks p{font-size:15px;color:var(--color-muted);line-height:1.7}#gallery{text-align:center;width:100%;max-width:760px;margin:0 auto;padding:80px 24px}.gallery-heading{font-family:var(--font-serif);font-size:clamp(30px,5vw,42px);font-weight:400;font-style:italic;margin-bottom:40px;color:var(--color-text)}.gallery-grid{display:flex;gap:12px;align-items:flex-start;margin-bottom:24px}.gallery-col{flex:1;display:flex;flex-direction:column;gap:12px;min-width:0}.gallery-grid.polaroid-strip{display:flex;gap:18px;align-items:center;overflow-x:auto;margin:0 -24px 12px;padding:34px 32px 40px;background:radial-gradient(ellipse at center,#ece7e1,#d9d1c9);box-shadow:inset 0 10px 18px -14px #3c283240,inset 0 -10px 18px -14px #3c283240;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none}.gallery-grid.polaroid-strip::-webkit-scrollbar{display:none}.polaroid{flex:0 0 auto;width:clamp(150px,38vw,190px);background:var(--color-ivory);border:1px solid var(--hairline);border-radius:2px;padding:9px 9px 12px;box-shadow:var(--shadow-paper);scroll-snap-align:center;cursor:pointer;transition:transform .35s var(--transition-ease),box-shadow .35s ease}.polaroid:nth-child(odd){transform:rotate(-2deg)}.polaroid:nth-child(2n){transform:rotate(1.6deg)}.polaroid:hover{transform:rotate(0) translateY(-3px);z-index:2}.polaroid img{width:100%;aspect-ratio:4 / 5;object-fit:cover;border-radius:1px;display:block}.polaroid img.loading{background:#c9b8e81f}.polaroid-caption{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--color-text);text-align:center;margin:9px 2px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gallery-masonry{display:flex;gap:12px;align-items:flex-start;margin-bottom:24px}.gallery-grid>.gallery-cell{flex:1}.gallery-cell{break-inside:avoid;border-radius:2px;overflow:hidden;margin-bottom:12px}.gallery-placeholder{width:100%;height:140px;background:var(--color-ivory);border-radius:2px;border:1px solid var(--hairline);color:var(--color-muted);display:flex;align-items:center;justify-content:center;transition:background .3s}.gallery-placeholder:hover{border-color:#2e2a283d}.gallery-note{font-size:13px;color:var(--color-muted);letter-spacing:0}.gallery-footer{display:flex;flex-direction:column;align-items:center;gap:14px}.gallery-view-all-btn{display:inline-flex;align-items:center;gap:6px;justify-content:center;min-height:44px;font-size:14px;font-family:var(--font-sans);font-weight:500;text-decoration:none;padding:10px 22px;border-radius:10px;transition:border-color .2s,background .2s}.gallery-item{position:relative;border-radius:3px;overflow:hidden;cursor:pointer;break-inside:avoid;display:block;margin-bottom:12px}.gallery-item img{width:100%;height:auto;display:block;transition:transform .4s ease;border-radius:var(--radius-md)}.gallery-item.lqip,.polaroid img.lqip{background-size:cover;background-position:center;background-repeat:no-repeat}.gallery-item img.loading{opacity:0;transition:opacity .3s}.gallery-item img:not(.loading){opacity:1}.gallery-item:hover img{transform:scale(1.03)}.gallery-item-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top,rgba(0,0,0,.45) 0%,transparent 55%);opacity:0;transition:opacity .3s;display:flex;align-items:flex-end;padding:12px}.gallery-item:hover .gallery-item-overlay{opacity:1}.gallery-item-caption{color:#fff;font-size:12px;line-height:1.4}.gallery-status{grid-column:1 / -1;text-align:center;padding:40px 0;font-family:var(--font-serif);font-style:italic;font-size:18px;color:var(--color-muted);opacity:.6}#lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;background:#000000e0;display:none;align-items:center;justify-content:center;flex-direction:column}#lightbox.lightbox--open{display:flex}#lightbox-img{max-width:min(90vw,900px);max-height:80vh;object-fit:contain;border-radius:10px;display:block;transition:opacity .2s ease}#lightbox.lightbox--loading:after{content:"";position:absolute;width:36px;height:36px;border:3px solid rgba(255,255,255,.2);border-top-color:#ffffffd9;border-radius:50%;animation:lb-spin .7s linear infinite;pointer-events:none}@keyframes lb-spin{to{transform:rotate(360deg)}}#lightbox-close{position:absolute;top:18px;right:20px;background:#ffffff1a;border:1.5px solid rgba(255,255,255,.2);color:#fff;width:40px;height:40px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}#lightbox-close:hover{background:#fff3}#lightbox-prev,#lightbox-next{position:absolute;top:50%;transform:translateY(-50%);background:#ffffff1a;border:1.5px solid rgba(255,255,255,.18);color:#fff;width:44px;height:44px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}#lightbox-prev:hover,#lightbox-next:hover{background:#fff3}#lightbox-prev:disabled,#lightbox-next:disabled{opacity:.25;pointer-events:none}#lightbox-prev{left:clamp(10px,2vw,24px)}#lightbox-next{right:clamp(10px,2vw,24px)}.lightbox-info{margin-top:14px;text-align:center;color:#ffffffd9}.lightbox-info p{font-size:14px;margin-bottom:4px}#lightbox-counter{font-size:12px;opacity:.55}@media (max-width: 480px){.gallery-grid{grid-auto-rows:120px;gap:8px}}#gallery-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;background:linear-gradient(135deg,#fff8fa,#fdf0ff,#f0f8ff);transform:translateY(100%);transition:transform .45s cubic-bezier(.23,1,.32,1);display:flex;flex-direction:column;overflow:hidden}#gallery-overlay.overlay--open{transform:translateY(0)}.gallery-overlay-inner{flex:1;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:clamp(20px,4vw,48px) clamp(20px,5vw,60px) 80px;max-width:1100px;margin:0 auto;width:100%;box-sizing:border-box}.gallery-overlay-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:14px clamp(20px,5vw,60px);background:#fffcfeeb;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid rgba(201,184,232,.2);flex-shrink:0}.gallery-overlay-back{display:flex;align-items:center;gap:6px;width:80px;font-size:13px;font-weight:500;font-family:var(--font-sans);color:var(--color-muted);background:none;border:none;cursor:pointer;padding:6px 0;transition:color .2s}.gallery-overlay-back:hover{color:var(--color-text)}.gallery-overlay-title{font-family:var(--font-serif);font-size:clamp(20px,4vw,32px);font-weight:400;font-style:italic;color:var(--color-text);text-align:center}.gallery-overlay-filters{display:flex;justify-content:center;gap:8px;margin-bottom:28px;flex-wrap:wrap}.overlay-filter-btn{font-family:var(--font-sans);font-size:13px;font-weight:500;padding:7px 18px;border-radius:999px;border:1.5px solid rgba(201,184,232,.4);background:#ffffff8c;color:var(--color-muted);cursor:pointer;transition:all .2s;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.overlay-filter-btn:hover{border-color:var(--color-lavender);color:var(--color-text)}.overlay-filter--active{background:#c9b8e84d;border-color:var(--color-lavender);color:var(--color-text)}#overlay-lightbox{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;background:#000000e0;display:none;align-items:center;justify-content:center;flex-direction:column}#overlay-lightbox.lightbox--open{display:flex}#overlay-lightbox-img{max-width:min(90vw,900px);max-height:80vh;object-fit:contain;border-radius:10px;display:block;transition:opacity .2s ease}#overlay-lightbox.lightbox--loading:after{content:"";position:absolute;width:36px;height:36px;border:3px solid rgba(255,255,255,.2);border-top-color:#ffffffd9;border-radius:50%;animation:lb-spin .7s linear infinite;pointer-events:none}#overlay-lightbox-close{position:absolute;top:18px;right:20px;background:#ffffff1a;border:1.5px solid rgba(255,255,255,.2);color:#fff;width:40px;height:40px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}#overlay-lightbox-close:hover{background:#fff3}#overlay-lightbox-prev,#overlay-lightbox-next{position:absolute;top:50%;transform:translateY(-50%);background:#ffffff1a;border:1.5px solid rgba(255,255,255,.18);color:#fff;width:44px;height:44px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}#overlay-lightbox-prev:hover,#overlay-lightbox-next:hover{background:#fff3}#overlay-lightbox-prev:disabled,#overlay-lightbox-next:disabled{opacity:.25;pointer-events:none}#overlay-lightbox-prev{left:clamp(10px,2vw,24px)}#overlay-lightbox-next{right:clamp(10px,2vw,24px)}.pswp__custom-caption{position:absolute;left:0;right:0;bottom:max(18px,env(safe-area-inset-bottom));text-align:center;color:#fff;font-family:var(--font-serif);font-style:italic;font-size:clamp(15px,2.4vw,19px);letter-spacing:.01em;padding:8px 56px;text-shadow:0 1px 10px rgba(0,0,0,.55);pointer-events:none}.share-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:500;pointer-events:none;opacity:0;transition:opacity .28s ease}.share-modal.open{pointer-events:auto;opacity:1}.share-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#2e2a2859;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.share-panel{position:absolute;bottom:0;left:0;right:0;background:var(--color-paper);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:24px 24px 0 0;padding:32px 28px 40px;border-top:1.5px solid rgba(255,255,255,.9);box-shadow:0 -8px 48px #00000014;transform:translateY(100%);transition:transform .35s cubic-bezier(.23,1,.32,1);max-width:600px;margin:0 auto}.share-modal.open .share-panel{transform:translateY(0)}.share-close{position:absolute;top:20px;right:20px;width:36px;height:36px;border-radius:50%;background:transparent;border:1px solid var(--hairline);color:var(--color-muted);display:flex;align-items:center;justify-content:center;transition:background .2s}.share-close:hover{background:#2e2a280d}.share-panel-title{font-family:var(--font-serif);font-size:24px;font-weight:400;font-style:italic;color:var(--color-text);margin-bottom:8px}.share-panel-desc{font-size:14px;color:var(--color-muted);margin-bottom:24px;line-height:1.6}.share-link-box{background:transparent;border:1px dashed rgba(46,42,40,.22);border-radius:12px;padding:12px 16px;margin-bottom:20px;word-break:break-all}.share-link-text{font-family:var(--font-sans);font-size:13px;color:var(--color-muted)}.share-action-row{display:flex;gap:10px;flex-wrap:wrap}.share-action-btn{display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:10px 18px;border-radius:10px;font-family:var(--font-sans);font-size:13px;font-weight:500;border:none;cursor:pointer;text-decoration:none;transition:transform .18s ease,opacity .18s ease;white-space:nowrap}footer{text-align:center;padding:64px 24px 48px;position:relative;width:100%;max-width:760px;margin:0 auto}.footer-divider{width:80px;height:1px;background:var(--hairline);margin:0 auto 36px}.footer-text{font-family:var(--font-serif);font-size:clamp(22px,4vw,32px);font-weight:300;font-style:italic;color:var(--color-text);letter-spacing:.04em}.footer-names{font-weight:400;color:var(--color-rose);letter-spacing:0}.footer-sub{margin-top:16px;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--color-muted);opacity:.6}.footer-share-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;margin-top:28px;padding:10px 20px;border-radius:10px;font-family:var(--font-sans);font-size:14px;cursor:pointer;transition:border-color .2s ease,background .2s ease}.footer-replay-btn{display:inline-flex;align-items:center;gap:6px;margin:14px auto 0;padding:6px 10px;background:none;border:none;cursor:pointer;font-family:var(--font-sans);min-height:44px;font-size:13px;letter-spacing:0;color:var(--color-muted);opacity:.8;transition:opacity .25s ease}.footer-replay-btn:hover{opacity:1}.footer-env{position:relative;width:280px;height:200px;margin:8px auto 26px;perspective:900px;cursor:pointer;border-radius:6px;filter:drop-shadow(0 12px 22px rgba(60,40,50,.12))}.footer-env:focus-visible{outline:2px solid var(--color-plum);outline-offset:6px}.footer-farewell{display:inline-block;min-height:1.5em;margin:0 auto 36px;font-family:Charm,Trirong,serif;font-size:26px;line-height:1.5;color:#4e3e44}#finale{position:relative;width:100%}.finale-stage{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;min-height:100svh;padding:56px 24px 24px;text-align:center}.finale-letter{width:min(84vw,340px);aspect-ratio:3 / 4;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:28px 22px;background:var(--paper-cotton, none) 0 0 / var(--paper-tile, 256px) #fffdf9;background-size:100% 100%;border:1px solid rgba(80,60,70,.1);border-radius:1.5px;box-shadow:0 1px 2px #3c28320f,0 16px 48px #3c28321a}.finale-letter .monogram-crest{margin-bottom:8px}.finale-note{font-family:Charm,Trirong,serif;font-size:19px;color:#4e3e44}.finale-letter--drawn>*{opacity:0}.finale-hint,.finale-snap{display:none}#finale.finale--3d{display:block;height:300svh;min-height:0}.finale--3d .finale-stage{position:sticky;top:0;display:block;height:100svh;min-height:0;padding:0}.finale--3d .finale-letter{position:absolute;left:50%;top:50%;transform:translate(-50%,-54%)}.finale--3d .footer-env{position:absolute;left:50%;top:50%;margin:-130px 0 0 -140px;opacity:0;pointer-events:none}.finale--sealed .footer-env{pointer-events:auto}.finale--3d .finale-farewell{position:absolute;left:0;right:0;top:calc(50% + 92px);opacity:0;transition:opacity .5s ease}.finale--sealed .finale-farewell{opacity:1}.finale--3d .finale-hint{display:block;position:absolute;left:0;right:0;bottom:max(28px,env(safe-area-inset-bottom));font-size:12px;color:var(--color-muted);opacity:0;transition:opacity .6s ease .8s}.finale--sealed .finale-hint{opacity:.8}.finale--3d .finale-snap{display:block;position:absolute;left:0;width:1px;height:1px;scroll-snap-align:start;scroll-snap-stop:always}.finale-snap--mid{top:100svh}.finale-snap--end{top:200svh}.scroll-nav{position:fixed;right:20px;top:50%;transform:translateY(-50%);z-index:100;display:flex;flex-direction:column;gap:10px;opacity:0;animation:fadeIn .6s ease 1.5s forwards}.scroll-nav-dot{width:6px;height:6px;border-radius:50%;background:transparent;border:1px solid rgba(46,42,40,.3);cursor:pointer;transition:transform .3s ease,background .3s ease,height .3s ease,border-radius .3s ease}.scroll-nav-dot:hover{background:#2e2a2833}.scroll-nav-dot.active{background:var(--color-plum);border-color:var(--color-plum);height:18px;border-radius:3px;transform:none}@media (max-width: 480px){.scroll-nav{right:10px}}.btn-submit,.map-btn--navigate,.letter-continue,.share-action-btn--native{background:var(--color-plum);color:var(--color-ivory);border:1px solid var(--color-plum);box-shadow:none}.btn-submit:hover,.map-btn--navigate:hover,.letter-continue:hover,.share-action-btn--native:hover{background:#3b2e3a;border-color:#3b2e3a}.map-btn--calendar,.gb-show-more,.gallery-view-all-btn,.footer-share-btn,.share-action-btn--copy,.share-action-btn--line,.share-action-btn--fb{background:transparent;color:var(--color-text);border:1px solid rgba(46,42,40,.28);box-shadow:none}.map-btn--calendar:hover,.gb-show-more:hover,.gallery-view-all-btn:hover,.footer-share-btn:hover,.share-action-btn--copy:hover,.share-action-btn--line:hover,.share-action-btn--fb:hover{border-color:var(--color-plum);background:#4a3a480a}:where(.btn-submit,.letter-continue,.map-btn,.gb-show-more,.footer-share-btn,.share-action-btn,.gallery-view-all-btn):focus-visible{outline:2px solid rgba(74,58,72,.45);outline-offset:2px}.foil{background:linear-gradient(100deg,#9c6558,#b57d70 40%,#efd2c6,#b57d70 60%,#9c6558);background-size:400% 100%;background-position:50% 0;-webkit-background-clip:text;background-clip:text;color:transparent;padding-block:.2em}.section-label.foil{display:inline-block;background-image:linear-gradient(100deg,#7e4c42,#93594d 42%,#c99585,#93594d 58%,#7e4c42)}.hero-name.foil{margin-block:-.2em}@keyframes foil-sweep{0%{background-position:100% 0}to{background-position:0% 0}}@supports (animation-timeline: view()){@media (prefers-reduced-motion: no-preference){.foil{animation:foil-sweep linear both;animation-timeline:view()}.hero-name--first.foil{animation:fadeInUp 1.1s cubic-bezier(.23,1,.32,1) .15s both,foil-sweep linear both;animation-timeline:auto,view()}.hero-name--second.foil{animation:fadeInUp 1.1s cubic-bezier(.23,1,.32,1) .45s both,foil-sweep linear both;animation-timeline:auto,view()}}}@media (prefers-reduced-motion: no-preference){.ink.reveal{transform:none;filter:blur(7px);color:var(--color-rose);-webkit-mask-image:radial-gradient(closest-side,#000 55%,transparent),radial-gradient(closest-side,#000 55%,transparent),radial-gradient(closest-side,#000 55%,transparent);mask-image:radial-gradient(closest-side,#000 55%,transparent),radial-gradient(closest-side,#000 55%,transparent),radial-gradient(closest-side,#000 55%,transparent);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:22% 55%,55% 40%,85% 60%;mask-position:22% 55%,55% 40%,85% 60%;-webkit-mask-size:0% 0%,0% 0%,0% 0%;mask-size:0% 0%,0% 0%,0% 0%;transition:opacity .6s ease,filter 1.6s cubic-bezier(.4,0,.3,1),color 1.8s ease,-webkit-mask-size 1.9s cubic-bezier(.45,0,.3,1),mask-size 1.9s cubic-bezier(.45,0,.3,1)}.ink.reveal.visible{filter:blur(0);color:var(--color-text);-webkit-mask-size:260% 520%,300% 560%,240% 500%;mask-size:260% 520%,300% 560%,240% 500%}}.ink{text-shadow:0 1px 0 rgba(255,255,255,.85),0 -.6px 0 rgba(60,40,45,.16)}.hero-name.foil,.footer-names.foil{filter:drop-shadow(0 1px 0 rgba(255,255,255,.8)) drop-shadow(0 -.6px .4px rgba(90,55,50,.28))}.monogram-crest{position:relative;width:96px;height:96px;margin:0 auto 26px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:-1px -1px #ffffffe6,1px 1.2px 1.2px #5a3c3c29,inset 1px 1px #ffffffe6,inset -1px -1.2px 1.2px #5a3c3c24}.monogram-crest:before{content:"";position:absolute;top:7px;right:7px;bottom:7px;left:7px;border-radius:50%;box-shadow:-.8px -.8px #ffffffe6,.8px 1px 1px #5a3c3c24}.monogram-crest-letters{font-family:var(--font-serif);font-style:italic;font-size:30px;line-height:1;white-space:nowrap;color:transparent;text-shadow:-.8px -.8px 0 rgba(255,255,255,.95),.9px 1.1px 1px rgba(90,60,60,.22)}
