@font-face{font-family:Cormorant Garamond;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/cormorant-garamond-latin-400-normal-B-1hWBU7.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-400-normal-B7YtguxJ.woff) format("woff")}@font-face{font-family:Cormorant Garamond;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/cormorant-garamond-latin-400-italic-Dc_OZ8oc.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-400-italic-BLh7T8o8.woff) format("woff")}:root{font-family:"Noto Serif SC",Songti SC,STSong,serif;color:#dfd5c4;background:#050507;font-synthesis:none;font-weight:400;color-scheme:dark;--muted:#98928a;--line:rgba(211,190,153,.22);--gold:#d5ba88}*{box-sizing:border-box}html,body,#root{margin:0;width:100%;height:100%;overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;background:none;border:0}button:disabled{opacity:.45;cursor:wait}button:focus-visible,a:focus-visible{outline:2px solid #e0c390;outline-offset:5px}button{transition:color .2s,background .2s,border-color .2s,opacity .2s,transform .2s}button:hover{color:#fff4df}button:active{transform:translateY(1px)}.experience{width:100%;height:100%;position:relative;isolation:isolate}.universe{position:absolute;top:0;right:0;bottom:0;left:0;touch-action:none}.universe canvas{width:100%;height:100%;display:block}.masthead{position:absolute;top:28px;left:36px;right:36px;display:flex;align-items:flex-start;justify-content:space-between;z-index:3;pointer-events:none}.dedication{display:flex;flex-direction:column;gap:5px;letter-spacing:3px;font-family:Cormorant Garamond,Georgia,serif}.dedication>span{font-size:20px}.dedication small{font-size:12px;letter-spacing:2.5px;color:#aaa59c}.tools{display:flex;gap:12px;pointer-events:auto}.round{width:38px;height:38px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;background:#0b0b0f59;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.round:hover{background:#c2a97b1f;border-color:#bba47d}.english{font-family:Cormorant Garamond,Georgia,serif;font-style:italic;letter-spacing:1px}.eyebrow{font:10px/1.8 Cormorant Garamond,Georgia,serif;letter-spacing:3px;color:#aba094}.opening{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:100px 24px 30px;text-align:center;pointer-events:none}.opening>*{pointer-events:auto}.intro-eyebrow{font-size:11px;margin:0 0 26px;animation:arrive 1.8s both}.opening h1{font-size:clamp(23px,2.75vw,42px);font-weight:300;letter-spacing:.15em;margin:0;line-height:1.9;animation:arrive 2.4s .3s both}.opening-english{font-size:clamp(15px,1.3vw,20px);color:#b2a796;margin:16px 0 0;animation:arrive 2.4s 1.2s both}.mobile-break{display:none}.invitation{display:flex;align-items:center;flex-direction:column;opacity:0;transform:translateY(12px);transition:opacity 1.6s,transform 1.6s;margin-top:52px;pointer-events:none;visibility:hidden}.invitation.shown{opacity:1;transform:none;pointer-events:auto;visibility:visible}.invitation>svg{color:var(--gold);margin-bottom:6px}.invitation-title{font-size:15px;letter-spacing:3px;margin:14px 0 22px}.pill{display:inline-flex;gap:14px;align-items:center;justify-content:center;padding:13px 23px;min-height:45px;border:1px solid #756954;border-radius:30px;background:#121111ad;font-size:13px;letter-spacing:1px}.pill:hover{border-color:#cbb38d;background:#211d19}.primary{border-color:#9f8c68;box-shadow:0 0 35px #ba976714}.text-button{display:inline-flex;gap:10px;align-items:center;padding:10px 2px;font-size:12px;letter-spacing:1px}.secondary{margin-top:13px;color:#aaa198}.privacy{font-family:system-ui,sans-serif;font-size:10px;letter-spacing:.4px;color:#797671;margin-top:20px}.error{font:12px/1.9 system-ui,sans-serif;max-width:430px;color:#d8b4a0;margin:18px 0 0}.scene-heading{position:absolute;top:28px;left:25%;right:25%;text-align:center;pointer-events:none;animation:arrive 2s both}.scene-heading h1{font-size:17px;font-weight:400;letter-spacing:4px;line-height:1.8;margin:0}.scene-heading .english{font-size:11px;letter-spacing:2px;margin:9px 0 0;color:#ada28f}.scene-controls{position:absolute;bottom:44px;left:50%;transform:translate(-50%);text-align:center;min-width:360px;pointer-events:none}.scene-controls>svg{color:#d6bd8f}.scene-controls>p{font-size:15px;letter-spacing:3px;margin:9px 0 6px}.scene-controls>.eyebrow{font-size:9px;letter-spacing:3px}.control-row{display:flex;align-items:center;justify-content:center;gap:17px;margin-top:18px;pointer-events:auto}.control-row i{height:12px;width:1px;background:var(--line)}.control{display:flex;align-items:center;gap:8px;font-size:11px;color:#aaa194;padding:7px 0}.count{font-family:Georgia,serif;color:#766f65;font-size:10px}.mouse-hint{position:absolute;bottom:15px;left:50%;transform:translate(-50%);font:10px system-ui,sans-serif;letter-spacing:1px;color:#756f65;pointer-events:none;white-space:nowrap}footer{position:absolute;left:36px;right:36px;bottom:30px;display:flex;align-items:center;justify-content:space-between;pointer-events:none}footer button{pointer-events:auto}.camera-status{display:flex;align-items:center;gap:9px;font-size:11px;letter-spacing:.8px;color:#aaa59a;padding:8px 0}.camera-status.on svg{color:#a6cbaa}.camera-status.loading{opacity:.7}.letter-link{display:flex;align-items:center;gap:14px;border-bottom:1px solid #a18c69;font-size:12px;letter-spacing:2px;padding:8px 0}.camera-error{position:absolute;bottom:190px;left:50%;transform:translate(-50%);background:#171516ec;border:1px solid #65554b;border-radius:8px;padding:13px 16px;max-width:460px;display:flex;gap:12px;font:12px/1.8 system-ui,sans-serif}.camera-error button{padding:0}.hand-cursor{position:absolute;pointer-events:none;width:26px;height:26px;color:#f8d578;transform:translate(-50%,-50%);z-index:8;filter:drop-shadow(0 1px 2px #000) drop-shadow(0 0 5px #e8bc6266);transition:color .12s,filter .12s}.hand-cursor svg{display:block;width:100%;height:100%}.hand-cursor.target{color:#fff2c4;filter:drop-shadow(0 1px 2px #000) drop-shadow(0 0 7px #f5d17799)}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10;display:flex;align-items:center;justify-content:center;padding:24px;background:#030305bd;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px);animation:arrive .35s both}.dialog{position:relative;max-height:calc(100dvh - 48px);overflow:auto;outline:none;background:#101012;border:1px solid var(--line);box-shadow:0 30px 100px #0008}.close{position:absolute;right:18px;top:18px;z-index:2}.dialog h2{font-weight:400;letter-spacing:2px}.photo-dialog{width:min(940px,90vw);background:#0d0d10;border:1px solid #71655450;overflow:visible;display:flex;flex-direction:column;align-items:center;padding:26px 55px 23px}.photo-stage{height:min(60vh,640px);width:100%;display:flex;align-items:center;justify-content:center}.photo-stage img{max-width:100%;max-height:100%;object-fit:contain;box-shadow:0 8px 30px #0006;animation:arrive .35s}.photo-caption{text-align:center;margin-top:23px}.photo-caption .eyebrow{font-size:9px;letter-spacing:2px}.photo-caption p{font-size:15px;letter-spacing:2px;margin:10px 0}.photo-caption .english{font-size:14px;color:#9e9488}.photo-prev,.photo-next{position:absolute;top:44%;background:#111014d9}.photo-prev{left:-20px}.photo-next{right:-20px}.photo-instruction{font:10px system-ui,sans-serif;color:#77716a;margin:22px 0 0;letter-spacing:1px}.gallery-dialog{width:min(1100px,94vw);padding:42px}.gallery-title{margin-bottom:30px}.gallery-title h2{margin:12px 0 8px;font-size:27px}.gallery-title p{font-size:12px;color:#9e968b}.photo-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:20px}.photo-grid button{text-align:left;padding:0}.photo-grid img{width:100%;height:155px;object-fit:contain;background:#1c1b1d;padding:6px;transition:transform .3s}.photo-grid button:hover img{transform:translateY(-3px)}.photo-grid span{display:block;font:10px Georgia,serif;color:#a59b8d;padding:8px 0;letter-spacing:2px}.help-dialog{width:530px;padding:45px}.help-dialog h2{font-size:24px;margin:15px 0}.muted{font:12px/1.9 system-ui,sans-serif;color:#a49c90}.gesture-list{margin:26px 0;display:flex;flex-direction:column;gap:24px}.gesture-list>div{display:flex;align-items:center;gap:21px}.gesture-list svg{width:27px;height:27px;color:#c8af86;flex-shrink:0}.gesture-list span{display:flex;flex-direction:column;gap:6px}.gesture-list b{font-size:14px;font-weight:400;letter-spacing:1px}.gesture-list small{font:11px/1.8 system-ui,sans-serif;color:#9f978b}.mouse-guide{border-top:1px solid var(--line);padding-top:20px;font:11px/2 system-ui,sans-serif;color:#a49c90;margin-bottom:25px}.letter-dialog{width:590px;padding:48px 60px;background:#171514;border-color:#62553e}.letter-dialog>.eyebrow{color:#a59881}.letter-salutation{font:italic 26px Cormorant Garamond,Georgia,serif;color:#d8c3a0;margin:34px 0 16px}.letter-dialog h2{font-size:27px;margin:0 0 25px}.letter-body{font-size:14px;line-height:2.3;letter-spacing:.6px;color:#c9bfae}.letter-body p{margin:0 0 19px}.letter-english{font-size:17px;line-height:1.7;color:#bda988;margin:24px 0}.letter-sign{display:flex;flex-direction:column;align-items:flex-end;gap:8px;font-size:13px;margin-top:27px}.letter-sign small{font:12px Georgia,serif;color:#a39784;letter-spacing:1.5px}.letter-dialog>.text-button{margin-top:20px;font-size:10px;color:#9d907c}.scene-error{position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);text-align:center;font-size:14px;display:flex;flex-direction:column;gap:24px;align-items:center}@keyframes arrive{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media(min-width:1600px){.masthead{top:32px;left:44px;right:44px}.scene-heading{top:32px}.scene-heading h1{font-size:20px}.scene-controls{bottom:54px}.scene-controls>p{font-size:17px}.scene-controls>.eyebrow{font-size:10px}.control{font-size:12px}.mouse-hint{bottom:20px}footer{bottom:36px;left:44px;right:44px}.letter-link{font-size:14px}.camera-status{font-size:12px}}@media(max-height:700px){.opening{padding-top:75px}.invitation{margin-top:25px}.privacy{margin-top:12px}.scene-controls{bottom:35px}.scene-controls>svg{display:none}.scene-controls>p{font-size:13px}.control-row{margin-top:8px}.scene-heading h1{font-size:14px}.photo-stage{height:52vh}.photo-caption{margin-top:13px}.photo-instruction{margin-top:12px}.letter-dialog{padding:30px 45px}}@media(max-width:750px){.masthead{top:22px;left:20px;right:20px}.dedication>span{font-size:16px}.dedication small{font-size:10px}.tools{gap:8px}.round{width:34px;height:34px}.scene-heading{top:91px;left:20px;right:20px}.scene-heading h1{font-size:13px;letter-spacing:1.8px}.scene-heading .english{font-size:10px;letter-spacing:.4px}.mobile-break{display:block}.opening h1{font-size:26px;letter-spacing:2px}.opening-english{font-size:14px;letter-spacing:.3px}.intro-eyebrow{font-size:9px}.invitation-title{font-size:13px;letter-spacing:1px}.scene-controls{bottom:92px;min-width:320px}.scene-controls>p{font-size:12px;letter-spacing:1px}.scene-controls>.eyebrow{font-size:8px;letter-spacing:1.5px}.control-row{margin-top:12px}footer{left:20px;right:20px;bottom:38px}.camera-status{font-size:10px;max-width:55%;text-align:left}.letter-link{font-size:11px;letter-spacing:1px}.mouse-hint{bottom:17px;font-size:9px}.scrim{padding:15px}.dialog{max-height:calc(100dvh - 30px)}.photo-dialog{width:93vw;padding:45px 15px 20px}.photo-stage{height:54vh}.photo-prev{left:0}.photo-next{right:0}.photo-caption p{font-size:12px;letter-spacing:1px}.photo-caption .english{font-size:12px}.gallery-dialog{padding:30px 20px}.photo-grid{grid-template-columns:repeat(3,1fr);gap:12px}.photo-grid img{height:120px}.help-dialog{padding:38px 25px}.help-dialog h2{font-size:21px}.letter-dialog{padding:37px 27px}.letter-dialog h2{font-size:24px}.letter-body{font-size:13px}.camera-error{width:85%;bottom:200px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.letter-dialog.birthday-card{width:min(520px,calc(100vw - 32px));padding:45px 48px 48px;text-align:center;border:1px solid #b6a17c55;border-radius:4px;background:radial-gradient(ellipse at 50% 0%,#40302645,transparent 65%),#161310;box-shadow:0 25px 100px #0009,inset 0 0 0 9px #bca07808;color:#eee1c9}.birthday-sparkles{display:flex;align-items:center;justify-content:center;gap:23px;color:#b99a65;font-size:10px;margin:0 0 27px}.birthday-sparkles span{font-size:23px}.birthday-dear{font:400 19px/1.5 Cormorant Garamond,Georgia,serif;letter-spacing:1.2px;color:#baa98e;margin:0 0 22px}.birthday-card h2.birthday-title{font:400 clamp(36px,5vw,49px)/1.06 "Cormorant Garamond",Georgia,serif;letter-spacing:-.6px;margin:0;color:#f2e6d1}.birthday-title em{font-weight:400}.birthday-title span{color:#e8c78f}.birthday-divider{display:flex;align-items:center;justify-content:center;gap:18px;margin:29px 0 25px}.birthday-divider i{width:42px;height:1px;background:#ad91654d}.birthday-divider span{font-size:22px;line-height:1.5}.birthday-wishes{font:400 23px/1.65 Cormorant Garamond,Georgia,serif;letter-spacing:.3px;color:#beaf97;margin:0}.birthday-wishes span{color:#f0dec0}.birthday-card .close{width:30px;height:30px;top:13px;right:13px;border-color:#b6a17c30;background:transparent;color:#b1a18b}@media(max-height:650px){.letter-dialog.birthday-card{padding:28px 35px}.birthday-sparkles,.birthday-dear{margin-bottom:15px}.birthday-card h2.birthday-title{font-size:39px}.birthday-divider{margin:18px 0 14px}.birthday-wishes{font-size:21px;line-height:1.5}}@media(max-width:420px){.letter-dialog.birthday-card{padding:38px 24px}.birthday-card h2.birthday-title{font-size:39px}.birthday-wishes{font-size:22px}}.experience.intro,.experience.permission{background:#000}.experience.intro .universe,.experience.permission .universe{visibility:hidden}.birthday-prologue{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;background:#000;z-index:4}.birthday-field{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.birthday-field span{position:absolute;left:var(--x);top:var(--y);width:max-content;max-width:38vw;text-align:center;transform:translate(-50%,-50%);opacity:0;font:400 var(--size)/1.4 "Cormorant Garamond","Songti SC",serif;letter-spacing:.5px;color:#e7d5b5;text-shadow:0 0 12px #e6be6e20;animation:var(--glimmer) var(--duration) var(--delay) ease-in-out both}.birthday-field span:nth-child(3n){color:#f1eae0}.birthday-field span:nth-child(4n){color:#c4b0ce}@keyframes birthday-glimmer{0%,32%,50%,to{opacity:0;text-shadow:0 0 0 transparent}10%{opacity:.95;text-shadow:0 0 15px #e6be6e55}23%{opacity:.16}65%{opacity:.72;text-shadow:0 0 9px #e6be6e35}82%{opacity:.09}}@keyframes birthday-glimmer-soft{0%,41%,56%,to{opacity:0;text-shadow:0 0 0 transparent}16%{opacity:.78;text-shadow:0 0 12px #e6be6e44}29%{opacity:.12}72%{opacity:.95;text-shadow:0 0 14px #e6be6e44}87%{opacity:.08}}.camera-permission{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;gap:15px;text-align:center;color:#c9b795;background:#000}.camera-permission p{font:14px/1.9 system-ui,sans-serif;max-width:420px}.camera-permission .pill{margin-top:12px}.birthday-card h2.birthday-title{font-size:clamp(25px,4vw,39px);white-space:nowrap;line-height:1.2;letter-spacing:-.7px}.letter-dialog.birthday-card{width:min(590px,calc(100vw - 32px))}@media(max-width:480px){.letter-dialog.birthday-card{padding-left:18px;padding-right:18px}.birthday-card h2.birthday-title{font-size:clamp(23px,6.8vw,31px);letter-spacing:-.65px}.birthday-field span{font-size:calc(var(--size)*.52);overflow-wrap:anywhere}}@media(prefers-reduced-motion:reduce){.birthday-field span{animation:none!important;opacity:.8}}.photo-dialog{padding:30px 44px;width:min(1100px,94vw)}.photo-dialog .photo-stage{height:min(78vh,850px)}.upright-photo{display:block;width:100%;height:100%;filter:drop-shadow(0 8px 18px #0006)}.photo-dialog .photo-prev,.photo-dialog .photo-next{top:calc(50% - 19px)}@media(max-width:750px){.photo-dialog{padding:44px 14px 20px}.photo-dialog .photo-stage{height:72vh}}@keyframes birthday-gentle{0%,to{opacity:0}35%,65%{opacity:.78}}.experience.messages{background:#000}.experience.messages .universe{visibility:hidden}.birthday-sequence{position:absolute;top:0;right:0;bottom:0;left:0;background:#000;z-index:4}.birthday-sequence canvas{display:block;width:100%;height:100%}.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}.camera-corner{display:flex;align-items:center;gap:12px;pointer-events:auto}.camera-preview{display:block;width:112px;height:84px;object-fit:cover;transform:scaleX(-1);border:1px solid #c8af864d;border-radius:9px;background:#090909;box-shadow:0 3px 15px #0005;pointer-events:none}@media(max-width:750px){.camera-preview{width:88px;height:66px}.camera-corner{gap:8px}}.birthday-wishes-canvas{display:block;width:100%;height:100%}
