:root{--ink:#3a2e39}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{color:var(--ink);background:linear-gradient(#fff0f6,#ffe6ee);font-family:Segoe UI,Roboto,PingFangSC,Microsoft YaHei,sans-serif;overflow-x:hidden}body.is-intro{overflow:hidden}#hearts{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.heart{width:var(--size,16px);height:var(--size,16px);filter:drop-shadow(0 2px 6px #ff7aa259);background:linear-gradient(135deg,#ff9fb3,#ff7aa2);border-radius:3px;animation:linear forwards floatUp;position:absolute;bottom:-40px;left:0;transform:rotate(45deg)}.heart:before,.heart:after{content:"";background:inherit;border-radius:50%;width:100%;height:100%;position:absolute}.heart:before{left:-50%}.heart:after{top:-50%}@keyframes floatUp{0%{opacity:0;transform:translateY(0)translate(0)rotate(45deg)}10%{opacity:.85}to{transform:translateY(-110vh) translateX(var(--dx,0)) rotate(45deg);opacity:0}}.wrap{z-index:1;place-items:center;min-height:100vh;padding:32px;display:grid;position:relative}.card{text-align:center;background:#ffffffd9;border-radius:24px;width:min(820px,96vw);padding:24px;box-shadow:0 10px 40px #0000001f}h1{margin:16px 0 8px;font-size:clamp(28px,8vw,48px)}.timer{flex-wrap:wrap;justify-content:center;gap:12px;margin:16px 0;display:flex}.pill{background:#fff;border-radius:12px;min-width:90px;padding:12px;box-shadow:0 4px 10px #00000014}.pill b{font-size:24px;display:block}.section{width:min(920px,96vw);margin:18px auto 0}.muted{opacity:.65;font-size:13px}.memory-section{width:min(920px,96vw);margin:22px auto 48px}.memory-head{text-align:center;margin:0 0 18px}.memory-head h2{letter-spacing:.3px;margin:0;font-size:clamp(22px,4vw,28px);font-weight:800}.memory-head p{color:#a05b73;margin:6px 0 0;font-size:13px}.memory-state{text-align:center;color:#a05b73;background:#ffffff8c;border:1px dashed #ffd0de;border-radius:18px;padding:28px 16px}.memory-state.err{color:#c0392b;border-color:#ffc9c9}.memory-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px;display:grid}.memory-card{background:#ffffffeb;border:1px solid #ffe4ee;border-radius:18px;flex-direction:column;transition:transform .2s,box-shadow .2s;display:flex;overflow:hidden;box-shadow:0 8px 24px #ff7aa21a}.memory-card:hover{transform:translateY(-2px);box-shadow:0 12px 28px #ff7aa229}.memory-photo{aspect-ratio:4/3;background:linear-gradient(#fff0f5,#ffe6ee);overflow:hidden}.memory-photo img{object-fit:cover;width:100%;height:100%;display:block}.memory-body{flex-direction:column;flex:1;gap:10px;padding:14px 14px 16px;display:flex}.memory-note{white-space:pre-wrap;flex:1;font-size:14px;line-height:1.6}.muted-note{color:#b08a97}.memory-time{color:#a05b73;opacity:.85;font-size:12px}.gate{z-index:900;background:radial-gradient(680px 380px at 50% 30%,#ffb6ce80,#0000 60%),linear-gradient(160deg,#ffd6e6 0%,#ffe9f1 45%,#fff5f8 100%);place-items:center;padding:20px;display:grid;position:fixed;inset:0}.gate-card{text-align:center;background:#ffffffeb;border:1px solid #fff;border-radius:22px;width:min(400px,92vw);padding:28px 22px 24px;box-shadow:0 16px 40px #ff6f9c2e}.gate-heart{filter:drop-shadow(0 6px 14px #ff69964d);background:linear-gradient(135deg,#ff8fb0,#ff5f8f);border-radius:4px;width:42px;height:42px;margin:0 auto 14px;position:relative;transform:rotate(-45deg)}.gate-heart:before,.gate-heart:after{content:"";background:inherit;border-radius:50%;width:42px;height:42px;position:absolute}.gate-heart:before{top:0;left:21px}.gate-heart:after{top:-21px;left:0}.gate-card h2{margin:0;font-size:22px}.gate-hint{color:#a05b73;margin:8px 0 18px;font-size:13px}.gate-input{width:100%;font:inherit;background:#fff;border:1px solid #ffd0de;border-radius:12px;outline:none;margin-bottom:12px;padding:12px 14px}.gate-input:focus{border-color:#ff7aa2;box-shadow:0 0 0 3px #ff7aa226}.gate-btn{width:100%;font:inherit;color:#fff;cursor:pointer;background:linear-gradient(135deg,#ff8fb0,#ff6d97);border:none;border-radius:12px;padding:12px 14px;font-weight:700}.gate-btn:disabled{opacity:.6;cursor:not-allowed}.gate-msg{color:#c0392b;min-height:20px;margin-top:10px;font-size:13px}.icp{z-index:2;color:#a05b73;background:#ffffffb8;border-radius:999px;padding:6px 10px;font-size:12px;position:fixed;bottom:12px;left:50%;transform:translate(-50%);box-shadow:0 4px 12px #ff7aa226}.icp a{color:inherit;text-decoration:none}.icp a:hover{text-decoration:underline}body.is-intro .wrap,body.is-intro .icp,body.is-intro #hearts{opacity:0;visibility:hidden;pointer-events:none}.wrap,.icp,#hearts{opacity:1;visibility:visible;transition:opacity .9s,visibility .9s}#loveIntro{z-index:1000;background:radial-gradient(700px 420px at 50% 35%,#ffb6ce8c,#0000 60%),linear-gradient(160deg,#ffd6e6 0%,#ffe9f1 45%,#fff5f8 100%);place-items:center;transition:opacity .85s,visibility .85s;display:grid;position:fixed;inset:0}#loveIntro.hide{opacity:0;visibility:hidden;pointer-events:none}.intro-inner{text-align:center;max-width:92vw;padding:24px}.intro-heart{filter:drop-shadow(0 10px 22px #ff699659);width:78px;height:78px;margin:0 auto 18px;animation:1.1s ease-in-out infinite heartBeat;position:relative;transform:rotate(-45deg)}.intro-heart:before,.intro-heart:after{content:"";background:linear-gradient(135deg,#ff8fb0,#ff5f8f);border-radius:50%;width:78px;height:78px;position:absolute}.intro-heart:before{top:0;left:39px}.intro-heart:after{top:-39px;left:0}.intro-heart-core{background:linear-gradient(135deg,#ff8fb0,#ff5f8f);border-radius:6px;position:absolute;inset:0}@keyframes heartBeat{0%,to{transform:rotate(-45deg)scale(1)}14%{transform:rotate(-45deg)scale(1.14)}28%{transform:rotate(-45deg)scale(.96)}42%{transform:rotate(-45deg)scale(1.1)}70%{transform:rotate(-45deg)scale(1)}}.intro-names{letter-spacing:.5px;opacity:0;font-size:clamp(22px,5vw,34px);font-weight:800;animation:.7s .25s forwards introIn;transform:translateY(14px)}.intro-line{color:#a05b73;letter-spacing:2px;opacity:0;margin-top:10px;font-size:14px;animation:.7s .55s forwards introIn;transform:translateY(10px)}.intro-bar{opacity:0;background:#ffffffa6;border-radius:999px;width:min(220px,60vw);height:4px;margin:22px auto 0;animation:.5s .7s forwards introIn;overflow:hidden}.intro-bar>i{border-radius:inherit;background:linear-gradient(90deg,#ff9fb3,#ff6d97);width:0%;height:100%;animation:2.4s cubic-bezier(.45,.05,.25,1) .85s forwards introLoad;display:block}.intro-tip{color:#b06b80;opacity:0;margin-top:12px;font-size:12px;animation:.5s 1s forwards introIn}@keyframes introIn{to{opacity:1;transform:translateY(0)}}@keyframes introLoad{to{width:100%}}#introHearts{pointer-events:none;position:absolute;inset:0;overflow:hidden}.intro-petal{width:var(--s,14px);height:var(--s,14px);opacity:.75;filter:drop-shadow(0 2px 6px #ff7aa240);background:linear-gradient(135deg,#ffb3c7,#ff7aa2);border-radius:3px;animation:linear forwards introFloat;position:absolute;bottom:-30px;transform:rotate(45deg)}.intro-petal:before,.intro-petal:after{content:"";background:inherit;border-radius:50%;width:100%;height:100%;position:absolute}.intro-petal:before{left:-50%}.intro-petal:after{top:-50%}@keyframes introFloat{0%{opacity:0;transform:translateY(0)translate(0)rotate(45deg)}12%{opacity:.8}to{transform:translateY(-110vh) translateX(var(--dx,0)) rotate(45deg);opacity:0}}
