/* 星光爱情小屋：不用 Google 字体（国内慢），系统楷体/黑体兜底 */
:root{--bg:#0d0811;--plum:#1b0f21;--rose:#f0a28c;--blush:#ffd1c1;--lav:#b7a0d1;--paper:#fff9ef;--text:#fff7f0;--muted:#b9a9b6;--pos:0%;--ink:#513d49}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:"PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif}body.locked{overflow:hidden}button,input{font:inherit}button,a{cursor:pointer}a{color:inherit;text-decoration:none}
body:before{content:"";position:fixed;inset:0;z-index:50;pointer-events:none;opacity:.11;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.3'/%3E%3C/svg%3E")}
.opening{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:radial-gradient(circle at 50% 42%,#43213f,#100a14 54%,#070409);transition:opacity .8s,visibility .8s}.opening.hide{opacity:0;visibility:hidden}.opening-orbit{position:relative;width:104px;height:104px;border:1px solid #f1b09a;border-radius:50%;display:grid;place-items:center;animation:spin 9s linear infinite}.opening-orbit:after{content:"";position:absolute;width:136px;height:42px;border:1px solid #f1b09a;border-radius:50%;transform:rotate(-25deg)}.opening-orbit span{font-size:29px;color:var(--rose)}.opening p{margin:30px 0 12px;color:var(--rose);font-size:11px;letter-spacing:.32em}.opening h1{margin:0;font:400 clamp(43px,5vw,70px)/1.25 "Ma Shan Zheng","STKaiti","KaiTi",cursive}.opening button{margin-top:30px;padding:15px 32px;border:0;border-radius:999px;background:linear-gradient(110deg,var(--blush),#e98a77);color:#321e29;box-shadow:0 12px 42px #e98a7744}.opening button span{margin-left:15px}.opening small{margin-top:18px;color:#827381;letter-spacing:.1em}
.nav{position:absolute;z-index:20;top:0;left:0;right:0;height:92px;padding:0 5vw;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #ffffff0d}.brand{display:flex;align-items:center;gap:11px;user-select:none}.brand b{display:grid;place-items:center;width:35px;height:35px;border:1px solid #f1b09a99;border-radius:50%;color:var(--rose)}.brand span{font-family:"Ma Shan Zheng","STKaiti","KaiTi",cursive;font-size:21px}.nav nav{display:flex;gap:35px;font-size:12px;color:#d3c3ce}.nav nav a:hover{color:var(--blush)}.music{padding:9px 15px;border:1px solid #f1b09a77;border-radius:999px;background:#160e1aaa;color:var(--blush)}
.hero{position:relative;isolation:isolate;height:100svh;min-height:680px;overflow:hidden}.scene{position:absolute;inset:0}.scene picture{position:absolute;inset:0;display:block;overflow:hidden}.scene picture img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:72% 42%}.scene .grown{clip-path:inset(0 calc(100% - var(--pos)) 0 0);transition:clip-path .8s cubic-bezier(.22,.8,.2,1)}.hero.dragging .grown,.hero.dragging .time-slider,.hero.dragging .divider{transition:none!important}.hero-shade{position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(90deg,#170d1cdd 0,#1b101cb0 33%,transparent 61%),linear-gradient(0deg,#0d081177,transparent 42%)}.hero-copy{position:relative;z-index:4;width:min(680px,55vw);height:100%;padding:125px 5vw 65px;display:flex;flex-direction:column;justify-content:center;pointer-events:none}.hero-copy .hero-actions,.hero-copy a,.hero-copy button{pointer-events:auto}.eyebrow{color:var(--rose);font-size:10px;letter-spacing:.3em}.hero h1,.section h2{font-family:"Ma Shan Zheng","STKaiti","KaiTi",cursive;font-weight:400}.hero h1{margin:25px 0 20px;font-size:clamp(55px,6.4vw,94px);line-height:1}.hero h1 em{color:var(--blush);font-style:normal}.hero-copy>p:not(.eyebrow){max-width:520px;color:#eadde5d9;line-height:1.9;font-size:14px}.hero-actions{display:flex;align-items:center;gap:20px;margin-top:25px;flex-wrap:wrap}.primary{padding:15px 24px;border:0;border-radius:999px;background:linear-gradient(110deg,var(--blush),#e98a77);color:#321e29;box-shadow:0 12px 35px #e98a7744}.hero-actions a{font-size:12px;color:#e8d5df}
/* 全屏拖动时间线 */
.time-slider{position:absolute;inset:0;z-index:5;opacity:0;pointer-events:none;transition:opacity .4s;touch-action:none;cursor:ew-resize}.hero.revealed .time-slider{opacity:1;pointer-events:auto}.divider{position:absolute;left:var(--pos);top:14%;height:72%;width:2px;background:#fff;box-shadow:0 0 15px #fff;transform:translateX(-50%);pointer-events:none}.divider span{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;width:47px;height:47px;border:1px solid white;border-radius:50%;background:#2a1c2bcc;backdrop-filter:blur(10px)}.time-slider input{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none;appearance:none;-webkit-appearance:none;background:transparent}
.age{position:absolute;z-index:6;bottom:25px;padding:8px 13px;border:1px solid #fff5;border-radius:999px;background:#1c111db3;font-size:9px;letter-spacing:.15em;pointer-events:none}.child-label{right:28px}.grown-label{left:28px;opacity:0;transition:.4s}.hero.revealed .grown-label{opacity:1}.heart-stat{position:absolute;z-index:6;right:5vw;bottom:11%;display:flex;gap:15px;align-items:center;padding:16px 20px;border:1px solid #f3c0ac77;border-radius:16px;background:#281829b8;backdrop-filter:blur(12px);user-select:none;cursor:default}.heart-stat>span{color:var(--rose);font-size:25px;animation:pulse 1.5s infinite}.heart-stat p{margin:0;color:#bbaab6;font-size:10px}.heart-stat strong{display:block;color:var(--blush);font-size:22px;font-weight:400}
.section{padding:105px 6vw}.section-title{text-align:center;max-width:700px;margin:0 auto 52px}.section h2{margin:15px 0;font-size:clamp(40px,4.5vw,62px)}.section-title>span,.star-copy>p:not(.eyebrow),.wish>p{color:var(--muted)}.story{background:linear-gradient(180deg,#0d0811,#180d1d)}.memory-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;max-width:1120px;margin:auto}.memory{position:relative;min-height:330px;padding:28px;text-align:left;color:var(--text);border:1px solid #ffffff18;background:linear-gradient(145deg,#27152b,#130b18);overflow:hidden;transition:.35s}.memory:after{content:"";position:absolute;inset:0;background:linear-gradient(145deg,#6b3851,#23112b);transform:translateY(101%);transition:.45s}.memory.active:after{transform:none}.memory i,.memory b{position:absolute;z-index:2;top:26px;font-style:normal}.memory i{left:28px;color:#8f7e8d}.memory b{right:28px;color:var(--rose);font-size:25px}.memory small,.memory h3,.memory p{position:relative;z-index:2}.memory small{display:block;margin-top:165px;color:var(--rose);letter-spacing:.18em}.memory h3{font:400 25px/1.4 "Ma Shan Zheng","STKaiti","KaiTi",cursive;margin:10px 0}.memory p{color:#bcaebb;font-size:13px;line-height:1.8;opacity:0;transform:translateY(15px);transition:.4s}.memory.active p{opacity:1;transform:none;color:#f6e9ef}.memory:hover{transform:translateY(-6px);border-color:#eaa28966}
.stars{display:grid;grid-template-columns:1fr 1.15fr;align-items:center;gap:45px;min-height:690px;background:radial-gradient(circle at 72% 50%,#3b1b43,transparent 36%),#0b0710}.star-copy{max-width:530px}.star-copy>p:not(.eyebrow){line-height:1.9}.progress{position:relative;height:2px;margin-top:34px;background:#ffffff1b}.progress span{display:block;width:0;height:100%;background:var(--rose);box-shadow:0 0 12px var(--rose);transition:.4s}.progress b{position:absolute;right:0;top:11px;color:#968696;font-size:10px}.star-copy blockquote{margin:45px 0 0;padding:18px;border-left:2px solid var(--rose);background:#ffffff08;font-family:"Ma Shan Zheng","STKaiti","KaiTi",cursive;font-size:21px;line-height:1.6;opacity:0;transform:translateY(10px);transition:.5s}.star-copy blockquote.show{opacity:1;transform:none}.star-map{position:relative;height:480px;border:1px solid #ffffff0d;border-radius:50%;background:radial-gradient(circle,#ffffff07,transparent 65%)}.star-map:before,.star-map:after{content:"";position:absolute;inset:16%;border:1px solid #ffffff0b;border-radius:50%}.star-map:after{inset:31%}.star{position:absolute;z-index:2;border:0;background:none;color:#6f6275;font-size:31px;transition:.4s}.star:hover,.star.lit{color:#ffd5b8;text-shadow:0 0 14px #ffb57f,0 0 35px #ffb57f;transform:scale(1.35)}.s1{left:17%;top:58%}.s2{left:35%;top:22%}.s3{left:53%;top:48%}.s4{left:69%;top:17%}.s5{left:81%;top:63%}.star-map>span{position:absolute;left:43%;bottom:10%;color:#766978;font-size:9px;letter-spacing:.25em}
.letter-section{display:grid;place-items:center;min-height:680px;background:radial-gradient(circle,#47223e,#0d0811 62%)}.envelope{position:relative;width:min(760px,92vw);padding:68px;text-align:center;border:1px solid #e1aa9166;background:#1c121fd9;box-shadow:0 35px 90px #0007}.envelope:before{content:"";position:absolute;inset:12px;border:1px solid #e1aa9122}.stamp{position:absolute;right:30px;top:28px;width:62px;height:62px;border:1px solid #e1aa9177;border-radius:50%;display:grid;place-items:center;color:#d9aa92;font:9px/1.4 Georgia;letter-spacing:.1em;transform:rotate(10deg)}.envelope button{position:relative;display:flex;flex-direction:column;align-items:center;gap:9px;margin:30px auto 10px;border:0;background:none;color:var(--blush)}.envelope button i{display:grid;place-items:center;width:69px;height:69px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#dd7475,#7b2342);color:white;font-size:27px;font-style:normal;box-shadow:0 9px 25px #0007;transition:.3s}.envelope button:hover i{transform:scale(1.1) rotate(-8deg)}.envelope small{position:relative;color:#786a78}
.wish{text-align:center;background:#0b0710}.wish form{display:flex;flex-wrap:wrap;gap:10px;max-width:680px;margin:34px auto 0;border-bottom:1px solid #e0aa9266;padding-bottom:4px}.wish input,.wish textarea{flex:1;min-width:180px;padding:17px 4px;border:0;outline:0;background:none;color:white;resize:none}.wish form button{border:0;background:none;color:var(--rose);padding:10px 8px}.wish-sent{display:none;margin-top:28px;color:var(--blush)}.wish-sent.show{display:block}.wish-err{margin-top:12px;color:#ff8f8f;font-size:12px;min-height:1.2em}
footer{display:flex;align-items:center;justify-content:space-between;padding:48px 6vw;border-top:1px solid #ffffff0d;color:#897987;font-size:11px}
.footer-links{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.footer-links a{color:#897987}
.footer-links a:hover{color:var(--blush)}
.modal{position:fixed;inset:0;z-index:80;display:grid;place-items:center;padding:20px;background:#09050bcc;backdrop-filter:blur(13px);opacity:0;visibility:hidden;transition:.35s}.modal.show{opacity:1;visibility:visible}.modal article{position:relative;width:min(610px,94vw);padding:60px;background:var(--paper);color:#352631;box-shadow:0 35px 100px #000b;transform:scale(.8) rotate(-1deg);transition:.45s}.modal.show article{transform:scale(1) rotate(-.5deg)}.modal article:before{content:"";position:absolute;inset:15px;border:1px dashed #c8999466;pointer-events:none}.close{position:absolute;z-index:2;right:20px;top:16px;border:0;background:none;color:#8f6d77;font-size:28px}.letter-to{color:#a4515a;font-size:11px;letter-spacing:.18em}.modal h2{font:400 38px "Ma Shan Zheng","STKaiti","KaiTi",cursive}.modal article>p{position:relative;line-height:2}.signature{text-align:right;margin-top:28px;font:24px "Ma Shan Zheng","STKaiti","KaiTi",cursive;color:#8f739c}.music-toast{position:fixed;z-index:60;left:22px;bottom:22px;display:flex;align-items:center;gap:4px;padding:13px 17px;border:1px solid #efa68c55;border-radius:12px;background:#211422e8;opacity:0;transform:translateY(15px);transition:.3s}.music-toast.show{opacity:1;transform:none}.music-toast i{width:2px;height:9px;background:var(--rose);animation:eq .7s infinite alternate}.music-toast i:nth-child(2){animation-delay:.2s}.music-toast i:nth-child(3){animation-delay:.4s}.music-toast span{margin-left:9px;font-size:10px}
/* 隐蔽登录 */
.auth-modal,.gb-modal{position:fixed;z-index:90;inset:0;display:grid;place-items:center;padding:20px;background:#09050bcc;backdrop-filter:blur(12px)}
.auth-modal[hidden],.gb-modal[hidden]{display:none!important}
.auth-card,.gb-card{position:relative;width:min(420px,92vw);padding:36px 28px 24px;color:var(--ink);background:var(--paper);border-radius:14px;box-shadow:0 35px 90px #0009}
.gb-card{width:min(560px,94vw);max-height:80vh;overflow:auto}
.auth-card:before,.gb-card:before{content:"";position:absolute;inset:12px;border:1px dashed #c8999466;border-radius:8px;pointer-events:none}
.auth-card h2,.gb-card h2{position:relative;margin:0 0 8px;font:400 30px "Ma Shan Zheng","STKaiti","KaiTi",cursive;color:#e4766c}
.auth-card .sub,.gb-card .sub{position:relative;margin:0 0 16px;font-size:12px;color:#98717e}
.auth-card label{position:relative;display:grid;gap:6px;margin-bottom:12px;font-size:12px;color:#7a5d68}
.auth-card input{border:1px solid #e8d2c8;border-radius:10px;padding:11px 12px;background:#fff;color:var(--ink)}
.auth-card .row,.gb-card .row{position:relative;display:flex;gap:8px;margin-top:8px}
.auth-card .go,.gb-card .go{flex:1;border:0;border-radius:999px;padding:12px 16px;cursor:pointer;background:linear-gradient(110deg,#ffb09c,#e97971);color:#39252e;font-weight:600}
.auth-card .ghost,.gb-card .ghost{border:1px solid #e8d2c8;border-radius:999px;padding:12px 16px;cursor:pointer;background:#fff;color:#7a5d68}
.auth-err{position:relative;margin:10px 0 0;color:#b42318;font-size:12px;min-height:1.2em}
.gb-list{position:relative;display:grid;gap:12px;margin-top:8px}
.gb-item{border:1px solid #e8d2c8;border-radius:12px;padding:14px;background:#fff}
.gb-item .meta{display:flex;justify-content:space-between;gap:8px;font-size:11px;color:#98717e;margin-bottom:8px}
.gb-item .body{font-size:14px;line-height:1.7;color:#352631;white-space:pre-wrap;word-break:break-word}
.gb-item .del{border:0;background:none;color:#b42318;cursor:pointer;font-size:12px}
.gb-empty{position:relative;padding:24px;text-align:center;color:#98717e;font-size:13px}
@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{transform:scale(1.18)}}@keyframes eq{to{height:24px}}
@media(max-width:850px){.nav nav{display:none}.hero-copy{width:67vw}.memory-grid{grid-template-columns:1fr}.memory{min-height:260px}.memory small{margin-top:100px}.stars{grid-template-columns:1fr}.star-map{height:410px}}
@media(max-width:560px){
  .nav{height:76px;padding:0 19px}.brand span{font-size:18px}.music span{display:none}
  .hero{min-height:680px}
  /* 人物在右侧，手机锚到右侧避免只剩半个人 */
  .scene picture img{object-position:88% 38%}
  .hero-shade{background:linear-gradient(180deg,#170d1ce8,#1b101cb0 45%,transparent 73%),linear-gradient(0deg,#0d081199,transparent 40%)}
  .hero-copy{width:100%;height:auto;padding:100px 22px 42vh;align-items:center;text-align:center}
  .hero h1{font-size:49px}.hero-copy>p:not(.eyebrow){font-size:12px}.hero-actions{margin-top:12px;justify-content:center}
  .heart-stat{display:none}.divider{top:48%;height:46%}.age{bottom:14px}
  .section{padding:78px 22px}.section h2{font-size:41px}.star-map{height:330px}.envelope{padding:65px 28px 42px}.modal article{padding:53px 32px}
  footer{align-items:flex-start;gap:22px;flex-direction:column}.opening h1{font-size:42px}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
