/* ============================================================
   云启飞鱼 · 设计系统 v2（Apple 风格）
   ------------------------------------------------------------
   改动要点：
   1. 中文不再用 900 假粗体，最高 700
   2. 数字改用系统字体 + tabular-nums，不再混等宽字体
   3. 去掉背景光晕、渐变文字、发光边框
   4. 用 iOS 深色模式的精确灰阶，而不是"白色加透明度"
   5. 交互改成按压反馈（active 缩放），不再上浮
   ============================================================ */

:root{
  /* 深灰刻度
     ------------------------------------------------------------
     ⚠️ 底色【不能用纯黑】。
        纯黑在深色模式里有两个毛病：
          · halation —— 白字贴黑底会像在发光，边缘发毛
          · 扁平 —— 没有"底色"托着，层级只能靠边框硬撑

        现在用带一点冷调的近黑。纯灰（RGB 三值相等）在深色底上
        显得脏、没生气，加一点点蓝就活了。

        四级亮度：底色 → 卡片 → 悬停/输入 → 激活。
        深色模式靠【亮度】表现层级，不靠阴影 —— 阴影在黑底上看不见。 */
  --bg:#0a0a0c;
  --surface:#141417;
  --surface-2:#1e1e22;
  --surface-3:#2a2a2f;
  --sep:rgba(255,255,255,.085);
  --sep-strong:rgba(255,255,255,.14);

  /* 文字层级（Apple label 体系） */
  --label:#f5f5f7;
  --label-2:rgba(235,235,245,.62);
  --label-3:rgba(235,235,245,0.5);

  --accent:#0a84ff;
  --accent2:#64d2ff;

  --r-s:10px;
  --r:14px;
  --r-l:20px;

  /* Apple 常用缓动 */
  --ease:cubic-bezier(.32,.72,0,1);
}

*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}

body{
  margin:0;
  background:var(--bg);
  color:var(--label);
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro SC","SF Pro Text",
    "PingFang SC","HarmonyOS Sans SC","MiSans",
    "NotoSC",
    "Segoe UI","Source Han Sans SC","Microsoft YaHei",sans-serif;
  font-size:15px;
  line-height:1.55;
  letter-spacing:0;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  font-synthesis-weight:none;   /* 禁止合成假粗体 —— 这条很关键 */
}

/* 每个产品换强调色 */
body[data-theme="cqle"]    {--accent:#0a84ff;--accent2:#bf5af2}
body[data-theme="xingji"]  {--accent:#64d2ff;--accent2:#0a84ff}
body[data-theme="capebeat"]{--accent:#ff375f;--accent2:#ff9f0a}
body[data-theme="qiming"]  {--accent:#ffd60a;--accent2:#ff9f0a}

a{color:inherit;text-decoration:none}
h1,h2,h3,h4{line-height:1.4;margin:0;font-weight:700;letter-spacing:-.015em}
img{max-width:100%;height:auto}
.wrap{max-width:1024px;margin:0 auto;padding:0 20px}

/* ---------------- 顶部导航（毛玻璃，iOS 导航栏手感） ---------------- */
header.nav{
  position:sticky;top:0;z-index:50;
  background:rgba(10,10,10,.72);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  border-bottom:1px solid var(--sep);
  transition:background .4s var(--ease),border-color .4s var(--ease);
}
header.nav.scrolled{background:rgba(6,6,6,.86);border-bottom-color:var(--sep-strong)}
.nav-in{display:flex;align-items:center;gap:20px;height:52px;
  transition:height .38s var(--ease)}
header.nav.scrolled .nav-in{height:48px}

.logo{display:flex;align-items:center;gap:8px;font-weight:600;white-space:nowrap;font-size:15px}
.logo-img{width:26px;height:26px;border-radius:7px;object-fit:cover;background:#fff;flex:0 0 auto;
  transition:transform .4s var(--ease)}
.logo:hover .logo-img{transform:scale(1.06)}
.logo small{display:block;font-size:12px;color:var(--label-3);font-weight:500;letter-spacing:0}

nav.menu{display:flex;gap:2px;margin-left:auto;flex-wrap:wrap}
nav.menu a{
  padding:6px 10px;border-radius:8px;font-size:13.5px;color:var(--label-2);
  transition:color .25s var(--ease),background .25s var(--ease)}
nav.menu a:hover{color:var(--label);background:rgba(255,255,255,.06)}
nav.menu a.on{color:var(--label);background:rgba(255,255,255,.1)}

/* ---------------- 大标题区 ---------------- */
.hero{padding:48px 0 8px}
.hero h1{
  font-size:clamp(30px,5.2vw,46px);font-weight:700;letter-spacing:-.022em;line-height:1.4}
.grad{color:var(--accent)}
.eyebrow{display:inline-block;font-size:12.5px;font-weight:600;color:var(--accent);margin-bottom:12px}
.sub{color:var(--label-2);font-size:16px;line-height:1.6;max-width:640px;margin:14px 0 24px}

/* ---------------- 布局 ---------------- */
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}

/* 卡片：iOS 分组列表的观感 —— 纯色面板 + 发丝描边，无发光 */
.card{
  background:var(--surface);border:1px solid var(--sep);border-radius:var(--r);
  padding:18px;position:relative;
  transition:background .3s var(--ease),border-color .3s var(--ease),transform .3s var(--ease)}
.card:hover{background:#232326;border-color:var(--sep-strong)}
.card:active{transform:scale(.995)}
.card h3{font-size:16px;font-weight:600;margin-bottom:4px;letter-spacing:-.01em}
.card p{margin:0;color:var(--label-2);font-size:14px;line-height:1.6}
.glass{background:var(--surface);border:1px solid var(--sep);border-radius:var(--r-l)}

/* ---------------- 按钮 ---------------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:10px 20px;border-radius:980px;font-size:14.5px;font-weight:600;
  border:1px solid transparent;cursor:pointer;
  /* ⚠️ 按钮文字不能折行。
     价目表最后一列只有 76px，「下单」两个字会折成竖排的
     下/单 —— 看起来像坏了。按钮折行永远不对，直接禁掉。 */
  white-space:nowrap;
  transition:background .25s var(--ease),opacity .25s var(--ease),transform .18s var(--ease)}
.btn-p{background:var(--accent);color:#fff}
.btn-p:hover{opacity:.88}
.btn-g{background:rgba(255,255,255,.08);color:var(--label);border-color:var(--sep)}
.btn-g:hover{background:rgba(255,255,255,.13)}
.btn:active{transform:scale(.97)}

/* 标签 */
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{
  font-size:12.5px;padding:4px 10px;border-radius:980px;
  background:rgba(255,255,255,.07);color:var(--label-2);border:1px solid transparent}
.chip.acc{color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}

/* 数字 */
.kpi{font-size:28px;font-weight:700;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}

/* ---------------- 小标题：左侧色条 ---------------- */
.sect,.sect-plain{display:flex;align-items:baseline;gap:10px;margin:36px 0 14px}
.sect h2,.sect-plain h2{font-size:18px;font-weight:700;letter-spacing:-.015em}
.sect span,.sect-plain span{font-size:13px;color:var(--label-3)}
.sect-plain h2::before{
  content:'';display:inline-block;width:3px;height:15px;border-radius:2px;margin-right:10px;
  vertical-align:-2px;background:var(--accent)}

/* ---------------- 表格：iOS 分组列表 ---------------- */
table{width:100%;border-collapse:collapse;font-size:14px}
th,td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--sep)}
th{color:var(--label-3);font-weight:600;font-size:12.5px;letter-spacing:0}
tr:last-child td{border-bottom:0}
tbody tr,.card table tr{transition:background .22s var(--ease)}
.card table tr:hover{background:rgba(255,255,255,.03)}

.pill{padding:2px 8px;border-radius:980px;font-size:12px;font-weight:600;white-space:nowrap}
.pill.wait{background:rgba(255,159,10,.16);color:#ff9f0a}
.pill.run{background:rgba(10,132,255,.16);color:#0a84ff}
.pill.done{background:rgba(48,209,88,.16);color:#30d158}

/* ---------------- 表单 ---------------- */
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;color:var(--label-2);margin-bottom:6px}
.field input,.field select,.field textarea{
  width:100%;padding:10px 12px;border-radius:var(--r-s);
  background:var(--surface-2);border:1px solid transparent;color:var(--label);
  font-size:15px;font-family:inherit;
  transition:border-color .25s var(--ease),background .25s var(--ease)}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--accent);background:var(--surface-3)}

/* ---------------- 页脚 ---------------- */
footer{border-top:1px solid var(--sep);padding:24px 0 40px;color:var(--label-3);
  font-size:12.5px;margin-top:56px}
.foot-in{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}
footer a{transition:color .25s var(--ease)}
footer a:hover{color:var(--label)}

/* ============================================================
   首页：信息条 / 主推卡片 / 列表行 / 紧凑通知 / 免责小字
   ============================================================ */
.opsbar{
  display:flex;flex-wrap:wrap;gap:4px 20px;align-items:center;
  margin-top:20px;padding:10px 0;font-size:13px;color:var(--label-3);
  border-top:1px solid var(--sep);border-bottom:1px solid var(--sep)}
.opsbar span{white-space:nowrap}
.opsbar b{color:var(--label-2);font-weight:600;font-variant-numeric:tabular-nums}

/* 主推：左文右数字，刻意不对称 */
.feature{
  display:grid;grid-template-columns:1fr auto;gap:24px;align-items:center;
  padding:24px 24px;background:var(--surface);border:1px solid var(--sep);
  border-radius:var(--r-l);
  transition:background .3s var(--ease),border-color .3s var(--ease),transform .3s var(--ease)}
.feature:hover{background:#232326;border-color:var(--sep-strong)}
.feature:active{transform:scale(.996)}
.feature .tag{font-size:12.5px;font-weight:600;color:var(--accent)}
.feat-main{display:flex;gap:18px;align-items:flex-start;min-width:0}
.feat-main h3{font-size:22px;font-weight:700;margin:4px 0 6px;letter-spacing:-.018em}
.feat-main p{color:var(--label-2);font-size:14.5px;margin:0;max-width:520px;line-height:1.6}
.feat-stats{display:flex;gap:24px}
.feat-stats div{text-align:right}
.feat-stats b{display:block;font-size:24px;font-weight:700;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums}
.feat-stats span{font-size:12px;color:var(--label-3)}
.feat-go{grid-column:1/-1;font-size:13.5px;color:var(--label-3);
  border-top:1px solid var(--sep);padding-top:14px;margin-top:2px;
  transition:color .25s var(--ease)}
.feature:hover .feat-go{color:var(--accent)}

/* 次要产品：分组列表行 */
.orows{display:grid;gap:1px;background:var(--sep);border:1px solid var(--sep);
  border-radius:var(--r);overflow:hidden}
.orow{
  display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--surface);
  transition:background .22s var(--ease)}
.orow:hover{background:#2a2a2d}
.orow:active{background:#313134}
.orow img{width:36px;height:36px;border-radius:9px;object-fit:cover;background:#fff;flex:0 0 auto}
.orow-txt{min-width:0;display:flex;flex-direction:column;gap:1px}
.orow-txt b{font-size:15px;font-weight:600}
.orow-txt span{font-size:13px;color:var(--label-3);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.orow-arrow{margin-left:auto;color:var(--label-3);font-style:normal;font-size:15px;
  transition:transform .25s var(--ease),color .25s var(--ease)}
.orow:hover .orow-arrow{color:var(--label-2);transform:translateX(2px)}
.mono{
  display:grid;place-items:center;width:36px;height:36px;border-radius:9px;flex:0 0 auto;
  background:var(--surface-3);color:var(--label-2);font-weight:600;font-size:16px}
.mono.sm{width:36px;height:36px;font-size:15px}

/* 通知：分组列表 */
.nlist{border:1px solid var(--sep);border-radius:var(--r);overflow:hidden;background:var(--surface)}
.nitem{display:flex;gap:14px;align-items:baseline;padding:12px 16px;border-bottom:1px solid var(--sep);
  transition:background .22s var(--ease)}
.nitem:last-child{border-bottom:0}
.nitem:hover{background:#232326}
.nitem time{flex:0 0 auto;font-size:12.5px;color:var(--label-3);font-variant-numeric:tabular-nums}
.nitem b{font-size:14.5px;font-weight:600;margin-right:8px}
.nitem span{font-size:13px;color:var(--label-2)}

/* 免责小字 */
.finep{margin-top:40px;padding-top:18px;border-top:1px solid var(--sep);
  font-size:12px;line-height:1.85;color:var(--label-3)}

/* ---------------- CQLE 报价表 ---------------- */
.ptable{border:1px solid var(--sep);border-radius:var(--r);overflow:hidden;background:var(--surface)}
.ptable th{background:rgba(255,255,255,.03);padding:10px 16px;
  border-bottom:1px solid var(--sep);color:var(--label-3);font-size:12.5px;font-weight:600}
.ptable td{padding:14px 16px;border-bottom:1px solid var(--sep);vertical-align:top}
.ptable tr:last-child td{border-bottom:0}
.ptable td b{font-weight:600;font-size:15px}
.ptable .dim{color:var(--label-2);font-size:13.5px;line-height:1.6}
.ptable .price{text-align:right;font-size:18px;font-weight:600;white-space:nowrap;
  font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.ptable .price span{display:block;font-size:12px;font-weight:400;color:var(--label-3);margin-top:2px}
.ptable tr:hover{background:rgba(255,255,255,.025)}

/* ---------------- 流程条 ---------------- */
.steplist{counter-reset:step;list-style:none;margin:0;padding:0;display:grid;
  grid-template-columns:repeat(4,1fr);
  border:1px solid var(--sep);border-radius:var(--r);overflow:hidden;background:var(--surface)}
.steplist li{counter-increment:step;padding:16px 18px;border-right:1px solid var(--sep)}
.steplist li:last-child{border-right:0}
.steplist li::before{content:counter(step,decimal-leading-zero);display:block;margin-bottom:6px;
  font-size:12px;font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums}
.steplist li b{display:block;font-size:14.5px;font-weight:600;margin-bottom:2px}
.steplist li span{font-size:13px;color:var(--label-2);line-height:1.55}

/* ---------------- 问答列表 ---------------- */
.faqlist{margin:0;border:1px solid var(--sep);border-radius:var(--r);overflow:hidden;
  background:var(--surface)}
.faqlist dt{padding:14px 16px 4px;font-size:14.5px;font-weight:600;color:var(--label)}
.faqlist dt::before{content:'Q';margin-right:10px;font-size:18px;font-weight:700;
  color:var(--accent);vertical-align:1px}
.faqlist dd{margin:0;padding:0 16px 14px;border-bottom:1px solid var(--sep);
  font-size:13.5px;line-height:1.75;color:var(--label-2)}
.faqlist dd:last-child{border-bottom:0}

/* ---------------- Logo 方块 ---------------- */
.logo-tile{
  width:56px;height:56px;border-radius:14px;object-fit:cover;flex:0 0 auto;background:#fff;
  transition:transform .35s var(--ease)}
.logo-tile.lg{width:76px;height:76px;border-radius:18px}
/* 带透明通道的 PNG logo 不垫白底，直接浮在深色背景上 */
.logo-tile[src$=".png"],.orow img[src$=".png"]{background:transparent}
.pcard:hover .logo-tile{transform:scale(1.03)}
.logo-tile.float{animation:floaty 6s ease-in-out infinite}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}

/* ---------------- 产品卡片（门户旧样式兼容） ---------------- */
.pcard{padding:20px;border-radius:var(--r-l);display:block}
.pcard .tag{font-size:12.5px;font-weight:600;color:var(--accent)}
.pcard h3{font-size:20px;font-weight:700;margin:4px 0 6px}
.pcard .go{margin-top:14px;font-size:13.5px;color:var(--label-3);
  transition:color .25s var(--ease)}
.pcard:hover .go{color:var(--accent)}

/* ============================================================
   动效（克制版：位移不超过 12px，交互以按压为主）
   ============================================================ */
.hero > *{opacity:0;transform:translateY(10px);
  animation:heroIn .7s var(--ease) forwards}
.hero > *:nth-child(1){animation-delay:.03s}
.hero > *:nth-child(2){animation-delay:.1s}
.hero > *:nth-child(3){animation-delay:.17s}
.hero > *:nth-child(4){animation-delay:.24s}
.hero > *:nth-child(5){animation-delay:.3s}
@keyframes heroIn{to{opacity:1;transform:translateY(0)}}

/* 注意：入场动画的「初始隐藏」样式统一写在文件末尾的 .js 作用域里。
   这里刻意不再放裸的 [data-reveal]{opacity:0} ——
   万一脚本跑到一半出错，裸规则会让元素永久卡在隐藏状态。 */

/* 联系方式三栏 */
.contact-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.contact-item{background:var(--surface);border:1px solid var(--sep);border-radius:var(--r);
  padding:16px 18px}
.contact-item span{display:block;font-size:12.5px;color:var(--label-3);margin-bottom:8px}
.contact-item b{display:block;font-size:15px;font-weight:600;margin-bottom:4px}
.contact-item em{font-style:normal;font-size:12.5px;color:var(--label-3);line-height:1.6}

/* 信息条的卡片式变体 */
.opsbar.boxed{background:var(--surface);border:1px solid var(--sep);border-radius:var(--r);
  padding:14px 18px;margin-top:0}

@media(max-width:820px){
  .contact-grid{grid-template-columns:1fr}
}

@media (prefers-reduced-motion: reduce){
  .hero > *,[data-reveal]{opacity:1 !important;transform:none !important;animation:none !important}
  *,*::before,*::after{transition-duration:.01ms !important;animation-duration:.01ms !important;
    animation-iteration-count:1 !important}
  .logo-tile.float{animation:none}
}

/* ---------------- 响应式 ---------------- */
@media(max-width:900px){
  .g3,.g4{grid-template-columns:repeat(2,1fr)}
  .wrap{padding:0 18px}
}
@media(max-width:820px){
  .feature{grid-template-columns:1fr;padding:20px}
  .feat-main{flex-direction:column;gap:14px}
  .feat-stats{gap:20px;justify-content:flex-start}
  .feat-stats div{text-align:left}
  .nitem{flex-direction:column;gap:2px}
  .steplist{grid-template-columns:1fr 1fr}
  .steplist li:nth-child(2n){border-right:0}
  .steplist li:nth-child(n+3){border-top:1px solid var(--sep)}
  .ptable td:nth-child(2){display:none}
  .orow-txt span{white-space:normal}
}
@media(max-width:680px){
  .g2,.g3,.g4{grid-template-columns:1fr}
  nav.menu{gap:0}
  nav.menu a{padding:6px 8px;font-size:13px}
  .nav-in{height:auto;padding:8px 0;flex-wrap:wrap}
  .logo small{display:none}
  .hero{padding:36px 0 4px}
  .hero h1{font-size:28px}
  body{font-size:14.5px}
}

/* ============================================================
   打磨层：触摸、可访问性、长内容、打印
   ============================================================ */

/* 移动端点击不出现灰色高亮块，靠 :active 反馈 */
a,button,[role=button],label,summary{-webkit-tap-highlight-color:transparent}

/* 键盘焦点必须看得见（鼠标点击不显示，避免难看） */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
input:focus-visible,select:focus-visible,textarea:focus-visible{outline:none}

/* 文本选中色 */
::selection{background:color-mix(in srgb,var(--accent) 42%,transparent);color:#fff}

/* 订单号、账号、金额这类长串不允许撑破容器 */
.tnum,.mono,code{font-variant-numeric:tabular-nums}
.card,.box,.ptable td,.nitem div{overflow-wrap:anywhere}

/* 表格：窄屏横向滑动，且给出可滑动的视觉暗示 */
.ptable{overflow-x:auto;-webkit-overflow-scrolling:touch}
.ptable table{min-width:520px}
@media(max-width:680px){
  .ptable{margin-left:-20px;margin-right:-20px;padding:0 20px}
  .ptable table{min-width:480px}
}

/* 移动端触摸目标不小于 40px */
@media(max-width:820px){
  .btn{padding:10px 20px;min-height:42px;display:inline-flex;align-items:center;
    justify-content:center}
  .btn-s{padding:10px 16px;min-height:40px}
  /* iOS 上输入框字号小于 16px 会触发整页放大 */
  input,select,textarea{font-size:16px !important}
  .field label{font-size:13px}
  /* 给底部留出安全区，避免 iPhone 横条压住最后一行 */
  body{padding-bottom:env(safe-area-inset-bottom,0px)}
  .wrap{padding-left:max(18px,env(safe-area-inset-left,0px));
    padding-right:max(18px,env(safe-area-inset-right,0px))}
}

/* 数据为空时不要只剩一片黑 */
.card:empty,.box:empty{display:none}

/* 滚动条（桌面端 WebKit） */
@media(min-width:821px){
  ::-webkit-scrollbar{width:11px;height:11px}
  ::-webkit-scrollbar-track{background:transparent}
  ::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:6px;
    border:3px solid transparent;background-clip:content-box}
  ::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.24);
    background-clip:content-box}
}

/* 订单详情打印：顾客要留底时可打印，去掉深色背景 */
@media print{
  body{background:#fff !important;color:#000 !important}
  nav.menu,.foot,.btn,.opsbar,.float{display:none !important}
  .card,.box{border:1px solid #ccc !important;background:#fff !important;
    box-shadow:none !important;break-inside:avoid}
  .label-2,.label-3,[style*="--label-3"]{color:#555 !important}
  a{color:#000 !important;text-decoration:none}
  .wrap{max-width:100% !important;padding:0 !important}
}

/* ============================================================
   视觉冲击层
   ------------------------------------------------------------
   设计取向：保留 Apple 那套排版与间距的克制，用「光、深度、运动」
   补上电竞该有的张力。所有装饰性效果都挂在 html.js 下 ——
   脚本没跑起来时内容原样可见，不会白屏。
   ============================================================ */

/* ---------- 0. 动效准备（只有 .js 存在时才隐藏待入场元素）---------- */
.js [data-reveal]{
  opacity:0;
  transition:opacity .68s var(--ease),transform .68s var(--ease),filter .68s var(--ease);
  will-change:opacity,transform}
.js [data-reveal="up"]{transform:translate3d(0,20px,0)}
.js [data-reveal="fade"]{transform:none}
.js [data-reveal="scale"]{transform:scale(.955)}
.js [data-reveal="left"]{transform:translate3d(-22px,0,0)}
.js [data-reveal="right"]{transform:translate3d(22px,0,0)}
.js [data-reveal].in{opacity:1;transform:none;filter:none;will-change:auto}

/* ---------- 1. 背景光晕：让纯黑不再是死黑 ---------- */
body::before{
  content:'';position:fixed;inset:-20% -10% 0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(46% 38% at 12% 2%,  color-mix(in srgb,var(--accent)  17%,transparent), transparent 68%),
    radial-gradient(40% 34% at 88% 6%,  color-mix(in srgb,var(--accent2) 13%,transparent), transparent 66%),
    radial-gradient(60% 44% at 50% 100%,color-mix(in srgb,var(--accent)  7%,transparent),  transparent 72%);
  animation:meshDrift 26s ease-in-out infinite alternate;
  opacity:.9}
@keyframes meshDrift{
  0%  {transform:translate3d(0,0,0) scale(1)}
  50% {transform:translate3d(-1.5%,1.2%,0) scale(1.05)}
  100%{transform:translate3d(1.2%,-1%,0) scale(1.02)}
}
@media(prefers-reduced-motion:reduce){body::before{animation:none}}

/* ---------- 2. 导航：滚动后收紧 + 顶部阅读进度 ---------- */
header.nav{transition:background .32s var(--ease),backdrop-filter .32s var(--ease),
  border-color .32s var(--ease),box-shadow .32s var(--ease)}
header.nav.scrolled{
  background:color-mix(in srgb,var(--bg) 72%,transparent);
  -webkit-backdrop-filter:saturate(180%) blur(22px);
  backdrop-filter:saturate(180%) blur(22px);
  border-bottom-color:var(--sep-strong);
  box-shadow:0 8px 32px rgba(0,0,0,.45)}
.read-bar{
  position:absolute;left:0;bottom:-1px;height:2px;width:100%;
  transform:scaleX(0);transform-origin:0 50%;
  background:linear-gradient(90deg,var(--accent),var(--accent2));
  box-shadow:0 0 12px color-mix(in srgb,var(--accent) 60%,transparent);
  transition:transform .1s linear}

nav.menu a{position:relative}
nav.menu a::after{
  content:'';position:absolute;left:8px;right:8px;bottom:2px;height:1.5px;
  background:linear-gradient(90deg,var(--accent),var(--accent2));
  transform:scaleX(0);transform-origin:0 50%;
  transition:transform .3s var(--ease);border-radius:2px}
nav.menu a:hover::after,nav.menu a.on::after{transform:scaleX(1)}

/* ---------- 3. 按钮：渐变 + 掠光 + 按压反馈 ---------- */
.btn{
  position:relative;overflow:hidden;isolation:isolate;
  transition:transform .18s var(--ease),box-shadow .28s var(--ease),
    background .28s var(--ease),border-color .28s var(--ease),color .28s var(--ease)}
.btn-p{
  background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent2) 70%,var(--accent)));
  border-color:transparent;color:#fff;
  box-shadow:0 2px 12px color-mix(in srgb,var(--accent) 30%,transparent),
             inset 0 1px 0 rgba(255,255,255,.18)}
.btn-p:hover{
  box-shadow:0 6px 26px color-mix(in srgb,var(--accent) 48%,transparent),
             inset 0 1px 0 rgba(255,255,255,.24);
  transform:translateY(-1px)}
.btn-p:active{transform:translateY(0) scale(.975)}
/* 掠光：hover 时一道高光扫过 */
.btn::before{
  content:'';position:absolute;inset:0;z-index:-1;
  background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.26) 50%,transparent 65%);
  transform:translateX(-130%);transition:transform .65s var(--ease)}
.btn:hover::before{transform:translateX(130%)}
.btn-g{background:rgba(255,255,255,.055);border-color:var(--sep-strong)}
.btn-g:hover{background:rgba(255,255,255,.1);border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
.btn.loading{pointer-events:none;opacity:.72}
.btn.loading::after{
  content:'';position:absolute;left:0;bottom:0;height:2px;width:38%;
  background:rgba(255,255,255,.85);border-radius:2px;
  animation:btnLoad 1s ease-in-out infinite}
@keyframes btnLoad{0%{left:-38%}100%{left:100%}}

/* ---------- 4. 卡片：悬浮抬升 + 边框发光 + 鼠标高光 ---------- */
.card,.box,.pkg,.contact-item{
  transition:transform .3s var(--ease),border-color .3s var(--ease),
    box-shadow .3s var(--ease),background .3s var(--ease)}
.card:hover,.box:hover{
  border-color:color-mix(in srgb,var(--accent) 26%,var(--sep));
  box-shadow:0 14px 40px -18px color-mix(in srgb,var(--accent) 40%,transparent)}
a.card:hover{transform:translateY(-2px)}

/* 带 .glow 的卡片：鼠标位置处有一团柔光 */
.glow{position:relative;overflow:hidden}
.glow::before{
  content:'';position:absolute;inset:0;pointer-events:none;opacity:0;
  background:radial-gradient(320px circle at var(--mx,50%) var(--my,50%),
    color-mix(in srgb,var(--accent) 15%,transparent),transparent 62%);
  transition:opacity .35s var(--ease)}
.glow:hover::before{opacity:1}

/* ---------- 5. Hero：更大的字、渐入、光带 ---------- */
.hero h1{
  letter-spacing:-.032em;line-height:1.4;
  background:linear-gradient(180deg,#fff 30%,color-mix(in srgb,#fff 62%,var(--accent)));
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent}
.hero h1 .grad{
  background:linear-gradient(105deg,var(--accent),var(--accent2) 60%,var(--accent));
  background-size:220% 100%;
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
  animation:gradSlide 7s ease-in-out infinite}
@keyframes gradSlide{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
@media(prefers-reduced-motion:reduce){.hero h1 .grad{animation:none}}

/* 首屏光带：一道缓慢横移的细光 */
.hero::after{
  content:'';position:absolute;left:0;right:0;top:0;height:1px;
  background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 65%,transparent),transparent);
  animation:heroBeam 9s ease-in-out infinite}
@keyframes heroBeam{0%,100%{opacity:.25;transform:translateX(-25%)}50%{opacity:.9;transform:translateX(25%)}}
@media(prefers-reduced-motion:reduce){.hero::after{animation:none;opacity:.4}}
.hero{position:relative}

/* ---------- 6. 价格与套餐卡：选中态、悬浮、封顶价 ---------- */
.pkg{position:relative;overflow:hidden}
.pkg::after{
  content:'';position:absolute;left:0;top:0;bottom:0;width:2px;
  background:linear-gradient(180deg,var(--accent),var(--accent2));
  transform:scaleY(0);transform-origin:50% 0;transition:transform .3s var(--ease)}
.pkg:hover::after,.pkg.on::after{transform:scaleY(1)}
.pkg.on{box-shadow:0 10px 34px -16px color-mix(in srgb,var(--accent) 60%,transparent)}
.pkg:hover{transform:translateY(-1px)}
.pkg.on::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(60% 100% at 0% 50%,color-mix(in srgb,var(--accent) 12%,transparent),transparent 70%)}

/* 表格行：hover 时轻微右移 + 描边 */
.ptable tr,.mini tr{transition:background .2s var(--ease)}
.ptable tbody tr:hover td{background:color-mix(in srgb,var(--accent) 6%,transparent)}
.mini tr:hover td{background:color-mix(in srgb,var(--accent) 7%,transparent)}
.price b,.pkg-price b{font-variant-numeric:tabular-nums}

/* ---------- 7. 页面转场 ---------- */
main.page-enter{opacity:0;transform:translate3d(0,10px,0)}
main.page-enter-active{opacity:1;transform:none;
  transition:opacity .42s var(--ease),transform .42s var(--ease)}
main.page-leave{opacity:.35;transition:opacity .18s ease}
/* 支持 View Transitions 的浏览器走原生转场，更顺 */
@view-transition{navigation:auto}
::view-transition-old(root){animation:vtOut .22s var(--ease) both}
::view-transition-new(root){animation:vtIn .32s var(--ease) both}
@keyframes vtOut{to{opacity:0;transform:translate3d(0,-6px,0)}}
@keyframes vtIn{from{opacity:0;transform:translate3d(0,8px,0)}}
@media(prefers-reduced-motion:reduce){
  ::view-transition-old(root),::view-transition-new(root){animation:none}
}

/* ---------- 8. Toast ---------- */
.toast-box{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);
  z-index:9999;display:flex;flex-direction:column;gap:8px;align-items:center;
  pointer-events:none;padding:0 16px;max-width:100%}
.toast{
  background:rgba(28,28,30,.93);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  border:1px solid var(--sep-strong);border-radius:999px;
  padding:10px 20px;font-size:13.5px;color:var(--label);
  box-shadow:0 12px 40px rgba(0,0,0,.5);
  opacity:0;transform:translate3d(0,14px,0) scale(.96);
  transition:opacity .32s var(--ease),transform .32s var(--ease);white-space:nowrap}
.toast.in{opacity:1;transform:none}
.toast.t-ok{border-color:color-mix(in srgb,#30d158 45%,transparent);color:#8ef0ae}
.toast.t-warn{border-color:color-mix(in srgb,#ff9f0a 45%,transparent);color:#ffcf7a}

/* 可复制的号码 */
[data-copy]{cursor:pointer;position:relative}
[data-copy]:hover{color:var(--accent)}
[data-copy]::after{
  content:'点击复制';font-size:12px;opacity:0;margin-left:6px;
  color:var(--label-3);transition:opacity .2s var(--ease)}
[data-copy]:hover::after{opacity:1}

/* ---------- 9. 骨架屏 ---------- */
.skeleton{position:relative;overflow:hidden;color:transparent !important;
  background:var(--surface-2) !important;border-radius:8px}
.skeleton *{visibility:hidden}
.skeleton::after{
  content:'';position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.07),transparent);
  animation:sk 1.4s ease-in-out infinite}
@keyframes sk{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}

/* ---------- 10. 状态点与徽标微动 ---------- */
.pill.done::before,.pill.run::before,.pill.wait::before{
  content:'';display:inline-block;width:5px;height:5px;border-radius:50%;
  background:currentColor;margin-right:6px;vertical-align:middle;
  box-shadow:0 0 0 0 currentColor;animation:pulse 2.4s ease-out infinite}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,currentColor 55%,transparent)}
  70%{box-shadow:0 0 0 7px transparent}
  100%{box-shadow:0 0 0 0 transparent}}
@media(prefers-reduced-motion:reduce){.pill::before{animation:none}}

/* ---------- 11. 图标瓦片 / 产品卡的动态 ---------- */
.logo-tile,.pcard{
  transition:transform .45s var(--ease),box-shadow .45s var(--ease),border-color .45s var(--ease)}
.pcard:hover{transform:translateY(-4px);
  box-shadow:0 22px 56px -22px color-mix(in srgb,var(--accent) 55%,transparent);
  border-color:color-mix(in srgb,var(--accent) 32%,var(--sep))}

/* ---------- 12. 输入框聚焦：柔和光圈 ---------- */
input:focus,select:focus,textarea:focus{
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
.field input,.field select,.field textarea{
  transition:border-color .22s var(--ease),background .22s var(--ease),box-shadow .22s var(--ease)}

/* ---------- 13. 表格数字列等宽 ---------- */
.tnum,td.price,.price{font-variant-numeric:tabular-nums}

/* ---------- 14. 统一尊重"减少动态效果" ---------- */
@media(prefers-reduced-motion:reduce){
  .js [data-reveal]{opacity:1 !important;transform:none !important;filter:none !important}
  main.page-enter{opacity:1;transform:none}
  .btn::before{display:none}
  .glow::before{display:none}
  .read-bar{display:none}
  .toast{transition:opacity .01ms}
}

/* ---------- 15. 首屏实时数据条 ---------- */
.eyebrow{display:inline-flex;align-items:center;gap:6px}
.live-dot{
  width:6px;height:6px;border-radius:50%;background:#30d158;display:inline-block;
  box-shadow:0 0 0 0 rgba(48,209,88,.7);animation:livePulse 2.2s ease-out infinite}
@keyframes livePulse{
  0%{box-shadow:0 0 0 0 rgba(48,209,88,.65)}
  70%{box-shadow:0 0 0 8px rgba(48,209,88,0)}
  100%{box-shadow:0 0 0 0 rgba(48,209,88,0)}}
@media(prefers-reduced-motion:reduce){.live-dot{animation:none}}

.live-strip{
  display:flex;align-items:center;gap:clamp(14px,3vw,32px);flex-wrap:wrap;
  margin-top:36px;padding:16px 20px;
  background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.012));
  border:1px solid var(--sep);border-radius:var(--r-l);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  box-shadow:0 18px 50px -30px color-mix(in srgb,var(--accent) 65%,transparent)}
.live-item{display:flex;flex-direction:column;gap:2px;min-width:64px}
.live-item b{font-size:clamp(20px,2.6vw,27px);font-weight:700;letter-spacing:-.022em;
  font-variant-numeric:tabular-nums;line-height:1.4;
  background:linear-gradient(180deg,#fff,color-mix(in srgb,#fff 60%,var(--accent)));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.live-item span{font-size:12.5px;color:var(--label-3)}
.live-sep{width:1px;height:30px;background:var(--sep-strong);flex:0 0 auto}
@media(max-width:620px){
  .live-strip{gap:14px 18px;padding:14px 16px;margin-top:28px}
  .live-sep{display:none}
  .live-item{min-width:calc(50% - 9px);flex:1 1 calc(50% - 9px)}
}

/* 导航里的「立即下单」—— 要跟其它导航项区分开，
   不然访客找不到下一步。用主题色填充，视觉上最跳。 */
nav.menu a.nav-cta{
  background:var(--accent);
  color:#fff;
  padding:4px 12px;
  border-radius:99px;
  font-weight:700;
  margin-left:4px;
}
nav.menu a.nav-cta:hover{filter:brightness(1.1)}
nav.menu a.nav-cta:active{transform:scale(.97)}
@media(max-width:680px){
  nav.menu a.nav-cta{padding:4px 10px;font-size:12.5px}
}


/* ============================================================
   交互细节与键盘焦点
   ------------------------------------------------------------
   这一块是"专业感"的来源：不难，但少了就总觉得哪里不对。
   ============================================================ */

/* ---------- 键盘焦点 ----------
   ⚠️ 用 :focus-visible 而不是 :focus。
      :focus 会让鼠标点击也出现焦点环，很吵；
      :focus-visible 只在【键盘操作】时出现 —— 这正是需要的。

      2px 实线 + 2px 偏移，保证在任何底色上都看得见。
      颜色用 accent，跟品牌一致。 */
:focus{outline:none}
:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:2px;
  border-radius:6px}
/* 按钮本来就是圆的，焦点环跟着圆 */
.btn:focus-visible{border-radius:980px}
/* 输入框自己有边框，焦点环换成更明显的边框 + 外发光 */
input:focus-visible,select:focus-visible,textarea:focus-visible{
  outline:none;
  border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}

/* ---------- 标签 hover ----------
   .chip 看着是可点的（有边框、有内边距），但原来 hover 毫无反应。
   可点的东西必须有反馈 —— 不然用户不确定点没点上。 */
.chip{
  transition:background .2s var(--ease),border-color .2s var(--ease),
    color .2s var(--ease),transform .16s var(--ease)}
a.chip:hover,.chip[href]:hover{
  background:rgba(255,255,255,.07);
  border-color:var(--sep-strong);
  transform:translateY(-1px)}
a.chip:active{transform:translateY(0) scale(.98)}

/* ---------- 卡片 hover ----------
   深色模式下抬升靠【亮度】而不是阴影（阴影在黑底上看不见）。
   只给真正可点的卡片加，静态卡片不动 —— 全都浮起来等于都不浮。 */
a.card:hover,.card-link:hover{
  background:var(--surface-2);
  border-color:var(--sep-strong)}

/* ---------- 表格行 hover ----------
   价目表一行一行读的时候，鼠标在哪一行要看得清。 */
.ptable tbody tr,.ptable tr{
  transition:background .16s var(--ease)}
.ptable tr:hover td{background:rgba(255,255,255,.028)}

/* ---------- 链接 hover 的下划线动效 ----------
   正文里的链接默认只有颜色区分，鼠标移上去加一条下划线更明确。 */
.sub a,.nlist a{
  text-decoration:none;
  border-bottom:1px solid transparent;
  transition:border-color .2s var(--ease)}
.sub a:hover,.nlist a:hover{border-bottom-color:currentColor}

/* ---------- 长文本阅读宽度 ----------
   一行太长眼睛要来回扫。正文段落限制在 36em 左右（中文约 40 字）。 */
.sub{max-width:44em}

/* ---------- 减少动效偏好 ----------
   系统设了"减弱动效"就不做位移，只保留颜色变化。 */
@media (prefers-reduced-motion:reduce){
  a.chip:hover,.chip[href]:hover{transform:none}
  html{scroll-behavior:auto}
}