/*!
 * 旭恒数据 - © 2026 旭恒AI 保留所有权利
 * 未经授权禁止复制、修改、分发或用于商业用途
 */
/* ============================================================
   Kinetic · 动效样式层
   在 app.css 之后加载，负责「页面上拉满」的全部视觉表现
   ============================================================ */

/* ---------- 关键帧 ---------- */
@keyframes fadeUp    { from{opacity:0;transform:translate3d(0,22px,0)} to{opacity:1;transform:none} }
@keyframes fadeDown  { from{opacity:0;transform:translate3d(0,-16px,0)} to{opacity:1;transform:none} }
@keyframes fadeIn    { from{opacity:0} to{opacity:1} }
@keyframes scaleIn   { from{opacity:0;transform:scale(.94)} to{opacity:1;transform:scale(1)} }
@keyframes slideRight{ from{opacity:0;transform:translate3d(-24px,0,0)} to{opacity:1;transform:none} }
@keyframes popIn     { 0%{opacity:0;transform:scale(.8) translateY(14px)} 60%{transform:scale(1.03) translateY(-2px)} 100%{opacity:1;transform:none} }
@keyframes shimmer   { 0%{background-position:-200% 0} 100%{background-position:200% 0} }
@keyframes spinSlow  { to{transform:rotate(360deg)} }
@keyframes float     { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-9px)} }
@keyframes pulseRing { 0%{box-shadow:0 0 0 0 rgba(59,108,255,.5)} 70%{box-shadow:0 0 0 14px rgba(59,108,255,0)} 100%{box-shadow:0 0 0 0 rgba(59,108,255,0)} }
@keyframes aurora    { 0%{transform:translate3d(-8%,-6%,0) scale(1)} 50%{transform:translate3d(8%,6%,0) scale(1.15)} 100%{transform:translate3d(-8%,-6%,0) scale(1)} }
@keyframes sheen     { 0%{transform:translateX(-120%) skewX(-18deg)} 100%{transform:translateX(320%) skewX(-18deg)} }
@keyframes gradientShift { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
@keyframes bounceIn  { 0%{opacity:0;transform:scale(.3)} 50%{opacity:1;transform:scale(1.06)} 70%{transform:scale(.97)} 100%{transform:scale(1)} }
@keyframes countUp   { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:none} }
@keyframes drawLine  { from{stroke-dashoffset:var(--len,1000)} to{stroke-dashoffset:0} }
@keyframes blink     { 0%,100%{opacity:1} 50%{opacity:.25} }

/* ---------- 页面转场 ---------- */
body.page-enter{opacity:0;transform:translate3d(0,10px,0)}
body.page-enter-active{opacity:1;transform:none;transition:opacity .45s cubic-bezier(.22,1,.36,1),transform .45s cubic-bezier(.22,1,.36,1)}
body.page-leaving{opacity:0;transform:translate3d(0,-8px,0);transition:opacity .22s ease,transform .22s ease}

/* ---------- 光标辉光 ---------- */
.cursor-glow{
  position:fixed;left:0;top:0;width:460px;height:460px;margin:-230px 0 0 -230px;
  border-radius:50%;pointer-events:none;z-index:1;
  background:radial-gradient(circle,rgba(59,108,255,.10),rgba(59,108,255,.045) 38%,transparent 68%);
  transition:opacity .4s;
  will-change:transform;
}
@media(prefers-reduced-motion:reduce){.cursor-glow{display:none}}

/* ---------- 滚动入场 ---------- */
.rv{opacity:0;transform:translate3d(0,26px,0);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}
.rv-in{opacity:1;transform:none}
.rv[data-rv="left"]{transform:translate3d(-30px,0,0)}
.rv[data-rv="right"]{transform:translate3d(30px,0,0)}
.rv[data-rv="scale"]{transform:scale(.93)}
.rv[data-rv="blur"]{filter:blur(10px);transform:translate3d(0,16px,0)}
.rv[data-rv="blur"].rv-in{filter:blur(0)}
.rv[data-rv="left"].rv-in,.rv[data-rv="right"].rv-in{transform:none}
.rv[data-rv="scale"].rv-in{transform:scale(1)}

/* 阶梯延迟 */
.rv[data-d="1"]{transition-delay:.06s}
.rv[data-d="2"]{transition-delay:.12s}
.rv[data-d="3"]{transition-delay:.18s}
.rv[data-d="4"]{transition-delay:.24s}
.rv[data-d="5"]{transition-delay:.30s}
.rv[data-d="6"]{transition-delay:.36s}
.rv[data-d="7"]{transition-delay:.42s}
.rv[data-d="8"]{transition-delay:.48s}

/* ---------- 涟漪 ---------- */
.btn{position:relative;overflow:hidden;isolation:isolate}
.ripple{
  position:absolute;border-radius:50%;pointer-events:none;z-index:-1;
  background:radial-gradient(circle,rgba(255,255,255,.55),rgba(255,255,255,0) 70%);
  transform:scale(0);animation:rippleGrow .6s cubic-bezier(.22,1,.36,1) forwards;
}
.btn-line .ripple,.btn-danger .ripple{background:radial-gradient(circle,rgba(16,16,20,.22),transparent 70%)}
@keyframes rippleGrow{to{transform:scale(1);opacity:0}}

/* ---------- 磁吸 + 辉光跟随 ---------- */
[data-magnet]{
  transform:translate3d(var(--mx,0),var(--my,0),0);
  transition:transform .28s cubic-bezier(.22,1,.36,1),box-shadow .3s,background .3s;
}
[data-magnet]:hover{transition:transform .08s linear,box-shadow .3s,background .3s}
[data-magnet]::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;
  background:radial-gradient(140px circle at var(--gx,50%) var(--gy,50%),rgba(255,255,255,.35),transparent 65%);
  transition:opacity .3s;
}
[data-magnet]:hover::after{opacity:1}

/* 主按钮流光 */
.btn-primary{position:relative;overflow:hidden}
.btn-primary::before{
  content:'';position:absolute;top:0;left:0;width:38%;height:100%;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.32),transparent);
  transform:translateX(-120%) skewX(-18deg);pointer-events:none;
}
.btn-primary:hover::before{animation:sheen .85s ease-out}

/* ---------- 3D 倾斜卡片 ---------- */
[data-tilt]{
  transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateZ(0);
  transition:transform .5s cubic-bezier(.22,1,.36,1),box-shadow .4s;
  will-change:transform;
}
[data-tilt].tilting{transition:transform .08s linear,box-shadow .4s}
[data-tilt]::before{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:3;opacity:0;
  background:radial-gradient(320px circle at var(--gx,50%) var(--gy,50%),rgba(255,255,255,.5),transparent 60%);
  transition:opacity .35s;mix-blend-mode:overlay;
}
[data-tilt]:hover::before{opacity:1}

/* ---------- 卡片通用增强 ---------- */
.card,.tile,.stat{
  position:relative;
  transition:transform .34s cubic-bezier(.22,1,.36,1),box-shadow .34s,border-color .34s,background .34s;
}
.tile:hover{
  transform:translateY(-5px) scale(1.012);
  box-shadow:0 26px 50px -26px rgba(16,16,20,.34);
  border-color:#cfcfd8;
}
.tile:active{transform:translateY(-2px) scale(.995)}
.tile-ic{transition:transform .4s cubic-bezier(.34,1.56,.64,1),background .3s,color .3s}
.tile:hover .tile-ic{transform:scale(1.14) rotate(-6deg);background:#101014;color:#fff}

/* 服务宫格图标呼吸 */
.tile-ic svg{transition:transform .4s cubic-bezier(.34,1.56,.64,1)}
.tile:hover .tile-ic svg{transform:scale(1.06)}

/* ---------- 余额卡（重头戏） ---------- */
.bk-card{
  transform-style:preserve-3d;
  transition:transform .5s cubic-bezier(.22,1,.36,1),box-shadow .5s;
}
.bk-card .bk-balance{
  background:linear-gradient(100deg,#fff 20%,#9fb4ff 40%,#fff 60%,#c9d6ff 80%,#fff 100%);
  background-size:220% auto;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;
  animation:gradientShift 7s ease-in-out infinite;
}
.bk-card-glow{animation:aurora 13s ease-in-out infinite}
/* 卡片扫光 */
.bk-card .bk-sheen{
  position:absolute;top:0;left:0;width:45%;height:100%;pointer-events:none;z-index:2;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.13),transparent);
  transform:translateX(-140%) skewX(-16deg);
}
.bk-card:hover .bk-sheen{animation:sheen 1.15s ease-out}
/* 卡片内网格纹理 */
.bk-card::before{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.5;
  background-image:linear-gradient(rgba(255,255,255,.032) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(255,255,255,.032) 1px,transparent 1px);
  background-size:26px 26px;
  mask-image:radial-gradient(circle at 70% 30%,#000,transparent 75%);
  -webkit-mask-image:radial-gradient(circle at 70% 30%,#000,transparent 75%);
}
/* 芯片光泽流动 */
.bk-chip-img{overflow:hidden}
.bk-chip-img::after{
  content:'';position:absolute;inset:0;
  background:linear-gradient(115deg,transparent 30%,rgba(255,255,255,.55) 48%,transparent 62%);
  transform:translateX(-120%);animation:sheen 4.6s ease-in-out infinite;
}

/* ---------- 指标卡数字 ---------- */
.bk-metric{position:relative;overflow:hidden;transition:transform .3s cubic-bezier(.22,1,.36,1),box-shadow .3s,border-color .3s}
.bk-metric:hover{transform:translateY(-3px);box-shadow:0 18px 34px -22px rgba(16,16,20,.3);border-color:#d5d5de}
.bk-metric::after{
  content:'';position:absolute;left:0;bottom:0;height:2px;width:0;
  background:linear-gradient(90deg,#3b6cff,#8aa4ff);transition:width .45s cubic-bezier(.22,1,.36,1);
}
.bk-metric:hover::after{width:100%}
.bk-metric .v{transition:transform .3s,color .3s}
.bk-metric:hover .v{transform:scale(1.06);color:#1a1a22}

/* ---------- 柱状图动画 ---------- */
.chart .bar{
  transform-origin:bottom;
  animation:barGrow .85s cubic-bezier(.22,1,.36,1) backwards;
  transition:height .4s cubic-bezier(.22,1,.36,1),background .3s,transform .3s;
}
.chart .bar:hover{transform:scaleY(1.03) scaleX(1.14)}
@keyframes barGrow{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}
.chart .bar-wrap:nth-child(1) .bar{animation-delay:.05s}
.chart .bar-wrap:nth-child(2) .bar{animation-delay:.11s}
.chart .bar-wrap:nth-child(3) .bar{animation-delay:.17s}
.chart .bar-wrap:nth-child(4) .bar{animation-delay:.23s}
.chart .bar-wrap:nth-child(5) .bar{animation-delay:.29s}
.chart .bar-wrap:nth-child(6) .bar{animation-delay:.35s}
.chart .bar-wrap:nth-child(7) .bar{animation-delay:.41s}

/* ---------- 表格行入场 ---------- */
.tbl-wrap tbody tr{animation:fadeUp .45s cubic-bezier(.22,1,.36,1) backwards}
.tbl-wrap tbody tr:nth-child(1){animation-delay:.02s}
.tbl-wrap tbody tr:nth-child(2){animation-delay:.06s}
.tbl-wrap tbody tr:nth-child(3){animation-delay:.10s}
.tbl-wrap tbody tr:nth-child(4){animation-delay:.14s}
.tbl-wrap tbody tr:nth-child(5){animation-delay:.18s}
.tbl-wrap tbody tr:nth-child(6){animation-delay:.22s}
.tbl-wrap tbody tr:nth-child(7){animation-delay:.26s}
.tbl-wrap tbody tr:nth-child(8){animation-delay:.30s}
.tbl-wrap tbody tr:nth-child(n+9){animation-delay:.34s}
.tbl-wrap tbody tr{transition:background .2s,transform .2s,box-shadow .2s}
.tbl-wrap tbody tr:hover{background:#fbfbfd;transform:translateX(2px);box-shadow:-3px 0 0 0 #101014 inset}

/* ---------- 侧边栏项 ---------- */
.side-item{
  position:relative;overflow:hidden;
  transition:background .22s cubic-bezier(.22,1,.36,1),color .22s,padding-left .22s,transform .22s;
}
.side-item svg{transition:transform .3s cubic-bezier(.34,1.56,.64,1)}
.side-item:hover{padding-left:15px}
.side-item:hover svg{transform:scale(1.16) rotate(-5deg)}
.side-item.on svg{transform:scale(1.08)}
/* 激活项滑入指示条 */
.side-item.on::before{
  content:'';position:absolute;left:0;top:50%;width:3px;height:60%;border-radius:0 3px 3px 0;
  background:#fff;transform:translateY(-50%);animation:indicatorIn .35s cubic-bezier(.22,1,.36,1);
}
@keyframes indicatorIn{from{height:0;opacity:0}to{height:60%;opacity:1}}
/* 未激活项 hover 底色滑入 */
.side-item::after{
  content:'';position:absolute;inset:0;z-index:-1;border-radius:10px;
  background:#f0f0f3;transform:scaleX(0);transform-origin:left;
  transition:transform .28s cubic-bezier(.22,1,.36,1);
}
.side-item:hover::after{transform:scaleX(1)}
.side-item.on::after{display:none}
.side-item{z-index:0}

/* ---------- 顶栏 ---------- */
.topbar{transition:box-shadow .3s,background .3s,height .3s}
.topbar.scrolled{box-shadow:0 8px 30px -18px rgba(16,16,20,.28);background:rgba(255,255,255,.92)}
.brand-mk{transition:transform .45s cubic-bezier(.34,1.56,.64,1),box-shadow .3s}
.brand:hover .brand-mk{transform:rotate(-8deg) scale(1.08);box-shadow:0 8px 20px -8px rgba(16,16,20,.5)}
.user-chip{transition:transform .28s cubic-bezier(.22,1,.36,1),border-color .25s,box-shadow .25s}
.user-chip:hover{transform:translateY(-1px);box-shadow:0 10px 22px -14px rgba(16,16,20,.4)}
.avatar{transition:transform .3s cubic-bezier(.34,1.56,.64,1)}
.user-chip:hover .avatar{transform:scale(1.12) rotate(6deg)}

/* ---------- 骨架屏 ---------- */
.sk-wrap{display:flex;flex-direction:column;gap:12px}
.sk-line{height:13px;border-radius:6px;overflow:hidden;background:#eeeef1}
.sk-bar{
  height:100%;border-radius:6px;
  background:linear-gradient(90deg,#eeeef1 0%,#f7f7fa 40%,#eeeef1 80%);
  background-size:200% 100%;animation:shimmer 1.35s linear infinite;
}

/* ---------- Toast 增强 ---------- */
.toast{
  position:relative;overflow:hidden;
  animation:toastIn .42s cubic-bezier(.22,1.3,.36,1);
  backdrop-filter:blur(8px);
}
@keyframes toastIn{
  from{transform:translate3d(60px,-8px,0) scale(.92);opacity:0}
  to{transform:none;opacity:1}
}
.toast::before{
  content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:#3b6cff;
}
.toast.ok::before{background:#12a150}
.toast.err::before{background:#f87171}
.toast::after{
  content:'';position:absolute;left:0;bottom:0;height:2px;width:100%;
  background:rgba(255,255,255,.3);transform-origin:left;
  animation:toastTimer 2.6s linear forwards;
}
@keyframes toastTimer{from{transform:scaleX(1)}to{transform:scaleX(0)}}
.toast-wrap{pointer-events:none}

/* ---------- 弹窗增强 ---------- */
.mask{animation:fadeIn .22s ease}
.modal{animation:popIn .34s cubic-bezier(.22,1.2,.36,1)}
.mask.closing{animation:fadeOut .18s ease forwards}
@keyframes fadeOut{to{opacity:0}}
.mask.closing .modal{animation:popOut .18s ease forwards}
@keyframes popOut{to{opacity:0;transform:scale(.96) translateY(8px)}}

/* 表单聚焦动效 */
input,select,textarea{transition:border-color .22s,box-shadow .22s,background .22s,transform .22s}
input:focus,select:focus,textarea:focus{border-color:#101014;box-shadow:0 0 0 3px rgba(16,16,20,.07),0 6px 18px -12px rgba(16,16,20,.4)}

/* ---------- 标签 ---------- */
.tag{transition:transform .22s,box-shadow .22s}
.tag:hover{transform:translateY(-1px) scale(1.04)}
.tag-ok{box-shadow:0 0 0 0 rgba(18,161,80,.3);animation:pulseTag 2.6s ease-out infinite}
@keyframes pulseTag{0%{box-shadow:0 0 0 0 rgba(18,161,80,.28)}70%{box-shadow:0 0 0 7px rgba(18,161,80,0)}100%{box-shadow:0 0 0 0 rgba(18,161,80,0)}}

/* ---------- 首页 Hero ---------- */
.hero{position:relative;overflow:hidden}
.hero-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.hero-bg::before{
  content:'';position:absolute;width:680px;height:680px;left:50%;top:-320px;transform:translateX(-50%);
  background:radial-gradient(circle,rgba(59,108,255,.16),transparent 62%);
  animation:aurora 16s ease-in-out infinite;
}
.hero-bg::after{
  content:'';position:absolute;width:520px;height:520px;right:-140px;bottom:-240px;
  background:radial-gradient(circle,rgba(120,90,255,.13),transparent 65%);
  animation:aurora 20s ease-in-out infinite reverse;
}
#hero-particles{position:absolute;inset:0;z-index:0;pointer-events:none}
.hero > *{position:relative;z-index:1}

.hero h1{
  background:linear-gradient(120deg,#101014 20%,#3b6cff 45%,#101014 70%,#6a5cff 90%,#101014 100%);
  background-size:240% auto;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;
  animation:gradientShift 9s ease-in-out infinite;
}
/* 逐字入场 */
.split-words span{
  display:inline-block;opacity:0;transform:translateY(20px) rotateX(-40deg);
  animation:wordIn .7s cubic-bezier(.22,1,.36,1) forwards;
}
@keyframes wordIn{to{opacity:1;transform:none}}

/* 滚动提示 */
.scroll-hint{
  position:absolute;left:50%;bottom:26px;transform:translateX(-50%);
  display:flex;flex-direction:column;align-items:center;gap:6px;
  color:#8b8b96;font-size:11px;letter-spacing:.14em;
}
.scroll-hint i{
  display:block;width:1px;height:34px;background:linear-gradient(#101014,transparent);
  animation:scrollLine 2s ease-in-out infinite;
}
@keyframes scrollLine{0%{transform:scaleY(0);transform-origin:top}50%{transform:scaleY(1);transform-origin:top}51%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

/* 功能卡 hover 上浮 + 顶边渐变 */
.feats .card{overflow:hidden}
.feats .card::after{
  content:'';position:absolute;left:0;right:0;top:0;height:2px;
  background:linear-gradient(90deg,#3b6cff,#8aa4ff,#6a5cff);
  transform:scaleX(0);transform-origin:left;transition:transform .45s cubic-bezier(.22,1,.36,1);
}
.feats .card:hover::after{transform:scaleX(1)}
.feats .card:hover{transform:translateY(-6px);box-shadow:0 30px 60px -34px rgba(16,16,20,.36)}

/* ---------- 登录页 ---------- */
.auth-art{position:relative;overflow:hidden}
.auth-art::before{
  content:'';position:absolute;inset:0;
  background:radial-gradient(circle at 20% 80%,rgba(59,108,255,.22),transparent 52%);
  animation:aurora 15s ease-in-out infinite;
}
.auth-feat{
  opacity:0;transform:translateX(-18px);
  animation:slideRight .65s cubic-bezier(.22,1,.36,1) forwards;
}
.auth-feat:nth-child(1){animation-delay:.35s}
.auth-feat:nth-child(2){animation-delay:.45s}
.auth-feat:nth-child(3){animation-delay:.55s}
.auth-feat:nth-child(4){animation-delay:.65s}
.auth-feat .dot{animation:blink 2.4s ease-in-out infinite}
.auth-feat:nth-child(2) .dot{animation-delay:.3s}
.auth-feat:nth-child(3) .dot{animation-delay:.6s}
.auth-feat:nth-child(4) .dot{animation-delay:.9s}

.auth-box{animation:fadeUp .6s cubic-bezier(.22,1,.36,1) .1s backwards}
.auth-box h2{animation:fadeUp .6s cubic-bezier(.22,1,.36,1) .16s backwards}
.field{animation:fadeUp .6s cubic-bezier(.22,1,.36,1) backwards}
.field:nth-of-type(1){animation-delay:.24s}
.field:nth-of-type(2){animation-delay:.32s}
.field:nth-of-type(3){animation-delay:.40s}
.field:nth-of-type(4){animation-delay:.48s}

/* 登录/注册切换：面板滑动 */
#pane-login,#pane-reg{transition:opacity .3s,transform .3s}
.pane-swap{opacity:0;transform:translateX(14px)}

/* ---------- 加载态按钮 ---------- */
.btn.loading{pointer-events:none;color:transparent!important;position:relative}
.btn.loading::after{
  content:'';position:absolute;left:50%;top:50%;width:15px;height:15px;margin:-7.5px 0 0 -7.5px;
  border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;
  animation:spinSlow .62s linear infinite;
}
.btn-line.loading::after,.btn-danger.loading::after{
  border-color:rgba(16,16,20,.2);border-top-color:#101014;
}

/* ---------- 空态 ---------- */
.empty{animation:fadeUp .5s cubic-bezier(.22,1,.36,1)}

/* ---------- 进度条 ---------- */
.rowline > div > div > div[style*="width"]{transition:width .9s cubic-bezier(.22,1,.36,1)}

/* ---------- 页面标题 ---------- */
.page-head h1{animation:fadeUp .55s cubic-bezier(.22,1,.36,1)}
.page-head p{animation:fadeUp .55s cubic-bezier(.22,1,.36,1) .07s backwards}

/* 分段标题 */
.sec-title{animation:fadeUp .55s cubic-bezier(.22,1,.36,1) backwards}

/* ---------- 可复制元素 ---------- */
.copyable{position:relative;transition:color .2s,background .2s;padding:1px 4px;border-radius:5px;margin:-1px -4px}
.copyable:hover{background:#f2f2f5;color:#2b52d0}
.copyable:active{transform:scale(.98)}

/* ---------- 滚动条 ---------- */
/* ---------- 顶栏布局（全尺寸适配） ---------- */
html,body{overflow-x:hidden;width:100%;max-width:100%;}
.shell{max-width:100%;}
main#spa-view{max-width:100%;overflow-x:clip;}
.page-wrap{max-width:100%;}

.topbar{
  height:60px;min-height:60px;flex-wrap:nowrap;
  width:100%;max-width:100%;padding:0 20px;gap:10px;
}
/* 链接组：紧贴头像左侧 */
.top-links{
  display:flex;align-items:center;gap:4px;
  flex:0 0 auto;min-width:0;
}
/* 顶栏链接：图标按钮 + 长按提示 */
.topbar .top-link{
  display:inline-flex;align-items:center;justify-content:center;
  width:34px;height:34px;padding:0;
  border-radius:9px;color:var(--ink-2);
  white-space:nowrap;flex:0 0 auto;line-height:1;
  position:relative;transition:background .2s,color .2s,transform .2s;
  -webkit-user-select:none;user-select:none;
}
.topbar .top-link svg{width:18px;height:18px;stroke-width:1.8;pointer-events:none}
.topbar .top-link:hover{background:#f0f0f3;color:var(--ink);transform:translateY(-1px)}
.topbar .top-link:active{transform:scale(.94)}

/* 长按/悬停提示气泡 */
.topbar .top-link::after{
  content:attr(data-tip);
  position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%) translateY(-4px) scale(.94);
  background:#101014;color:#fff;font-size:12px;line-height:1;font-weight:500;
  padding:7px 10px;border-radius:8px;white-space:nowrap;
  opacity:0;pointer-events:none;
  transition:opacity .18s,transform .18s;
  box-shadow:0 8px 20px -8px rgba(0,0,0,.5);z-index:200;
}
.topbar .top-link::before{
  content:'';position:absolute;top:calc(100% + 3px);left:50%;transform:translateX(-50%);
  border:5px solid transparent;border-bottom-color:#101014;
  opacity:0;pointer-events:none;transition:opacity .18s;z-index:200;
}
/* 悬停显示（桌面） */
.topbar .top-link:hover::after{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}
.topbar .top-link:hover::before{opacity:1}
/* 长按显示（触屏） */
.topbar .top-link.show-tip::after{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}
.topbar .top-link.show-tip::before{opacity:1}
.topbar .brand{
  flex:0 0 auto;white-space:nowrap;align-items:center;line-height:1;
}
.topbar .user-chip{
  flex:0 0 auto;white-space:nowrap;align-items:center;height:36px;
}
.topbar .user-chip span:not(.avatar){
  white-space:nowrap;line-height:1;max-width:96px;
  overflow:hidden;text-overflow:ellipsis;
}
.topbar .spacer{flex:1 1 auto;min-width:2px}
.topnav{height:64px;min-height:64px;flex-wrap:nowrap;overflow:hidden;width:100%;max-width:100%}
.topnav .top-link,.topnav .brand,.topnav .btn{flex:0 0 auto;white-space:nowrap;display:inline-flex;align-items:center;height:32px;line-height:1}

/* --- 平板/大屏手机 --- */
@media(max-width:900px){
  .topbar{padding:0 14px;gap:8px}
  .topbar .top-link{width:32px;height:32px}
  .topbar .top-link svg{width:17px;height:17px}
}

/* --- 手机：logo 文字保留，链接变纯图标，头像只留圆形 --- */
@media(max-width:760px){
  .topbar{padding:0 12px;gap:6px}
  .topbar .top-link{width:30px;height:30px;border-radius:8px}
  .topbar .top-link svg{width:16.5px;height:16.5px}
  .top-links{gap:3px}
  .topbar .brand>span:last-child{font-size:14.5px}
  .topbar .brand{gap:7px}
  .topbar .brand-mk{width:26px;height:26px;font-size:12px;border-radius:8px}
  .topbar .user-chip{padding:4px;height:32px;width:32px;justify-content:center;border-radius:50%}
  .topbar .user-chip span:not(.avatar){display:none}
  .topbar .avatar{width:24px;height:24px;font-size:10.5px}
  .topbar .spacer{min-width:0}
}

/* --- 小屏手机 --- */
@media(max-width:430px){
  .topbar{padding:0 9px;gap:4px}
  .topbar .top-link{width:28px;height:28px;border-radius:7px}
  .topbar .top-link svg{width:15.5px;height:15.5px}
  .top-links{gap:2px}
  .topbar .brand{gap:6px}
  .topbar .brand>span:last-child{font-size:13.5px;letter-spacing:-.01em}
  .topbar .brand-mk{width:24px;height:24px;font-size:11px;border-radius:7px}
  .menu-btn{width:30px;height:30px;flex:0 0 30px}
  .topbar .user-chip{width:30px;height:30px;padding:3px}
  .topbar .avatar{width:22px;height:22px;font-size:10px}
}

/* --- 极窄屏：再压一点（logo 文字始终保留） --- */
@media(max-width:360px){
  .topbar{padding:0 8px;gap:3px}
  .topbar .top-link{padding:0 5px;width:28px;height:28px}
  .topbar .brand>span:last-child{font-size:12.5px}
  .topbar .brand-mk{width:22px;height:22px;font-size:10px}
  .topbar .user-chip{width:28px;height:28px;padding:3px}
  .topbar .avatar{width:21px;height:21px;font-size:9.5px}
  .menu-btn{width:28px;height:28px;flex:0 0 28px}
}

/* ---------- 取消长按蓝色选区 ---------- */
*{ -webkit-tap-highlight-color: transparent; }
.topbar,.topnav,.sidebar,.side-item,.tile,.card,.btn,.tag,.bk-card,
.bk-metric,.stat,.chart,.rowline,.page-head,.user-chip,.brand,
.side-label,.bk-mini-l,.bk-mini-v,.bk-ep-val,.bk-card-label{
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
/* 需要复制的地方仍允许选中 */
input,textarea,.code-box,.mono,.copyable,
.tbl-wrap td,.modal,.empty,p,h1,h2,h3,label{
  -webkit-user-select: text;
  -moz-user-select: text;
  user-select: text;
}
/* 去掉按钮/链接点击后的焦点框和蓝色高亮 */
.btn:focus,.btn:active,.btn:focus-visible,
a:focus,a:active,
.side-item:focus,.tile:focus,
button:focus,button:active,button:focus-visible,
.menu-btn:focus,.menu-btn:focus-visible,.menu-btn:active{
  outline:none!important;
  -webkit-tap-highlight-color: transparent;
  -webkit-touch-callout: none;
}
/* 三条杠按钮：点击后不保留任何变暗/高亮状态 */
.menu-btn,
.menu-btn:focus,
.menu-btn:focus-visible,
.menu-btn:active,
.menu-btn:hover{
  -webkit-tap-highlight-color: transparent;
  outline: none !important;
  box-shadow: none !important;
}
.menu-btn:active,
.menu-btn.on{
  background:#fff !important;
  border-color:var(--line) !important;
  transform: none !important;
  color:var(--ink-2) !important;
}
/* 移动端菜单打开时，三条杠保持原样（不回显激活色） */
body.nav-open .menu-btn{
  background:#fff !important;
  border-color:var(--line) !important;
  color:var(--ink-2) !important;
}
::selection{background:#101014;color:#fff}
::-moz-selection{background:#101014;color:#fff}

/* 侧边栏内的外链（移动端替代顶栏链接） */
.side-ext{display:none}

/* ---------- 全站版权页脚 ---------- */
.site-footer{
  text-align:center;padding:18px 16px 22px;
  font-size:11.5px;color:#9a9aa4;line-height:1.7;
  letter-spacing:.01em;
  -webkit-user-select:none;user-select:none;
}
.site-footer b{color:#6a6a76;font-weight:600}
@media(min-width:761px){
  .site-footer{margin-left:216px}
}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#d4d4dc;border-radius:6px;border:2px solid transparent;background-clip:content-box;transition:background .2s}
::-webkit-scrollbar-thumb:hover{background:#a8a8b6;background-clip:content-box}

/* ---------- 后台导航 ---------- */
.admin-nav .nav-btn{position:relative;transition:background .22s,color .22s,transform .22s}
.admin-nav .nav-btn:hover{transform:translateY(-1px)}
.admin-nav .nav-btn.on::after{
  content:'';position:absolute;left:13px;right:13px;bottom:4px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,#6f8cff,#b9c6ff);
  animation:indicatorIn .3s ease;
}
.stat{transition:transform .3s cubic-bezier(.22,1,.36,1),box-shadow .3s}
.stat:hover{transform:translateY(-4px);box-shadow:0 22px 44px -28px rgba(16,16,20,.35)}
.stat .v{transition:transform .3s,color .3s}
.stat:hover .v{transform:scale(1.05);color:#2b52d0}

/* ---------- 加载点 ---------- */
.dots-load{display:inline-flex;gap:4px;align-items:center}
.dots-load i{width:5px;height:5px;border-radius:50%;background:#101014;animation:dotJump 1.1s ease-in-out infinite}
.dots-load i:nth-child(2){animation-delay:.15s}
.dots-load i:nth-child(3){animation-delay:.3s}
@keyframes dotJump{0%,60%,100%{transform:translateY(0);opacity:.35}30%{transform:translateY(-6px);opacity:1}}

/* ---------- 移动端菜单按钮 ---------- */
.menu-btn{
  display:none;border:1px solid var(--line);background:#fff;border-radius:9px;
  width:34px;height:34px;align-items:center;justify-content:center;cursor:pointer;
  color:var(--ink-2);transition:background .2s,transform .2s,border-color .2s;flex:0 0 34px;
}
.menu-btn:hover{background:#f2f2f5;border-color:#cfcfd8;transform:scale(1.05)}
.menu-btn:active{transform:scale(.94)}

/* ---------- 视图切换 ---------- */
main#spa-view{
  transition:opacity .34s cubic-bezier(.22,1,.36,1),transform .34s cubic-bezier(.22,1,.36,1);
  opacity:0;transform:translate3d(0,10px,0) scale(.995);
}
main#spa-view.view-in{opacity:1;transform:none}
/* 页面内的元素依次入场 */
#spa-view.view-in .page-wrap > *{animation:fadeUp .5s cubic-bezier(.22,1,.36,1) backwards}
#spa-view.view-in .page-wrap > *:nth-child(1){animation-delay:.02s}
#spa-view.view-in .page-wrap > *:nth-child(2){animation-delay:.07s}
#spa-view.view-in .page-wrap > *:nth-child(3){animation-delay:.12s}
#spa-view.view-in .page-wrap > *:nth-child(4){animation-delay:.17s}
#spa-view.view-in .page-wrap > *:nth-child(5){animation-delay:.22s}
#spa-view.view-in .page-wrap > *:nth-child(6){animation-delay:.27s}
#spa-view.view-in .page-wrap > *:nth-child(n+7){animation-delay:.32s}

/* ---------- 移动端 ---------- */
@media(max-width:760px){
  .menu-btn{display:flex}
  .cursor-glow{display:none}
  .topbar{padding:0 14px;gap:10px}
  .topbar .brand{font-size:15px}
  .topbar .brand-mk{width:26px;height:26px;font-size:13px}
  .topbar .user-chip{padding:4px 10px 4px 5px}
  .topbar .user-chip span:not(.avatar){max-width:64px}
  .bk-card{min-height:180px}
  .bk-top{grid-template-columns:1fr}
  main#spa-view{padding:18px 16px 60px}
  .sidebar{
    position:fixed;left:0;top:60px;bottom:0;z-index:100;background:#fff;
    transform:translateX(-100%);transition:transform .32s cubic-bezier(.22,1,.36,1);
    box-shadow:14px 0 40px -20px rgba(16,16,20,.3);width:240px;flex:0 0 240px;
  }
  body.nav-open .sidebar{transform:none}
  body.nav-open::after{
    content:'';position:fixed;inset:0;background:rgba(16,16,20,.36);z-index:99;
    animation:fadeIn .25s ease;
  }
}

/* 超小屏进一步压缩 */
@media(max-width:400px){
  .topbar .brand span:last-child{font-size:14px}
  .topbar .user-chip span:not(.avatar){display:none}
  .topbar .user-chip{padding:4px;border-radius:50%}
}

/* ---------- 减弱动效 ---------- */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .rv{opacity:1!important;transform:none!important;filter:none!important}
}