:root{font-family:Ling Sans,PingFang SC,Microsoft YaHei,system-ui,sans-serif;color:#fff4df;background:#342c48;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--color-background: #342c48;--color-text: #fff4df;--color-muted: #e2d4cf;--color-primary: #f2c1b3;--color-ink: #432d49;--color-paper: #f8e7d1;--color-border: #e9c9bb;--radius-sm: 4px;--radius-md: 10px;--space-1: 8px;--space-2: 16px;--space-3: 24px;--space-4: 40px;--page-pad: clamp(32px, 4vw, 72px);--font-display: "Ling Serif", "Songti SC", "STSong", serif;--ease-out: cubic-bezier(.215,.61,.355,1);--duration-scene: .8s;--duration-reveal: .7s;--duration-control: .24s}*{box-sizing:border-box}html{min-height:100%;scroll-behavior:smooth;scrollbar-gutter:stable}html.gift-is-loading{overflow:hidden;overscroll-behavior:none}body{margin:0;min-width:960px;background:var(--color-background)}a{color:inherit;text-decoration:none}button{color:inherit;font:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}button:disabled{cursor:wait;opacity:.72}button:focus-visible,a:focus-visible{outline:3px solid #ffe6ba;outline-offset:7px}h1,h2,p,figure{margin:0}h1,h2{font-family:var(--font-display);font-weight:500;text-wrap:balance}h1:focus,h2:focus{outline:0}button{border:0}button,a{touch-action:manipulation}.ui-icon{display:inline-block;width:22px;height:22px;flex:none;vertical-align:middle}.app-shell{position:relative}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.gift-header{position:fixed;z-index:20;top:5.8vh;left:var(--page-pad);right:var(--page-pad);display:flex;align-items:center;justify-content:space-between;pointer-events:none}.gift-header a,.gift-header button{pointer-events:auto}.wordmark{font-family:Georgia,Times New Roman,serif;font-size:26px;letter-spacing:-.04em}.text-link{display:inline-flex;align-items:center;justify-content:center;gap:12px;padding:9px 0 7px;border:0;border-bottom:1px solid currentColor;background:transparent;font-size:15px;line-height:1.5;letter-spacing:.035em;transition:color var(--duration-control),transform var(--duration-control) var(--ease-out)}.text-link:hover{color:#ffcfad;transform:translateY(-2px)}.button-primary{display:inline-flex;min-height:60px;min-width:250px;align-items:center;justify-content:center;gap:32px;padding:16px 30px;border:1px solid rgba(255,239,221,.35);border-radius:var(--radius-md);background:var(--color-primary);color:var(--color-ink);font-weight:500;font-size:18px;letter-spacing:.08em;box-shadow:0 8px 30px #3520390d;transition:background var(--duration-control),transform var(--duration-control) var(--ease-out),box-shadow var(--duration-control)}.button-primary:hover:not(:disabled){background:#fbd5c6;transform:translateY(-3px);box-shadow:0 12px 30px #23142924}.button-primary:focus-visible{outline-color:#fff8e4}.button-primary:active:not(:disabled){transform:translateY(0) scale(.985);box-shadow:0 4px 16px #23142920}.text-link .ui-icon{transition:transform var(--duration-control) var(--ease-out)}.text-link:hover .ui-icon{transform:translate(3px)}.text-link:active{transform:translateY(0)}.button-small{min-width:218px;min-height:56px}.gift-section{position:relative;height:100svh;min-height:620px;isolation:isolate;overflow:hidden}.section-art{position:absolute;z-index:-1;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;pointer-events:none}.gift-copy{position:relative;margin-left:10.4vw;width:min(39vw,570px)}.gift-copy h1{font-size:clamp(78px,6.65vw,106px);line-height:1.26;letter-spacing:-.025em}.gift-copy h2{font-size:clamp(72px,6.1vw,98px);line-height:1.3;letter-spacing:-.035em;white-space:nowrap}.intro-copy{top:21.5vh}.birthday-copy{top:26vh}.gift-subtitle{margin-top:22px;color:var(--color-text);font-size:clamp(20px,1.65vw,25px);line-height:1.9;font-weight:400;letter-spacing:.035em;text-wrap:pretty}.gift-actions{display:flex;flex-direction:column;align-items:flex-start;gap:20px;margin-top:32px}.scroll-invitation{position:absolute;left:50%;bottom:4.5vh;transform:translate(-50%);display:grid;gap:8px;text-align:center;font-size:14px;letter-spacing:.12em}.scroll-invitation .ui-icon{justify-self:center;animation:invitation 2.5s ease-in-out infinite}.section-pager{position:absolute;z-index:7;bottom:5.4vh;left:var(--page-pad);right:var(--page-pad);display:flex;align-items:center;justify-content:space-between;gap:30px}.memory-environment,.stage-canvas{position:fixed;inset:0;pointer-events:none;opacity:0;transition:opacity var(--duration-scene) var(--ease-out)}.memory-environment{z-index:0}.stage-canvas{z-index:2;width:100%;height:100%}.stage-canvas canvas{display:block;width:100%;height:100%}.memory-environment.is-visible,.stage-canvas.is-visible{opacity:1}.scene-background{position:absolute;inset:0;background:var(--color-background)}.scene-background-layer{position:absolute;inset:0;opacity:0;transition:opacity var(--duration-scene) var(--ease-out)}.scene-background-layer.is-active,.scene-background-layer.is-exiting{opacity:1}.scene-background-layer:before{content:"";position:absolute;inset:0;background-image:var(--scene-bg-image);background-size:cover;background-position:center}.story-flow{position:relative;z-index:3}.story-section{height:100svh;min-height:620px;position:relative}.memory-content{position:absolute;top:14vh;left:10.4vw;width:35vw;max-width:490px}.story-copy h2{font-size:clamp(64px,6.1vw,92px);line-height:1.26;letter-spacing:-.035em}.period{margin-top:9px;font-family:var(--font-display);font-weight:500;font-size:clamp(24px,2.2vw,33px);line-height:1.55;letter-spacing:.02em}.sentence{max-width:420px;margin-top:16px;font-size:18px;line-height:1.95;color:#fff1df;font-weight:400;letter-spacing:.035em;text-wrap:pretty}.story-copy h2,.story-copy .period,.story-copy .sentence,.memory-content .photo-stack{opacity:.2;transform:translate3d(0,14px,0);transition:opacity var(--duration-reveal) var(--ease-out),transform var(--duration-reveal) var(--ease-out)}.story-section.is-active .story-copy>*,.story-section.is-active .memory-content .photo-stack{opacity:1;transform:none}.story-section.is-active .period{transition-delay:60ms}.story-section.is-active .sentence{transition-delay:.11s}.story-section.is-active .photo-stack{transition-delay:.16s}.gift-copy>*,.scroll-invitation{opacity:0;translate:0 14px;transition:opacity var(--duration-reveal) var(--ease-out),translate var(--duration-reveal) var(--ease-out)}.is-entering .gift-section.is-active .gift-copy>*,.is-ready .gift-section.is-active .gift-copy>*,.is-entering .is-active .scroll-invitation,.is-ready .is-active .scroll-invitation{opacity:1;translate:0 0}.gift-section.is-active .gift-subtitle{transition-delay:90ms}.gift-section.is-active .gift-actions{transition-delay:.17s}.gift-section.is-active .scroll-invitation{transition-delay:.24s}.photo-stack{position:relative;display:table;margin:24px 0 0 4px;max-width:min(30vw,380px)}.photo-mat{position:relative}.photo-main-image{position:relative;z-index:3;display:block;width:auto;height:auto;max-width:min(29vw,360px);max-height:36svh;padding:12px;border-radius:4px;background:var(--color-paper);box-shadow:0 18px 50px #2010233b;animation:photo-swap .45s var(--ease-out)}.photo-departing{position:absolute;left:0;top:0;z-index:4;pointer-events:none;animation:photo-depart .45s var(--ease-out) both}.photo-back{position:absolute;z-index:1;inset:0;display:block;border:10px solid #e7d3bc;border-radius:4px;background:#e7d3bc;box-shadow:0 10px 20px #21102730;transform:translate(-15px,12px) rotate(-4deg)}.photo-back-2{z-index:0;transform:translate(14px,14px) rotate(4deg);opacity:.85}.photo-back img{width:100%;height:100%;object-fit:cover;opacity:.3}.photo-controls{position:relative;z-index:4;display:flex;align-items:center;justify-content:center;gap:16px;height:38px;margin-top:26px;font-size:12px;color:#fff0df;text-shadow:0 1px 5px #25172d}.photo-controls button{display:grid;place-items:center;width:38px;height:36px;background:transparent;border-radius:50%;transition:background var(--duration-control),transform var(--duration-control) var(--ease-out)}.photo-controls button:hover{background:#ffe4c52b}.photo-controls button:active{transform:scale(.9)}.photo-controls span{min-width:44px;text-align:center;font-variant-numeric:tabular-nums;letter-spacing:.08em}.memory-progress{display:flex;align-items:center;gap:26px;font-size:14px}.memory-progress>span{opacity:.85}.memory-pager{text-shadow:0 1px 5px #25172d}.candle-flame{position:absolute;z-index:1;transform:translate(-50%,-100%);transform-origin:50% 100%;filter:blur(.65px) drop-shadow(0 0 10px #ffc57e) drop-shadow(0 0 22px #ffcc8c65);pointer-events:none}.candle-flame svg{display:block;width:100%;height:100%;overflow:visible;transform-origin:50% 100%;animation:flame-flicker 1.7s ease-in-out infinite alternate}.wish-blowing .candle-flame{animation:blow-out .65s ease-in forwards}.birthday-copy{z-index:2}.birthday-copy .gift-subtitle{max-width:440px;min-height:46px}.wish-effects{position:absolute;width:0;height:0;z-index:5;pointer-events:none}.candle-smoke{position:absolute;left:0;bottom:-2px;width:calc(var(--wish-unit) * .105);height:calc(var(--wish-unit) * .18);transform:translate(-50%);overflow:visible}.candle-smoke path{stroke:#f9eadf;stroke-width:2.8;stroke-dasharray:200;stroke-dashoffset:200;opacity:0;filter:blur(.7px);animation:smoke-rise 2.4s ease-out both}.candle-smoke path:nth-child(2){stroke:#d4c3cf;stroke-width:4;animation-delay:.14s}.candle-smoke path:nth-child(3){stroke:#fff3da;stroke-width:1.6;animation-delay:.28s}.cake-burst{position:absolute;top:calc(var(--wish-unit) * .235);left:0}.wish-halo{position:absolute;width:calc(var(--wish-unit) * .58);height:calc(var(--wish-unit) * .58);margin:calc(var(--wish-unit) * -.29);border-radius:50%;background:radial-gradient(circle,#fff2c568,#ffd7b128 42%,transparent 70%);animation:wish-bloom 2.2s ease-out both}.wish-ring{position:absolute;width:96px;height:96px;margin:-48px;border:1px solid #ffe6b7;border-radius:50%;box-shadow:0 0 18px #ffe1b56b,inset 0 0 15px #ffe1b526;animation:wish-ring 1.7s ease-out both}.wish-particle{position:absolute;top:0;left:0;display:block;width:var(--size);height:var(--size);margin:calc(var(--size) * -.5);opacity:0;animation:wish-scatter var(--duration) var(--delay) cubic-bezier(.16,.58,.42,1) both;will-change:transform,opacity}.wish-particle.is-star svg{display:block;width:100%;height:100%;fill:#ffe6a7;stroke:#fff7d6;stroke-width:1;filter:drop-shadow(0 0 4px #e7ac66) drop-shadow(0 1px 2px #6d3b68)}.wish-particle.is-star:nth-child(3n) svg{fill:#fff9dd}.wish-particle.is-confetti{height:calc(var(--size) * 1.8);border-radius:2px;background:#f8c0d0;box-shadow:0 1px 3px #673b6455}.wish-particle.is-confetti:nth-child(3n){background:#ffe8aa}.wish-particle.is-confetti:nth-child(3n+1){background:#e1ceff}.wish-celebrating .birthday-copy h2{animation:birthday-greeting .9s var(--ease-out) both}.wish-celebrating .birthday-copy .gift-subtitle{animation:birthday-line .85s .18s var(--ease-out) both}.wish-celebrating .birthday-copy .gift-actions{animation:birthday-line .7s .36s var(--ease-out) both}.quiet-section{position:relative;min-height:100svh;isolation:isolate;background-color:var(--color-background);background-image:var(--quiet-art);background-position:center top;background-size:100% auto;background-repeat:no-repeat}.letter-section{padding:110px var(--page-pad) 40px;background-size:cover;background-position:center;background-attachment:fixed;--letter-gold:#b38943;--letter-soft-ink:#725d65}.letter-stage{position:relative;max-width:1000px;min-height:max(calc(100svh - 240px),calc(var(--envelope-top) + var(--envelope-height) + 96px));margin:0 auto;perspective:1600px;--envelope-width:min(56vw,720px);--envelope-height:calc(var(--envelope-width) * .566);--envelope-top:128px}.letter-paper{position:relative;z-index:3;width:min(780px,74vw);min-height:610px;margin:0 auto;padding:52px 58px 66px;border:40px solid transparent;border-image:var(--paper-edge-art) 132 / 40px / 0 stretch round;color:var(--color-ink);background-color:#fbefdc;background-image:var(--letter-paper-art);background-size:660px auto;background-clip:padding-box;box-shadow:0 18px 55px #21132e20;opacity:0;transform:translateY(100px) scale(.8);transform-origin:50% 0}.letter-paper-heading h2{font-size:46px;line-height:1.5;text-align:center;outline:0;letter-spacing:.035em}.letter-ornament{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:24px;color:var(--letter-gold)}.letter-ornament i{width:62px;height:1px;background:currentColor;opacity:.6}.letter-ornament svg{width:25px;height:25px;fill:currentColor;stroke:currentColor;stroke-width:.6}.letter-body{position:relative;display:flow-root;margin-top:54px;font-family:var(--font-display);font-size:21px;line-height:2.15;letter-spacing:.035em;overflow-wrap:anywhere}.letter-body p{position:relative;z-index:1;white-space:pre-wrap;margin:0 0 1.65em;transition:color .3s var(--ease-out)}.letter-body p:last-child{margin-bottom:0}.letter-body.has-reading-focus p{color:var(--letter-soft-ink)}.letter-body.has-reading-focus [data-reading-current],.letter-body.has-selection p{color:var(--color-ink)}.reading-lamp{position:absolute;z-index:0;top:-10px;left:-28px;right:-28px;height:var(--reading-height,0px);transform:translate3d(0,var(--reading-top,0px),0);background:radial-gradient(ellipse at 50% 50%,#fff6d7aa,transparent 76%);opacity:0;pointer-events:none;transition:transform .38s var(--ease-out),opacity .22s}.reading-lamp:before{content:"";position:absolute;left:0;top:12px;width:2px;height:min(64px,calc(100% - 24px));border-radius:2px;background:var(--letter-gold);opacity:.8}.has-reading-focus .reading-lamp{opacity:1}.has-selection .reading-lamp{opacity:0}.reading-focus-control{position:absolute;z-index:4;top:6px;right:28px;display:flex;align-items:center;gap:9px;padding:8px 0 8px 8px;background:transparent;color:#81653e;font-size:13px;letter-spacing:.04em;transition:color var(--duration-control)}.reading-focus-control>span{width:7px;height:7px;border:1px solid currentColor;border-radius:50%}.reading-focus-control[aria-pressed=true]>span{background:var(--letter-gold)}.reading-focus-control:hover{color:var(--color-ink)}.reading-focus-control:focus-visible{outline-color:var(--letter-gold)}.letter-placeholder{min-height:230px;display:grid;place-items:center;color:#78634c;font-size:16px;letter-spacing:.04em}.envelope-rig{position:absolute;z-index:2;top:var(--envelope-top);left:50%;width:var(--envelope-width);height:var(--envelope-height);transform:translate(-50%);transform-style:preserve-3d;pointer-events:none}.envelope-back{position:absolute;inset:1.5% 1%;border:1px solid #f5d9b8;border-radius:4px;background:var(--color-paper) var(--paper-art) center/760px auto;box-shadow:0 24px 48px #26172f40}.envelope-front,.envelope-flap{position:absolute;inset:0;background:var(--stationery-art) center/100% 100% no-repeat}.envelope-front{z-index:5;clip-path:polygon(0 0,0 9%,2% 17%,46% 64%,50% 66%,54% 64%,98% 17%,100% 9%,100% 0,100% 100%,0 100%)}.envelope-flap{z-index:6;clip-path:polygon(0 0,100% 0,100% 9%,98% 17%,54% 64%,50% 66%,46% 64%,2% 17%,0 9%);transform-origin:50% 1%;backface-visibility:visible}.wax-seal{position:absolute;z-index:8;left:50%;top:64%;width:27%;height:auto;translate:-50% -50%;filter:drop-shadow(0 5px 5px #70414f4a)}.envelope-sheet{position:absolute;z-index:3;width:86%;height:90%;left:7%;top:5%;border:18px solid transparent;border-image:var(--paper-edge-art) 132 / 18px / 0 stretch;background:#fbefdc var(--letter-paper-art) center/660px auto;background-clip:padding-box;box-shadow:0 -2px 10px #7c4c4a1a;transform-origin:50% 100%}.sheet-ornament{display:block;margin-top:30px;text-align:center;color:var(--letter-gold);font-size:22px}.letter-invitation{position:absolute;z-index:7;top:0;width:100%;text-align:center}.letter-invitation h2{position:absolute;width:100%;top:17px;font-size:50px;line-height:1.45}.letter-invitation .button-primary{position:absolute;left:50%;top:calc(var(--envelope-top) + var(--envelope-height) + 32px);translate:-50% 0}.letter-opening .letter-invitation,.letter-reading .letter-invitation,.letter-sealed .letter-paper{visibility:hidden}.letter-opening .wax-seal{animation:seal-release .45s var(--ease-out) both}.letter-opening .envelope-flap{animation:flap-open .65s .16s var(--ease-out) both}.letter-opening .envelope-sheet{animation:paper-extract 1.15s .45s var(--ease-out) both}.letter-opening .envelope-rig{animation:envelope-present .65s var(--ease-out) both,envelope-retreat .7s 1.25s var(--ease-out) forwards}.letter-opening .letter-paper{animation:paper-arrive .85s 1.25s var(--ease-out) both}.letter-reading .letter-paper{opacity:1;transform:none}.letter-reading .envelope-rig{visibility:hidden}.letter-reading .letter-body{animation:body-reveal .4s ease-out both}.letter-pager{position:relative;bottom:auto;left:auto;right:auto;margin-top:26px}.wall-section{padding:120px var(--page-pad) 55px}.wall-layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:48px;max-width:1240px;margin:0 auto;align-items:start}.wall-heading{position:sticky;top:130px;padding-top:50px}.wall-heading h2{font-size:66px;line-height:1.3}.wall-heading p{margin-top:22px;font-size:22px;font-weight:400;letter-spacing:.04em}.photo-wall{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 28px}.photo-wall figure{width:fit-content;max-width:100%;min-width:0;justify-self:center;padding:12px 12px 0;background:var(--color-paper);color:var(--color-ink);border-radius:3px;box-shadow:0 12px 35px #22142d24;transform:rotate(-.7deg);transition:transform .22s}.photo-wall figure:nth-child(2n){transform:rotate(.65deg)}.photo-wall figure:hover{transform:translateY(-5px) rotate(0)}.photo-wall a{display:block}.photo-wall img{display:block;width:auto;max-width:100%;height:clamp(240px,31vh,310px);object-fit:contain}.photo-wall figcaption{display:grid;place-items:center;min-height:50px;font-family:var(--font-display);font-size:22px}.wall-pager{max-width:1240px;margin:65px auto 0;display:flex;justify-content:space-between}.directory{position:fixed;width:min(740px,85vw);max-height:85svh;margin:auto;padding:36px 40px 42px;border:1px solid #f4d8d533;border-radius:14px;background:#342b46f5;color:var(--color-text);box-shadow:0 30px 120px #150c2c80}.directory::backdrop{background:#1c142b9c;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}html:has(.directory[open]){overflow:hidden}.directory-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:25px}.directory-heading h2{font-size:38px}.close-button{display:grid;place-items:center;width:42px;height:42px;background:transparent;border-radius:50%}.close-button:hover{background:#ffffff14}.scene-rail{display:grid;grid-template-columns:1fr 1fr;gap:6px 32px}.scene-rail a{display:flex;gap:16px;align-items:center;min-height:58px;padding:10px 8px;border-bottom:1px solid #fff1df18;font-size:18px;transition:color var(--duration-control),background var(--duration-control),padding var(--duration-control) var(--ease-out)}.scene-rail a:hover,.scene-rail a.active{color:#ffd1b9;background:#e3b4cb0a}.scene-rail a:hover{padding-left:14px}.directory-number{width:34px;font-size:12px;opacity:.65}.directory-arrow{margin-left:auto;opacity:.6}.loading-screen{position:fixed;z-index:100;inset:0;overflow:hidden;background:radial-gradient(ellipse at 50% 60%,#59405a,#302b45 80%);color:#ffe6c9;transition:opacity .7s var(--ease-out),visibility .7s}.loading-screen.is-leaving{opacity:0;visibility:hidden;pointer-events:none}.loading-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .7s}.has-art .loading-art{opacity:1}.loading-wordmark{position:absolute;top:10.5%;left:50%;translate:-50% 0;font-family:var(--font-display);font-weight:400;font-size:clamp(42px,4.4vw,66px);line-height:1;color:#ffe1bd}.loading-wordmark>span{position:absolute;left:36%;top:-.1em;font-size:.24em}.loading-copy{position:absolute;top:56.5%;left:50%;translate:-50% 0;width:min(82vw,740px);text-align:center}.loading-copy h1{font-size:clamp(36px,3.5vw,55px);font-weight:500;line-height:1.5;letter-spacing:.07em;outline:0;white-space:nowrap}.loading-copy p{margin-top:13px;color:#e9c7bb;font-size:clamp(17px,1.65vw,24px);line-height:1.8;letter-spacing:.12em}.loading-progress{position:relative;width:min(30vw,450px);height:4px;margin:34px auto 0;border-radius:4px;background:#eab9ce30}.loading-progress-fill{position:relative;height:100%;border-radius:inherit;background:linear-gradient(90deg,#e9b2b0,#ffe4bf);box-shadow:0 0 14px #f5c5a535;transition:width .42s var(--ease-out)}.loading-progress-fill>span{position:absolute;right:0;top:50%;translate:50% -50%;font-size:29px;line-height:1;color:#ffe3ae;text-shadow:0 0 12px #f8ad5f;animation:progress-star 2.2s ease-in-out infinite}.loading-percent{display:block;margin-top:17px;font-family:Georgia,serif;font-size:22px;font-variant-numeric:tabular-nums;letter-spacing:.04em}.loading-percent small{font-size:.72em;margin-left:3px}.loading-starlight{position:absolute;inset:0;pointer-events:none}.loading-starlight i{position:absolute;color:#ffdeb0;font-size:15px;font-style:normal;text-shadow:0 0 16px #ffbd75;animation:star-twinkle 3s var(--twinkle-delay) ease-in-out infinite}.loading-retry{margin-top:18px;font-size:15px}.loading-screen[data-loading-state=error] .loading-copy p{letter-spacing:.04em}.directory[open]{animation:directory-arrive .35s var(--ease-out) both}@keyframes invitation{50%{transform:translateY(5px)}}@keyframes photo-swap{0%{opacity:0}to{opacity:1}}@keyframes photo-depart{0%{opacity:1}to{opacity:0}}@keyframes progress-star{50%{opacity:.75;scale:.85}}@keyframes star-twinkle{0%,to{opacity:.35;scale:.75}50%{opacity:1;scale:1.15}}@keyframes directory-arrive{0%{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}@keyframes flame-flicker{0%{transform:rotate(-2deg) scaleX(.94)}to{transform:rotate(2deg) scaleY(1.03)}}@keyframes blow-out{30%{transform:translate(-50%,-100%) skew(22deg) scale(.8,1.1);opacity:1}to{transform:translate(-30%,-100%) skew(40deg) scale(.05,.1);opacity:0}}@keyframes smoke-rise{0%{opacity:0;stroke-dashoffset:200;transform:translateY(8px)}18%{opacity:.85}65%{opacity:.6;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-40;transform:translateY(-22px) scaleX(1.3)}}@keyframes wish-bloom{0%{opacity:0;transform:scale(.3)}22%{opacity:1}to{opacity:0;transform:scale(1.35)}}@keyframes wish-ring{0%{opacity:0;transform:scale(.25)}15%{opacity:.8}to{opacity:0;transform:scale(5.5)}}@keyframes wish-scatter{0%{opacity:0;transform:translateZ(0) rotate(0) scale(.15)}12%{opacity:1}48%{opacity:1;transform:translate3d(var(--apex-x),var(--apex-y),0) rotate(var(--turn)) scale(1.12)}76%{opacity:1}to{opacity:0;transform:translate3d(var(--dx),var(--dy),0) rotate(var(--turn)) scale(.6)}}@keyframes birthday-greeting{0%{opacity:0;transform:translateY(22px) scale(.97);text-shadow:0 0 0 transparent}70%{text-shadow:0 0 24px #ffe3a260}to{opacity:1;transform:none;text-shadow:0 0 0 transparent}}@keyframes birthday-line{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes seal-release{35%{opacity:1;transform:translateY(-5px) rotate(-4deg) scale(1.02)}to{opacity:0;transform:translateY(-44px) rotate(-15deg) scale(.94)}}@keyframes flap-open{to{transform:rotateX(-170deg);z-index:1}}@keyframes paper-extract{0%,15%{transform:translateY(0);opacity:1}72%{transform:translateY(-210px) scale(1.04);opacity:1}to{transform:translateY(-270px) scale(1.1);opacity:0}}@keyframes envelope-present{to{transform:translate(-50%,32px) scale(.92)}}@keyframes envelope-retreat{0%{transform:translate(-50%,32px) scale(.92);opacity:1}to{transform:translate(-50%,100px) scale(.9);opacity:0}}@keyframes paper-arrive{0%{opacity:0;transform:translateY(64px) rotateX(-10deg) scale(.86)}to{opacity:1;transform:none}}@keyframes body-reveal{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}@media(max-height:820px){.gift-header{top:32px}.gift-copy h1{font-size:clamp(72px,6.6vw,94px)}.gift-copy h2{font-size:78px}.gift-copy{top:20vh}.gift-subtitle{font-size:23px;margin-top:14px}.gift-actions{margin-top:25px;gap:14px}.button-primary{min-height:56px}.memory-content{top:13.7vh}.story-copy h2{font-size:72px}.period{font-size:28px;margin-top:8px}.sentence{font-size:16px;line-height:1.85;max-width:370px;margin-top:12px}.photo-stack{margin-top:20px}.photo-main-image{max-height:32svh;padding:10px}.section-pager:not(.letter-pager){bottom:4.2vh}.letter-section{padding-top:96px;padding-bottom:24px}.letter-paper{min-height:500px;padding:38px 46px 46px;border-width:32px;border-image-width:32px}.letter-paper-heading h2{font-size:40px}.letter-ornament{margin-top:18px}.letter-body{margin-top:38px;font-size:20px}.letter-placeholder{min-height:190px}.letter-stage{min-height:max(calc(100svh - 210px),calc(var(--envelope-top) + var(--envelope-height) + 96px));--envelope-width:min(52vw,600px);--envelope-top:86px}.letter-invitation h2{top:6px;font-size:44px}.letter-pager{margin-top:22px}.reading-focus-control{top:6px;right:24px}.wall-section{padding-top:105px}.wall-heading{top:100px}}@media(max-width:1180px){.gift-copy{margin-left:7vw;width:40vw}.gift-copy h1{font-size:82px}.gift-copy h2{font-size:76px}.memory-content{left:7vw;width:38vw}.story-copy h2{font-size:70px}.wall-layout{grid-template-columns:200px minmax(0,1fr);gap:30px}.wall-heading h2{font-size:52px}.photo-wall{gap:25px 20px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-delay:0ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
