:root{--bg-0:#180f1c;--bg-1:#2e1b33;--rose:#ff9aae;--cream:#f3e7dd;--lavender:#7c6a99;--slow:cubic-bezier(.16, .6, .2, 1);--sheet-bg:#fff;--sheet-text:#2b1f27;--sheet-muted:#948a92;--sheet-accent:#99354f;--sheet-handle:#e6dee2}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{color:var(--cream);background:var(--bg-0);font-family:Inter,sans-serif;position:relative;overflow:hidden}.bg{background:var(--bg-0);z-index:0;position:fixed;inset:0;overflow:hidden}.blob{filter:blur(60px);opacity:.5;border-radius:50%;position:absolute}.blob1{background:radial-gradient(circle, var(--bg-1), transparent 70%);width:420px;height:420px;animation:26s ease-in-out infinite drift1;top:-120px;left:-100px}.blob2{background:radial-gradient(circle, var(--lavender), transparent 70%);opacity:.22;width:360px;height:360px;animation:30s ease-in-out infinite drift2;bottom:-140px;right:-80px}.blob3{background:radial-gradient(circle, var(--rose), transparent 70%);opacity:.1;width:300px;height:300px;animation:34s ease-in-out infinite drift3;top:40%;left:60%}@keyframes drift1{0%,to{transform:translate(0)}50%{transform:translate(60px,40px)}}@keyframes drift2{0%,to{transform:translate(0)}50%{transform:translate(-50px,-30px)}}@keyframes drift3{0%,to{transform:translate(0)scale(1)}50%{transform:translate(-40px,30px)scale(1.15)}}.preloader{z-index:20;background:var(--bg-0);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.pre-text{text-align:center;opacity:0;font-family:Cormorant Garamond,serif;font-size:clamp(22px,5vw,32px);font-style:italic;font-weight:400;line-height:1.6}.pre-text .line2{color:var(--rose);margin-top:2px;font-style:normal;font-weight:500;display:block}.pre-text.reveal{animation:fadeUp 2.2s var(--slow) forwards}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeSlideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.preloader.hide{animation:fadeOut 1.8s var(--slow) forwards;pointer-events:none}@keyframes fadeOut{to{opacity:0;visibility:hidden}}.identity-gate{z-index:25;text-align:center;background:var(--bg-0);flex-direction:column;justify-content:center;align-items:center;gap:22px;padding:32px;display:flex;position:fixed;inset:0}.identity-prompt{color:var(--cream);opacity:0;animation:fadeSlideUp .9s var(--slow) .15s forwards;font-family:Cormorant Garamond,serif;font-size:clamp(24px,6vw,30px);font-style:italic;font-weight:400}.identity-options{opacity:0;animation:fadeSlideUp .9s var(--slow) .36s forwards;gap:14px;display:flex}.identity-btn{color:var(--cream);cursor:pointer;transition:background .4s var(--slow), transform .3s var(--slow);background:#ffffff0f;border:1px solid #ffffff24;border-radius:999px;padding:14px 28px;font-family:Inter,sans-serif;font-size:15px;font-weight:500}.identity-btn:hover{background:#ff9aae24}.identity-btn:active{transform:scale(.96)}.identity-hint{letter-spacing:.02em;color:var(--lavender);opacity:0;max-width:240px;animation:fadeSlideUp .9s var(--slow) .55s forwards;font-size:12px}.app{z-index:1;text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100vh;padding:32px;display:flex;position:relative}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--lavender);opacity:0;margin-bottom:10px;font-size:12px}.name{color:var(--cream);opacity:0;margin-bottom:48px;font-family:Cormorant Garamond,serif;font-size:clamp(26px,6vw,32px);font-style:italic;font-weight:400}.tap-wrap{opacity:0}.app.enter .eyebrow{animation:fadeSlideUp .9s var(--slow) .1s forwards}.app.enter .name{animation:fadeSlideUp 1s var(--slow) .28s forwards}.app.enter .tap-wrap{animation:fadeSlideUp 1.1s var(--slow) .48s forwards}.tap-wrap{justify-content:center;align-items:center;width:200px;height:200px;margin-bottom:40px;display:flex;position:relative}.aura{background:radial-gradient(circle,#ff9aae59,#0000 70%);border-radius:50%;width:100%;height:100%;animation:4.2s ease-in-out infinite breathe;position:absolute}@keyframes breathe{0%,to{opacity:.55;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}.tap-btn{cursor:pointer;background:linear-gradient(160deg, #ffb4c2, var(--rose) 60%, #e27087);width:128px;height:128px;transition:transform .5s var(--slow);border:none;border-radius:50%;justify-content:center;align-items:center;display:flex;position:relative}.tap-btn:active{transform:scale(.92)}.tap-btn svg{width:44px;height:44px}.ripple{pointer-events:none;width:128px;height:128px;animation:rippleOut 1.6s var(--slow) forwards;border:1.5px solid #ff9aae8c;border-radius:50%;position:absolute}@keyframes rippleOut{to{opacity:0;transform:scale(2.1)}}.status{color:var(--lavender);letter-spacing:.01em;min-height:18px;transition:opacity .8s var(--slow), transform .8s var(--slow);font-size:13px}.receive-stage{z-index:15;transition:opacity 1.2s var(--slow);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.receive-text{color:var(--rose);text-align:center;transition:opacity 1.6s var(--slow);font-family:Cormorant Garamond,serif;font-size:clamp(24px,6vw,30px);font-style:italic;font-weight:500}.rising-heart{opacity:0;animation:linear forwards riseUp;position:absolute;bottom:-40px}@keyframes riseUp{0%{opacity:0;transform:translateY(0)scale(.6)}12%{opacity:.9}to{opacity:0;transform:translateY(-70vh)scale(1.1)}}.float-btn{z-index:8;cursor:pointer;width:24px;height:24px;color:var(--cream);transition:transform .3s var(--slow);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex;position:fixed;top:24px;right:24px}.float-btn:hover{transform:scale(1.05)}.float-btn svg{width:24px;height:24px}.activity-sheet{z-index:7;background:var(--sheet-bg);height:50vh;transition:transform .4s var(--slow);touch-action:none;border-radius:24px 24px 0 0;flex-direction:column;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -8px 30px #00000040}.activity-sheet.dragging{transition:none}.sheet-handle-area{cursor:grab;justify-content:center;padding:14px 0 10px;display:flex}.sheet-handle{background:var(--sheet-handle);border-radius:999px;width:44px;height:4px}.sheet-body{flex:1;padding:4px 24px;overflow-y:auto}.sheet-row{opacity:0;animation:fadeSlideUp .5s var(--slow) both;border-bottom:1px solid #f1ebee;justify-content:space-between;align-items:center;padding:14px 0;display:flex}.sheet-row:last-child{border-bottom:none}.sheet-row-label{color:var(--sheet-text);font-size:15px;font-weight:500}.sheet-row-time{color:var(--sheet-accent);font-size:14px}.sheet-empty{color:var(--sheet-muted);opacity:0;animation:fadeSlideUp .5s var(--slow) both;padding:20px 0;font-size:14px}.sheet-total{color:var(--sheet-text);border-top:1px solid #f1ebee;justify-content:space-between;align-items:center;padding:16px 24px 24px;font-size:15px;font-weight:500;display:flex}.sheet-total span:last-child{color:var(--sheet-accent)}.page-nav-btn{z-index:8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);width:40px;height:40px;color:var(--cream);transition:background .4s var(--slow), transform .3s var(--slow);background:#ffffff0f;border:1px solid #ffffff1f;border-radius:50%;justify-content:center;align-items:center;text-decoration:none;display:flex;position:fixed;top:50%;transform:translateY(-50%)}.page-nav-btn:hover{background:#ffffff1a}.page-nav-btn:active{transform:translateY(-50%)scale(.94)}.page-nav-btn svg{opacity:.85;width:18px;height:18px}.page-nav-left{left:14px}.page-nav-right{right:14px}.page-nav-btn.light{color:#2b1f27;background:#0000000b;border:1px solid #00000017}.page-nav-btn.light:hover{background:#00000014}.route-curtain{z-index:50;background:radial-gradient(circle at 50% 50%, var(--bg-1) 0%, var(--bg-0) 72%);opacity:0;pointer-events:none;transition:opacity .36s var(--slow);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.route-curtain.cover{opacity:1;pointer-events:all}.route-curtain .curtain-heart{width:34px;height:34px;color:var(--rose);opacity:0;transition:opacity .3s var(--slow) 80ms, transform .3s var(--slow) 80ms;transform:scale(.8)}.route-curtain.cover .curtain-heart{opacity:.9;animation:1s ease-in-out .1s infinite curtainPulse;transform:scale(1)}@keyframes curtainPulse{0%,to{transform:scale(1)}50%{transform:scale(1.14)}}.moments-page{color:#2b1f27;min-height:100vh;position:relative;overflow:hidden}.moments-bg{z-index:0;background:#fff;position:fixed;inset:0;overflow:hidden}.moments-bg .blob{opacity:.28}.moments-content{z-index:1;text-align:center;opacity:0;min-height:100vh;animation:fadeSlideUp .9s var(--slow) .15s forwards;flex-direction:column;justify-content:center;align-items:center;gap:28px;padding:48px 40px;display:flex;position:relative}.moments-empty{color:#948a92;font-family:Cormorant Garamond,serif;font-size:19px;font-style:italic}.moments-prompt{color:#99354f;cursor:pointer;max-width:300px;transition:opacity .3s var(--slow), transform .3s var(--slow);background:0 0;border:none;font-family:Cormorant Garamond,serif;font-size:clamp(22px,6vw,28px);font-style:italic;font-weight:500;line-height:1.5}.moments-prompt:hover{opacity:.72}.moments-prompt:active{transform:scale(.97)}.moments-reveal{flex-direction:column;align-items:center;gap:20px;display:flex}.moments-photo{object-fit:cover;width:min(78vw,340px);max-height:58vh;animation:momentReveal .7s var(--slow) both;border-radius:18px;box-shadow:0 20px 50px #2b1f2729}@keyframes momentReveal{0%{opacity:0;transform:translateY(14px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.moments-rolling{background:linear-gradient(120deg,#99354f0f,#99354f29,#99354f0f) 0 0/200% 100%;border-radius:18px;width:min(78vw,340px);height:44vh;max-height:320px;animation:1.3s ease-in-out infinite momentShimmer}@keyframes momentShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.moments-again{color:#99354f;cursor:pointer;transition:background .3s var(--slow), transform .3s var(--slow);background:#99354f14;border:1px solid #99354f2e;border-radius:999px;padding:10px 22px;font-family:Inter,sans-serif;font-size:13px;font-weight:500}.moments-again:hover{background:#99354f24}.moments-again:active{transform:scale(.96)}.moments-limit{color:#948a92;opacity:0;max-width:260px;animation:fadeSlideUp .6s var(--slow) forwards;font-family:Cormorant Garamond,serif;font-size:16px;font-style:italic}.moments-meta{z-index:1;opacity:0;animation:fadeSlideUp .8s var(--slow) .35s forwards;flex-direction:column;align-items:center;gap:4px;display:flex;position:fixed;bottom:28px;left:0;right:0}.moments-count{letter-spacing:.08em;text-transform:uppercase;color:#948a92;animation:fadeUp .5s var(--slow) both;font-size:11px}.moments-hint{color:#b98a9a;animation:fadeUp .5s var(--slow) both;font-size:11px}
