/* Interaction layer. No third-party font, animation or tracking requests. */
:root{--gold:#b9a37e;--deep:#466473}
body.sealed{overflow:hidden}.opening{position:fixed;inset:0;z-index:80;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(ellipse at 50% 30%,#f8faf6 0,#e9eeed 48%,#ccd9df 100%);padding:25px;color:#496572;isolation:isolate;transition:opacity .85s ease,visibility .85s}.opening:before,.opening:after{content:"";position:absolute;border:1px solid #a5b9c247;border-radius:50%;width:80vh;height:80vh;z-index:-1;pointer-events:none}.opening:after{width:88vh;height:88vh}.opening.opened{opacity:0;visibility:hidden;pointer-events:none}.opening .eyebrow{font-size:8px;letter-spacing:.4em;margin:0 0 20px}.opening h2{font-size:27px;line-height:1.7;letter-spacing:.18em;text-align:center;margin:0 0 42px}.envelope{position:relative;width:min(310px,83vw);height:206px;perspective:900px;filter:drop-shadow(0 15px 20px #48657721)}.envelope-back{position:absolute;inset:0;background:#809aa8;border-radius:3px}.letter{position:absolute;left:17px;right:17px;top:13px;height:166px;background:#fffdf7;border:1px solid #d8d6ca;text-align:center;padding-top:31px;transition:transform 1s ease .15s}.letter p{font:italic 24px Georgia,serif;margin:0;color:#8097a0}.letter span{display:block;font-size:9px;letter-spacing:.3em;margin-top:20px}.envelope-front{position:absolute;inset:0;background:linear-gradient(150deg,#dce6e9,#b7ccd5);clip-path:polygon(0 0,50% 56%,100% 0,100% 100%,0 100%);border-radius:3px}.envelope-fold{position:absolute;inset:0;background:linear-gradient(155deg,#ecf0ee,#c7d9e0);clip-path:polygon(0 0,100% 0,50% 57%);transform-origin:50% 0;transition:transform .8s ease;z-index:2}.seal-button{position:absolute;top:82px;left:50%;transform:translateX(-50%);width:66px;height:66px;border-radius:50%;border:4px double #a5bbc5;background:radial-gradient(circle at 35% 25%,#a7bec8,#6e8b9c);box-shadow:0 5px 13px #344d6733,inset 0 0 0 4px #94adb9;color:#f8f9f5;font-family:var(--serif);font-size:19px;letter-spacing:.12em;z-index:3;animation:seal-breathe 3s ease-in-out infinite}.seal-button:after{content:"";position:absolute;inset:7px;border:1px solid #d2dde275;border-radius:50%}.opening-hint{font-size:10px;letter-spacing:.13em;color:#7a919c;margin:30px 0 0}.opening-skip{margin-top:18px;background:transparent;border:0;color:#8b9ea6;font-size:10px;padding:10px;text-underline-offset:5px;text-decoration:underline}.opening.opening-now .envelope-fold{transform:rotateX(175deg)}.opening.opening-now .letter{transform:translateY(-65px)}.opening.opening-now .seal-button{animation:none;opacity:0;transition:opacity .25s}.opening.opening-now .opening-hint{opacity:0}.opening-foot{font:italic 17px Georgia,serif;position:absolute;bottom:30px;color:#91a6ae}.sheet{transition:filter .9s}.sealed .sheet{filter:blur(3px)}.hero-photo{transition:transform 2.4s cubic-bezier(.2,.6,.3,1);transform:scale(1.035)}body.entered .hero-photo{transform:scale(1)}.hero-heading,.cover-bottom{transition:opacity 1.5s ease,translate 1.5s ease}.sealed .hero-heading,.sealed .cover-bottom{opacity:0;translate:0 16px}.scroll-reveal{opacity:1;transform:none}.has-reveal .scroll-reveal{opacity:0;transform:translateY(28px);transition:opacity 1s ease,transform 1s cubic-bezier(.2,.65,.3,1)}.has-reveal .scroll-reveal.is-visible{opacity:1;transform:none}.photo-card{perspective:1000px}.photo-slot{transition:transform .45s ease,box-shadow .45s ease;transform-style:preserve-3d}.photo-slot:hover{box-shadow:0 9px 23px #4565771a;transform:translateY(-4px)}.photo-slot:not(.has-photo){cursor:pointer}.photo-slot.flipped{background:#dce6e8}.photo-slot.flipped .empty-mark{opacity:0;transform:rotateY(60deg)}.empty-mark{transition:opacity .4s,transform .6s}.photo-whisper{position:absolute;inset:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:17px;text-align:center;opacity:0;transform:rotateY(-70deg);transition:opacity .5s,transform .6s;pointer-events:none}.photo-whisper em{font:italic 16px Georgia,serif;color:#879da7}.photo-whisper span{font:14px/2.2 var(--serif);letter-spacing:.09em;color:#506e7c;white-space:pre-line}.flipped .photo-whisper{opacity:1;transform:rotateY(0)}.gallery-hint{text-align:center;font-size:9px;letter-spacing:.13em;color:#8c9da4;margin:0 0 25px}.cover-view{position:absolute;left:19px;bottom:calc(25% + 12px);background:#fbf9f4c9;border:1px solid #f9fbfa8c;color:#496574;padding:8px 11px;border-radius:20px;font-size:9px;letter-spacing:.06em;backdrop-filter:blur(7px);display:flex;gap:6px;align-items:center}.cover-view svg{width:12px;height:12px}.music-toggle{position:fixed;top:calc(17px + env(safe-area-inset-top));right:max(calc((100vw - 520px)/2 + 17px),17px);z-index:25;width:39px;height:39px;border:1px solid #f6f9f5a8;background:#fbf9f4be;border-radius:50%;padding:0;display:grid;place-items:center;backdrop-filter:blur(8px);box-shadow:0 2px 9px #45657712;color:#506c7d}.music-toggle svg{width:17px;height:17px}.music-toggle.playing svg{animation:record-spin 8s linear infinite}.music-toggle .music-slash{display:block}.music-toggle.playing .music-slash{display:none}.sealed .music-toggle,.sealed .bottom-nav{visibility:hidden}.music-caption{position:fixed;right:max(calc((100vw - 520px)/2 + 14px),14px);top:calc(62px + env(safe-area-inset-top));font-size:8px;writing-mode:vertical-rl;letter-spacing:.19em;color:#6b8897;z-index:20;pointer-events:none;opacity:0;transition:opacity .3s}.music-caption.show{opacity:1}.reading-progress{position:fixed;left:max(calc((100vw - 520px)/2),0px);top:0;height:2px;width:min(100vw,520px);transform:scaleX(0);transform-origin:0 0;background:linear-gradient(90deg,#99b2bf,#baab8b);z-index:30;pointer-events:none}.chapter{scroll-margin-top:24px}.countdown-wrap{padding-top:28px;border-top:1px solid #bacbd47a;margin-top:30px}.countdown-caption{font-size:10px;letter-spacing:.16em;margin-bottom:21px;color:#78919f}.countdown{display:flex;justify-content:center;gap:17px}.countdown-item{min-width:38px}.countdown-item strong{font:28px Georgia,serif;font-weight:400;display:block;color:#59788a;font-variant-numeric:tabular-nums}.countdown-item span{display:block;font-size:8px;color:#91a5af;letter-spacing:.12em;margin-top:9px}.countdown-colon{font:20px Georgia,serif;color:#b2c1c9;align-self:flex-start;padding-top:3px}.calendar-button{display:inline-flex;gap:8px;align-items:center;border:0;border-bottom:1px solid #a9bec9;background:none;font-size:10px;letter-spacing:.1em;margin-top:26px;padding:8px 0}.blessing{padding:66px 28px 26px;text-align:center;position:relative;background:radial-gradient(ellipse at 50% 37%,#e6edf0,transparent 65%)}.blessing h2{font-size:25px;margin:16px 0}.blessing-copy{font-size:11px;letter-spacing:.1em;line-height:2;color:#8298a4;margin:0}.wish-stage{position:relative;height:185px;margin:12px 0 0;display:grid;place-items:center}.wish-ring{position:absolute;border:1px solid #b8cbd164;width:158px;height:158px;border-radius:50%;pointer-events:none}.wish-ring:before{content:"✦";position:absolute;left:10px;top:15px;color:#b2a384;font-size:13px}.wish-ring:after{content:"✧";position:absolute;bottom:19px;right:4px;font-size:16px;color:#95aebc}.wish-button{width:105px;height:105px;border:1px solid #b5c7cc;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:radial-gradient(ellipse at 40% 35%,#fffef9,#e6eeef);box-shadow:0 0 0 7px #c5d5db29,0 12px 24px #5a778a12;transition:transform .3s,box-shadow .3s}.wish-button:hover{transform:scale(1.045)}.wish-button:active{transform:scale(.94)}.wish-button svg{width:24px;height:24px;stroke:#a38c6a;fill:#c3af8d17;transition:fill .4s}.wish-button.lit{box-shadow:0 0 0 7px #d6c6a62f,0 0 45px #c2b58a4f}.wish-button.lit svg{fill:#c0a67666}.wish-button span{font-size:10px;letter-spacing:.1em}.wish-message{font:15px/2 var(--serif);letter-spacing:.09em;color:#6a8491;min-height:60px;margin:0;white-space:pre-line}.wish-choices{display:flex;justify-content:center;gap:9px;margin:16px 0 9px;flex-wrap:wrap}.wish-choices button{border:1px solid #ccd8dc;background:#fdfbf6;padding:8px 12px;border-radius:20px;font-size:9px;letter-spacing:.1em;transition:all .3s}.wish-choices button[aria-pressed="true"]{border-color:#8ca7b5;background:#e8eef0;color:#4a6b7d}.wish-small{font-size:8px;letter-spacing:.08em;color:#9aaab1;margin:18px 0 0}.closing{padding-top:25px}.bottom-nav{width:290px}.bottom-nav button{flex:1;border:0;background:transparent;text-align:center;font-size:10px;letter-spacing:.13em;padding:14px 0}.bottom-nav a.active{color:#344f61;font-weight:600}.share-panel{border:0;border-radius:8px;width:min(88vw,380px);padding:34px 26px;background:var(--paper);color:var(--ink);text-align:center;box-shadow:0 20px 80px #172a4366}.share-panel::backdrop{background:#243d5280;backdrop-filter:blur(4px)}.share-panel h2{font-size:22px;margin:0 0 20px}.share-panel p{font-size:12px;line-height:2;color:#8296a1}.share-panel input{border:1px solid #cad6dc;border-radius:3px;padding:12px;width:100%;background:white;color:#587687;font-size:11px}.share-actions{display:flex;gap:10px;margin-top:19px}.share-actions button{flex:1;border:1px solid #9bb0bc;background:#e9eff1;color:#4e6c7d;padding:11px;font-size:11px}.share-actions .quiet{background:transparent}.lightbox{width:100vw;max-width:100vw;height:100svh;max-height:100svh;border:0;border-radius:0;margin:0;padding:62px 18px 90px;overflow:hidden;touch-action:pan-y}.lightbox img{max-height:calc(100svh - 160px);max-width:100%;user-select:none;-webkit-user-drag:none}.lightbox .lightbox-close{top:16px;right:19px}.lightbox .photo-prev,.lightbox .photo-next{top:50%;transform:translateY(-50%);background:#ffffff20;border-radius:50%;width:37px;height:37px;padding:0;font:24px Georgia,serif;color:#fff;backdrop-filter:blur(8px);z-index:2}.lightbox .photo-prev{left:13px;right:auto}.lightbox .photo-next{right:13px;left:auto}.lightbox .photo-prev[disabled],.lightbox .photo-next[disabled]{opacity:.2;cursor:default}.photo-counter{position:absolute;bottom:48px;left:0;right:0;text-align:center;font:11px Georgia,serif;letter-spacing:.3em;color:#e4edf0}.photo-swipe-hint{position:absolute;bottom:23px;left:0;right:0;text-align:center;font-size:9px;letter-spacing:.1em;color:#9bafb9}.particle{position:fixed;z-index:90;pointer-events:none;left:0;top:0;width:7px;height:7px;background:var(--particle-color,#c7b68d);border-radius:2px;will-change:transform,opacity;animation:float-away var(--life,1.8s) cubic-bezier(.13,.4,.7,1) forwards}.particle.heart{width:10px;height:10px;clip-path:polygon(50% 92%,0 40%,0 18%,12% 4%,32% 4%,50% 22%,68% 4%,88% 4%,100% 18%,100% 40%)}.botanical{position:absolute;pointer-events:none;width:90px;color:#9cb3bd66;right:-18px;bottom:9px;transform:rotate(-18deg)}.event .botanical{width:110px;left:-36px;right:auto;top:33px;bottom:auto;transform:rotate(25deg)}.editor .editor-help{line-height:1.8}.nojs-note{position:fixed;inset:0;z-index:100;background:#edf1ee;padding:30vh 30px;text-align:center;font:18px/2 var(--serif)}
@keyframes seal-breathe{0%,100%{box-shadow:0 5px 13px #344d6733,0 0 0 0 #9bb5bf33}50%{box-shadow:0 5px 13px #344d6733,0 0 0 11px #9bb5bf00}}
@keyframes record-spin{to{transform:rotate(360deg)}}
@keyframes float-away{0%{transform:translate(var(--x),var(--y)) rotate(0);opacity:0}12%{opacity:1}100%{transform:translate(calc(var(--x) + var(--dx)),calc(var(--y) + var(--dy))) rotate(var(--spin));opacity:0}}
@media(min-width:800px){.opening h2{font-size:32px}.envelope{width:340px;height:225px}.seal-button{top:91px}.opening-foot{bottom:40px}}
@media(max-width:360px){.opening h2{font-size:24px}.envelope{height:190px}.seal-button{top:74px}.blessing h2{font-size:23px}.photo-whisper span{font-size:12px}.wish-choices{gap:6px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;scroll-behavior:auto!important;transition-duration:.01ms!important}.has-reveal .scroll-reveal{opacity:1;transform:none}.particle{display:none}.hero-photo{transform:none}}
@media print{.opening,.music-toggle,.music-caption,.reading-progress,.cover-view,.blessing,.share-panel,.gallery-hint,.particle{display:none!important}body.sealed{overflow:visible}.sealed .sheet{filter:none}.sealed .hero-heading,.sealed .cover-bottom,.has-reveal .scroll-reveal{opacity:1;transform:none;translate:none}}
.closing .end-word{font-size:clamp(23px,6vw,29px);letter-spacing:0}@media(max-width:360px){.countdown{gap:10px}}
.event-date{font-size:clamp(26px,8vw,36px);white-space:nowrap}@media(max-width:360px){.event h2{font-size:24px;letter-spacing:.07em}.countdown-item span{letter-spacing:0;font-size:7px;white-space:nowrap}}
