/* ============================================================
   小怡.xyz · 主题 UI「云屿信笺」
   基于天蓝渐变 + 玻璃拟态 + 水晶心设计
   兼容 Like_Girl v5.2.0 数据结构
   v13c · 对比度全面达标（WCAG AA）+ 动效降级 + 交错升场修复
   ============================================================ */
:root{
  --ink:#143354;--ink2:#1f4a75;--ink3:#36679a;--ink4:#3d6f9e;
  --accent:#24689c;--accent2:#63a9e2;--rose:#e87f96;--rose2:#dd7188;
  --card-bg2:linear-gradient(142deg,rgba(255,255,255,.62) 0%,rgba(255,255,255,.28) 100%);
  --brdr:rgba(255,255,255,.7);
  --brdr2:rgba(255,255,255,.35);
  --shad:0 18px 52px rgba(60,120,190,.10);
  --serif:"Songti SC","STSong","Noto Serif SC","Source Han Serif SC",Georgia,serif;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-family:var(--sans);
}
/* v15 · Love 手写体（Dancing Script 600 子集，仅 Love 4 字形 1.4KB · SIL OFL 许可）
   Windows / 安卓不再掉回宋体，全平台同一个手写 Look */
@font-face{
  font-family:'XY CNY';
  src:url('../fonts/cny.woff2') format('woff2');
  font-weight:500;font-style:normal;font-display:swap;
}
@font-face{
  font-family:'XY Love';
  src:url(data:font/woff2;base64,d09GMgABAAAAAAVkAA8AAAAACcQAAAULAAIAQgAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbgRYcVgZgP1NUQVQqAEwRCAqHNIYtATYCJAMYCw4ABCAFhGgHIBsmCFGUME4ezM+EMmWMx2KM7aqix1wuvFqAiPl7t4jPxfP/v9//5trn3PcFEY14oponBpGIJ+9EQoLmjUqkNJJ1BsnrPxfb/JmH+keaS/JkFmHyiD0T621tNTLPd+qldVgoEAteUklfk772LpsretK197svwGUE+McxXxelkdaku4GOJ1Lx1oWbNUUU7mYTm40rhMpnCTRA/oB/1W24VmwJN3cRLAeUiCaCRftVeU9PpltI3j8+bEjq8MHIukc3G8JsTF2xy6JjsJyYGGsR2cskFtX4q40/+vhpmo8rqwE2Q15dlDJBYQwEDGWWAEr0vqYcFYbAfKV48HWTInQW9XytZAhQzwsKuGTJjWLM3y4csp9QXgs/l71aw9IL+nmPimiJXPY+xG4+ofZMrOfBdt6nivrwAChyaKplAC0WPuv5kv2OA4uhfa5cRthrDF5eHB9H66gZl8RUbsaw6qgZWI5l5CpAXtkpOmjiHyraiTj2d0ycGqv2wmFzoIMDj4GbaOj2GOrsMsa4rx1HEPXeY9TZ8WVMTQtwlDuNIA8wxlurQBiG4yEIPQHDktn9fYxxnj9xN9e4TO7bQ0M1wMWieQRBUGeH0BAMJ0AHqLPvLIxxEeiBNTUk7sbGwUkyueXciTaS2I882C6idWjo7kNy5BZhez2u17FmZKKjl7ThB+KhA7B2upYpN0tq1/D8OtlxkbAs7XNagZPGEdTZJjS0AezUFu5mNzc3yEY5e8z6NkJHxlvEYNxAC7B1EKaRl4i7MVu0ERjO4ZlJ24DRZlpaF+shQzsc/GuF7UhHWm7/g+QNOKf/zoP1t/+Ah3BfIieVmil8YjzJZOEhW3uJhOSHdiniV3CPeBDSGA5costoIY79rkIoKtHE/Bc4mUhELEqEZ2CmDARMJguR6IiiYtGYSUm34ziXuNtfHDUQnT++rnKy/4NefSpydDJAqQh2CaWQ1XiqJkx+AqgW+4IGtVSSG5aYqpMSb/F5En2wOpkxbU5GW4W++kgSxctDIi/jhuOS85XZEzUgba2IijmKdmFZcPWAni5x4TDsQeJ1Jwsz9bBRv+Xo/NPOofTSK0qglJi0zxXhmVxe+iBiS2jNXvrtFyxh4Wp6iPGelfXnGNEs4jOcwyGRyysAj03y01i5ECk1Lk5nSHTzUBatHGvXv8YPfooyjDo6U7F4699iAshzcIh2W8wvJjGvQ6d8kvUewLbC29cg7670cPMDDWqJJ0Q5ceDv8QtWJdNnzGlWdrvWTG1BYPx5aTQIRgiExEG+yj+sTDZnTrWym//FECeqQqIvvxmOT8vTTM8ufByJo1iXYJ0Y37hgMKPhTrycijmGpT5SRSoGEJSTG0RHboopr/9Wrf2Az2uChe/Xu5eH99KLbtJeYKZA+AKY2xc0YVAniH3XWT5Q19xPiXV/5YH7Py8t1PsXq5RzeWZyi59RIWjdggd80hfIRlDx41Cc+GVlTvObk4lt7kT8ydbU8GYOZCwtLM+X4tLN6jxzCnN83WgUqgdUVVbRhLZUBI0c2c40NgXaOLOA02qXZTLTkTPA0/d8iFexm3sBacGeB2fO7CopUWgk0aeTYuljFvg3GFOYiIzZHu5K6ktbT0Z+MbzFnYfWyB25eSEXaCLIg+YtWO50L3TTC4oEslcisZIHmOmi1qN4zplHN1VF5RB+a8/cwtxYz4n2BYGwn313mvFNKLJ+YhAHVaaWR9p8dnGjxTEA) format('woff2');
  font-weight:600;font-style:normal;font-display:swap;
  unicode-range:U+004C,U+006C,U+006F,U+0076,U+0065;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{overscroll-behavior:none}
body{overscroll-behavior:none;touch-action:manipulation}
html{scroll-behavior:smooth}
body{
  color:var(--ink);min-height:100vh;overflow-x:hidden;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  touch-action:manipulation;
}

/* ---------------- 背景：渐变天空 / 光球 / 云 / 雪 ---------------- */
.bg{
  position:fixed;inset:0;
  background:linear-gradient(172deg,#c6e0f8 0%,#dcedfb 22%,#eef6fd 50%,#f8faff 72%,#fff 100%);
  z-index:-2;
}
.bg::after{
  content:'';position:absolute;inset:0;
  background:
    radial-gradient(ellipse 44% 28% at 16% 3%,rgba(255,242,216,.6),transparent),
    radial-gradient(ellipse 60% 30% at 50% 5%,rgba(255,255,255,.75),transparent);
}
/* 后台"背景图片URL地址"壁纸层：全屏铺满；bgveil=柔光蒙版保证卡片可读 */
.bgphoto{
  position:fixed;inset:0;z-index:-2;
  background-position:center;background-size:cover;background-repeat:no-repeat;
  background-attachment:fixed;
}
.bgveil{
  position:fixed;inset:0;z-index:-1;
  background:linear-gradient(180deg,rgba(240,248,255,.55) 0%,rgba(240,248,255,.38) 42%,rgba(240,248,255,.66) 100%);
}
.orb{position:fixed;border-radius:50%;pointer-events:none;z-index:-1;filter:blur(64px);will-change:transform}
.o1{width:300px;height:300px;background:rgba(130,180,255,.45);left:-80px;bottom:6%;animation:orbF 18s ease-in-out infinite}
.o2{width:240px;height:240px;background:rgba(190,168,248,.32);right:-60px;top:14%;animation:orbF 22s ease-in-out infinite reverse}
.o3{width:200px;height:200px;background:rgba(150,205,255,.4);left:8%;top:38%;animation:orbF 20s ease-in-out infinite 3s}
.o4{width:180px;height:180px;background:rgba(200,150,230,.28);right:15%;bottom:-30px;animation:orbF 24s ease-in-out infinite 5s}
@keyframes orbF{0%,100%{transform:translateY(0) scale(1)}33%{transform:translateY(-28px) scale(1.06)}66%{transform:translateY(14px) scale(.96)}}
.cloud{position:fixed;z-index:0;pointer-events:none;display:none}
.cloud .sh{width:100%;height:100%;background:rgba(255,255,255,.45);border-radius:80px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.c1{top:9%;width:200px;height:58px;left:-240px;animation:cld 90s linear infinite}
.c2{top:16%;width:140px;height:44px;left:-190px;animation:cld 120s linear infinite;animation-delay:-38s}
.c3{top:7%;width:110px;height:36px;left:-150px;animation:cld 150s linear infinite;animation-delay:-75s}
@keyframes cld{from{transform:translateX(0)}to{transform:translateX(calc(100vw + 280px))}}
@media(min-width:900px){.cloud{display:block}}
#bgsnow{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}
.bg-flake{position:absolute;top:-30px;color:#fff;will-change:transform;text-shadow:0 1px 4px rgba(100,160,210,.4)}
.fx-snow{position:fixed;pointer-events:none;z-index:99;color:#fff;will-change:transform,opacity}
.fx-heart{position:fixed;pointer-events:none;z-index:99;will-change:transform,opacity}

/* ---------------- 舞台与卡片 ---------------- */
.stage{max-width:640px;margin:0 auto;padding:86px 18px 60px;position:relative;z-index:1}
.stage-wide{max-width:860px;margin:0 auto;padding:86px 18px 60px;position:relative;z-index:1}
.card{
  background:var(--card-bg2);
  -webkit-backdrop-filter:blur(30px) saturate(180%);
  backdrop-filter:blur(30px) saturate(180%);
  border:1px solid var(--brdr);
  border-bottom:1px solid var(--brdr2);
  border-radius:20px;
  box-shadow:inset 0 1px 2px rgba(255,255,255,.92),inset 0 -2px 4px rgba(255,255,255,.18),var(--shad);
  padding:24px 22px;margin-bottom:20px;position:relative;
}
.card::before{
  content:'';position:absolute;inset:0;border-radius:20px;
  background:linear-gradient(180deg,rgba(255,255,255,.5) 0%,transparent 48%);
  pointer-events:none;
}
.rise{opacity:0;transform:translateY(28px);transition:opacity .9s ease,transform .9s cubic-bezier(.2,.85,.3,1.15);transition-delay:var(--rd,0s)}
.rise.in{opacity:1;transform:none}
@keyframes floaty{0%,100%{transform:rotate(-1.8deg) translateY(0)}50%{transform:rotate(1.8deg) translateY(-8px)}}

/* ---------------- 顶部导航 ---------------- */
.navpill{
  position:fixed;top:14px;left:50%;transform:translateX(-50%);
  z-index:50;display:flex;align-items:center;gap:10px;
  background:rgba(255,255,255,.55);
  -webkit-backdrop-filter:blur(24px) saturate(180%);
  backdrop-filter:blur(24px) saturate(180%);
  border:1px solid var(--brdr);border-radius:999px;
  box-shadow:inset 0 1px 1px rgba(255,255,255,.9),0 10px 30px rgba(60,120,190,.12);
  padding:8px 16px;max-width:calc(100vw - 24px);
}
.np-logo{
  font-family:var(--serif);font-size:15px;color:var(--ink);text-decoration:none;
  letter-spacing:.12em;white-space:nowrap;font-weight:400;
}
.np-logo i{font-style:normal;color:var(--rose)}
.np-div{width:1px;height:16px;background:rgba(255,255,255,.9);box-shadow:0 0 0 .5px rgba(120,170,220,.25);flex-shrink:0}
.np-links{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}
.np-links::-webkit-scrollbar{display:none}
.np-links a{
  font-size:12.5px;color:var(--ink3);text-decoration:none;letter-spacing:.06em;
  padding:4px 10px;border-radius:999px;white-space:nowrap;
  transition:background .3s,color .3s;
}
.np-links a:hover{background:rgba(255,255,255,.65);color:var(--ink)}
.np-links a.on{background:rgba(46,126,199,.14);color:var(--ink);box-shadow:inset 0 0 0 1px rgba(46,126,199,.25)}
@media(max-width:640px){.navpill{top:10px;padding:7px 12px}.np-links a{padding:4px 8px;font-size:12px}}

/* ---------------- Hero ---------------- */
.hero{text-align:center;padding:20px 16px 18px}
.avatar-row{display:flex;align-items:center;justify-content:center;gap:0;flex-wrap:nowrap;position:relative;z-index:1}
.avatar-col{position:relative;display:inline-flex;flex-direction:column;align-items:center}
.avatar{
  width:62px;height:62px;border-radius:50%;object-fit:cover;
  display:flex;align-items:center;justify-content:center;
  color:#fff;font-family:var(--serif);font-size:22px;font-weight:400;
  border:2px solid rgba(255,255,255,.95);
  box-shadow:0 4px 16px rgba(40,90,140,.18);cursor:pointer;
  transition:transform .3s,opacity .3s;background:linear-gradient(135deg,#4a8cc4,#6fa9d9);
  position:relative;overflow:hidden;
}
.avatar:hover{transform:scale(1.05)}
.avatar:active{opacity:.75}
.avatar.av-girl{background:linear-gradient(135deg,#4a8cc4,#c97589)}
.avatar img{position:absolute;inset:0;width:100%;height:100%;border-radius:50%;object-fit:cover;z-index:1}
.avatar-fallback{width:62px;height:62px}
.avatar-label{font-size:10px;letter-spacing:.15em;color:var(--ink4);margin-top:6px;font-weight:400}
.bubble{
  position:absolute;bottom:calc(100% + 8px);
  background:rgba(255,255,255,.97);border:.5px solid rgba(180,210,238,.7);color:var(--ink2);
  padding:6px 13px;border-radius:12px;
  font-size:12px;font-weight:400;white-space:nowrap;line-height:1.4;
  box-shadow:0 6px 20px rgba(30,80,120,.1);opacity:0;pointer-events:none;
  transition:all .32s cubic-bezier(.34,1.56,.64,1);z-index:6;
  font-family:var(--sans);max-width:calc(100vw - 40px);
}
.bubble.show{opacity:1;transform:translateY(0) scale(1)}
.bubble::after{content:'';position:absolute;bottom:-4.5px;width:8px;height:8px;background:rgba(255,255,255,.97);border-right:.5px solid rgba(180,210,238,.7);border-bottom:.5px solid rgba(180,210,238,.7);transform:rotate(45deg)}
.avatar-col.left .bubble{left:-8px;transform:translateY(5px) scale(.9);transform-origin:bottom left;border-bottom-left-radius:3px}
.avatar-col.left .bubble::after{left:20px}
.avatar-col.right .bubble{right:-8px;left:auto;transform:translateY(5px) scale(.9);transform-origin:bottom right;border-bottom-right-radius:3px}
.avatar-col.right .bubble::after{left:auto;right:20px}

.bottle-wrap{position:relative;width:clamp(150px,44vw,196px);height:clamp(138px,40.5vw,181px);flex-shrink:0;cursor:pointer;user-select:none}
.bottle-float{animation:floaty 5.8s ease-in-out infinite;transform-origin:50% 82%}
.bottle-float.shk{animation:shk .5s cubic-bezier(.36,.07,.19,.97)}
@keyframes shk{16%{transform:translateX(-5px) rotate(-3deg)}33%{transform:translateX(4px) rotate(2deg)}50%{transform:translateX(-3px) rotate(-1.5deg)}66%{transform:translateX(2px) rotate(.8deg)}83%{transform:translateX(-1px) rotate(-.3deg)}100%{transform:none}}
.bottle-wrap svg{width:100%;height:100%;display:block;filter:drop-shadow(0 10px 28px rgba(60,130,190,.3))}
.bottle-hint{font-size:10px;letter-spacing:.08em;color:var(--ink4);margin-top:1px;text-align:center}
@keyframes isn{0%{transform:translateY(-50px) scale(.7);opacity:0}14%{opacity:1}86%{opacity:.9}100%{transform:translateY(60px) scale(1.1);opacity:0}}
.isn{animation:isn 5.6s linear infinite}
/* 瓶中雪：听歌时雪面平滑上升、瓶内雪片飘得更欢 */
#bsnow{transition:transform 1.1s linear;will-change:transform}
.bottle-wrap.music-on .isn{animation-duration:3.4s}
@keyframes snowPuff{0%{filter:brightness(1)}40%{filter:brightness(1.4)}100%{filter:brightness(1)}}
#bsnow.snow-puff{animation:snowPuff .9s ease}
/* 瓶子下方的雪量小字 */
.snow-note{display:none;font-size:10px;letter-spacing:.08em;color:var(--accent);opacity:.85;margin-top:2px;text-align:center}

.slogan{
  font-family:var(--serif);font-size:14px;color:var(--ink3);
  min-height:1.6em;transition:.4s;margin-bottom:2px;font-style:italic;font-weight:400;letter-spacing:.04em;
}
.slogan.swap{animation:slg .4s ease}
@keyframes slg{0%{opacity:0;transform:translateY(-6px)}100%{opacity:1;transform:none}}
.love{
  font-family:var(--serif);font-size:clamp(34px,8vw,48px);font-weight:400;
  letter-spacing:.5em;margin:10px 0 4px;cursor:pointer;display:inline-block;
  color:var(--ink);position:relative;user-select:none;margin-right:-.5em;
}
.love .lo{color:var(--rose);display:inline-block}

/* ---------------- 卡片通用小件 ---------------- */
.tag{font-size:9px;letter-spacing:.35em;color:var(--ink4);line-height:1;margin-bottom:6px;font-weight:400}
.zh-title{font-family:var(--serif);font-size:17px;color:var(--ink);font-weight:400;letter-spacing:.08em}
.sub-note{font-size:11px;color:var(--ink4);letter-spacing:.04em}

/* 计时器 */
.timer-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:12px 0 2px}
.t-unit{
  background:rgba(255,255,255,.45);border:.5px solid rgba(255,255,255,.6);border-radius:14px;
  padding:10px 4px;text-align:center;box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
}
.t-unit b{
  font-family:var(--serif);font-size:clamp(24px,6.5vw,32px);font-weight:300;
  font-variant-numeric:tabular-nums;color:var(--ink);display:block;line-height:1.2;
}
.t-unit span{font-size:11px;color:var(--ink4);font-weight:400;letter-spacing:.08em}
.pwrap{margin-top:14px}
.pbar{
  height:10px;border-radius:999px;background:rgba(255,255,255,.5);border:.5px solid rgba(255,255,255,.6);
  overflow:hidden;box-shadow:inset 0 1px 3px rgba(0,0,0,.04);
}
.pfill{
  height:100%;border-radius:999px;
  background:linear-gradient(90deg,#6fb1e8,#a9d2f2);
  transition:width 1.2s cubic-bezier(.22,.9,.3,1.2);width:0;
}
.ptext{font-size:11px;color:var(--ink3);margin-top:6px;text-align:center;letter-spacing:.04em}

/* 心情（双人签到） */
.mood-tabs{display:flex;justify-content:center;gap:10px;margin-top:12px}
.mood-tab{
  display:inline-flex;align-items:center;gap:7px;
  border:1px solid rgba(255,255,255,.7);border-radius:999px;
  padding:6px 20px;font-size:13.5px;color:var(--ink2);font-family:var(--serif);
  background:rgba(255,255,255,.4);cursor:pointer;letter-spacing:.14em;font-weight:400;
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
  transition:background .3s,color .3s,border-color .3s,transform .2s;
}
.mood-tab:active{transform:scale(.95)}
.mood-tab.sel{background:rgba(46,126,199,.15);border-color:var(--accent);color:var(--ink)}
.mt-dot{width:9px;height:9px;border-radius:50%;background:linear-gradient(135deg,#5f9fd6,#8ec3ea);flex-shrink:0;box-shadow:0 0 0 2px rgba(143,195,234,.25)}
.mt-dot.mt-g{background:linear-gradient(135deg,#e08fb0,#7ba6cd);box-shadow:0 0 0 2px rgba(224,143,176,.25)}
.mood-grid{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:12px}
.mood-b{
  border:1px solid rgba(255,255,255,.7);border-radius:999px;
  padding:7px 16px;font-size:13px;color:var(--ink2);font-family:var(--sans);
  background:rgba(255,255,255,.4);cursor:pointer;font-weight:400;letter-spacing:.04em;
  transition:background .3s,color .3s,border-color .3s;
  display:inline-flex;align-items:center;gap:6px;
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
}
.mood-b:active{opacity:.7}
.mood-b.sel{background:rgba(46,126,199,.15);border-color:var(--accent);color:var(--ink)}
.mdot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
#moodStatus{font-size:12px;color:var(--ink3);margin-top:10px;min-height:1.4em;letter-spacing:.04em;display:flex;align-items:center;justify-content:center;gap:5px;flex-wrap:wrap}
.mdate{font-family:var(--serif);color:var(--accent);font-weight:400;font-size:13px}
.msep{color:var(--ink4)}
.mwho{font-family:var(--serif);color:var(--ink);font-weight:400}
#moodStreak{font-size:10px;color:var(--ink4);margin-top:3px;letter-spacing:.06em}
/* 签到日历 */
.cal-head{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:14px}
.cal-month{font-family:var(--serif);font-size:14.5px;color:var(--ink);letter-spacing:.12em}
.cal-nav{
  width:26px;height:26px;border-radius:50%;border:1px solid rgba(255,255,255,.75);
  background:rgba(255,255,255,.4);color:var(--ink2);cursor:pointer;font-size:14px;line-height:1;
  display:flex;align-items:center;justify-content:center;transition:background .3s,transform .2s;
}
.cal-nav:active{transform:scale(.9)}
.cal-nav:hover{background:rgba(255,255,255,.65)}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-top:10px}
.cal-wd{font-size:10px;color:var(--ink4);text-align:center;padding:3px 0 5px;letter-spacing:.1em}
.cal-cell{
  min-height:42px;border-radius:11px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  background:rgba(255,255,255,.32);border:.5px solid rgba(255,255,255,.5);
}
.cal-cell.empty{background:transparent;border:none}
.cal-cell.future{opacity:.32}
.cal-day{font-family:var(--serif);font-size:12.5px;color:var(--ink2);line-height:1}
.cal-cell.today{
  border:1px solid var(--accent);background:rgba(46,126,199,.13);cursor:pointer;
  box-shadow:0 4px 14px rgba(46,126,199,.18);
}
.cal-cell.today .cal-day{color:var(--accent);font-weight:400}
.cal-cell.today:active{transform:scale(.93)}
.cal-dots{display:flex;gap:3px;align-items:center;min-height:7px}
.cal-dot{width:7px;height:7px;border-radius:50%;display:inline-block}
.cal-legend{display:flex;justify-content:center;align-items:center;gap:14px;margin-top:9px;font-size:10.5px;color:var(--ink4);flex-wrap:wrap}
.cal-legend span{display:inline-flex;align-items:center;gap:5px}
.cal-legend .cal-dot{width:8px;height:8px}
.lg-b{background:linear-gradient(135deg,#5f9fd6,#8ec3ea)}
.lg-g{background:linear-gradient(135deg,#e08fb0,#7ba6cd)}
.cl-hint{opacity:.85}
.cal-sub{text-align:center;font-size:10.5px;color:var(--ink4);margin-top:13px;letter-spacing:.08em}

/* 天气 */
.w-dual{position:relative;display:flex;justify-content:center;margin-top:14px}
.w-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}
.w-col{
  background:rgba(255,255,255,.42);border:.5px solid rgba(255,255,255,.6);border-radius:16px;
  padding:14px 10px;text-align:center;box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
}
.w-who{font-size:12px;color:var(--ink3);letter-spacing:.05em;margin-bottom:6px}
.w-who b{font-family:var(--serif);color:var(--ink);font-weight:400;font-size:14px}
.w-ico{width:40px;height:40px;color:var(--accent);margin:2px auto 6px;display:block}
.w-temp2{font-family:var(--serif);font-size:26px;color:var(--ink);line-height:1.1;font-weight:300;display:flex;align-items:baseline;justify-content:center}
.w-temp2 sup{font-size:11px;color:var(--ink4)}
.w-hi{color:var(--ink)}
.w-slash{color:var(--ink4);font-size:.5em;margin:0 4px}
.w-lo{color:var(--ink3);font-size:.74em}
.w-name{font-size:11px;color:var(--ink3);margin-top:3px;letter-spacing:.06em}
.w-heart{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#e87f9b,#d25573);color:#fff;font-size:13px;
  box-shadow:0 4px 14px rgba(220,110,140,.35),inset 0 1px 1px rgba(255,255,255,.6);
  animation:beat 2.6s ease-in-out infinite;
}
@keyframes beat{0%,100%{transform:translate(-50%,-50%) scale(1)}12%{transform:translate(-50%,-50%) scale(1.14)}24%{transform:translate(-50%,-50%) scale(1)}36%{transform:translate(-50%,-50%) scale(1.1)}48%{transform:translate(-50%,-50%) scale(1)}}

/* 播放器 */
.plyr-head{display:flex;align-items:center;gap:14px;margin-top:12px}
.plyr-cover{
  width:58px;height:58px;border-radius:50%;flex-shrink:0;position:relative;
  background:radial-gradient(circle at 34% 30%,#9ecdf2,#4a86c2 78%);
  box-shadow:0 8px 22px rgba(50,110,170,.28),inset 0 1px 2px rgba(255,255,255,.5);
  display:flex;align-items:center;justify-content:center;color:#fff;cursor:pointer;
  transition:transform .3s;
}
.plyr-cover:hover{transform:scale(1.04)}
.plyr-cover .ring{position:absolute;inset:-5px;border-radius:50%;border:1px dashed rgba(120,170,220,.5)}
.plyr-cover svg{width:24px;height:24px}
.plyr-info{flex:1;min-width:0}
.plyr-title{font-family:var(--serif);font-size:15px;color:var(--ink);letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.plyr-artist,.plyr-sub{font-size:11px;color:var(--ink4);margin-top:2px;letter-spacing:.06em}
.plyr-eq,.eq{display:inline-flex;align-items:flex-end;gap:2px;height:12px;margin-left:8px;vertical-align:middle}
.plyr-eq i,.eq i{width:2.5px;background:var(--accent2);border-radius:2px;height:4px;opacity:.5;transition:.3s}
.plyr-eq.on i,.eq.on i{animation:eqb 1s ease-in-out infinite}
.plyr-eq.on i:nth-child(2),.eq.on i:nth-child(2){animation-delay:.18s}
.plyr-eq.on i:nth-child(3),.eq.on i:nth-child(3){animation-delay:.36s}
@keyframes eqb{0%,100%{height:4px}50%{height:12px}}
.plyr-bar{margin-top:12px;cursor:pointer;height:7px;border-radius:999px;background:rgba(255,255,255,.5);border:.5px solid rgba(255,255,255,.6);overflow:hidden;box-shadow:inset 0 1px 3px rgba(0,0,0,.04)}
.plyr-track{height:100%;}
.plyr-fill{height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,#6fb1e8,#a9d2f2);transition:width .25s linear}
.plyr-time{display:flex;justify-content:space-between;font-size:10px;color:var(--ink4);margin-top:5px;font-variant-numeric:tabular-nums;letter-spacing:.06em}
.plyr-ctrl{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:10px}
.pc-btn{
  width:38px;height:38px;border-radius:50%;border:1px solid rgba(255,255,255,.75);
  background:rgba(255,255,255,.45);color:var(--ink2);cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:background .3s,transform .15s;
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
}
.pc-btn svg{width:16px;height:16px}
.pc-btn:active{transform:scale(.92)}
.pc-btn.play{width:46px;height:46px;background:linear-gradient(135deg,#2e76b0,#255f96);color:#fff;border:none;box-shadow:0 8px 20px rgba(50,110,170,.3)}
.pc-btn.play svg{width:18px;height:18px}
.plyr-list{margin-top:12px;border-top:.5px solid rgba(255,255,255,.6);padding-top:8px;max-height:190px;overflow-y:auto}
.pl-row{
  display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:10px;cursor:pointer;
  font-size:12.5px;color:var(--ink2);transition:background .25s;
}
.pl-row:hover{background:rgba(255,255,255,.45)}
.pl-row.cur{background:rgba(46,126,199,.12);color:var(--ink)}
.pl-row .no{font-family:var(--serif);color:var(--ink4);width:18px;text-align:center;flex-shrink:0}
.pl-row .nm{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-row .du{color:var(--ink4);font-size:11px;font-variant-numeric:tabular-nums}
.plyr-empty{font-size:12px;color:var(--ink4);text-align:center;padding:14px 0 4px;letter-spacing:.04em;line-height:1.8}

/* 宝箱入口 */
.entry-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:14px}
.entry{
  display:flex;flex-direction:column;align-items:center;gap:7px;
  background:rgba(255,255,255,.42);border:.5px solid rgba(255,255,255,.6);border-radius:16px;
  padding:14px 4px 11px;cursor:pointer;text-decoration:none;color:var(--ink2);
  transition:transform .25s,background .3s;box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
}
.entry:hover{transform:translateY(-3px);background:rgba(255,255,255,.62)}
.entry:active{transform:scale(.96)}
.entry .eico{
  width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,rgba(99,169,226,.28),rgba(232,127,150,.2));
  color:var(--accent);
}
.entry .eico svg{width:19px;height:19px}
.entry span{font-size:11.5px;letter-spacing:.06em}
@media(max-width:420px){.entry-grid{grid-template-columns:repeat(3,1fr)}}

/* ---------------- 情书弹窗 / 信纸 ---------------- */
.modal{
  position:fixed;inset:0;z-index:90;display:none;align-items:center;justify-content:center;
  background:rgba(70,120,170,.25);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  padding:20px;
}
.modal.show{display:flex;animation:fdIn .3s ease}
@keyframes fdIn{from{opacity:0}to{opacity:1}}
.letter{
  position:relative;max-width:520px;width:100%;max-height:82vh;overflow-y:auto;
  background:linear-gradient(168deg,#fdfbf5 0%,#f7f3e8 100%);
  border:1px solid rgba(255,255,255,.9);border-radius:18px;
  box-shadow:0 30px 80px rgba(40,90,140,.28),inset 0 1px 0 #fff;
  padding:30px 28px 26px;
}
.letter-close{
  position:absolute;top:12px;right:14px;width:30px;height:30px;border-radius:50%;
  border:1px solid rgba(160,150,120,.25);background:rgba(255,255,255,.7);color:#8a8066;
  cursor:pointer;font-size:13px;line-height:1;transition:background .3s;
}
.letter-close:hover{background:#fff}
.letter-head{font-family:var(--serif);text-align:center;font-size:19px;color:#5a5342;letter-spacing:.2em;margin-bottom:14px}
.letter-body{font-family:var(--serif);font-size:14.5px;line-height:2.1;color:#4a4536;text-align:justify;white-space:pre-wrap;letter-spacing:.03em}
.letter-sign{margin-top:18px;text-align:right;font-family:var(--serif);font-size:14px;color:#7a7258;letter-spacing:.08em}

/* ---------------- 留言板 ---------------- */
.lv-count{
  text-align:center;font-family:var(--serif);font-size:14px;color:var(--ink3);
  letter-spacing:.06em;margin:14px 0 4px;
}
.lv-count b{color:var(--rose);font-weight:400;font-size:17px;padding:0 2px}
.lv-item{
  position:relative;z-index:1;
  background:rgba(255,255,255,.4);border:.5px solid rgba(255,255,255,.62);border-radius:16px;
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
  padding:14px 16px;margin-bottom:12px;
  animation:lvIn .7s ease both;
}
@keyframes lvIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
.lv-top{display:flex;align-items:center;gap:11px}
.lv-ava{width:40px;height:40px;border-radius:50%;border:1.5px solid rgba(255,255,255,.95);box-shadow:0 3px 10px rgba(40,90,140,.15);object-fit:cover;background:#dbe9f7}
.lv-meta{flex:1;min-width:0}
.lv-name{font-family:var(--serif);font-size:14.5px;color:var(--ink);letter-spacing:.04em}
.lv-sub{font-size:10.5px;color:var(--ink4);margin-top:2px;letter-spacing:.05em;display:flex;gap:8px;flex-wrap:wrap}
.lv-text{font-size:13.5px;line-height:1.9;color:var(--ink2);margin-top:10px;word-break:break-word}
.lv-form{margin-top:20px;position:relative;z-index:1}
.lv-row{display:flex;gap:10px;margin-bottom:12px}
.lv-input{
  flex:1;border:1px solid rgba(255,255,255,.7);border-radius:12px;background:rgba(255,255,255,.5);
  padding:11px 14px;font-size:13.5px;color:var(--ink);outline:none;font-family:var(--sans);
  box-shadow:inset 0 1px 3px rgba(90,140,190,.06);transition:border-color .3s,background .3s;min-width:0;
}
.lv-input::placeholder{color:var(--ink4);letter-spacing:.03em}
.lv-input:focus{border-color:var(--accent2);background:rgba(255,255,255,.72)}
textarea.lv-input{width:100%;resize:vertical;min-height:104px;line-height:1.8}
.lv-submit{
  display:flex;align-items:center;justify-content:center;gap:8px;
  border:none;border-radius:999px;padding:12px 34px;cursor:pointer;
  background:linear-gradient(135deg,#2e76b0,#255f96);color:#fff;
  font-size:14px;letter-spacing:.14em;font-family:var(--sans);
  box-shadow:0 10px 26px rgba(50,110,170,.3),inset 0 1px 1px rgba(255,255,255,.4);
  transition:transform .2s,box-shadow .3s;margin:4px auto 0;
}
.lv-submit:hover{transform:translateY(-2px)}
.lv-submit:active{transform:scale(.96)}
.lv-submit:disabled{opacity:.6;cursor:default;transform:none}

/* ---------------- 点点滴滴（文章列表） ---------------- */
.art-card{
  display:flex;align-items:center;gap:16px;text-decoration:none;
  background:rgba(255,255,255,.4);border:.5px solid rgba(255,255,255,.62);border-radius:16px;
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
  padding:18px 20px;margin-bottom:12px;position:relative;overflow:hidden;
  transition:transform .3s,background .3s;
}
.art-card:hover{transform:translateY(-3px);background:rgba(255,255,255,.6)}
.art-stamp{
  width:44px;height:44px;border-radius:14px;flex-shrink:0;position:relative;
  background:linear-gradient(135deg,rgba(99,169,226,.3),rgba(232,127,150,.18));
  display:flex;align-items:center;justify-content:center;color:var(--accent);
  font-family:var(--serif);font-size:18px;
}
.art-stamp svg{width:20px;height:20px}
.art-main{flex:1;min-width:0}
.art-title{
  font-family:var(--serif);font-size:16px;color:var(--ink);letter-spacing:.05em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.art-meta{font-size:11px;color:var(--ink4);margin-top:5px;letter-spacing:.06em;display:flex;gap:10px;flex-wrap:wrap}
.art-go{color:var(--ink4);flex-shrink:0;transition:transform .3s,color .3s}
.art-card:hover .art-go{transform:translateX(4px);color:var(--accent)}
.art-go svg{width:16px;height:16px;display:block}
.empty-tip{
  text-align:center;font-family:var(--serif);color:var(--ink3);font-size:14px;
  letter-spacing:.1em;padding:34px 0;line-height:2;
}

/* ---------------- 文章详情（信纸风） ---------------- */
.paper{
  position:relative;
  background:linear-gradient(168deg,#fdfbf5 0%,#f7f3e8 100%);
  border:1px solid rgba(255,255,255,.9);border-radius:18px;
  box-shadow:0 18px 52px rgba(60,120,190,.14),inset 0 1px 0 #fff;
  padding:34px 30px 28px;
}
.paper::before{
  content:'';position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:18px 0 0 18px;
  background:linear-gradient(180deg,#e8a1b2,#d88ba0);
}
.paper-title{font-family:var(--serif);font-size:21px;color:#4a4536;text-align:center;letter-spacing:.12em;line-height:1.6}
.paper-meta{text-align:center;font-size:11px;color:#a39a7f;margin:12px 0 20px;letter-spacing:.1em}
.paper-meta i{font-style:normal;padding:0 10px;position:relative}
.paper-meta i + i::before{content:'·';position:absolute;left:-6px;color:#cfc7ab}
.paper-body{
  font-family:var(--serif);font-size:14.5px;line-height:2.15;color:#4a4536;
  text-align:justify;letter-spacing:.04em;word-break:break-word;
}
.paper-body img{max-width:100%;border-radius:10px;margin:10px 0;box-shadow:0 8px 24px rgba(90,80,50,.15)}
.paper-back{
  display:block;text-align:center;margin-top:22px;text-decoration:none;
  font-family:var(--serif);font-size:13px;color:#8a8066;letter-spacing:.14em;
}
.paper-back:hover{color:#5a5342}

/* ---------------- 相册 ---------------- */
.alb-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:16px}
@media(min-width:720px){.alb-grid{grid-template-columns:repeat(3,1fr)}}
.alb-item{
  position:relative;border-radius:16px;overflow:hidden;cursor:pointer;
  border:1px solid rgba(255,255,255,.8);box-shadow:0 10px 30px rgba(60,120,190,.14);
  background:rgba(255,255,255,.4);
}
.alb-item img{width:100%;height:100%;object-fit:cover;display:block;aspect-ratio:4/5;transition:transform .6s ease}
.alb-item:hover img{transform:scale(1.06)}
.alb-cap{
  position:absolute;left:0;right:0;bottom:0;padding:26px 12px 10px;
  background:linear-gradient(180deg,transparent,rgba(20,45,70,.55));
  color:#fff;pointer-events:none;
}
.alb-cap span{display:block;font-size:12.5px;line-height:1.5;letter-spacing:.04em;text-shadow:0 1px 4px rgba(0,20,40,.4)}
.alb-cap i{display:block;font-style:normal;font-size:10px;opacity:.85;margin-top:3px;letter-spacing:.08em;font-variant-numeric:tabular-nums}

/* ---------------- 恋爱清单 ---------------- */
.ck-card{
  background:rgba(255,255,255,.4);border:.5px solid rgba(255,255,255,.62);border-radius:16px;
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.9);
  padding:16px 18px;margin-bottom:12px;
}
.ck-head{display:flex;align-items:center;gap:12px;cursor:pointer}
.ck-dot{
  width:22px;height:22px;border-radius:50%;flex-shrink:0;position:relative;
  border:1.5px solid rgba(123,166,205,.65);transition:all .3s;
}
.ck-card.done .ck-dot{border-color:var(--rose);background:linear-gradient(135deg,#e87f9b,#d25573);box-shadow:0 3px 10px rgba(220,110,140,.3)}
.ck-card.done .ck-dot::after{
  content:'';position:absolute;left:7px;top:3.5px;width:5px;height:9px;
  border-right:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(42deg);
}
.ck-title{flex:1;font-family:var(--serif);font-size:15px;color:var(--ink);letter-spacing:.04em;line-height:1.6}
.ck-card.done .ck-title{color:var(--ink3)}
.ck-date{font-size:10.5px;color:var(--ink4);letter-spacing:.06em;white-space:nowrap}
.ck-arrow{color:var(--ink4);transition:transform .35s;flex-shrink:0}
.ck-arrow svg{width:14px;height:14px;display:block;transform:rotate(90deg)}
.ck-card.open .ck-arrow{transform:rotate(-90deg)}
.ck-more{display:none;margin-top:12px}
.ck-card.open .ck-more{display:block}
.ck-more img{width:100%;border-radius:12px;box-shadow:0 10px 26px rgba(60,120,190,.16);display:block}
.ck-note{font-size:12.5px;color:var(--ink3);line-height:1.9;margin-top:8px}
.ck-stat{text-align:center;font-size:11.5px;color:var(--ink4);letter-spacing:.1em;margin-top:6px}
.ck-stat b{color:var(--rose);font-weight:400}

/* ---------------- 关于（对话） ---------------- */
.chat-card .botui-app-container{height:440px}
.botui-message-content{font-size:13.5px;line-height:1.8}
.botui-actions-button{
  background:rgba(255,255,255,.6)!important;color:var(--ink2)!important;
  border:1px solid rgba(255,255,255,.8)!important;border-radius:999px!important;
  font-family:var(--sans);letter-spacing:.04em;
}
.botui-actions-button:hover{background:#fff!important}

/* ---------------- 页脚 ---------------- */
.foot{
  text-align:center;padding:18px 0 8px;position:relative;z-index:1;
  font-size:11px;color:var(--ink4);letter-spacing:.08em;line-height:2;
}
.foot a{color:var(--ink3);text-decoration:none}
.foot .fh{font-family:var(--serif);font-size:13px;color:var(--ink3);letter-spacing:.18em;margin-bottom:4px}
.foot .fh i{font-style:normal;color:var(--rose)}

/* ---------------- Toast ---------------- */
.toast{
  position:fixed;left:50%;bottom:34px;transform:translate(-50%,16px);
  z-index:120;pointer-events:none;
  background:rgba(255,255,255,.82);
  -webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  border:1px solid rgba(255,255,255,.85);border-radius:999px;
  box-shadow:0 14px 40px rgba(40,90,140,.2),inset 0 1px 1px rgba(255,255,255,.9);
  padding:11px 24px;font-size:13px;color:var(--ink);letter-spacing:.05em;
  opacity:0;transition:all .38s cubic-bezier(.34,1.4,.64,1);max-width:calc(100vw - 40px);text-align:center;
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------------- 动画 & 滚动条 ---------------- */
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-thumb{background:rgba(123,166,205,.4);border-radius:999px}
::-webkit-scrollbar-track{background:transparent}
::selection{background:rgba(99,169,226,.3)}
img{-webkit-user-drag:none}
a{-webkit-tap-highlight-color:transparent}

/* ============================================================
   补充组件样式（与页面结构一一对应）
   ============================================================ */

/* 弹窗 open 类兼容 */
.modal.open{display:flex;animation:fdIn .3s ease}

/* ---- 子页头卡 ---- */
.page-head-card{text-align:center;padding:24px 18px 20px}
.page-head-card .zh-title i{font-style:normal;color:var(--rose);padding:0 3px}
.ph-sub,.page-desc{font-size:11px;color:var(--ink4);letter-spacing:.12em;margin-top:8px;line-height:1.9}
.page-desc b{font-weight:400}
.rose{color:var(--rose);font-style:normal}
.ph-name{font-style:normal;color:var(--rose);padding:0 4px}

/* ---- Hero 补充 ---- */
.hint{font-size:10px;letter-spacing:.1em;color:var(--ink4);margin-top:2px;text-align:center}
.loveline{
  margin:12px 0 6px;cursor:pointer;user-select:none;line-height:1.1;
  display:flex;align-items:center;justify-content:center;gap:.28em;
}
/* 花样字 Love：手写体 + 蓝粉渐变（取主题色 accent→rose） */
.love-word{
  font-family:'XY Love',"Snell Roundhand","Brush Script MT","Segoe Script","Xingkai SC","STXingkai","KaiTi",cursive;
  font-size:clamp(52px,10vw,64px);font-weight:400;font-style:italic;
  letter-spacing:.02em;
  background:linear-gradient(115deg,var(--accent) 0%,var(--accent2) 42%,var(--rose) 100%);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
  filter:drop-shadow(0 3px 10px rgba(90,140,200,.22));
  padding:0 .08em;
}
.lw-orn{
  font-size:.36em;color:var(--rose);opacity:.85;
  animation:ornFloat 5.5s ease-in-out infinite;
}
.lw-orn.lw-l{color:var(--accent)}
.lw-orn.lw-r{animation-delay:1.4s}
@keyframes ornFloat{0%,100%{transform:translateY(0) rotate(-8deg)}50%{transform:translateY(-5px) rotate(8deg)}}
.tag.mid{display:block;text-align:center;margin-top:10px;margin-bottom:0;letter-spacing:.42em}

/* ---- 导航 rise 修正（保留水平居中） ---- */
.navpill.rise{transform:translateX(-50%) translateY(14px)}
.navpill.rise.in{transform:translateX(-50%)}
@media(max-width:640px){.navpill{gap:8px}.np-logo{font-size:14px}}

/* ---- 播放器补充 ---- */
.plyr-sub{font-size:10.5px;color:var(--ink4);letter-spacing:.06em;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.plyr-eq{display:inline-flex;align-items:flex-end;gap:2px;height:12px;margin-left:8px;vertical-align:middle}
.plyr-eq i{width:2.5px;background:var(--accent2);border-radius:2px;height:4px;opacity:.5;transition:.3s}
.plyr-eq.on i{animation:eqb 1s ease-in-out infinite}
.plyr-eq.on i:nth-child(2){animation-delay:.18s}
.plyr-eq.on i:nth-child(3){animation-delay:.36s}
.plyr-eq.on i:nth-child(4){animation-delay:.54s}
.plyr-prog{margin-top:2px}
.plyr-times{display:flex;justify-content:space-between;font-size:10px;color:var(--ink4);margin-top:5px;font-variant-numeric:tabular-nums;letter-spacing:.06em}
.plyr-ctrls{display:flex;align-items:center;justify-content:center;gap:20px;margin-top:14px}
.pc-play{
  width:46px;height:46px;border-radius:50%;border:none;cursor:pointer;
  background:linear-gradient(135deg,#2e76b0,#255f96);color:#fff;
  box-shadow:0 8px 20px rgba(50,110,170,.3);
  display:flex;align-items:center;justify-content:center;transition:transform .2s;
}
.pc-play svg{width:18px;height:18px}
.pc-play:active{transform:scale(.92)}

/* ---- 留言板补充 ---- */
.lv-list{display:flex;flex-direction:column;gap:12px;margin-top:18px}
.lv-list .lv-item{margin-bottom:0}
.lv-item.rise{animation:none}
.lv-row2{display:flex;gap:10px;margin-bottom:12px}
.lv-who{display:flex;flex-direction:column;min-width:0}
.lv-who .lv-meta{flex:none;font-size:10.5px;color:var(--ink4);margin-top:3px;letter-spacing:.05em}
.lv-city{font-style:normal;color:var(--ink4)}
.lv-area{margin-top:12px}
.lv-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px}
.lv-note{font-size:10.5px;color:var(--ink4);letter-spacing:.05em}
.lv-send{
  display:inline-flex;align-items:center;gap:8px;border:none;border-radius:999px;padding:11px 26px;cursor:pointer;
  background:linear-gradient(135deg,#2e76b0,#255f96);color:#fff;font-size:13px;letter-spacing:.1em;
  box-shadow:0 10px 26px rgba(50,110,170,.3),inset 0 1px 1px rgba(255,255,255,.4);
  transition:transform .2s,box-shadow .3s;flex-shrink:0;font-family:var(--sans);
}
.lv-send:hover{transform:translateY(-2px)}
.lv-send:active{transform:scale(.96)}
.lv-send:disabled{opacity:.6;cursor:default;transform:none}
@media(max-width:520px){.lv-foot{flex-direction:column-reverse;align-items:stretch;text-align:center}.lv-send{justify-content:center}}

/* ---- 点点滴滴列表 ---- */
.art-list{display:flex;flex-direction:column;margin-top:16px}
.art-list .art-card{margin-bottom:0}

/* ---- 文章详情（信纸） ---- */
.paper-flower{position:absolute;right:20px;top:12px;color:#d9b3c0;font-size:18px;opacity:.85}
.letter .file{font-family:var(--serif);font-size:14.5px;line-height:2.15;color:#4a4536;text-align:justify;letter-spacing:.04em;word-break:break-word}
.letter .file img{max-width:100%;border-radius:10px;margin:10px 0;box-shadow:0 8px 24px rgba(90,80,50,.15)}
.letter .file p{margin:0 0 1em}
.letter .file h1,.letter .file h2,.letter .file h3{font-weight:400;margin:1.2em 0 .6em;letter-spacing:.08em}
.letter .file blockquote{border-left:3px solid #e3d9c2;padding:2px 0 2px 12px;color:#7a7258;margin:1em 0}
.page-nav{display:flex;justify-content:center;margin-top:2px}
.pn-btn{
  display:inline-flex;align-items:center;gap:7px;text-decoration:none;
  background:rgba(255,255,255,.5);border:1px solid var(--brdr);border-radius:999px;
  padding:9px 22px;font-size:12.5px;color:var(--ink2);letter-spacing:.08em;
  box-shadow:0 8px 22px rgba(60,120,190,.1);transition:background .3s;cursor:pointer;
  font-family:var(--sans);
}
.pn-btn:hover{background:rgba(255,255,255,.75)}
.pn-btn svg{width:14px;height:14px}

/* ---- 恋爱清单 ---- */
.ck-list{list-style:none;margin-top:6px}
.ck-item{position:relative;padding:13px 2px;border-bottom:.5px dashed rgba(123,166,205,.25)}
.ck-item:last-child{border-bottom:none}
.ck-row{display:flex;align-items:center;gap:12px;cursor:pointer}
.ck-dot{
  width:22px;height:22px;border-radius:50%;flex-shrink:0;position:relative;
  border:1.5px solid rgba(123,166,205,.55);display:flex;align-items:center;justify-content:center;
  color:#fff;transition:all .3s;background:rgba(255,255,255,.4);
}
.ck-dot svg{width:11px;height:11px;opacity:0;transition:opacity .3s}
.ck-dot.done{border-color:transparent;background:linear-gradient(135deg,#e87f9b,#d25573);box-shadow:0 3px 10px rgba(220,110,140,.28)}
.ck-dot.done svg{opacity:1}
.ck-title{font-family:var(--serif);font-size:15px;color:var(--ink);letter-spacing:.05em;flex:1}
.ck-date{font-size:10.5px;color:var(--ink4);letter-spacing:.05em;flex-shrink:0}
.ck-more{display:none;margin-top:10px;padding:2px 2px 2px 34px}
.ck-item.open .ck-more{display:block}
.ck-text{font-size:13px;color:var(--ink2);line-height:1.9;margin:0 0 8px}
.ck-more a{display:block;border-radius:12px;overflow:hidden;max-width:420px;box-shadow:0 10px 26px rgba(60,120,190,.14)}
.ck-more img{width:100%;display:block}

/* ---- 关于对话 ---- */
.chat-card{padding:22px 14px}

/* ============================================================
   PC 端适配（≥768px 桌面/平板横屏）
   ============================================================ */
@media(min-width:768px){
  /* 舞台加宽减少两侧留白；首页双栏：计时/天气并排，其余通栏 */
  .stage{max-width:1020px;padding:84px 28px 64px}
  .stage-wide{max-width:1120px;padding:84px 28px 64px}
  .stage.stage-home{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:stretch}
  .stage-home>.card{margin-bottom:0}
  .stage-home>section.hero{grid-column:1/-1;order:0}
  .stage-home>section:nth-of-type(2){order:1}
  .stage-home>section:nth-of-type(3){order:2;grid-column:1/-1}
  .stage-home>section:nth-of-type(4){order:1}
  .stage-home>section.plyr{order:3;grid-column:1/-1}
  .stage-home>section:nth-of-type(6){order:4;grid-column:1/-1}

  /* 卡片与字号整体放大 */
  .card{padding:32px 38px;border-radius:24px}
  .hero{padding:36px 30px 28px}
  .avatar{width:86px;height:86px;font-size:30px}
  .avatar-fallback{width:86px;height:86px}
  .avatar-label{font-size:11.5px}
  .bottle-wrap{width:240px;height:220px}
  .love-word{font-size:clamp(72px,7vw,92px)}
  .lw-orn{font-size:.34em}
  .slogan{font-size:16px}
  .zh-title{font-size:21px}
  .tag{font-size:10.5px}
  .t-unit b{font-size:48px}
  .t-unit span{font-size:12.5px}
  .ptext{font-size:12.5px}
  .mood-tab{font-size:15px;padding:7px 24px}
  .mood-b{padding:9px 20px;font-size:14px}
  #moodStatus{font-size:13px}
  .cal-cell{min-height:46px;border-radius:12px}
  .cal-day{font-size:13.5px}
  .cal-month{font-size:16px}
  .cal-dot{width:8px;height:8px}
  .w-col{padding:20px 12px;border-radius:18px}
  .w-ico{width:52px;height:52px}
  .w-temp2{font-size:34px}
  .w-who{font-size:13px}.w-who b{font-size:15px}
  .plyr-cover{width:68px;height:68px}
  .plyr-title{font-size:16.5px}
  .plyr-sub{font-size:11.5px}
  .pl-row{font-size:13.5px;padding:9px 8px}
  .entry{padding:18px 6px 14px}
  .entry .eico{width:44px;height:44px}
  .entry .eico svg{width:22px;height:22px}
  .entry span{font-size:12.5px}
  .lv-text{font-size:14.5px}
  .lv-name{font-size:15.5px}
  .lv-input{font-size:14.5px}
  .art-title{font-size:17.5px}
  .paper-body{font-size:15.5px}
  .letter-body{font-size:15.5px}
  .bubble{font-size:13px}

  /* 相册：宽屏 3→4 列 */
  .alb-grid{gap:14px}
}
@media(min-width:1080px){
  .alb-grid{grid-template-columns:repeat(4,1fr)}
}
/* 大屏再宽一档，继续压缩两侧留白 */
@media(min-width:1280px){
  .stage{max-width:1080px}
  .stage-wide{max-width:1200px}
  .alb-grid{grid-template-columns:repeat(5,1fr)}
}

/* 平板竖屏过渡：首页保持单列，但内容加宽 */
@media(min-width:600px) and (max-width:767px){
  .stage{max-width:700px}
  .stage-wide{max-width:860px}
}

/* ============ v7 · 四季氛围 / 时光徽章 / 发布卡片 ============ */
body.season-spring .bg{background:linear-gradient(172deg,#ffd9e8 0%,#ffe7f0 22%,#fff0f5 50%,#fff8fb 72%,#fff 100%)}
body.season-summer .bg{background:linear-gradient(172deg,#b3e3f2 0%,#c9edf9 22%,#e6f7fd 50%,#f4fcff 72%,#fff 100%)}
body.season-autumn .bg{background:linear-gradient(172deg,#f6ddc0 0%,#f9e8cf 22%,#fdf3e3 50%,#fffaf0 72%,#fff 100%)}
/* 冬季沿用默认蓝雪背景 */

/* 首页时光徽章：季节 / 节日 / 见面与假期 */
.xy-chips{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin:10px 0 4px}
.xy-chip{font-size:10px;letter-spacing:.05em;color:var(--ink3);background:rgba(255,255,255,.55);border:1px solid rgba(140,185,225,.28);border-radius:999px;padding:4px 11px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.xy-chip-season{color:var(--accent);border-color:rgba(99,169,226,.4)}
.xy-chip-fest{color:#a83256;border-color:rgba(255,143,176,.5);background:rgba(255,214,229,.6);animation:xyFestGlow 2.4s ease-in-out infinite}
@keyframes xyFestGlow{50%{box-shadow:0 0 14px rgba(255,143,176,.6)}}
.xy-chip-next{color:#8a5a1d;border-color:rgba(255,196,120,.55);background:rgba(255,240,214,.55)}

/* 登录后发布卡片（相册/小事页通用） */
.xy-up-card{padding:18px 20px}
.xy-up-head{font-family:var(--serif);font-size:15px;color:var(--ink2);margin-bottom:12px}
.xy-up-head i{font-style:normal;font-size:11px;color:var(--ink4);margin-left:4px}
.xy-up-form{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.xy-up-col{flex-direction:column;align-items:stretch}
.xy-inp{flex:1;min-width:130px;border:1px solid rgba(140,185,225,.35);background:rgba(255,255,255,.65);border-radius:999px;padding:9px 15px;font-size:12.5px;color:var(--ink2);outline:none;font-family:inherit;transition:.25s}
.xy-inp::placeholder{color:var(--ink4)}
.xy-inp:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px rgba(99,169,226,.16)}
textarea.xy-inp{border-radius:14px;resize:vertical;min-height:88px;line-height:1.9;width:100%}
.xy-btn{border:none;cursor:pointer;border-radius:999px;padding:9px 18px;font-size:12.5px;font-family:inherit;letter-spacing:.05em;background:linear-gradient(135deg,#8fc1ec,#c9a7e8);color:#16375c;box-shadow:0 6px 16px rgba(110,150,210,.35);transition:.25s}
.xy-btn:hover{transform:translateY(-1px);box-shadow:0 9px 20px rgba(110,150,210,.42)}
.xy-btn:disabled{opacity:.6;cursor:default;transform:none}
.xy-up-pick{cursor:pointer;display:inline-flex;align-items:center;gap:6px;border:1.5px dashed rgba(140,185,225,.55);border-radius:999px;padding:8px 16px;font-size:12px;color:var(--ink3);transition:.25s;white-space:nowrap}
.xy-up-pick:hover{border-color:var(--accent);color:var(--accent);background:rgba(255,255,255,.75)}
.xy-up-name{font-size:11px;color:var(--ink4);margin-top:8px;min-height:1em}

/* 登录页 */
.xy-login-stage{display:flex;justify-content:center;padding-top:5vh}
.xy-login{width:min(420px,92vw);padding:30px 28px;text-align:center}
.xy-login .zh-title{margin:6px 0 4px}
.xy-login-form{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.xy-login-msg{color:#c22b55;font-size:12px;margin-top:10px}
.xy-login-ok{font-size:13px;color:var(--ink3);margin-top:8px}
.xy-login-btns{display:flex;gap:8px;justify-content:center;margin-top:16px;flex-wrap:wrap}
.xy-logout{display:inline-block;margin-top:14px;font-size:11px;color:var(--ink4);text-decoration:none;border-bottom:1px dashed var(--ink4)}
.xy-login-tip{font-size:10.5px;color:var(--ink4);margin-top:12px;letter-spacing:.05em}
.xy-login-seal{margin-top:18px;font-size:10px;color:var(--ink4);letter-spacing:.3em}

/* ============ v8 · 主题切换按钮 & 节日专属配色 ============ */
.xy-theme-btn{position:fixed;right:14px;bottom:16px;z-index:900;width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:19px;cursor:pointer;user-select:none;background:rgba(255,255,255,.72);border:1px solid rgba(140,185,225,.4);box-shadow:0 8px 22px rgba(60,120,190,.22);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:.25s}
.xy-theme-btn:hover{transform:translateY(-2px) rotate(10deg);box-shadow:0 10px 26px rgba(60,120,190,.3)}
.xy-theme-btn.open{transform:rotate(-10deg)}
.xy-theme-panel{position:fixed;right:14px;bottom:64px;z-index:900;background:rgba(255,255,255,.82);border:1px solid rgba(140,185,225,.4);border-radius:16px;padding:12px 14px;box-shadow:0 14px 36px rgba(60,120,190,.25);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);opacity:0;visibility:hidden;transform:translateY(8px);transition:.25s;min-width:200px}
.xy-theme-panel.open{opacity:1;visibility:visible;transform:translateY(0)}
.xy-theme-cap{font-family:var(--serif);font-size:13px;color:var(--ink2);margin-bottom:8px;letter-spacing:.06em}
.xy-theme-opts{display:flex;flex-wrap:wrap;gap:6px}
.xy-theme-opts button{border:1px solid rgba(140,185,225,.35);background:rgba(255,255,255,.7);color:var(--ink3);font-family:inherit;font-size:11.5px;border-radius:999px;padding:5px 11px;cursor:pointer;transition:.2s;letter-spacing:.04em}
.xy-theme-opts button:hover{border-color:var(--accent);color:var(--accent)}
.xy-theme-opts button.on{background:linear-gradient(135deg,#8fc1ec,#c9a7e8);color:#16375c;border-color:transparent;box-shadow:0 4px 12px rgba(110,150,210,.4)}
.xy-theme-tip{font-size:10px;color:var(--ink4);margin-top:8px;letter-spacing:.04em}
body.theme-love .bg{background:linear-gradient(172deg,#ffd3e2 0%,#ffe1ec 22%,#fff0f5 50%,#fff7fa 72%,#fff 100%)}
body.theme-fest .bg{background:linear-gradient(172deg,#ffe0c2 0%,#ffedd2 22%,#fff7e6 50%,#fffbf0 72%,#fff 100%)}

/* ============ v11 · 就地验证QQ号（相册/点滴页内嵌） ============ */
.xy-authcard{width:min(560px,100%);margin:0 auto 26px;text-align:center;padding:26px 24px}
.xy-auth-title{font-family:var(--serif);font-size:17px;color:var(--ink2);letter-spacing:.06em}
.xy-auth-err{color:#c22b55;font-size:12px;margin-top:6px;letter-spacing:.04em}
.xy-auth-form{display:flex;flex-direction:column;gap:12px;align-items:center;margin-top:14px}
.xy-auth-form .xy-auth-key{width:min(280px,100%);text-align:center}
.xy-auth-qqs{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}
.xy-auth-qq{position:relative;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:6px;border:1px solid rgba(140,185,225,.35);background:rgba(255,255,255,.6);border-radius:16px;padding:14px 18px;transition:.2s;min-width:92px}
.xy-auth-qq:hover{transform:translateY(-2px);border-color:var(--accent)}
.xy-auth-qq img{width:56px;height:56px;border-radius:50%;object-fit:cover;background:linear-gradient(135deg,#9ec9ee,#e8b4d4)}
.xy-auth-qq input{position:absolute;opacity:0;pointer-events:none}
.xy-auth-qq b{font-size:13px;color:var(--ink2);letter-spacing:.1em}
.xy-auth-qq i{font-style:normal;font-size:9.5px;color:var(--ink4);letter-spacing:.12em}
.xy-auth-qq:has(input:checked),.xy-auth-qq.sel{border-color:var(--accent);background:#fff;box-shadow:0 8px 20px rgba(60,120,190,.22)}
.xy-auth-qq:has(input:checked) i,.xy-auth-qq.sel i{color:var(--accent)}
.xy-auth-tip{font-size:10.5px;color:var(--ink4);margin-top:10px;letter-spacing:.04em}

/* ============ v12 · 三选一：原版 / 季节专属 / 节日专属（每个节日一套专属UI） ============ */
.xy-theme-modes{display:flex;flex-direction:column;gap:7px}
.xy-theme-modes button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border:1px solid rgba(140,185,225,.35);background:rgba(255,255,255,.7);color:var(--ink3);font-family:inherit;border-radius:13px;padding:9px 13px;cursor:pointer;transition:.2s;text-align:left}
.xy-theme-modes button b{font-size:12.5px;color:var(--ink2);letter-spacing:.06em;font-weight:600}
.xy-theme-modes button i{font-style:normal;font-size:10px;color:var(--ink4);letter-spacing:.04em}
.xy-theme-modes button:hover{border-color:var(--accent);transform:translateX(2px)}
.xy-theme-modes button.on{border-color:transparent;background:linear-gradient(135deg,#8fc1ec,#c9a7e8);box-shadow:0 6px 16px rgba(110,150,210,.4)}
.xy-theme-modes button.on b,.xy-theme-modes button.on i{color:#16375c}

/* —— 12个节日专属皮肤（背景 + 主题色 + 品牌字色联动） —— */
body.theme-yuan .bg{background:linear-gradient(172deg,#ffe0c6 0%,#fff0d8 22%,#fff8e8 50%,#fffcf2 72%,#fff 100%)}
body.theme-yuan{--accent:#cd3c32}
body.theme-cny .bg{background:linear-gradient(172deg,#ffd6c0 0%,#ffe8d2 22%,#fff3e2 50%,#fffaf0 72%,#fff 100%)}
body.theme-cny{--accent:#cd3d36}
body.theme-valentine .bg{background:linear-gradient(172deg,#ffd4ea 0%,#ffe6f3 22%,#f6e9ff 50%,#fdf3ff 72%,#fff 100%)}
body.theme-valentine{--accent:#cd2979}
body.theme-goddess .bg{background:linear-gradient(172deg,#ffe2ee 0%,#ffedf4 22%,#fff3f7 50%,#fff9fb 72%,#fff 100%)}
body.theme-goddess{--accent:#d81c5a}
body.theme-love520 .bg{background:linear-gradient(172deg,#ffd2e2 0%,#ffe2ec 22%,#fff0f5 50%,#fff8fa 72%,#fff 100%)}
body.theme-love520{--accent:#dc1759}
body.theme-kids .bg{background:linear-gradient(172deg,#cfeeff 0%,#dff5ff 22%,#ffe9f3 50%,#fff6e9 72%,#fff 100%)}
body.theme-kids{--accent:#1876a8}
body.theme-qixi .bg{background:linear-gradient(172deg,#d6e0ff 0%,#e6e6ff 22%,#f2e9ff 50%,#faf5ff 72%,#fff 100%)}
body.theme-qixi{--accent:#6a5edc}
body.theme-moon .bg{background:linear-gradient(172deg,#dbe4f8 0%,#e8ecf9 22%,#f5f0e2 50%,#fdfaf0 72%,#fff 100%)}
body.theme-moon{--accent:#6e62c7}
body.theme-national .bg{background:linear-gradient(172deg,#ffdbd0 0%,#ffead8 22%,#fff4e4 50%,#fffaef 72%,#fff 100%)}
body.theme-national{--accent:#cd3d36}
body.theme-halloween .bg{background:linear-gradient(172deg,#ffdfc2 0%,#ffe8d4 22%,#eedfff 50%,#f8f2ff 72%,#fff 100%)}
body.theme-halloween{--accent:#b2581f}
body.theme-xmas .bg{background:linear-gradient(172deg,#ffd6d6 0%,#ffe6e2 22%,#e2f4e6 50%,#f2fbf4 72%,#fff 100%)}
body.theme-xmas{--accent:#c54242}
body.theme-birthday .bg{background:linear-gradient(172deg,#ffe6f0 0%,#fff0e2 22%,#fff6dd 50%,#f4f0ff 72%,#fff 100%)}
body.theme-birthday{--accent:#d72465}

/* ---------------- v13 · 相册支持视频/音频/动图角标 ---------------- */
.alb-kind{
  position:absolute;top:10px;left:10px;z-index:3;font-size:10px;letter-spacing:.14em;
  color:#fff;background:rgba(31,74,117,.5);border:.5px solid rgba(255,255,255,.4);
  border-radius:999px;padding:3px 11px;pointer-events:none;
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
}
.alb-item video.alb-media{
  width:100%;height:100%;object-fit:cover;display:block;aspect-ratio:4/5;
  background:rgba(15,30,50,.9);transition:transform .6s ease;
}
.alb-item video.alb-media:hover{transform:scale(1.04)}
.alb-audiobox{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  aspect-ratio:4/5;padding:20px;box-sizing:border-box;
  background:linear-gradient(135deg,rgba(158,201,238,.3),rgba(232,180,212,.3));
}
.alb-audioicon{font-size:36px;filter:drop-shadow(0 4px 10px rgba(60,120,190,.25))}
.alb-audiobox audio{width:100%;max-width:240px}

/* ---------------- v13b · QQ号输入验证 ---------------- */
.xy-auth-qqin{
  width:min(280px,100%);text-align:center;letter-spacing:.08em;
  font-size:14px;font-variant-numeric:tabular-nums;padding:11px 18px;
}
.xy-auth-qqin::-webkit-outer-spin-button,.xy-auth-qqin::-webkit-inner-spin-button{-webkit-appearance:none}

/* ============================================================
   v15b · 星夜模式（theme-night）—— 深色玻璃主题
   设计语言：深邃夜空 + 星云纵深 + 深色玻璃卡片
   晚 20:00 自动点亮 / 早 6:00 收回 · 点月亮许愿
   ============================================================ */
body.theme-night{
  --ink:#eaf2fd;--ink2:#c9daf0;--ink3:#93b7de;--ink4:#7ba3cd;
  --accent:#7db4e8;--accent2:#a9cdf5;--rose:#f2a2ba;--rose2:#eea4bd;
  --card-bg2:linear-gradient(142deg,rgba(30,50,92,.8) 0%,rgba(12,22,44,.56) 100%);
  --brdr:rgba(160,195,245,.22);--brdr2:rgba(150,185,235,.12);
  --shad:0 22px 60px rgba(0,4,16,.55);
}
body.theme-snow .bg{background:linear-gradient(178deg,#9cc4ec 0%,#b8d6f2 26%,#d4e8f8 52%,#e9f3fc 76%,#f8fbff 100%)}
body.theme-snow .bgveil{background:linear-gradient(180deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.3) 100%)}
body.theme-snow .orb{filter:blur(70px) brightness(1.05) saturate(.9);opacity:.7}
body.theme-snow .cloud{display:none!important}
body.theme-night .bg{background:linear-gradient(178deg,#04070f 0%,#071022 22%,#0b1a38 46%,#10234a 64%,#1b305e 82%,#2b3f72 100%)}
/* 星云与天际线：三层柔光给夜空纵深 */
body.theme-night .bg::after{background:radial-gradient(60vw 44vw at 84% 10%, rgba(130,118,235,.22), transparent 68%),radial-gradient(64vw 50vw at 6% 72%, rgba(62,140,215,.16), transparent 70%),radial-gradient(38vw 32vw at 46% 36%, rgba(155,125,225,.09), transparent 72%),linear-gradient(0deg, rgba(76,140,215,.11), transparent 26%)}
body.theme-night .bgveil{background:linear-gradient(180deg,rgba(5,10,24,0) 0%,rgba(4,9,22,.25) 100%)}
body.theme-night .orb{filter:blur(70px) brightness(.42) saturate(1.3);opacity:.8}
body.theme-night .cloud{display:none!important}
body.theme-night .bottle-wrap{filter:drop-shadow(0 0 30px rgba(125,180,232,.28)) drop-shadow(0 6px 24px rgba(3,10,26,.6))}
/* 水晶心星环：轨道光尘围绕心形缓缓旋转（v15e） */
.night-orbit{position:absolute;inset:-26px;pointer-events:none;z-index:3}
.night-orbit i{position:absolute;top:50%;left:50%;width:3px;height:3px;margin:-1.5px;border-radius:50%;background:#dce9fb;box-shadow:0 0 7px 2px rgba(125,180,232,.55);animation:xyOrb 9s linear infinite}
.night-orbit i:nth-child(3n){background:#f2c9d8;box-shadow:0 0 7px 2px rgba(242,162,186,.5)}
.night-orbit i:nth-child(4n){width:2px;height:2px}
.night-orbit i:nth-child(5n){width:4px;height:4px;box-shadow:0 0 9px 3px rgba(160,200,255,.65)}
@keyframes xyOrb{from{transform:rotate(var(--a,0deg)) translateX(var(--r,60px))}to{transform:rotate(calc(var(--a,0deg) + 360deg)) translateX(var(--r,60px))}}
body.theme-night .love-word{filter:drop-shadow(0 3px 14px rgba(125,180,232,.35))}
body.theme-night .xy-chip-fest{background:rgba(226,144,172,.14)}
/* 夜间：心内信纸融入水晶（米白→淡蓝透光，涂鸦线降饱和） */
body.theme-night .bottle-wrap svg rect[fill="#faf7f0"]{fill:rgba(216,231,252,.15);stroke:rgba(150,185,235,.38)}
body.theme-night .bottle-wrap svg path[stroke="#d4c9b8"]{stroke:rgba(180,205,235,.4)}
body.theme-night .bottle-wrap svg path[stroke="#d48a98"]{stroke:rgba(242,162,186,.55)}
body.theme-night .xy-chip-next{background:rgba(240,200,140,.12)}
body.theme-night .card{box-shadow:var(--shad),inset 0 1px 0 rgba(255,255,255,.10),inset 0 -1px 0 rgba(2,6,16,.42)}
body.theme-night .card::before{background:linear-gradient(180deg,rgba(255,255,255,.08) 0%,transparent 44%)}

/* ---- 白玻璃 → 深玻璃映射 ---- */
body.theme-night .navpill{background:rgba(12,22,44,.78);border:1px solid rgba(150,185,235,.14);box-shadow:0 10px 34px rgba(0,4,16,.5)}
body.theme-night .np-div{background:rgba(150,185,235,.22);box-shadow:none}
body.theme-night .np-links a:hover{background:rgba(255,255,255,.07)}
body.theme-night .bubble{background:rgba(16,30,58,.92);border:.5px solid rgba(150,185,235,.22)}
body.theme-night .bubble::after{background:rgba(16,30,58,.92);border-right-color:rgba(150,185,235,.22);border-bottom-color:rgba(150,185,235,.22)}
body.theme-night .t-unit{background:rgba(255,255,255,.06);border:.5px solid rgba(150,185,235,.14)}
body.theme-night .pbar{background:rgba(255,255,255,.09);border:.5px solid rgba(150,185,235,.14)}
body.theme-night .mood-tab{background:rgba(255,255,255,.06);border:1px solid rgba(150,185,235,.16);box-shadow:none}
body.theme-night .mood-tab.sel{background:rgba(125,180,232,.15);border-color:rgba(125,180,232,.55)}
body.theme-night .mood-b{background:rgba(255,255,255,.055)}
body.theme-night .cal-nav{background:rgba(255,255,255,.07)}
body.theme-night .cal-nav:hover{background:rgba(255,255,255,.13)}
body.theme-night .cal-cell{background:rgba(255,255,255,.055);border:.5px solid rgba(150,185,235,.1)}
body.theme-night .w-col{background:rgba(255,255,255,.05);border:.5px solid rgba(150,185,235,.12)}
body.theme-night .plyr-bar{background:rgba(255,255,255,.1);border:.5px solid rgba(150,185,235,.14)}
body.theme-night .pc-btn{background:rgba(255,255,255,.08)}
body.theme-night .pl-row:hover{background:rgba(255,255,255,.07)}
body.theme-night .entry{background:rgba(255,255,255,.05);border:.5px solid rgba(150,185,235,.13)}
body.theme-night .entry:hover{background:rgba(255,255,255,.1)}
body.theme-night .letter-close{background:rgba(255,255,255,.08);border:.5px solid rgba(150,185,235,.2)}
body.theme-night .letter-close:hover{background:rgba(255,255,255,.14)}
body.theme-night .lv-item{background:rgba(255,255,255,.05);border:.5px solid rgba(150,185,235,.13)}
body.theme-night .lv-input{background:rgba(255,255,255,.06);border-color:rgba(150,185,235,.18)}
body.theme-night .lv-input:focus{background:rgba(255,255,255,.09);border-color:rgba(125,180,232,.5)}
body.theme-night .art-card{background:rgba(255,255,255,.05);border:.5px solid rgba(150,185,235,.13)}
body.theme-night .art-card:hover{background:rgba(255,255,255,.09)}
body.theme-night .alb-item{background:rgba(255,255,255,.05)}
body.theme-night .alb-audiobox{background:linear-gradient(135deg,rgba(125,180,232,.14),rgba(242,162,186,.12))}
body.theme-night .ck-card{background:rgba(255,255,255,.05);border:.5px solid rgba(150,185,235,.13)}
body.theme-night .ck-dot{background:rgba(255,255,255,.08);border-color:rgba(150,185,235,.3)}
body.theme-night .pn-btn{background:rgba(255,255,255,.07);border-color:rgba(150,185,235,.16)}
body.theme-night .pn-btn:hover{background:rgba(255,255,255,.12)}
body.theme-night .xy-auth-qq{background:rgba(255,255,255,.05);border-color:rgba(150,185,235,.16)}
body.theme-night .xy-auth-qq.sel{background:rgba(255,255,255,.1)}
body.theme-night .botui-actions-button{background:rgba(125,180,232,.16)!important;color:#d8e9fb!important;border:1px solid rgba(125,180,232,.3)}
body.theme-night .botui-actions-button:hover{background:rgba(125,180,232,.26)!important}
body.theme-night .toast{background:rgba(14,28,56,.92);color:#dce9fb;border:1px solid rgba(150,185,235,.2);box-shadow:0 14px 40px rgba(0,4,16,.55)}
body.theme-night .modal{background:rgba(3,7,18,.55)}
body.theme-night .xy-theme-btn{background:rgba(16,30,58,.88);border-color:rgba(160,195,245,.26);color:#dce9fb;box-shadow:0 8px 24px rgba(0,4,16,.55)}
body.theme-night .slogan{color:var(--ink2)}
body.theme-night .xy-auth-qq{background:rgba(255,255,255,.055);border-color:rgba(160,195,245,.18)}
body.theme-night .xy-auth-qq.sel,body.theme-night .xy-auth-qq:has(input:checked){background:rgba(255,255,255,.11)}
body.theme-night .xy-login-tip,body.theme-night .xy-auth-tip{color:var(--ink3)}
body.theme-night .xy-chip{background:rgba(255,255,255,.07);border-color:rgba(150,185,235,.18)}
body.theme-night .xy-chip-season{border-color:rgba(125,180,232,.35)}
/* 主按钮：淡彩渐变 → 亮蓝玻璃 */
body.theme-night .xy-btn{background:rgba(125,180,232,.16);border:1px solid rgba(125,180,232,.32);color:#d8e9fb;box-shadow:0 6px 18px rgba(20,60,120,.3)}
body.theme-night .xy-btn:hover{background:rgba(125,180,232,.24)}
body.theme-night .xy-inp{background:rgba(255,255,255,.06);border-color:rgba(150,185,235,.2)}
body.theme-night .xy-inp:focus{background:rgba(255,255,255,.09);border-color:rgba(125,180,232,.5);box-shadow:0 0 0 3px rgba(125,180,232,.14)}
body.theme-night .xy-up-pick{background:rgba(255,255,255,.04);border-color:rgba(150,185,235,.25)}
body.theme-night .xy-theme-panel{background:rgba(12,22,44,.92);border:1px solid rgba(150,185,235,.16)}
body.theme-night .xy-theme-opts button{background:rgba(255,255,255,.06);border-color:rgba(150,185,235,.18)}
body.theme-night .xy-theme-opts button.on{background:rgba(125,180,232,.2);color:#d8e9fb}
body.theme-night .xy-theme-modes button{background:rgba(255,255,255,.05);border-color:rgba(150,185,235,.14)}
body.theme-night .xy-theme-modes button.on{background:linear-gradient(135deg,rgba(125,180,232,.24),rgba(180,150,232,.22));box-shadow:0 6px 16px rgba(20,60,120,.35)}
body.theme-night .xy-theme-modes button.on b,body.theme-night .xy-theme-modes button.on i{color:#d8e9fb}

/* ---- 星野：微星 / 亮星（微光+十字） ---- */
.night-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
@keyframes xyTw{0%,100%{opacity:var(--so,.5);transform:scale(1)}50%{opacity:calc(var(--so,.5)*.3);transform:scale(.86)}}

/* ---- 月亮：精致的弯月 + 大月晕（呼吸） ---- */
.night-moon{
  position:fixed;top:4.5%;right:7%;width:56px;height:56px;z-index:-1;
  border:none;background:transparent;padding:0;cursor:pointer;transition:transform .35s;
}
.night-moon::before{content:'';position:absolute;inset:-54px;border-radius:50%;background:radial-gradient(circle,rgba(247,239,200,.2) 0%,rgba(247,239,200,.07) 44%,transparent 68%);animation:xyMoon 9s ease-in-out infinite;pointer-events:none}
.night-moon:hover{transform:rotate(-8deg) scale(1.05)}
.night-moon:active{transform:scale(.94)}
.night-moon svg{width:100%;height:100%;display:block;filter:drop-shadow(0 0 10px rgba(247,239,200,.4))}
@keyframes xyMoon{0%,100%{opacity:.75;transform:scale(1)}50%{opacity:1;transform:scale(1.07)}}

/* ---- 流星：光头 + 渐隐长尾 ---- */
.night-meteor{
  position:fixed;z-index:-1;pointer-events:none;width:150px;height:1.5px;border-radius:999px;
  background:linear-gradient(90deg,rgba(160,200,255,0),rgba(200,225,255,.85) 70%,#ffffff);
  filter:drop-shadow(0 0 4px rgba(180,210,255,.55));
  opacity:0;transform:rotate(-27deg);animation:xyMeteor 1.9s cubic-bezier(.17,.67,.5,1) forwards;
}
.night-meteor::before{content:'';position:absolute;right:-2px;top:50%;width:5px;height:5px;border-radius:50%;background:#fff;transform:translateY(-50%);box-shadow:0 0 10px 3px rgba(220,235,255,.85),0 0 22px 8px rgba(160,200,255,.3)}
@keyframes xyMeteor{0%{opacity:0;transform:translate(0,0) rotate(-27deg) scaleX(.3)}8%{opacity:1}60%{opacity:.95}100%{opacity:0;transform:translate(-340px,196px) rotate(-27deg) scaleX(1)}}
@media(max-width:767px){
  .night-moon{width:40px;height:40px;top:2.8%;right:6%}
  .night-moon::before{inset:-44px}
  .night-canvas{opacity:.82}
}
@media(min-width:768px){
  .night-moon{width:50px;height:50px;top:3.4%;right:6.4%}
  .night-ground{height:23vh}
  .xy-gate-cap b{display:block;font-family:'XY CNY',var(--serif);font-weight:400;font-size:30px;letter-spacing:.3em;text-indent:.3em;color:#2a5a8f;text-shadow:0 0 14px rgba(255,255,255,.95),0 2px 18px rgba(255,255,255,.75)}
  .xy-gate-cap span{color:#5d84ad;pointer-events:auto}
}

/* ============================================================
   v16 · 网站开场片头（蓝白星尘汇聚爱心 → 散作满天星）
   ============================================================ */
/* v17 · Gate 入场首页：粒子心常驻心跳，点击进入 */
#xyGate{position:fixed;inset:0;z-index:600;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding-bottom:7vh;transition:opacity .7s ease;pointer-events:none}
#xyGate.xy-gate-out{opacity:0;pointer-events:none}
.xy-gate-heart{position:fixed;inset:0;width:100%;height:100%;display:block;z-index:599;pointer-events:none;transition:opacity .7s ease}
#xyGate.xy-gate-out ~ .xy-gate-heart,body.xy-gate-out .xy-gate-heart{opacity:0}
.xy-gate-heart.xy-gate-out{opacity:0}
.xy-gate-cap{text-align:center;position:relative;z-index:2;pointer-events:auto;opacity:0;transform:translateY(14px);animation:xyGateIn 1.1s ease .9s forwards}
.xy-gate-since{color:#5d84ad;letter-spacing:.22em}
.xy-gate-cap b{display:block;font-family:'XY CNY',var(--serif);font-weight:400;font-size:30px;letter-spacing:.3em;text-indent:.3em;color:#2a5a8f;text-shadow:0 0 14px rgba(255,255,255,.95),0 2px 18px rgba(255,255,255,.75)}
.xy-gate-sub{display:block;margin-top:10px;font-size:10.5px;letter-spacing:.3em;text-indent:.3em;color:#93b7de}
.xy-gate-btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--sans);font-size:13.5px;letter-spacing:.12em;color:#2a5a8f;border:1px solid rgba(80,130,190,.45);border-radius:999px;padding:12px 26px;cursor:pointer;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:rgba(255,255,255,.6);box-shadow:0 8px 30px rgba(90,140,200,.25),inset 0 1px 0 rgba(255,255,255,.6);opacity:0;transform:translateY(14px);animation:xyGateIn 1.1s ease 1.5s forwards;transition:.25s}
.xy-gate-btn svg{width:15px;height:15px;color:#f2a2ba;filter:drop-shadow(0 0 5px rgba(242,162,186,.7))}
.xy-gate-btn:hover{transform:translateY(-2px);border-color:rgba(125,180,232,.7);box-shadow:0 12px 36px rgba(3,10,26,.6),0 0 24px rgba(125,180,232,.25)}
.xy-gate-btn:active{transform:scale(.97)}
@keyframes xyGateIn{to{opacity:1;transform:none}}
body.xy-gate .stage,body.xy-gate .navpill,body.xy-gate .foot,body.xy-gate .xy-theme-btn,body.xy-gate .xy-tuner-btn{opacity:0;pointer-events:none;transition:opacity .6s ease}
body.xy-gate .bgveil{opacity:.5}

/* v15 · 内联 SVG 图标与文字对齐 */
.xy-theme-btn svg{width:20px;height:20px;display:block}
.md-ico{width:15px;height:15px;display:inline-block;vertical-align:-2.5px;margin-right:3px}
.xy-btn svg{width:14px;height:14px;vertical-align:-2px;margin-right:3px}
.xy-key-icon svg{width:34px;height:34px;display:inline-block;vertical-align:middle}
.xy-up-head svg{width:16px;height:16px;vertical-align:-2.5px;margin-right:2px}

/* ============================================================
   v13c · 无障碍：动效降级
   系统开启「减弱动态效果」（prefers-reduced-motion）时：
   关闭背景光斑/云朵/飘雪（雪花由 JS 同步停止生成），
   升场动画直接显示，全局动画与平滑滚动停用。
   ============================================================ */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
    transition-delay:0s !important;
  }
  .rise{opacity:1;transform:none;transition:none}
  .navpill.rise{transform:translateX(-50%)}
  .orb,.cloud{display:none}
}

/* ============================================================
   v22 · Gate 场景层：暮色天幕 + 极光 + 星点 + 雪山小屋
   ============================================================ */

.xy-gate-ground{position:absolute;inset:0;pointer-events:none}
.xy-gate-ground svg{position:absolute;bottom:0;left:0;width:100%;height:auto;display:block}
@media(min-width:768px){.xy-gate-ground svg{width:auto;height:82%;left:50%;transform:translateX(-50%)}}
.xy-gate-ground svg{position:absolute;inset:0;width:100%;height:100%;display:block}
.xy-gate-aurora{position:absolute;left:-8%;right:-8%;top:6%;height:30%;pointer-events:none;filter:blur(20px);opacity:.75}
.xy-gate-aurora i{position:absolute;inset:0;background:linear-gradient(100deg,transparent 12%,rgba(125,205,225,.34) 38%,rgba(150,225,205,.24) 54%,transparent 82%);transform-origin:center;animation:xyAur 12s ease-in-out infinite alternate}
.xy-gate-aurora i:nth-child(2){background:linear-gradient(78deg,transparent 22%,rgba(150,190,245,.28) 46%,transparent 76%);animation-duration:16s;animation-delay:-6s}
.xy-gate-aurora i:nth-child(3){background:linear-gradient(95deg,transparent 30%,rgba(190,160,235,.2) 55%,transparent 78%);animation-duration:19s;animation-delay:-11s}
@keyframes xyAur{from{transform:skewX(-7deg) translateX(-3.5%)}to{transform:skewX(7deg) translateX(3.5%)}}
.xy-gate-stars{position:absolute;inset:0;pointer-events:none}
.xy-gate-stars i{position:absolute;width:2px;height:2px;border-radius:50%;background:#cfe0ff;animation:xyGTw 3.8s ease-in-out infinite}
@keyframes xyGTw{0%,100%{opacity:var(--go,.6)}50%{opacity:calc(var(--go,.6)*.25)}}

.xy-gate-bg{position:fixed;inset:0;z-index:598;pointer-events:none;transition:opacity .7s ease;background:
  radial-gradient(115% 50% at 78% 6%, rgba(150,190,250,.22), transparent 60%),
  radial-gradient(90% 42% at 14% 18%, rgba(90,140,225,.16), transparent 64%),
  radial-gradient(85% 36% at 55% 38%, rgba(70,110,195,.12), transparent 70%),
  linear-gradient(178deg,#0a0f22 0%,#111a36 24%,#1a2749 42%,#2a3a68 58%,#4a5f96 72%,#8ea3cd 86%,#e8effb 96%,#ffffff 100%)}
.xy-gate-out ~ .xy-gate-bg,body:not(.xy-gate) .xy-gate-bg{opacity:0}

.xy-gate-btn{pointer-events:auto !important;z-index:615 !important;position:relative}

/* ============================================================
   v29 · Gate 排版重构：竖排大字 + 对角平衡（打破居中模板感）
   ============================================================ */
.xy-gate-cap{position:static;display:contents}
.xy-gate-title{position:absolute;left:7vw;top:8vh;writing-mode:vertical-rl;font-family:'CNY','Noto Serif SC',serif;font-size:clamp(30px,6.4vh,50px);letter-spacing:.42em;color:#f4f7ff;text-shadow:0 0 26px rgba(150,185,255,.4),0 2px 10px rgba(10,20,50,.35);opacity:0;animation:xyRise .9s ease .15s forwards}
.xy-gate-meta{position:absolute;right:6.5vw;bottom:calc(10vh + 74px);text-align:right;opacity:0;animation:xyRise .9s ease .45s forwards}
.xy-gate-day{display:block;font-family:var(--sans);font-weight:300;font-size:clamp(24px,4.6vh,34px);letter-spacing:.16em;color:#fff;text-shadow:0 2px 18px rgba(10,20,50,.45)}
.xy-gate-since{display:block;margin-top:7px;font-size:9.5px;letter-spacing:.28em;color:rgba(255,255,255,.78);text-shadow:0 1px 8px rgba(10,20,50,.4)}
.xy-gate-progress{position:absolute;left:7vw;right:7vw;bottom:3vh;height:1px;background:rgba(255,255,255,.22);opacity:0;animation:xyRise 1s ease .7s forwards}
.xy-gate-progress i{display:block;height:1px;background:linear-gradient(90deg,rgba(190,215,255,.9),rgba(255,255,255,.95));box-shadow:0 0 8px rgba(190,215,255,.6)}
@keyframes xyRise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.xy-gate-btn{border-radius:2px;border:1px solid rgba(255,255,255,.5);background:rgba(18,28,58,.22);color:#fff;letter-spacing:.3em;font-size:12.5px;padding:13px 30px 13px calc(30px + .3em);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:0 8px 30px rgba(10,20,50,.25);opacity:0;animation:xyRise .9s ease .75s forwards;text-shadow:0 1px 6px rgba(10,20,50,.3)}
.xy-gate-btn svg{color:#f2a2ba;filter:drop-shadow(0 0 6px rgba(242,162,186,.5))}
@media (prefers-reduced-motion: reduce){.xy-gate-title,.xy-gate-meta,.xy-gate-progress,.xy-gate-btn{animation:none;opacity:1;transform:none}}

.xy-gate-btn{background:rgba(30,45,90,.1);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;border-color:rgba(255,255,255,.65)}
.xy-gate-btn:hover{background:rgba(255,255,255,.14)}

.xy-gate-btn:focus-visible{outline:2px solid rgba(255,255,255,.75);outline-offset:3px}
.xy-gate-since{color:rgba(255,255,255,.9);text-shadow:0 1px 10px rgba(10,20,50,.55)}
.xy-gate-day{text-shadow:0 2px 22px rgba(10,20,50,.6)}

/* v31 · 纯设计天幕：多层渐变光效（mesh 感），无插画 */


/* v32 · 星尘缓浮 + 极淡极光 */
.xy-gate-aurora{position:absolute;left:-6%;right:-6%;top:8%;height:30%;pointer-events:none;filter:blur(26px);opacity:.32}
.xy-gate-aurora i{position:absolute;inset:0;background:linear-gradient(102deg,transparent 14%,rgba(120,200,225,.3) 40%,rgba(150,225,205,.2) 56%,transparent 82%);transform-origin:center;animation:xyAur 13s ease-in-out infinite alternate}
.xy-gate-aurora i:nth-child(2){background:linear-gradient(80deg,transparent 24%,rgba(140,180,240,.22) 48%,transparent 74%);animation-duration:17s;animation-delay:-7s}
@keyframes xyAur{from{transform:skewX(-6deg) translateX(-3%)}to{transform:skewX(6deg) translateX(3%)}}
@media (prefers-reduced-motion: reduce){.xy-gate-aurora{animation:none}.xy-gate-aurora i{animation:none}}

/* v34 · 浅底区文字回归深蓝 */
.xy-gate-since{color:#3a6ea8;text-shadow:none;letter-spacing:.26em}
.xy-gate-day{color:#274f86;text-shadow:0 2px 14px rgba(255,255,255,.8)}
.xy-gate-btn{color:#2a5a8f;border-color:rgba(58,110,168,.55);background:rgba(255,255,255,.5);text-shadow:none;letter-spacing:.28em}
.xy-gate-btn svg{color:#f088ab}

/* ============================================================
   v33 · 信纸 gate：予怡信笺（发光信纸+火漆章+竖排题名）
   ============================================================ */
@font-face{font-family:'YNY';src:url(../fonts/yny.woff2) format('woff2');font-display:swap}
.xy-gate-title{font-family:'YNY','Noto Serif SC',STSong,simsun,serif}
.xy-gate-title-sub{position:absolute;left:calc(7vw + 2px);top:calc(8vh + clamp(170px,36vh,270px));writing-mode:vertical-rl;font-size:9px;letter-spacing:.4em;color:rgba(255,255,255,.55);opacity:0;animation:xyRise .9s ease .4s forwards}
.xy-gate-cap{position:static;display:contents}
.xy-gate-meta{position:absolute;right:6.5vw;bottom:calc(10vh + 74px);text-align:right;opacity:0;animation:xyRise .9s ease .45s forwards;z-index:5}
.letter{position:absolute;left:50%;top:46%;transform:translate(-50%,-50%) rotate(-1.2deg);width:min(62vw,300px);min-height:52vh;background:linear-gradient(170deg,#fdfbf6,#f6f2e9);border-radius:4px;box-shadow:0 24px 70px rgba(4,10,30,.5),0 4px 18px rgba(4,10,30,.3),inset 0 0 60px rgba(210,190,150,.12);cursor:pointer;z-index:6;padding:7vh 7% 12vh;opacity:0;animation:letterIn 1.1s cubic-bezier(.2,.8,.2,1) .25s forwards}
.letter::before{content:'';position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,transparent,rgba(120,90,50,.14),transparent)}
@keyframes letterIn{from{opacity:0;transform:translate(-50%,-46%) rotate(-2.4deg)}to{opacity:1;transform:translate(-50%,-50%) rotate(-1.2deg)}}
@keyframes letterFloat{0%,100%{transform:translate(-50%,-50%) rotate(-1.2deg) translateY(0)}50%{transform:translate(-50%,-50%) rotate(-1.2deg) translateY(-7px)}}
.letter.opened{animation:letterFloat 6s ease-in-out 1s infinite}
.l-dear{text-align:center;font-size:9.5px;letter-spacing:.42em;color:var(--ink-soft);font-family:'Cormorant Garamond',Georgia,serif}
.l-day{text-align:center;margin-top:3.4vh;font-family:'Cormorant Garamond',Georgia,'Noto Serif SC',serif;font-size:44px;font-weight:300;color:var(--ink);line-height:1}
.l-day b{font-size:15px;letter-spacing:.14em;margin-left:5px;font-weight:400}
.l-since{text-align:center;margin-top:8px;font-size:9px;letter-spacing:.34em;color:var(--ink-soft)}
.l-line{text-align:center;margin-top:5vh;font-size:12.5px;line-height:2.15;color:#5b6d8f;letter-spacing:.14em}
.l-sign{text-align:right;margin-top:3.2vh;padding-right:9%;font-size:12.5px;color:var(--ink);letter-spacing:.18em}
.l-sign span{color:var(--ink-soft)}
.seal{position:absolute;right:9%;bottom:9%;width:46px;height:46px;border-radius:50%;background:radial-gradient(circle at 36% 32%,#4a6bb0,#274f86 62%,#1d3a68);display:flex;align-items:center;justify-content:center;box-shadow:0 3px 10px rgba(29,58,104,.45),inset 0 2px 4px rgba(255,255,255,.28),inset 0 -2px 4px rgba(10,25,60,.4);color:rgba(255,220,230,.92);transition:transform .5s cubic-bezier(.5,0,.8,.4),opacity .5s ease;animation:sealPulse 2.6s ease-in-out infinite}
.seal svg{width:20px;height:20px;filter:drop-shadow(0 1px 1px rgba(10,25,60,.4))}
.seal::before{content:'';position:absolute;inset:5px;border-radius:50%;border:1px dashed rgba(255,255,255,.28)}
@keyframes sealPulse{0%,100%{box-shadow:0 3px 10px rgba(29,58,104,.45),0 0 12px rgba(90,130,210,.25),inset 0 2px 4px rgba(255,255,255,.28),inset 0 -2px 4px rgba(10,25,60,.4)}50%{box-shadow:0 3px 10px rgba(29,58,104,.45),0 0 22px rgba(120,160,240,.5),inset 0 2px 4px rgba(255,255,255,.28),inset 0 -2px 4px rgba(10,25,60,.4)}}
.letter.opened .seal,.seal.crack{transform:rotate(24deg) scale(.55);opacity:0}
@media (prefers-reduced-motion: reduce){.letter,.seal{animation:none}.letter{opacity:1}}

/* ============================================================
   v34 · awwwards 工艺层：逐字 blur-in / 信纸 clip 揭示 / grain / 跑马灯 / 鼠标柔光
   ============================================================ */
.xy-gate-title i{display:inline;opacity:0;filter:blur(10px);transform:translateY(18px);animation:xyBlurIn .9s cubic-bezier(.2,.7,.2,1) forwards}
.xy-gate-title i:nth-child(1){animation-delay:.15s}
.xy-gate-title i:nth-child(2){animation-delay:.33s}
.xy-gate-title i:nth-child(3){animation-delay:.51s}
.xy-gate-title i:nth-child(4){animation-delay:.69s}
@keyframes xyBlurIn{to{opacity:1;filter:blur(0);transform:none}}
.letter{clip-path:inset(100% 0 0 0);animation:none !important;transition:clip-path 1.2s cubic-bezier(.3,.8,.2,1) .5s,opacity .5s ease .5s;opacity:0}
.letter.reveal{clip-path:inset(0 0 0 0);opacity:1}
.letter.opened{clip-path:inset(0 0 0 0);opacity:1;animation:letterFloat 6s ease-in-out 1s infinite}
@media (prefers-reduced-motion: reduce){.letter{clip-path:none;opacity:1;animation:none}.xy-gate-title i{animation:none;opacity:1;filter:none;transform:none}}
.xy-gate-grain{position:absolute;inset:0;pointer-events:none;opacity:.05;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E")}
.xy-gate-glow{position:fixed;left:0;top:0;width:380px;height:380px;border-radius:50%;background:radial-gradient(circle,rgba(140,180,255,.1),rgba(140,180,255,.045) 42%,transparent 70%);pointer-events:none;z-index:599;display:none}
@media (pointer:fine){.xy-gate-glow{display:block}}
.xy-gate-marquee{position:absolute;left:0;right:0;bottom:0;height:34px;display:flex;align-items:center;overflow:hidden;pointer-events:none;background:linear-gradient(90deg,rgba(10,16,36,.35),rgba(10,16,36,.18),rgba(10,16,36,.35))}
.xy-gate-marquee .mq{white-space:nowrap;font-size:10px;letter-spacing:.34em;color:rgba(215,228,255,.5);animation:xyMq 36s linear infinite;padding-left:0}
.xy-gate-marquee b{color:rgba(242,162,186,.65);font-weight:400;margin:0 .9em}
@keyframes xyMq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion: reduce){.xy-gate-marquee .mq{animation:none}}

/* ============================================================
   v35 · 大减法：只留 夜空/月牙/星/题名/信纸/按钮
   ============================================================ */
.xy-gate-aurora,.xy-gate-grain,.xy-gate-glow,.xy-gate-marquee,.xy-gate-progress{display:none !important}
.xy-gate-title-sub{display:none !important}
.xy-gate-stars i{width:1.5px;height:1.5px;opacity:.5 !important;animation:none !important}
.xy-gate-prints{display:none !important}

/* ============================================================
   v36 · 大字即界面（no card, type as UI）
   ============================================================ */
.xy-gate-hero{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 8vw;z-index:2}
.hero-eyebrow{margin:0 0 4.5vh;font-family:'Yny',serif;font-weight:400;font-size:10px;line-height:1;letter-spacing:.42em;color:rgba(215,228,255,.5);white-space:nowrap;animation:xyBlurIn 1s ease .25s both}
.hero-title{margin:0;font-family:'Yny',serif;font-weight:400;font-size:clamp(92px,31vw,160px);line-height:1;color:#eef3ff;display:flex;gap:.14em;transition:gap .9s cubic-bezier(.2,.7,.2,1)}
@media (hover:hover){.hero-title:hover{gap:.3em}}
.hero-title span{opacity:0;filter:blur(12px);transform:translateY(26px);animation:xyBlurIn 1.1s cubic-bezier(.2,.7,.2,1) forwards}
.hero-title span:nth-child(2){animation-delay:.28s}
.hero-sub{margin:3.4vh 0 0;font-family:'Yny',serif;font-weight:400;font-size:11px;line-height:1;letter-spacing:.3em;color:rgba(215,228,255,.58);white-space:nowrap;animation:xyBlurIn 1s ease 1s both}
.hero-sub b{font-size:24px;font-weight:400;letter-spacing:.04em;color:#f2a2ba;margin-right:.3em;vertical-align:-2px}
.xy-gate-btn{margin-top:6.5vh !important;background:transparent !important;border:1px solid rgba(238,243,255,.32) !important;color:#eef3ff !important;padding:15px 46px !important;font-family:'Yny',serif !important;font-size:12px !important;letter-spacing:.42em;text-indent:.42em;transition:border-color .4s,color .4s,letter-spacing .4s !important;animation:xyBlurIn 1s ease 1.3s both;cursor:pointer}
.xy-gate-btn i{font-style:normal;color:#f2a2ba;margin-left:.2em}
.xy-gate-btn:hover,.xy-gate-btn:active{border-color:rgba(242,162,186,.75) !important;color:#f2a2ba !important;letter-spacing:.5em}
.xy-gate-btn svg{display:none}
.xy-gate-title-sub{display:none !important}
@media (prefers-reduced-motion: reduce){.hero-eyebrow,.hero-title span,.hero-sub,.xy-gate-btn{animation:none;opacity:1;filter:none;transform:none}}

/* v37 · hero 收口 */
.xy-gate-btn{position:absolute !important;left:50% !important;bottom:6.5vh !important;top:auto !important;margin:0 !important;transform:translateX(-50%);z-index:3}
.xy-gate-hero{justify-content:center;padding-bottom:10vh}
.hero-eyebrow{font-size:11px;color:rgba(215,228,255,.55)}
.hero-sub{letter-spacing:.26em}
.xy-gate-cap{position:absolute;inset:0;z-index:2;pointer-events:none}
.xy-gate-cap .hero-title{pointer-events:auto}

/* v37b · sub 单行 + 雪原按钮 */
.hero-sub{white-space:nowrap !important;display:flex;align-items:baseline;justify-content:center;gap:.4em;letter-spacing:.3em}
.hero-sub b{font-size:26px;letter-spacing:.02em}
.xy-gate-btn{bottom:8.5vh !important;border:none !important;color:#2c3a5e !important;text-shadow:none;padding:10px 18px !important;font-size:13px !important}
.xy-gate-btn i{color:#c8698a !important;font-style:normal}
.xy-gate-btn:hover,.xy-gate-btn:active{color:#c8698a !important;letter-spacing:.48em}
.xy-gate-btn:hover i,.xy-gate-btn:active i{color:#2c3a5e !important}
.xy-gate-hero{padding-bottom:13vh}

/* ============================================================
   v38 · 玻璃爱心瓶（悬浮挂件）· 瓶中飘雪
   ============================================================ */
#xyBottle{position:fixed;right:10px;bottom:158px;width:54px;z-index:70;cursor:pointer;filter:drop-shadow(0 14px 22px rgba(30,70,150,.28));-webkit-tap-highlight-color:transparent;animation:xyBtIn 1s cubic-bezier(.2,.7,.2,1) .4s both}
@keyframes xyBtIn{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:translateY(0)}}
#xyBottle.fly{animation:xyBtShake .75s cubic-bezier(.36,.07,.19,.97)}
@keyframes xyBtShake{0%,100%{transform:rotate(0)}22%{transform:rotate(-4.5deg)}52%{transform:rotate(3.2deg)}80%{transform:rotate(-1.4deg)}}
.xy-bt-cork{width:26px;height:11px;margin:0 auto;border-radius:4px 4px 2px 2px;background:linear-gradient(180deg,#4a5d88,#33436b);box-shadow:inset 0 1px 1px rgba(255,255,255,.35)}
.xy-bt-neck{width:19px;height:13px;margin:0 auto;background:linear-gradient(180deg,rgba(215,232,255,.34),rgba(160,195,240,.16));border:1px solid rgba(205,228,255,.5);border-top:none;border-radius:0 0 4px 4px;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
.xy-bt-body{position:relative;width:72px;height:94px;margin-top:-1px;border-radius:26px 26px 30px 30px / 20px 20px 26px 26px;background:linear-gradient(168deg,rgba(216,233,255,.24),rgba(140,180,235,.10) 46%,rgba(188,214,250,.18));border:1px solid rgba(205,228,255,.48);box-shadow:inset 2px 3px 9px rgba(255,255,255,.30),inset -5px -7px 16px rgba(90,130,200,.20),inset 0 -10px 18px rgba(70,110,180,.14),0 6px 18px rgba(40,80,160,.20);overflow:visible}
.xy-bt-shine{position:absolute;left:10px;top:9px;width:7px;height:56%;border-radius:8px;background:linear-gradient(rgba(255,255,255,.9),rgba(255,255,255,.04));filter:blur(1.4px);opacity:.6;transform:rotate(7deg);pointer-events:none}
.xy-bt-shine.s2{left:auto;right:11px;width:3.5px;height:37%;opacity:.38;transform:rotate(-8deg)}
.xy-bt-hearts{position:absolute;inset:0;pointer-events:none}
.xy-bt-hearts b{position:absolute;color:rgba(242,150,180,.9);animation:xyBtFloat 3.6s ease-in-out infinite alternate;filter:drop-shadow(0 2px 4px rgba(200,80,120,.3))}
.xy-bt-hearts b svg{width:100%;height:100%;display:block}
.xy-bt-hearts .h1{left:16%;bottom:16%;width:15px;height:15px;animation-delay:-.4s}
.xy-bt-hearts .h2{left:52%;bottom:30%;width:11px;height:11px;animation-delay:-1.7s;color:rgba(242,150,180,.65)}
.xy-bt-hearts .h3{left:33%;bottom:44%;width:8px;height:8px;animation-delay:-2.6s;color:rgba(255,190,210,.75)}
@keyframes xyBtFloat{from{transform:translateY(-4px)}to{transform:translateY(5px)}}
.xy-bt-snow{position:absolute;left:0;right:0;top:0;bottom:0;overflow:hidden;border-radius:inherit;pointer-events:none}
.xy-bt-snow i{position:absolute;top:-6px;width:2.5px;height:2.5px;border-radius:50%;background:rgba(255,255,255,.95);box-shadow:0 0 4px rgba(220,238,255,.9);animation:xyBtFlake linear infinite}
@keyframes xyBtFlake{
  0%{transform:translate(0,0);opacity:0}
  9%{opacity:.95}
  28%{transform:translate(var(--sw),28px)}
  52%{transform:translate(calc(var(--sw)*-.75),52px)}
  78%{transform:translate(calc(var(--sw)*.45),76px)}
  94%{opacity:.5}
  100%{transform:translate(calc(var(--sw)*-.3),96px);opacity:0}
}
.xy-bt-pop{position:absolute;left:38%;top:-6px;width:13px;height:13px;color:#f2a2ba;pointer-events:none;filter:drop-shadow(0 0 6px rgba(242,162,186,.6));animation:xyBtPop 1.05s cubic-bezier(.2,.7,.3,1) forwards}
.xy-bt-pop svg{width:100%;height:100%;display:block}
@keyframes xyBtPop{0%{transform:translateY(0) scale(.55);opacity:0}14%{opacity:1}100%{transform:translateY(-52px) scale(1.12);opacity:0}}
@media (max-width:380px){#xyBottle{right:8px;bottom:150px;transform:scale(.9)}#xyBottle.fly{animation:xyBtShake .75s cubic-bezier(.36,.07,.19,.97)}}
@media (prefers-reduced-motion: reduce){#xyBottle{animation:none}.xy-bt-hearts b,.xy-bt-snow i{animation:none}}

/* v40 · 回退后的保留项（仅此三件） */
.zh-title{font-weight:500 !important;font-size:19px !important}
.xy-chip-next{color:#3a5c96;border-color:rgba(160,196,235,.6);background:rgba(224,238,252,.6);animation:none}
