/* =====================================================================
   XingHuiSama 风格复刻 · 设计系统
   参考：Tailwind4 + 靛蓝(indigo) + 白玻璃卡片 + 衬线字体
   ===================================================================== */
:root{
  /* 更柔和的字体：圆润黑体优先，衬线只留给品牌与标题 */
  --font-serif:"Noto Serif SC","Source Han Serif SC","Songti SC",Georgia,serif;
  --font-soft:"HarmonyOS Sans SC","MiSans","OPPO Sans","Source Han Sans SC","Noto Sans SC","PingFang SC","Microsoft YaHei UI","Microsoft YaHei",system-ui,sans-serif;
  --font-sans:var(--font-soft);
  --indigo-400:#7d87ff; --indigo-500:#625fff; --indigo-600:#4f39f6;
  --purple-500:#ac4bff; --pink-400:#f472b6; --pink-600:#db2777;
  --sky-500:#00a5ef; --cyan-400:#00d2ef; --teal-400:#00d3bd; --emerald-500:#00bb7f;
  --slate-50:#f8fafc; --slate-300:#cbd5e1; --slate-400:#94a3b8; --slate-500:#64748b;
  --slate-600:#475569; --slate-700:#334155; --slate-800:#1e293b; --slate-900:#0f172a; --slate-950:#020617;
  --page-bg:#0a1120; --card-bg:rgba(226,234,248,.16); --card-bd:rgba(255,255,255,.10);
  --hdr-bg:rgba(18,26,42,.62); --hdr-bd:rgba(255,255,255,.08);
  --txt:#f4f7fc; --txt-2:#d3dced; --txt-3:#9aa9c2;
  --accent:var(--indigo-400);
  --bg-op:.46;        /* 背景照片通透度（夜间） */
  --bg-lum:.74;       /* 背景照片亮度 */
  --shadow-xl:0 10px 30px -12px rgb(15 23 42/.10),0 2px 8px -4px rgb(15 23 42/.06);
  --shadow-soft:0 18px 44px -20px rgb(15 23 42/.16),0 4px 12px -6px rgb(15 23 42/.06);
  --ring-soft:0 0 0 1px rgb(255 255 255/.5);
}
*{box-sizing:border-box;margin:0;padding:0}
/* ============ 毛玻璃层（颜色由 app.js 依据当前背景图注入 --glass / --glass-bd） ============ */
.glass{
  position:relative;isolation:isolate;
  -webkit-backdrop-filter:blur(20px) saturate(1.45);
  backdrop-filter:blur(20px) saturate(1.45);
}
.glass::before{
  content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;
  padding:1px;                                   /* 描边宽度 */
  background:
    linear-gradient(160deg,rgba(255,255,255,.16),rgba(255,255,255,.045) 40%,rgba(255,255,255,.02)) padding-box,
    linear-gradient(160deg,rgba(255,255,255,.22),rgba(255,255,255,.06) 46%,rgba(255,255,255,.015)) border-box;
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;
  transition:background 1.1s cubic-bezier(.22,.61,.36,1);
}
/* 玻璃顶部高光，增强质感 */
.glass::after{
  content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;
  background:linear-gradient(180deg,rgba(255,255,255,.30),rgba(255,255,255,0) 40%);
  opacity:.85;
}
.glass::after{background:linear-gradient(180deg,rgba(255,255,255,.10),rgba(255,255,255,0) 46%)}
html{
  scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%;
  -webkit-font-smoothing:antialiased;      /* 抗锯齿：WebKit/Blink */
  -moz-osx-font-smoothing:grayscale;       /* 抗锯齿：Firefox on macOS */
  text-rendering:optimizeLegibility;
  font-kerning:normal;font-variant-ligatures:common-ligatures;
  font-synthesis-weight:none;
}
body{
  min-height:100vh;background:var(--page-bg);color:var(--txt);
  font-family:var(--font-soft);font-weight:400;
  transition:background-color 1.2s cubic-bezier(.4,0,.2,1),color .9s cubic-bezier(.4,0,.2,1);
  overflow-x:hidden;position:relative;letter-spacing:.02em;line-height:1.85;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
}
/* 图片与画布一律走高质量缩放，避免锯齿 */
img,canvas,svg,video{image-rendering:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden}
img{will-change:auto;transform:translateZ(0)}
::selection{background:rgba(99,102,241,.18)}
/* 柔和滚动条 */
*::-webkit-scrollbar{width:10px;height:10px}
*::-webkit-scrollbar-thumb{background:rgba(148,163,184,.35);border-radius:99px;border:3px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:rgba(148,163,184,.55);background-clip:content-box}
*::-webkit-scrollbar-track{background:transparent}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
.wrap{width:90%;max-width:1152px;margin:0 auto}

/* ===================== 顶部导航 ===================== */
/* 顶栏：下滑收起、上滑出现 */
#hdr{position:fixed;top:0;left:0;right:0;z-index:50;border-bottom:1px solid rgba(255,255,255,.07);
  will-change:transform;transform:translateY(0);
  background:var(--glass,var(--hdr-bg));
  -webkit-backdrop-filter:blur(26px) saturate(1.5);backdrop-filter:blur(26px) saturate(1.5);
  box-shadow:0 12px 34px -26px rgba(0,0,0,.6);
  transition:background 1.1s cubic-bezier(.22,.61,.36,1),box-shadow .6s,border-color .6s,
    transform .55s cubic-bezier(.22,.61,.36,1)}
#hdr.hide{transform:translateY(-105%)}                       /* 收起 */
#hdr.peek{background:var(--glass,var(--hdr-bg));
  -webkit-backdrop-filter:blur(26px) saturate(1.5);backdrop-filter:blur(26px) saturate(1.5);
  box-shadow:0 14px 34px -26px rgba(0,0,0,.7)}
#hdr .bar{height:64px;display:flex;align-items:center;justify-content:space-between;padding:0 30px}
.brand{display:inline-flex;align-items:center;gap:11px;
  font-family:var(--font-serif);font-size:19px;font-weight:900;color:var(--txt);transition:color .45s}
.brand .bm{letter-spacing:-.02em}
.brand .bd{flex:0 0 auto;width:1px;height:15px;
  background:linear-gradient(180deg,transparent,rgba(160,172,255,.7),transparent)}
.brand .bs{font-size:12.5px;font-weight:700;letter-spacing:.24em;color:var(--txt-3);
  padding-top:1px;transition:color .45s,letter-spacing .45s}
.brand:hover{color:var(--accent)}
.brand:hover .bs{color:var(--accent);opacity:.85;letter-spacing:.28em}
#nav{display:flex;gap:32px;font-size:14px;font-weight:700}
#nav a{position:relative;padding:4px 0;color:var(--txt-2);transition:color .3s;white-space:nowrap}
#nav a:hover{color:var(--accent)}
#nav a.on{color:var(--accent)}
#nav a.on::after{content:"";position:absolute;left:50%;bottom:-4px;width:4px;height:4px;border-radius:50%;
  background:var(--indigo-500);transform:translateX(-50%);animation:pulse 2s infinite}
#nav a{padding:6px 10px;border-radius:10px;transition:background .45s cubic-bezier(.22,.61,.36,1),color .45s}
#nav a:hover,#nav a.on{background:rgba(255,255,255,.09)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
/* 移动端悬浮菜单按钮 */
#mbtn{position:fixed;top:50%;right:0;transform:translateY(-50%);width:48px;height:112px;z-index:60;display:none;
  align-items:center;justify-content:center;gap:6px;flex-direction:column;border-radius:999px 0 0 999px;
  background:rgba(99,102,241,.8);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);border-right:0;
  box-shadow:-5px 0 20px rgba(99,102,241,.4);cursor:pointer;transition:.5s}
#mbtn span{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.9)}
#mdrawer{position:fixed;inset:0;z-index:70;display:none;background:rgba(15,23,42,.35);backdrop-filter:blur(6px)}
#mdrawer.on{display:block}
#mdrawer .pane{position:absolute;right:0;top:0;height:100%;width:210px;padding:26px 20px;
  background:var(--glass,var(--hdr-bg));-webkit-backdrop-filter:blur(26px) saturate(1.5);
  backdrop-filter:blur(26px) saturate(1.5);border-left:1px solid rgba(255,255,255,.08);box-shadow:var(--shadow-xl)}
#mdrawer a{display:block;padding:11px 12px;border-radius:12px;font-weight:700;color:var(--txt-2)}
#mdrawer a.on,#mdrawer a:hover{background:rgba(99,102,241,.14);color:var(--accent)}

/* ===================== 页面容器 ===================== */
/* 层序：背景(-) < 粒子(1) < 内容(5) */
main{position:relative;z-index:5;padding:112px 0 40px}
.page-head{position:relative;border:1px solid rgba(255,255,255,.07);background:var(--glass,var(--card-bg));
  -webkit-backdrop-filter:blur(20px) saturate(1.45);backdrop-filter:blur(20px) saturate(1.45);
  border-radius:24px;box-shadow:var(--shadow-xl);padding:30px 32px;margin-bottom:24px;overflow:hidden;text-align:left}
.page-head h1{font-size:26px;font-weight:900;letter-spacing:.02em}
/* 页头图标：不用徽章，做成与标题同色的细线符号，跟文字长在一起 */
.page-head h1{display:flex;align-items:center;justify-content:center;gap:13px;line-height:1.2}
.head-ic{display:inline-flex;align-items:center;justify-content:center;color:currentColor;opacity:.62;flex:0 0 auto;
  width:26px;height:26px;transform:translateY(-.5px);   /* 视觉居中：汉字重心偏下，图标微上移 */
  transition:opacity .4s cubic-bezier(.22,.61,.36,1)}
.page-head:hover .head-ic{opacity:.85}
.head-ic svg{width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round;display:block}
.page-head.center p{gap:0}
.page-head p{margin-top:8px;color:var(--txt-3);font-size:14.5px;line-height:1.8}
.crumb{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--txt-3);margin-bottom:14px}
.crumb:hover{color:var(--accent)}

/* ===================== 卡片 ===================== */
.grid12{display:grid;grid-template-columns:repeat(12,1fr);gap:24px}
.card{position:relative;border:0;background:var(--glass,var(--card-bg));
  -webkit-backdrop-filter:blur(20px) saturate(1.45);backdrop-filter:blur(20px) saturate(1.45);
  border-radius:24px;box-shadow:0 14px 40px -22px rgba(0,0,0,.55);
  padding:28px;overflow:hidden;transition:background 1.1s cubic-bezier(.22,.61,.36,1),border-color .6s,transform .6s cubic-bezier(.22,.61,.36,1),box-shadow .6s;
  transition:transform .6s cubic-bezier(.22,.61,.36,1),box-shadow .6s cubic-bezier(.22,.61,.36,1),border-color .6s}
.card:not(.clickable):not(.static-card):hover{transform:translateY(-3px) scale(1.008);box-shadow:0 22px 54px -26px rgba(0,0,0,.62)}
/* 容器卡不放大：只让内部的小方框有悬停反馈 */
.card.static-card:hover{transform:none;box-shadow:0 14px 40px -22px rgba(0,0,0,.55)}
.card.pad-sm{padding:20px}
/* 栅格列（7+5 名片/音乐卡，8+4 音乐页，其余等分对称） */
.col-8{grid-column:span 8}.col-7{grid-column:span 7}.col-5{grid-column:span 5}
.col-6{grid-column:span 6}.col-4{grid-column:span 4}.col-3{grid-column:span 3}.col-12{grid-column:span 12}
.grid12{align-items:stretch}
.grid12 > *{display:flex}
.grid12 > * > .card{width:100%}
.row{display:flex;align-items:center;gap:16px}
.between{display:flex;align-items:center;justify-content:space-between;gap:16px}
.muted{color:var(--txt-3)}
.tiny{font-size:11px;letter-spacing:.12em;text-transform:uppercase;font-weight:700}

/* 头像 + 昵称块 */
.avatar{width:96px;height:96px;border-radius:16px;padding:4px;flex:0 0 auto;
  background:linear-gradient(45deg,var(--indigo-500),var(--purple-500));box-shadow:0 10px 15px -3px rgb(0 0 0/.1);
  transition:transform .5s}
.card:hover .avatar{transform:rotate(3deg)}
.avatar img{width:100%;height:100%;border-radius:12px;object-fit:cover;background:#fff}
.who h1{font-family:var(--font-serif);font-size:30px;font-weight:700;letter-spacing:.02em;line-height:1.35}
.who p{margin-top:6px;font-size:15px;line-height:1.75;color:var(--txt-2);max-width:460px}
/* 名片卡：等高等宽，内部三段对称分布 */
/* 名片（照参考图比例）：头像+简介在上，统计与图标并排在下 */
.hero-card{display:flex;flex-direction:column;justify-content:space-between;min-height:258px;padding:26px 30px}
.hero-card .row{align-items:flex-start;gap:20px}
.hero-card .avatar{width:92px;height:92px;border-radius:16px;padding:3px}
.hero-card .avatar img{border-radius:13px}
.hero-card .who h1{font-size:27px;letter-spacing:.02em}
.hero-card .who p{font-size:13.5px;line-height:1.8;margin-top:5px;max-width:400px}
.hero-bottom{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:16px;flex-wrap:nowrap}
.hero-bottom .stats{margin:0;flex:0 0 auto;gap:10px}
.hero-bottom .stats .stat{flex:0 0 auto;padding:0 6px}
.hero-bottom .stat b{font-size:22px}
.hero-bottom .stat i{font-size:9.5px;letter-spacing:.12em;white-space:nowrap}
.hero-bottom .vline{height:32px}
.hero-bottom .icons{margin:0;flex:0 0 auto;gap:7px}
.hero-card .icon{width:34px;height:34px;border-radius:10px}
@media (max-width:760px){
  .hero-bottom{flex-wrap:wrap}
  .hero-bottom .stats,.hero-bottom .icons{flex:1 1 100%;justify-content:center}
}
/* 统计：三等分对称 */
.stats{display:flex;align-items:center;justify-content:space-between;margin-top:26px;gap:0}
.stats .stat{flex:1 1 0;text-align:center}
/* 图标：四等分对称 */
.icons{display:flex;align-items:center;justify-content:space-between;gap:0;margin-top:22px}
.icons .icon{flex:0 0 auto}
.icons .icon:only-child{margin:0 auto}
.stat{text-align:center;padding:0 8px}
.stat b{display:block;font-size:24px;font-weight:900;transition:transform .3s}
.stat:hover b{transform:scale(1.1)}
.stat i{font-style:normal;display:block;margin-top:2px;font-size:10px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--txt-3)}
.stat.s1 b{color:var(--indigo-400)}.stat.s2 b{color:var(--purple-500)}.stat.s3 b{color:var(--teal-400)}
.vline{width:1px;height:38px;background:linear-gradient(180deg,transparent,rgba(203,213,225,.6),transparent);flex:0 0 1px}
.vline{background:rgba(51,65,85,.8)}
/* 图标按钮 */
.icons{display:flex;gap:12px;flex-wrap:wrap}
.icon{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(255,255,255,.09);background:var(--glass,var(--card-bg));color:var(--txt-2);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4);box-shadow:0 1px 2px rgb(0 0 0/.05);
  transition:.3s}
.icon:hover{background:var(--indigo-500);color:#fff;transform:translateY(-2px)}
.icon svg{width:19px;height:19px;fill:currentColor}
.icon.line svg{fill:none;stroke:currentColor;stroke-width:1.8}

/* 音乐卡（照参考图）：圆形唱片 + 歌名/作者 + 进度条 + 控制 */
.music-card{min-height:258px;padding:24px 26px;display:flex;flex-direction:column;justify-content:space-between;gap:14px}
.music-card .row{gap:14px;align-items:center;flex-wrap:nowrap}
.music-card #trackName{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-card #trackArtist{font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-card #trackAlbum{font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-card .disc{width:72px;height:72px;border-radius:50%;flex:0 0 auto;
  background:
    radial-gradient(circle at 50% 50%, #f3f6fb 0 16%, rgba(255,255,255,.06) 17% 22%, transparent 23%),
    conic-gradient(from 0deg, #6b7cff, #ac4bff 25%, #f472b6 50%, #7d87ff 75%, #6b7cff);
  box-shadow:0 10px 24px -12px rgba(107,124,255,.8),inset 0 0 0 1px rgba(255,255,255,.22)}
.disc-wrap{position:relative;flex:0 0 auto}
/* 唱片式旋转：只作用于首页音乐卡的小封面，音乐页大封面保持静止 */
.music-card .disc-wrap.spin .disc{animation:spin 9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.music-card .row > div:last-child{min-width:0;flex:1 1 auto}
.music-prog{display:flex;align-items:center;gap:10px}
.music-prog .time{font-size:11px;font-variant-numeric:tabular-nums;color:var(--txt-3);flex:0 0 auto}
.music-prog .bar{flex:1;height:5px;border-radius:99px;background:rgba(255,255,255,.16)}
.music-prog .bar i{display:block;height:100%;width:0;border-radius:99px;position:relative;
  background:linear-gradient(90deg,var(--indigo-400),var(--purple-500));transition:width .25s linear}
/* 进度条可拖动：热区加高、悬停变亮、拖拽手柄 */
.music-prog .bar{position:relative;cursor:pointer;transition:background .25s}
.music-prog .bar::before{content:"";position:absolute;left:0;right:0;top:-11px;bottom:-11px}   /* 扩大点击范围 */
.music-prog .bar:hover{background:rgba(255,255,255,.24)}
.music-prog .bar.drag{background:rgba(255,255,255,.28);transition:none}
.music-prog .bar i::after{content:"";position:absolute;right:-6px;top:50%;width:13px;height:13px;border-radius:50%;
  transform:translateY(-50%) scale(0);background:#fff;pointer-events:none;
  box-shadow:0 2px 9px rgba(0,0,0,.6),0 0 0 1px rgba(125,135,255,.55);
  transition:transform .22s cubic-bezier(.22,.61,.36,1)}
.music-prog .bar:hover i::after,.music-prog .bar.drag i::after{transform:translateY(-50%) scale(1)}
.music-prog .bar.drag i{transition:none}
.music-prog .time{user-select:none}

/* 音量控制：左右等宽占位，按钮严格居中、音量贴右且可收缩 */
.row.music-ctl{display:flex;align-items:center;gap:10px}
/* 按钮组用 auto margin 居中于"模式钮—音量组"之间的剩余空间：
   音量条展开时剩余空间变小，按钮组被自然"挤"向左侧，不会重叠 */
.row.music-ctl #prev{margin-left:auto}
.row.music-ctl #next{margin-right:auto}
.music-ctl .btn.round{width:42px;height:42px}          /* 略缩，给音量条腾空间 */
.music-ctl .btn.round.primary{width:46px;height:46px}
.music-ctl .ctl-sp{flex:0 0 auto;display:flex;align-items:center}
.music-ctl .ctl-sp.l{justify-content:flex-start;padding-left:12px}    /* 两端图标各往里靠一点，保持对称 */
.music-ctl .ctl-sp.r{justify-content:flex-end;padding-right:12px}
.vol{display:flex;align-items:center;gap:0;min-width:0;max-width:100%;justify-content:flex-end;flex:0 1 auto}
.vol-ic{flex:0 0 auto;width:28px;height:28px;display:grid;place-items:center;padding:0;border:0;background:none;
  cursor:pointer;color:var(--txt-3);transition:color .3s}
.vol-ic svg{width:18px;height:18px;display:block;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.vol-ic:hover{color:var(--txt)}
.vol-ic .vx{display:none}
.vol.muted .vol-ic{color:#ff9a9a}
.vol.muted .vol-ic .vw{display:none}
.vol.muted .vol-ic .vx{display:block}
.vol.low .vol-ic .vw2{display:none}
/* 播放模式按钮（左）：列表 / 单曲循环 / 随机 */
.mode-btn{position:relative;width:28px;height:28px;display:grid;place-items:center;padding:0;border:0;
  background:none;cursor:pointer;color:var(--txt-3);transition:color .3s}
.mode-btn:hover{color:var(--txt)}
.mode-btn .ic-mode{grid-area:1/1;display:none;width:18px;height:18px;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.mode-btn[data-mode="list"] .ic-list,
.mode-btn[data-mode="loop"] .ic-loop,
.mode-btn[data-mode="shuffle"] .ic-shuffle{display:block}
.mode-btn[data-mode="loop"]{color:var(--accent)}
.mode-btn[data-mode="shuffle"]{color:var(--accent)}
.mode-btn::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 9px);left:50%;
  transform:translateX(-50%) translateY(4px);white-space:nowrap;
  font-size:11px;font-weight:700;letter-spacing:.04em;padding:4px 10px;border-radius:9px;
  background:rgba(18,24,40,.97);border:1px solid rgba(255,255,255,.13);color:var(--txt-2);
  box-shadow:0 10px 26px -12px rgba(0,0,0,.85);
  opacity:0;pointer-events:none;transition:opacity .25s,transform .25s}
.mode-btn.tip::after{opacity:1;transform:translateX(-50%) translateY(0)}
.vol-bar{position:relative;flex:0 1 auto;width:0;min-width:0;height:5px;border-radius:99px;
  background:rgba(255,255,255,.16);cursor:pointer;margin-left:0;opacity:0;pointer-events:none;
  transition:width .3s cubic-bezier(.22,.61,.36,1),opacity .2s ease,margin-left .3s cubic-bezier(.22,.61,.36,1),background .25s}
.vol.open .vol-bar{width:82px;opacity:1;margin-left:8px;pointer-events:auto}
.vol-bar::before{content:"";position:absolute;left:0;right:0;top:-11px;bottom:-11px}
.vol-bar:hover{background:rgba(255,255,255,.24)}
.vol-bar.drag{background:rgba(255,255,255,.28)}
.vol-bar i{display:block;height:100%;width:100%;border-radius:99px;position:relative;
  background:linear-gradient(90deg,var(--indigo-400),var(--purple-500));transition:width .12s linear}
.vol-bar i::after{content:"";position:absolute;right:-6px;top:50%;width:12px;height:12px;border-radius:50%;
  background:#fff;pointer-events:none;transform:translateY(-50%) scale(0);
  box-shadow:0 2px 8px rgba(0,0,0,.6),0 0 0 1px rgba(125,135,255,.55);
  transition:transform .2s cubic-bezier(.22,.61,.36,1)}
.vol-bar:hover i::after,.vol-bar.drag i::after{transform:translateY(-50%) scale(1)}
.vol-bar.drag i{transition:none}
/* 窄屏：卡片会被压到 ~300px，按钮与音量都收一档（滑条本身可缩到 0，不会压到按钮） */
@media (max-width:1024px){
  .music-ctl{gap:10px}
  .music-ctl .btn.round{width:38px;height:38px}
  .music-ctl .btn.round.primary{width:42px;height:42px}
  .vol-ic{width:24px}
  .vol-ic svg{width:16px;height:16px}
  .mode-btn{width:24px;height:24px}
  .mode-btn .ic-mode{width:16px;height:16px}
  .vol.open .vol-bar{margin-left:7px}
}
/* 更窄一档：卡片仅 ~270px，再收一次 */
@media (max-width:820px){
  .music-ctl{gap:8px}
  .music-ctl .btn.round{width:34px;height:34px}
  .music-ctl .btn.round.primary{width:38px;height:38px}
  .vol-ic{width:22px}
  .vol-ic svg{width:15px;height:15px}
  .mode-btn{width:22px;height:22px}
  .mode-btn .ic-mode{width:15px;height:15px}
  .vol.open .vol-bar{margin-left:5px}
}
@media (max-width:680px){
  .music-ctl{gap:10px}
  .vol.open .vol-bar{width:64px}
  .music-ctl .btn.round{width:38px;height:38px}
  .music-ctl .btn.round.primary{width:42px;height:42px}
  .vol-ic{width:24px}
  .vol-ic svg{width:16px;height:16px}
  .mode-btn{width:24px;height:24px}
  .mode-btn .ic-mode{width:16px;height:16px}
  .vol.open .vol-bar{min-width:26px;margin-left:7px}
}
.music-card .btn.round{width:42px;height:42px}
.music-card .btn.round.primary{width:48px;height:48px;font-size:17px}

/* ===================== 文章详情 ===================== */
.article-card{max-width:820px;margin:0 auto;padding:40px 46px}
.article-body{text-align:left;font-size:15.5px;line-height:2.05;color:var(--txt-2)}
.article-body p{margin:0 0 20px;text-align:justify}
.article-body h2{font-family:var(--font-serif);font-size:19px;font-weight:800;color:var(--txt);
  margin:34px 0 14px;padding-left:14px;position:relative;text-align:left}
.article-body h2::before{content:"";position:absolute;left:0;top:.35em;bottom:.35em;width:3px;border-radius:2px;
  background:linear-gradient(180deg,var(--indigo-400),var(--purple-500))}
.article-body b{color:var(--txt)}
.article-body code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13.5px;
  background:rgba(125,135,255,.14);border:1px solid rgba(125,135,255,.20);color:#c3caff;
  padding:2px 7px;border-radius:6px;word-break:break-all}
@media (max-width:680px){ .article-card{padding:26px 20px} .article-body{font-size:15px} }

/* 曲目行 */
.track-row{display:flex;align-items:center;gap:12px;padding:12px;border-radius:14px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.08)}
.playlist{display:flex;flex-direction:column;gap:4px;max-height:374px;overflow-y:auto;
  margin:-4px -6px 0;padding:4px 6px}
.playlist::-webkit-scrollbar{width:5px}
.playlist::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:9px}
.track-row{width:100%;text-align:left;border:1px solid transparent;background:transparent;
  transition:background .3s,border-color .3s,transform .3s cubic-bezier(.22,.61,.36,1)}
.track-row:hover{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.09);transform:translateX(2px)}
.track-row.on{background:rgba(125,135,255,.14);border-color:rgba(125,135,255,.34)}
.track-row.on b{color:var(--accent)}
.tr-tx{display:block;min-width:0}
.tr-tx b{display:block;font-size:13px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tr-tx i{display:block;font-style:normal;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tr-eq{display:none;align-items:flex-end;gap:2px;height:13px;margin-left:auto;flex:0 0 auto}
.track-row.on .tr-eq{display:flex}
.tr-eq i{width:2.5px;border-radius:9px;background:var(--accent);animation:eqb .9s ease-in-out infinite}
.tr-eq i:nth-child(1){height:6px;animation-delay:0s}
.tr-eq i:nth-child(2){height:12px;animation-delay:.18s}
.tr-eq i:nth-child(3){height:8px;animation-delay:.36s}
.track-row img{width:46px;height:46px;border-radius:11px;object-fit:cover;flex:0 0 auto}
.track-row b{display:block;font-size:13.5px;font-weight:700}
.track-row span{display:block;margin-top:2px}
.disc{background-size:cover;background-position:center}

/* ===================== 底部信息条（歌名 + 播放状态） ===================== */
.now-bar{display:flex;align-items:center;gap:20px;margin-top:22px;padding:16px 22px 16px 26px;border-radius:22px;
  min-height:82px;position:relative;background:var(--glass,var(--card-bg));
  -webkit-backdrop-filter:blur(20px) saturate(1.45);backdrop-filter:blur(20px) saturate(1.45);
  box-shadow:0 14px 40px -22px rgba(0,0,0,.55);
  transition:background 1.1s cubic-bezier(.22,.61,.36,1),box-shadow .5s cubic-bezier(.22,.61,.36,1)}
.now-bar{transition:background 1.1s cubic-bezier(.22,.61,.36,1),box-shadow .5s,transform .5s cubic-bezier(.22,.61,.36,1)}
.now-bar:hover{transform:scale(1.006)}
.now-bar.playing{box-shadow:0 18px 48px -24px rgba(107,124,255,.55),0 0 0 1px rgba(125,135,255,.16) inset}
/* 音律起伏条 */
.eq{display:flex;align-items:flex-end;justify-content:flex-start;gap:3px;height:38px;width:136px;flex:0 0 auto}
.eq i{flex:1 1 0;min-width:2px;border-radius:3px;height:22%;transform-origin:bottom;
  background:linear-gradient(180deg,var(--indigo-400),var(--purple-500));
  animation:eqBounce 1s ease-in-out infinite alternate;animation-play-state:paused;opacity:.5;
  transition:opacity .4s}
.eq.on i{animation-play-state:running;opacity:1}
.eq i:nth-child(1){animation-duration:.78s;animation-delay:-.2s}
.eq i:nth-child(2){animation-duration:1.05s;animation-delay:-.55s}
.eq i:nth-child(3){animation-duration:.66s;animation-delay:-.35s}
.eq i:nth-child(4){animation-duration:.92s;animation-delay:-.7s}
.eq i:nth-child(5){animation-duration:1.18s;animation-delay:-.15s}
.eq i:nth-child(6){animation-duration:.72s;animation-delay:-.48s}
.eq i:nth-child(7){animation-duration:1.1s;animation-delay:-.82s}
.eq i:nth-child(8){animation-duration:.84s;animation-delay:-.28s}
.eq i:nth-child(9){animation-duration:1.26s;animation-delay:-.62s}
.eq i:nth-child(10){animation-duration:.7s;animation-delay:-.4s}
.eq i:nth-child(11){animation-duration:.96s;animation-delay:-.74s}
.eq i:nth-child(12){animation-duration:1.14s;animation-delay:-.1s}
@keyframes eqBounce{0%{height:16%}30%{height:58%}60%{height:30%}100%{height:92%}}
/* 中间：歌名 + 状态 */
.now-center{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;align-items:center;gap:7px;text-align:center}
.now-bar .menu-wrap{width:136px;display:flex;justify-content:flex-end}   /* 与左侧起伏条等宽，保证歌名/状态真居中 */
.now-title{font-size:17.5px;font-weight:800;color:var(--txt);letter-spacing:.02em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.bar-state{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:800;letter-spacing:.14em;
  padding:5px 14px;border-radius:99px;border:1px solid rgba(255,255,255,.10);
  background:rgba(255,255,255,.06);color:var(--txt-3);transition:all .4s cubic-bezier(.22,.61,.36,1)}
/* 正在播放：渐变胶囊 + 呼吸圆点，最醒目 */
.bar-state.playing{color:#fff;border-color:transparent;
  background:linear-gradient(135deg,var(--indigo-500),var(--purple-500));
  box-shadow:0 6px 20px -8px rgba(107,124,255,.9)}
.bar-state.playing::before{content:"";width:6px;height:6px;border-radius:50%;background:#fff;
  animation:pulse 1.1s ease-in-out infinite}
.bar-state.paused{color:var(--txt-2);background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.14)}
.bar-state.paused::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--txt-3)}
/* 右侧：解压小彩蛋 */
.quote-wrap{position:relative;flex:0 0 auto}
.bar-toy{width:46px;height:46px;border-radius:50%;cursor:pointer;color:var(--txt-2);
  border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.08);
  display:grid;place-items:center;
  transition:transform .35s cubic-bezier(.22,.61,.36,1),background .35s,color .35s,box-shadow .35s}
.bar-toy svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.5}
.bar-toy:hover{transform:scale(1.07);background:rgba(255,255,255,.14);color:var(--txt)}
.bar-toy.on{color:#fff;border-color:transparent;
  background:linear-gradient(135deg,var(--indigo-500),var(--purple-500));
  box-shadow:0 8px 24px -10px rgba(107,124,255,.95)}
/* 九宫格菜单 */
.menu-wrap{position:relative;flex:0 0 auto}
.menu-float{position:fixed;right:22px;bottom:96px;z-index:88;transition:right .2s cubic-bezier(.22,.61,.36,1),bottom .2s cubic-bezier(.22,.61,.36,1)}
.menu-pop{position:absolute;right:0;bottom:0;width:266px;padding:12px;border-radius:20px;z-index:40;
  background:linear-gradient(160deg,rgba(30,39,60,.97),rgba(20,27,43,.97));
  -webkit-backdrop-filter:blur(24px) saturate(1.3);backdrop-filter:blur(24px) saturate(1.3);
  border:1px solid rgba(255,255,255,.13);
  box-shadow:0 30px 70px -24px rgba(0,0,0,.9),0 0 0 1px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.08);
  opacity:0;visibility:hidden;transform:translateY(10px) scale(.97);transform-origin:bottom right;
  transition:opacity .3s cubic-bezier(.22,.61,.36,1),transform .3s cubic-bezier(.22,.61,.36,1),visibility .3s}
.menu-pop.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}
.menu-head{display:flex;align-items:center;padding:2px 8px 10px}
.menu-head b{font-size:12.5px;letter-spacing:.16em;color:var(--txt-3);text-transform:uppercase}
.menu-head b{font-size:13.5px;font-weight:800;color:var(--txt)}
.menu-head span{font-size:11px;color:var(--txt-3)}
.menu-item{display:flex;align-items:center;gap:12px;width:100%;padding:9px 12px;border-radius:14px;cursor:pointer;
  text-align:left;border:1px solid transparent;background:transparent;color:var(--txt);
  transition:background .3s cubic-bezier(.22,.61,.36,1),transform .3s cubic-bezier(.22,.61,.36,1),border-color .3s}
.menu-item:hover{background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.10);
  transform:translateX(2px) scale(1.035)}
.mi-ic{flex:0 0 auto;width:36px;height:36px;display:grid;place-items:center;border-radius:11px;
  color:#c3caff;
  background:linear-gradient(140deg,rgba(125,135,255,.24),rgba(172,75,255,.16));
  border:1px solid rgba(255,255,255,.10);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10);
  transition:color .3s,background .3s,box-shadow .3s}
.mi-ic svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round;display:block}
.menu-item:hover .mi-ic{color:#fff;
  background:linear-gradient(140deg,rgba(125,135,255,.42),rgba(172,75,255,.30));
  box-shadow:0 6px 18px -8px rgba(107,124,255,.9),inset 0 1px 0 rgba(255,255,255,.16)}
.mi-tx{min-width:0}
.mi-tx b{display:block;font-size:14px;font-weight:700;letter-spacing:.02em}
.mi-tx i{display:block;font-style:normal;font-size:11px;color:var(--txt-3);margin-top:2px}
/* 游戏弹窗 */
.game-modal{position:fixed;inset:0;z-index:130;display:none;place-items:center;padding:22px;
  background:rgba(6,10,20,.72);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.game-modal.open{display:grid}
.gm-box{width:min(430px,94vw);max-height:90vh;overflow:auto;border-radius:22px;padding:20px;
  background:linear-gradient(160deg,rgba(32,41,63,.99),rgba(20,27,43,.99));
  border:1px solid rgba(255,255,255,.14);box-shadow:0 40px 90px -30px rgba(0,0,0,.92);
  animation:gmIn .34s cubic-bezier(.22,.61,.36,1)}
@keyframes gmIn{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
.gm-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.gm-head b{font-size:16px;font-weight:900;color:var(--txt);letter-spacing:.02em}
.gm-x{width:32px;height:32px;border-radius:10px;cursor:pointer;color:var(--txt-2);font-size:13px;
  border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.06);transition:all .3s}
.gm-x:hover{background:rgba(255,255,255,.14);color:var(--txt)}
.gm-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;
  font-size:13px;color:var(--txt-2)}
.gm-bar b{color:var(--accent);font-variant-numeric:tabular-nums}
.gm-bar .btn{padding:7px 13px;font-size:12.5px}
.gm-tip{margin-top:13px;font-size:11.5px;color:var(--txt-3);text-align:center;line-height:1.7}
/* 解压泡泡 */
.bubbles{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.bubble{aspect-ratio:1;border-radius:50%;cursor:pointer;border:0;padding:0;
  background:radial-gradient(circle at 34% 30%,rgba(255,255,255,.92),rgba(158,170,255,.72) 44%,rgba(104,120,255,.6));
  box-shadow:inset 0 -2px 6px rgba(0,0,0,.18),0 2px 8px -3px rgba(107,124,255,.7);
  transition:transform .18s cubic-bezier(.22,.61,.36,1),opacity .3s,box-shadow .3s}
.bubble:hover{transform:scale(1.14)}
.bubble.pop{transform:scale(.72);opacity:.22;cursor:default;box-shadow:none;
  background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.18),rgba(120,132,200,.14))}
/* 2048 */
.g24{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;padding:9px;border-radius:16px;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.07);touch-action:none}
.g24-cell{aspect-ratio:1;border-radius:11px;display:grid;place-items:center;transition:transform .18s cubic-bezier(.22,.61,.36,1);
  font-size:22px;font-weight:900;color:#fff;font-variant-numeric:tabular-nums;
  background:rgba(255,255,255,.045);transition:background .18s,transform .18s}
.g24-cell.v2{background:#3b4670}.g24-cell.v4{background:#455089}
.g24-cell.v8{background:#5a5fd8}.g24-cell.v16{background:#6b5ce0}
.g24-cell.v32{background:#7d5ae4}.g24-cell.v64{background:#9256e6}
.g24-cell.v128{background:#ac4bff;font-size:19px}.g24-cell.v256{background:#c04bf0;font-size:19px}
.g24-cell.v512{background:#db4bd4;font-size:19px}.g24-cell.v1024{background:#f04bb0;font-size:16px}
.g24-cell.v2048{background:linear-gradient(135deg,#ffb03a,#ff6b6b);font-size:16px;
  box-shadow:0 0 22px -4px rgba(255,150,60,.9)}
.g24-cell.vbig{background:linear-gradient(135deg,#ff6b6b,#ac4bff);font-size:15px}
/* 计算器 */
.gm-box.calc-mode{width:min(392px,94vw)}
.calc{display:flex;flex-direction:column;gap:13px}
.calc-screen{padding:14px 16px;border-radius:15px;text-align:right;
  background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.08);
  min-height:78px;display:flex;flex-direction:column;justify-content:flex-end;gap:4px;overflow:hidden}
.calc-expr{font-size:12.5px;color:var(--txt-3);min-height:17px;letter-spacing:.04em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;direction:rtl}
.calc-main{font-size:30px;font-weight:800;color:var(--txt);font-variant-numeric:tabular-nums;
  line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;direction:rtl}
.calc-main.err{font-size:15px;color:#ff8080;font-weight:700}
.calc-pad{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.calc-btn{width:100%;min-width:0;height:50px;border-radius:13px;cursor:pointer;font-size:16px;font-weight:700;
  color:var(--txt);border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.07);
  display:grid;place-items:center;
  transition:transform .16s cubic-bezier(.22,.61,.36,1),background .16s,box-shadow .16s}
.calc-btn:hover{background:rgba(255,255,255,.15);transform:translateY(-1px) scale(1.045)}
.calc-btn:active{transform:scale(.95)}
.calc-btn.num{background:rgba(255,255,255,.10);font-size:17px}
.calc-btn.op{color:#c3caff;background:rgba(125,135,255,.16);border-color:rgba(125,135,255,.24)}
.calc-btn.fn{color:#ffb4b4;background:rgba(255,110,110,.14);border-color:rgba(255,110,110,.22)}
.calc-btn.eq{color:#fff;border-color:transparent;
  background:linear-gradient(135deg,var(--indigo-500),var(--purple-500));
  box-shadow:0 8px 22px -10px rgba(107,124,255,.95)}
@media (max-width:680px){ .calc-btn{height:44px;font-size:15px} .calc-main{font-size:26px} }

/* 扫雷 */
.mine{display:grid;grid-template-columns:repeat(9,1fr);gap:4px;padding:9px;border-radius:16px;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.07)}
.mn-cell{aspect-ratio:1;border-radius:7px;cursor:pointer;font-size:14px;font-weight:800;padding:0;
  display:grid;place-items:center;color:var(--txt);
  border:1px solid rgba(255,255,255,.10);
  background:linear-gradient(160deg,rgba(255,255,255,.13),rgba(255,255,255,.07));
  transition:background .18s,transform .12s}
.mn-cell:hover{background:rgba(255,255,255,.20);transform:scale(1.08)}
.mn-cell:active{transform:scale(.94)}
.mn-cell.open{background:rgba(255,255,255,.035);border-color:rgba(255,255,255,.05);cursor:default}
.mn-cell.flag{background:rgba(255,180,60,.18);border-color:rgba(255,180,60,.35)}
.mn-cell.boom{background:rgba(255,70,70,.42);border-color:rgba(255,90,90,.6)}
.mn-cell.n1{color:#7d87ff}.mn-cell.n2{color:#4ade80}.mn-cell.n3{color:#f472b6}
.mn-cell.n4{color:#c07eff}.mn-cell.n5{color:#fbbf24}.mn-cell.n6{color:#22d3ee}
.mn-cell.n7{color:#e5e7eb}.mn-cell.n8{color:#9aa9c2}
@media (max-width:680px){
  .now-bar{gap:12px;padding:14px 16px;min-height:72px}
  .eq{width:78px;height:30px}
  .now-title{font-size:15px}
  .bar-state{font-size:10.5px;padding:4px 11px;letter-spacing:.1em}
  .now-bar .menu-wrap{width:78px}
  .bar-toy{width:40px;height:40px}
  .bar-toy svg{width:19px;height:19px}
  .menu-float{right:14px;bottom:82px}
  .menu-pop{width:min(258px,84vw)}
  .gm-box{width:min(340px,94vw);padding:16px}
  .g24-cell{font-size:18px}
  .mine{gap:3px}
}

/* ===================== 右下角迷你播放器 ===================== */
.mini-player{position:fixed;right:22px;bottom:22px;z-index:85;display:flex;align-items:center;gap:10px;
  padding:8px 10px 8px 8px;border-radius:17px;max-width:308px;
  background:var(--glass,var(--card-bg));
  -webkit-backdrop-filter:blur(22px) saturate(1.5);backdrop-filter:blur(22px) saturate(1.5);
  border:1px solid rgba(255,255,255,.11);
  box-shadow:0 18px 44px -24px rgba(0,0,0,.78),inset 0 1px 0 rgba(255,255,255,.10);
  transition:transform .5s cubic-bezier(.22,.61,.36,1),box-shadow .5s,opacity .5s}
.mini-player:hover{transform:translateY(-2px);box-shadow:0 24px 54px -26px rgba(0,0,0,.85)}
.mini-player.playing{border-color:rgba(125,135,255,.42);
  box-shadow:0 18px 44px -24px rgba(107,124,255,.7),inset 0 1px 0 rgba(255,255,255,.12)}
.mp-cover{width:38px;height:38px;border-radius:11px;object-fit:cover;flex:0 0 auto;
  box-shadow:0 4px 12px -6px rgba(0,0,0,.8)}
.mini-player.playing .mp-cover{animation:mpSpin 9s linear infinite}
@keyframes mpSpin{to{transform:rotate(360deg)}}
.mp-tx{min-width:0;flex:1 1 auto;max-width:150px}
.mp-tx b{display:block;font-size:12.5px;font-weight:700;color:var(--txt);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mp-tx span{display:block;font-size:10.5px;color:var(--txt-3);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mp-btn{width:32px;height:32px;border-radius:50%;flex:0 0 auto;cursor:pointer;font-size:12px;color:var(--txt-2);
  border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.07);display:grid;place-items:center;
  transition:transform .3s cubic-bezier(.22,.61,.36,1),background .3s,color .3s}
.mp-btn:hover{transform:scale(1.08);background:rgba(255,255,255,.15);color:var(--txt)}
.mp-btn.main{color:#fff;border-color:transparent;
  background:linear-gradient(135deg,var(--indigo-500),var(--purple-500));
  box-shadow:0 6px 18px -8px rgba(107,124,255,.95)}
/* 系统运行条：仅首页显示（其他页面由迷你播放器取代） */
@media (max-width:680px){
  .mini-player{right:14px;bottom:14px;padding:7px 8px 7px 7px;gap:8px;max-width:260px}
  .mp-tx{max-width:112px}
  .mp-cover{width:34px;height:34px}
}

/* 备案号链接：低调但可辨 */
.beian{color:inherit;text-decoration:none;border-bottom:1px dashed rgba(160,172,255,.35);
  padding-bottom:1px;transition:color .35s,border-color .35s}
.beian:hover{color:var(--accent);border-bottom-color:var(--accent)}

/* 音乐页律动条：中心高两侧低的包络，播放时逐条起伏 */
.wave{display:flex;align-items:flex-end;justify-content:center;gap:5px;
  height:158px;margin-top:22px;padding:0 2px;border-radius:18px;position:relative;overflow:hidden;
  background:linear-gradient(180deg,rgba(125,135,255,.055),rgba(125,135,255,.012) 62%,transparent)}
.wave::after{content:"";position:absolute;left:10%;right:10%;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(160,172,255,.38),transparent)}
.wave i{flex:1 1 0;max-width:9px;min-width:2px;height:100%;border-radius:99px;
  background:linear-gradient(180deg,var(--purple-500),var(--indigo-400) 58%,rgba(125,135,255,.22));
  transform:scaleY(calc(var(--pk,.8) * .16));transform-origin:bottom;opacity:.42;
  transition:opacity .55s ease,transform .55s ease}
.wave.on i{opacity:1;animation:wavePulse var(--d,1s) ease-in-out infinite alternate;
  animation-delay:var(--dl,0s);transition:opacity .55s ease}
@keyframes wavePulse{from{transform:scaleY(.07)}to{transform:scaleY(var(--pk,.85))}}
@media (max-width:680px){ .wave{height:112px;gap:4px} }

/* 特效开关按钮（樱花 / 流萤）：浅色系 + 柔光 */
.fx-btn{gap:8px}
.fx-btn .ic{width:20px;height:20px;flex:0 0 auto;stroke-width:1.4;
  stroke-linecap:round;stroke-linejoin:round;
  transition:filter .35s ease,opacity .3s ease}

/* 樱花：浅粉花瓣 + 更浅的花心 */
#fxBtn .ic{color:#ffb4d2;filter:drop-shadow(0 0 6px rgba(255,120,180,.55))}
#fxBtn .ic path{fill:rgba(255,172,208,.40);stroke:#ffb4d2}
#fxBtn .ic circle{fill:#ffe0ee;stroke:none}

/* 流萤：浅绿星光 */
#flyBtn .ic{color:#aee8bd;filter:drop-shadow(0 0 6px rgba(110,230,155,.55))}
#flyBtn .ic path{fill:rgba(178,236,196,.42);stroke:#aee8bd}

/* 开启时按钮带一点同色底 */
#fxBtn:not(.off){background:rgba(255,150,195,.09);border-color:rgba(255,150,195,.20)}
#flyBtn:not(.off){background:rgba(150,235,180,.09);border-color:rgba(150,235,180,.20)}
#fxBtn:not(.off):hover{background:rgba(255,150,195,.19);border-color:rgba(255,150,195,.34);color:var(--txt)}
#flyBtn:not(.off):hover{background:rgba(150,235,180,.19);border-color:rgba(150,235,180,.34);color:var(--txt)}

/* 关闭态：去色、空心、变暗 */
.fx-btn.off{opacity:.45;color:var(--txt-3)}
.fx-btn.off .ic{filter:none}
.fx-btn.off .ic path{fill:none;stroke:currentColor}
.fx-btn.off .ic circle{fill:currentColor;stroke:none}

/* 音乐页底部寄语 */
.listen-note{margin-top:18px;padding-top:16px;border-top:1px solid rgba(255,255,255,.07)}
.listen-note p{font-size:12.5px;line-height:1.95;color:var(--txt-3);letter-spacing:.02em}
.listen-note p+p{margin-top:2px}
.listen-note p:first-child{color:var(--txt-2)}

/* 可点击的卡片：手型 + 悬停轻微放大 */
.clickable{cursor:pointer;transition:transform .5s cubic-bezier(.22,.61,.36,1),box-shadow .5s cubic-bezier(.22,.61,.36,1)}
.clickable:hover{transform:translateY(-2px) scale(1.012);
  box-shadow:0 26px 60px -28px rgba(0,0,0,.72)}

/* 关于页简介里的 QQ 号：低调文字链 */
.qq-line{color:inherit;text-decoration:none;border-bottom:1px dashed rgba(160,172,255,.32);
  transition:color .35s,border-color .35s}
.qq-line:hover{color:var(--accent);border-bottom-color:var(--accent)}

/* 名片内的小分区（技术栈 / 近期在做） */
.mini-sec{margin-top:22px;padding-top:18px;border-top:1px solid rgba(255,255,255,.07)}
.mini-sec h2{font-size:13px;font-weight:800;letter-spacing:.14em;color:var(--txt-3);
  text-transform:uppercase;margin-bottom:12px}
.kv{display:flex;align-items:baseline;gap:12px;padding:5px 0;font-size:13px;line-height:1.7}
.kv b{flex:0 0 48px;font-weight:800;color:var(--accent);font-size:12.5px;letter-spacing:.06em}
.kv span{color:var(--txt-2);min-width:0}
.dot-list{list-style:none;margin:0;padding:0}
.dot-list li{position:relative;padding-left:16px;font-size:13.5px;line-height:1.9;color:var(--txt-2)}
.dot-list li::before{content:"";position:absolute;left:2px;top:.78em;width:5px;height:5px;border-radius:50%;
  background:linear-gradient(135deg,var(--indigo-400),var(--purple-500))}

/* 标签 / 徽章 */
.tags{display:flex;gap:8px;flex-wrap:wrap}
.tag{font-size:12px;font-weight:700;padding:5px 11px;border-radius:9px;border:1px solid var(--card-bd);
  background:var(--card-bg);color:var(--txt-2);transition:.3s}
.tag:hover,.tag.on{background:var(--indigo-500);color:#fff;border-color:transparent}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;padding:5px 9px;border-radius:8px;
  background:var(--card-bg);border:1px solid var(--card-bd);box-shadow:0 1px 2px rgb(0 0 0/.05);
  transition:transform .35s cubic-bezier(.22,.61,.36,1),background .35s,border-color .35s,box-shadow .35s}
.chip:hover{transform:scale(1.05);background:rgba(125,135,255,.14);border-color:rgba(125,135,255,.42);
  box-shadow:0 6px 18px -8px rgba(107,124,255,.75)}
.chip svg{width:14px;height:14px}

/* 按钮 */
.btn{display:inline-flex;align-items:center;gap:8px;padding:11px 20px;border-radius:14px;font-weight:700;font-size:14px;
  border:1px solid rgba(255,255,255,.09);background:var(--glass,var(--card-bg));cursor:pointer;color:var(--txt-2);
  -webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);
  transition:all .45s cubic-bezier(.22,.61,.36,1)}
.btn:hover{background:var(--indigo-500);color:#fff;border-color:transparent;transform:translateY(-2px);
  box-shadow:0 12px 26px -14px rgba(99,102,241,.6)}
.btn.primary{background:linear-gradient(135deg,var(--indigo-500),var(--purple-500));color:#fff;border:0}
.btn.round{width:44px;height:44px;padding:0;border-radius:50%;display:grid;place-items:center}
/* 播放控件图标：用 SVG 保证几何居中（原来的 ⏮▶⏭ 字符字形自带边距，看着偏） */
.btn.round .ic{grid-area:1/1;display:block;width:18px;height:18px;fill:currentColor}
.btn.round.primary .ic{width:19px;height:19px}
.mp-btn{display:grid;place-items:center}
.mp-btn .ic{grid-area:1/1;display:block;width:12px;height:12px;fill:currentColor}
.mp-btn.main .ic{width:13px;height:13px}
.ic-pause{visibility:hidden}
.is-playing .ic-play{visibility:hidden}
.is-playing .ic-pause{visibility:visible}

/* ===================== 图库 ===================== */
.gal-filter{margin-bottom:22px}
.gal-masonry{column-count:3;column-gap:18px}
.gal-item{break-inside:avoid;margin:0 0 18px;position:relative;border-radius:20px;overflow:hidden;cursor:zoom-in;
  border:0;box-shadow:0 14px 40px -22px rgba(0,0,0,.55);background:var(--glass,var(--card-bg));
  transition:transform .55s cubic-bezier(.22,.61,.36,1),box-shadow .55s cubic-bezier(.22,.61,.36,1)}
.gal-item:hover{transform:translateY(-4px);box-shadow:0 24px 56px -26px rgba(0,0,0,.68)}
.gal-item img{display:block;width:100%;height:auto}
.gal-cap{position:absolute;left:0;right:0;bottom:0;padding:26px 16px 14px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(6,10,20,.72));
  opacity:0;transform:translateY(8px);transition:opacity .45s cubic-bezier(.22,.61,.36,1),transform .45s cubic-bezier(.22,.61,.36,1)}
.gal-item:hover .gal-cap{opacity:1;transform:translateY(0)}
.gal-cap b{display:block;font-size:14.5px;font-weight:800;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.5)}
.gal-cap span{display:inline-block;margin-top:5px;font-size:11px;font-weight:700;letter-spacing:.06em;color:#cfd8ea;
  padding:2px 9px;border-radius:99px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.16)}
.gal-badge{position:absolute;top:12px;left:12px;font-size:10.5px;font-weight:800;letter-spacing:.06em;
  padding:4px 10px;border-radius:99px;color:#e8edf8;background:rgba(12,18,32,.55);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.14)}
.gal-count{text-align:center;color:var(--txt-3);font-size:13.5px;margin-bottom:20px}
@media (max-width:1024px){ .gal-masonry{column-count:2} }
@media (max-width:680px){ .gal-masonry{column-count:1} }

/* 搜索框 */
.search{position:relative;margin-top:6px}
.search-top{margin:0 auto 26px;width:100%;max-width:620px}   /* 居中且不再过长 */
.search-top .search{margin-top:0}
.search input{padding:14px 22px 14px 50px;text-align:left;font-size:15.5px}
.search input{width:100%;padding:16px 24px 16px 56px;border-radius:24px;font-size:17px;font-weight:500;
  border:1px solid rgba(255,255,255,.08);background:var(--glass,rgba(255,255,255,.5));
  -webkit-backdrop-filter:blur(20px) saturate(1.4);backdrop-filter:blur(20px) saturate(1.4);
  box-shadow:var(--shadow-xl);color:var(--txt);outline:none;transition:.3s;font-family:inherit}
.search input::placeholder{color:var(--slate-500)}
.search:hover input{border-color:rgba(255,255,255,.16)}
.search input:focus{box-shadow:0 0 0 3px rgba(99,102,241,.35),var(--shadow-xl)}
.search svg{position:absolute;left:20px;top:50%;transform:translateY(-50%);width:20px;height:20px;
  fill:none;stroke:var(--slate-400);stroke-width:2.5;stroke-linecap:round;
  z-index:2;pointer-events:none}   /* 输入框的 backdrop-filter 会新建层叠上下文并盖住图标，故抬高 */
/* 图标本身也用一点柔光，避免在浅色玻璃上显得灰暗 */
.search svg{stroke:#a9b8cd;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}
.search input{background:rgba(30,41,59,.5);border-color:rgba(255,255,255,.1)}

/* 轮播 / 卡片列表 */
.carousel{display:flex;gap:18px;overflow-x:auto;padding:4px 0 14px;scroll-snap-type:x mandatory;
  width:100%;max-width:100%;min-width:0;box-sizing:border-box}
/* 隐藏轮播的横向滚动条（仍可滚动 / 拖拽 / 用箭头） */
.carousel{scrollbar-width:none;-ms-overflow-style:none}
.carousel::-webkit-scrollbar{height:0;width:0;display:none}
@keyframes slideUp{from{transform:translateY(14px)}to{transform:translateY(0)}}
.slide{cursor:pointer;transition:transform .5s cubic-bezier(.22,.61,.36,1),box-shadow .5s cubic-bezier(.22,.61,.36,1);animation:slideUp .7s cubic-bezier(.22,.61,.36,1);text-decoration:none;color:inherit;display:block;
  scroll-snap-align:start;flex:0 0 calc((100% - 36px) / 3);min-width:0;border-radius:22px;overflow:hidden;position:relative;
  border:1px solid var(--card-bd);background:var(--card-bg);backdrop-filter:blur(12px);box-shadow:var(--shadow-xl)}
.slide:hover{transform:translateY(-5px) scale(1.03);
  border-color:rgba(125,135,255,.55);
  box-shadow:0 30px 64px -26px rgba(0,0,0,.78),0 0 0 1px rgba(125,135,255,.28)}
.slide .cover{height:150px;background-size:cover;background-position:center}
.slide .body{padding:16px 18px 18px}
.slide h3{font-size:16px;font-weight:700;line-height:1.5}
.slide p{margin-top:6px;font-size:13px;color:var(--txt-3);line-height:1.7}
.slide time{font-size:11.5px;font-weight:700;color:var(--accent)}

/* ===================== 对称排版工具 ===================== */
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;align-items:stretch}
.center{text-align:center;justify-content:center;display:flex;flex-wrap:wrap;gap:8px}
.center-left{justify-content:flex-start}
.page-head.center{display:block;text-align:center;padding:34px 32px}
.page-head.center h1{display:flex;align-items:center;justify-content:center;gap:13px;
  text-align:center;margin:0 auto}
.page-head.center p{max-width:660px;margin:10px auto 0;text-align:center;line-height:1.9}
.sec{margin-top:44px}
.sec-title{position:relative;text-align:center;font-family:var(--font-serif);font-size:22px;font-weight:800;
  letter-spacing:.06em;margin:0 auto 24px;padding:0 0 14px;max-width:100%}
.sec-title::after{content:"";position:absolute;left:50%;bottom:0;transform:translateX(-50%);
  width:56px;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,var(--accent),transparent)}
.center-card{text-align:center;display:flex;flex-direction:column;align-items:center;gap:18px;padding:30px 32px}
.archive-total{font-size:15px;color:var(--txt-2);letter-spacing:.04em}
.archive-total{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px}
.archive-total span{display:inline-flex;align-items:baseline;gap:2px}
.archive-total .sep{color:var(--txt-3);opacity:.6;margin:0 8px}
.archive-total b{font-size:26px;font-weight:900;color:var(--indigo-400);margin:0 5px;font-variant-numeric:tabular-nums}
.archive-total b.own{color:var(--purple-500)}
.list{display:flex;flex-direction:column;gap:18px;margin-top:22px}
.post-row{display:grid;grid-template-columns:180px 1fr 210px;gap:18px;align-items:center;padding:23px 28px}
.post-row .post-title{font-size:16.5px;font-weight:700}
.post-row .post-sub{font-size:13px;line-height:1.7}
.post-row .tags{justify-content:flex-end;grid-column:1 / -1;margin-top:2px}
.hover-lift{display:flex;flex-direction:column;gap:10px}
.card-ic{font-size:26px;line-height:1;text-align:center}
.grid3 .card{text-align:center;align-items:center}
.grid3 .card .tags{justify-content:center}
.article .between b,.article h3{font-size:19px;font-weight:800}
.muted-2{color:var(--txt-3);font-size:13.5px;line-height:1.8}
img{image-orientation:from-image}

/* 文字区 */
.prose{font-size:15px;line-height:2;color:var(--txt-2)}
.prose p{margin:0 0 12px}
.prose h2{font-size:18px;font-weight:700;margin:18px 0 8px;color:var(--txt)}
.prose img{border-radius:14px;margin:10px 0}

/* 底部 */
footer{position:relative;z-index:5;padding:34px 0 40px;text-align:center;color:var(--txt-3);font-size:13px;line-height:2}
footer .sig{font-weight:900;letter-spacing:.1em;color:var(--txt)}
/* 页脚单行排版：版权/备案 + 发丝分隔 + 免责声明（层级分明但同一行） */
.foot-line{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;
  gap:0 15px;row-gap:6px}
.foot-cr{white-space:nowrap;color:var(--txt-2)}
.foot-div{flex:0 0 auto;width:1px;height:12px;
  background:linear-gradient(180deg,transparent,rgba(160,172,255,.55),transparent)}
.foot-note{color:var(--txt-3);opacity:.85;font-size:12.5px;letter-spacing:.01em;
  transition:opacity .4s}
footer:hover .foot-note{opacity:1}
 /* 左下角悬浮按钮组 */
#float{position:fixed;left:24px;bottom:24px;z-index:80;display:flex;flex-direction:column;gap:12px;isolation:isolate}
#float button{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;cursor:pointer;
  border:1px solid rgba(255,255,255,.10);background:var(--glass,var(--card-bg));
  -webkit-backdrop-filter:blur(22px) saturate(1.5);backdrop-filter:blur(22px) saturate(1.5);color:var(--txt);
  box-shadow:var(--shadow-xl);transition:.4s;font-size:20px}
#float button:hover{transform:scale(1.1)}
 /* 右下角状态栏：毛玻璃 + 随背景实时变色 */
#uptime{position:fixed;right:24px;bottom:24px;z-index:80;font-size:11.5px;font-weight:700;color:var(--txt-3);
  border:1px solid rgba(255,255,255,.09);border-radius:16px;padding:10px 15px;line-height:1.6;
  -webkit-backdrop-filter:blur(22px) saturate(1.5);backdrop-filter:blur(22px) saturate(1.5);
  box-shadow:0 14px 36px -22px rgba(0,0,0,.6);
  transition:background .8s cubic-bezier(.22,.61,.36,1),border-color .8s,color .8s}
#uptime b{color:var(--accent);font-variant-numeric:tabular-nums}

/* 特效层 */
#fx{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.petal{position:absolute;top:-8vh;width:12px;height:12px;opacity:0;border-radius:14px 2px 14px 2px;
  background:linear-gradient(135deg,#ffe0ea,#ffb3c6 60%,#f9a8d4);animation:sakuraFall linear infinite}
@keyframes sakuraFall{0%{transform:translate(0,-10vh) rotate(0);opacity:0}10%{opacity:1}80%{opacity:1}
  100%{transform:translate(15vw,110vh) rotate(360deg);opacity:0}}
.firefly{position:absolute;width:6px;height:6px;border-radius:50%;
  background:radial-gradient(circle,#f0fff6 0%,rgba(100,255,150,.9) 45%,rgba(50,255,100,0) 72%);
  animation:floaty linear infinite}
.firefly i{display:block;width:100%;height:100%;border-radius:50%;animation:breathe 3.4s ease-in-out infinite}
@keyframes breathe{0%,100%{opacity:0;transform:scale(.3)}
  50%{opacity:1;transform:scale(1.2);box-shadow:0 0 10px 3px rgba(100,255,150,.8),0 0 20px 6px rgba(50,255,100,.4)}}
@keyframes floaty{0%,100%{transform:translate(0,0)}33%{transform:translate(10vw,-15vh)}66%{transform:translate(-5vw,-20vh)}}
/* 背景：两层交叉淡入，切换自然 */
#bgphoto{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#bgphoto .layer{position:absolute;inset:0;background-size:cover;background-position:center;
  opacity:0;will-change:opacity;
  transition:opacity 3s cubic-bezier(.4,0,.2,1)}
#bgphoto .layer{filter:blur(3.5px) saturate(.92) brightness(var(--bg-lum,.74))}
#bgphoto .layer.on{opacity:var(--bg-op,.22)}
#bgphoto .veil{position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(180deg,rgba(244,247,252,.28),rgba(244,247,252,.08) 42%,rgba(244,247,252,.26));
  transition:background 1.2s cubic-bezier(.4,0,.2,1)}
#bgphoto .layer{filter:blur(3.5px) saturate(.92) brightness(.74);opacity:0}
#bgphoto .layer.on{opacity:.46}
#bgphoto .veil{background:linear-gradient(180deg,rgba(10,17,32,.5),rgba(10,17,32,.26) 45%,rgba(10,17,32,.52))}
#ripple{position:fixed;inset:0;z-index:90;pointer-events:none;overflow:hidden}
.rp{position:absolute;border-radius:50%;transform:translate(-50%,-50%);border:1.5px solid rgba(255,255,255,.85);
  box-shadow:0 0 14px rgba(255,255,255,.3)}
.rp{border-color:rgba(160,180,255,.7)}

/* 交互反馈 */
.hi{animation:hi 1.4s ease}
@keyframes hi{0%,100%{box-shadow:var(--shadow-xl)}40%{box-shadow:0 0 0 3px rgba(99,102,241,.4),var(--shadow-xl)}}
.reveal{opacity:0;transform:translateY(18px);transition:opacity .8s,transform .8s}
.reveal.in{opacity:1;transform:none}

/* 响应式 */
@media (max-width:1024px){
  #nav{display:none}
  #mbtn{display:flex}
  .grid12{gap:18px}
  .col-3,.col-4,.col-5,.col-6,.col-7,.col-8{grid-column:span 6}   /* 平板：两列等分，保持对称 */
  .grid12 > *:last-child:nth-child(odd){grid-column:span 12}
}
@media (max-width:900px){
  .grid3{grid-template-columns:repeat(2,1fr)}
  .slide{flex:0 0 calc((100% - 18px) / 2)}
  .post-row{grid-template-columns:1fr;text-align:center;justify-items:center}
  .post-row .tags{justify-content:center}
}
@media (max-width:680px){
  .col-3,.col-4,.col-5,.col-6,.col-7,.col-8{grid-column:span 12}
  .grid3{grid-template-columns:1fr}
  .sec-title{font-size:20px}
  .list .card{padding:18px}
}
@media (max-width:640px){
  main{padding:96px 0 30px}
  .card{padding:20px;border-radius:20px}
  .search-top{max-width:100%}
  .avatar{width:72px;height:72px}
  .who h1{font-size:22px}
  .who p{font-size:13px}
  .stats{gap:10px}
  .stat b{font-size:19px}
  #hdr .bar{padding:0 16px}
  .slide{flex:0 0 100%}
  #float{left:14px;bottom:14px}
  #uptime{right:14px;bottom:14px;font-size:10.5px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition-duration:.01ms!important}}
