/* ============================================================
   智诚科技 · vue-app UI 重构 v2 — 极简风格设计系统
   参考基调：collectui 极简交互 — 大留白 / 黑白灰 / 单强调色 /
   细字重 / 细分割线 / 克制动效 / 网格卡片
   强调色沿用品牌红 #E30001（仅小面积点缀）
   ============================================================ */
:root{
  --bg0:#FCFCFD;
  --bg1:#F4F5F7;
  --card:#FFFFFF;
  --line:#E8E8EC;
  --line-2:#D8D9DE;
  --ink:#141518;
  --ink-2:#55575F;
  --mute:#9A9CA5;
  --acc:#E30001;
  --acc-soft:rgba(227,0,1,.07);
  --dark:#0F1115;
  --dark-2:#181B22;
  --dark-line:rgba(255,255,255,.09);
  --r:18px;
  --r-lg:26px;
  --r-sm:10px;
  --sh:0 1px 2px rgba(15,17,21,.05), 0 10px 26px -20px rgba(15,17,21,.14);
  --sh-lg:0 2px 6px rgba(15,17,21,.06), 0 26px 60px -28px rgba(15,17,21,.22);
  --ease:cubic-bezier(.22,.61,.36,1);
  --font:"PingFang SC","Microsoft YaHei",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  /* 顶栏高度：改这一个值，顶栏、移动菜单、栏目 banner 让位、sticky 导航全部跟着走 */
  --hdr-h:110px;
}
*{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{font-family:var(--font);background:var(--bg0);color:var(--ink);font-size:15px;line-height:1.7;-webkit-font-smoothing:antialiased;overflow-x:hidden;}
a{text-decoration:none;color:inherit;}
img{max-width:100%;display:block;}
ul,ol{list-style:none;}
button{font-family:inherit;cursor:pointer;border:none;background:none;}
input{font-family:inherit;}
::selection{background:var(--acc);color:#fff;}

.shell{max-width:1200px;margin:0 auto;padding:0 28px;}
.num{font-variant-numeric:tabular-nums;}

/* ---------------- Buttons ---------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;height:52px;padding:0 30px;border-radius:999px;font-size:15px;font-weight:600;letter-spacing:.02em;transition:transform .35s var(--ease),box-shadow .35s var(--ease),background .25s,color .25s;white-space:nowrap;}
.btn svg{transition:transform .35s var(--ease);}
.btn:hover svg{transform:translateX(4px);}
.btn--dark{background:var(--dark);color:#fff;}
.btn--dark:hover{background:var(--acc);transform:translateY(-2px);box-shadow:0 14px 30px -14px var(--acc);}
.btn--light{background:#fff;color:var(--dark);}
.btn--light:hover{background:#EDEDF0;transform:translateY(-2px);}
.btn--ghost{border:1px solid rgba(255,255,255,.32);color:#fff;background:transparent;}
.btn--ghost:hover{border-color:#fff;background:rgba(255,255,255,.1);transform:translateY(-2px);}
.btn--acc{background:var(--acc);color:#fff;}
.btn--acc:hover{background:#C30000;transform:translateY(-2px);box-shadow:0 14px 30px -14px var(--acc);}
.link-more{display:inline-flex;align-items:center;gap:8px;font-size:14.5px;font-weight:600;color:var(--ink);transition:color .25s;}
.link-more svg{transition:transform .3s var(--ease);}
.link-more:hover{color:var(--acc);}
.link-more:hover svg{transform:translateX(5px);}

/* ---------------- Header ---------------- */
.hdr{position:fixed;top:0;left:0;right:0;z-index:200;height:var(--hdr-h);font-size:19.2px;background:#333333;border-bottom:1px solid rgba(255,255,255,.08);transition:border-color .3s,box-shadow .3s;}
.hdr.scrolled{border-bottom-color:rgba(255,255,255,.12);box-shadow:0 10px 30px -22px rgba(0,0,0,.55);}
/* 内容区撑满父容器（max-width:none 覆盖 .shell 的 1200px 居中）+ 高度撑满顶栏 + align-items:center ⇒ 永远上下居中 */
.hdr-in{display:flex;align-items:center;justify-content:space-between;height:100%;gap:33.6px;background:#333333;max-width:none;width:100%;margin:0;}
.hdr-logo{display:flex;align-items:center;gap:14.4px;flex-shrink:0;}
.hdr-mark{width:48px;height:48px;border-radius:12px;object-fit:contain;object-position:center;display:block;flex-shrink:0;background:transparent;box-shadow:none;}
.hdr-title{display:flex;flex-direction:column;line-height:1.15;}
.hdr-title b{font-size:20.4px;font-weight:800;letter-spacing:.06em;color:#fff;}
.hdr-title span{font-size:12px;color:rgba(255,255,255,.55);letter-spacing:.32em;text-transform:uppercase;}
/* 导航铺满中间的剩余空间，各项用 justify-content 均匀平铺，宽度自适应 */
.hdr-nav{display:flex;align-items:center;gap:4px;flex:1 1 auto;justify-content:space-between;}
.hdr-nav .nav-item{position:relative;}
.hdr-nav .nav-item>a{position:relative;display:inline-flex;align-items:center;padding:10.8px 19.2px;font-size:19.2px;color:#fff;font-weight:700;border-radius:999px;transition:color .25s,background .25s;}
.hdr-nav .nav-item>a:hover{color:#fff;background:rgba(255,255,255,.08);}
.hdr-nav .nav-item>a::after{content:"";position:absolute;left:19.2px;right:19.2px;bottom:3.6px;height:2.4px;border-radius:2px;background:#E30001;transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ease);}
.hdr-nav .nav-item:hover>a::after,.hdr-nav .nav-item.is-active>a::after{transform:scaleX(1);}
.hdr-nav .nav-item.is-active>a{color:#fff;font-weight:800;}
.hdr-nav .nav-item.has-drop>a{display:inline-flex;align-items:center;gap:6px;}

/* 桌面横向 mega 下拉 */
.hdr-drop{position:absolute;top:100%;left:0;right:0;background:#fff;border-top:1px solid var(--line);box-shadow:0 30px 60px -34px rgba(15,17,21,.3);z-index:199;}
/* 下拉：容器撑满（覆盖 .shell 的 1200px 居中）。
   左右内边距与列宽由 AppHeader.js 的 syncDropAlign() 按顶栏导航实测写入 CSS 变量，
   使下拉的每一列与上方对应的菜单项严格对齐（无 JS 时退回等分 5 列）。 */
.hdr-drop-in{display:grid;grid-template-columns:var(--drop-cols,repeat(5,1fr));justify-content:space-between;gap:0;max-width:none;width:100%;margin:0;padding:30px var(--drop-pr,28px) 34px var(--drop-pl,28px);}
.drop-col{display:flex;flex-direction:column;gap:2px;border-left:1px solid var(--bg1);padding-left:24px;}
.drop-col.hot{border-left-color:var(--acc);}
.drop-col .drop-title{font-size:17px;font-weight:700;color:var(--ink);padding:4px 0 12px;letter-spacing:.01em;transition:color .25s;}
.drop-col.hot .drop-title{color:var(--acc);}
.drop-col .drop-title:hover{color:var(--acc);}
.drop-col .drop-link{font-size:15.5px;color:var(--ink-2);padding:7px 0;transition:color .2s,transform .3s var(--ease);transform:translateX(0);}
.drop-col .drop-link:hover{color:var(--acc);transform:translateX(4px);}
.drop-enter-active,.drop-leave-active{transition:opacity .28s var(--ease),transform .28s var(--ease);}
.drop-enter-from,.drop-leave-to{opacity:0;transform:translateY(-8px);}
.hdr-side{display:flex;align-items:center;gap:14.4px;flex-shrink:0;}
/* 顶栏搜索按钮：点击后从顶栏下方滑出搜索面板 */
.hdr-search-btn{width:50.4px;height:50.4px;border:1px solid rgba(255,255,255,.32);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(255,255,255,.08);flex-shrink:0;transition:.3s;}
.hdr-search-btn:hover{border-color:#fff;background:rgba(255,255,255,.16);transform:rotate(8deg);}
.hdr-search-btn.is-open{background:#fff;color:var(--dark);border-color:#fff;transform:rotate(90deg);}

/* 从顶栏下方滑出的搜索面板 */
.hdr-spanel{position:absolute;top:100%;left:0;right:0;background:#fff;border-top:1px solid var(--line);box-shadow:0 26px 50px -26px rgba(15,17,21,.45);z-index:198;}
.hdr-spanel-in{display:flex;align-items:center;gap:14px;max-width:900px;margin:0 auto;padding:26px 28px;}
.hdr-spanel .sp-input{flex:1;min-width:0;height:56px;border:1px solid var(--line);border-radius:999px;padding:0 26px;font-size:17px;outline:none;background:var(--bg1);color:var(--ink);transition:border-color .25s,background .25s,box-shadow .25s;}
.hdr-spanel .sp-input::placeholder{color:#A6A9B2;}
.hdr-spanel .sp-input:focus{border-color:var(--acc);background:#fff;box-shadow:0 0 0 4px rgba(227,0,1,.08);}
.hdr-spanel .sp-btn{height:56px;padding:0 34px;border-radius:999px;background:var(--acc);color:#fff;font-size:16px;font-weight:700;flex-shrink:0;transition:background .25s,transform .25s;}
.hdr-spanel .sp-btn:hover{background:#C30000;transform:translateY(-1px);}
.hdr-spanel .sp-close{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--ink-2);flex-shrink:0;transition:background .25s,color .25s;}
.hdr-spanel .sp-close:hover{background:var(--bg1);color:var(--acc);}
/* 滑出/收起动画 */
.spanel-enter-active,.spanel-leave-active{transition:opacity .26s var(--ease),transform .32s var(--ease);}
.spanel-enter-from,.spanel-leave-to{opacity:0;transform:translateY(-14px);}
.hdr-search .s-ico:hover{border-color:#fff;color:#fff;transform:rotate(8deg);background:rgba(255,255,255,.16);}
.menu-burger{display:none;flex-direction:column;gap:6px;width:52.8px;height:52.8px;align-items:center;justify-content:center;border-radius:14.4px;border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.06);}
.menu-burger i{width:21.6px;height:2.4px;background:#fff;border-radius:2px;transition:.3s;display:block;}
.hdr-cta{display:inline-flex;background:#E30001;color:#fff;border:none;}
.hdr-cta:hover{background:#C30000;transform:translateY(-2px);box-shadow:0 14px 30px -14px #E30001;}
/* 顶栏「登录」按钮 —— 最右侧，当前页跳转智诚科技CMS后台登录页 */
.hdr-login{display:inline-flex;align-items:center;gap:8.4px;height:50.4px;padding:0 21.6px;flex-shrink:0;font-size:16.8px;font-weight:700;letter-spacing:.02em;color:#fff;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.34);border-radius:999px;white-space:nowrap;transition:background .25s var(--ease),color .25s,border-color .25s,transform .25s var(--ease),box-shadow .25s;}
.hdr-login:hover{background:#fff;color:#333333;border-color:#fff;transform:translateY(-2px);box-shadow:0 14px 30px -16px rgba(0,0,0,.6);}
.hdr-login:active{transform:translateY(0);}
.hdr-login svg{flex-shrink:0;transition:transform .3s var(--ease);}
.hdr-login:hover svg{transform:translateX(2px);}
@media(max-width:1080px){
  .hdr-nav,.hdr-cta{display:none;}
  .menu-burger{display:flex;}
  .hdr-login{height:40px;padding:0 14px;}
  .hdr-mobile-nav{position:fixed;top:var(--hdr-h);left:0;right:0;background:#fff;border-bottom:1px solid var(--line);display:flex;flex-direction:column;padding:10px 22px 20px;gap:2px;z-index:199;box-shadow:var(--sh);max-height:calc(100vh - var(--hdr-h));overflow:auto;}
  .hdr-mobile-nav .m-item{margin-bottom:4px;}
  .hdr-mobile-nav .m-top{display:block;padding:12px 8px;font-size:16px;border-bottom:1px solid var(--bg1);font-weight:600;color:var(--ink);}
  .hdr-mobile-nav .m-top.is-active{color:var(--acc);}
  .hdr-mobile-nav .m-sub{display:flex;flex-direction:column;padding:4px 8px 8px;border-bottom:1px solid var(--bg1);}
  .hdr-mobile-nav .m-sub-link{padding:8px 8px 8px 20px;font-size:14px;color:var(--ink-2);border-left:2px solid var(--bg1);margin-left:6px;}
  .hdr-mobile-nav .m-sub-link:hover{color:var(--acc);}
  .hdr-mobile-nav a.is-active{color:var(--acc);}
}

/* ---------------- Hero ---------------- */
.hero{position:relative;min-height:92vh;display:flex;align-items:center;background-color:#0a0a0f;color:#fff;overflow:hidden;padding:140px 0 100px;}
/* Hero 背景图：位于 ../../public/images/tb.jpg（用户指定路径）
   缓慢推近：1 → 1.2 倍，3 秒，forwards 停在放大态；超出部分由 .hero 的 overflow:hidden 裁掉。
   ⚠️ 动画必须等开屏遮罩滑开后再启动：遮罩会盖住整个首屏约 3 秒，
      若在这里直接挂 animation，等遮罩消失时动画早已播完（只剩一张静止的放大图）。
      boot-over 由 js/boot-effect.js 在开屏退场时打到 <html> 上；无开屏时立即有该类。 */
.hero::before{position:absolute;inset:0;content:"";background-image:url('/images/tb.jpg');background-size:cover;background-position:center center;background-repeat:no-repeat;z-index:0;transform-origin:center center;will-change:transform;}
@keyframes heroBgZoom{from{transform:scale(1);}to{transform:scale(1.2);}}
html.boot-over .hero::before{animation:heroBgZoom 3s var(--ease) forwards;}
@media (prefers-reduced-motion: reduce){html.boot-over .hero::before{animation:none;}}
/* 暗色蒙版保证文字可读 */
.hero::after{position:absolute;inset:0;content:"";background:linear-gradient(180deg,rgba(10,10,15,.55) 0%,rgba(10,10,15,.35) 45%,rgba(10,10,15,.72) 100%);z-index:1;pointer-events:none;}
.hero-grid-bg{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px);background-size:64px 64px;mask-image:radial-gradient(ellipse 90% 80% at 50% 10%,#000 30%,transparent 75%);z-index:2;}
.hero-glow{position:absolute;border-radius:50%;filter:blur(110px);opacity:.5;z-index:2;}
.hero-glow.g1{width:480px;height:480px;background:#20305c;top:-160px;right:-80px;}
.hero-glow.g2{width:380px;height:380px;background:rgba(227,0,1,.26);bottom:-140px;left:8%;}
.hero-in{position:relative;z-index:2;text-align:center;width:100%;}
.hero-chip{display:inline-flex;align-items:center;gap:10px;padding:8px 18px;border:1px solid rgba(255,255,255,.16);border-radius:999px;font-size:13px;color:#C9CDD6;letter-spacing:.05em;background:rgba(255,255,255,.04);}
.hero-chip .dot{width:7px;height:7px;border-radius:50%;background:#3DDC84;box-shadow:0 0 0 4px rgba(61,220,132,.15);}
.hero h1{font-size:clamp(42px,6.4vw,78px);line-height:1.06;font-weight:700;letter-spacing:-.025em;margin:30px auto 0;max-width:1040px;}
.hero h1 .thin{font-weight:400;color:#A9AEB9;}
.hero h1 .ac{color:#FF6B62;}
.hero-sub{margin:26px auto 0;max-width:780px;color:#fff;font-size:22px;font-weight:700;line-height:1.75;letter-spacing:.01em;}
.hero-actions{display:flex;gap:16px;justify-content:center;margin-top:42px;flex-wrap:wrap;}
.hero-stats{display:flex;justify-content:center;gap:0;margin-top:64px;border-top:1px solid var(--dark-line);padding-top:36px;}
.hero-stats .hs{flex:0 0 200px;text-align:center;}
.hero-stats .hs+.hs{border-left:1px solid var(--dark-line);}
.hero-stats b{font-size:34px;font-weight:700;letter-spacing:-.02em;color:#fff;display:block;}
.hero-stats span{font-size:13px;color:#7C818D;letter-spacing:.08em;}

/* ---- Hero 轮播（2026-09-11 新增：三页 —— 公司主形象 / ZC-MSS / 一体化智能运维平台）----
   三页用 grid 叠在同一格（grid-area:1/1），容器高度自动取最高的一页，切换时不会跳动。
   非活动页 opacity:0 + pointer-events:none：透明但保留占位，且点不到里面的按钮。 */
/* 每页独立背景图，随轮播一起淡入淡出（2026-09-11 新增）
   层序：.hero::before(tb.jpg, z0) → .hero-bgs(z0，DOM 顺序在其后 → 盖在上面) → .hero::after(暗色遮罩, z1) → 内容(z2)
   只有配了图的页（.hero-bg.on）才铺图；bg 为空的页不铺，露出 .hero::before 的 tb.jpg。
   加 background-color 打底，避免带透明通道的 PNG 透出底下的 tb.jpg。 */
.hero-bgs{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none;}
.hero-bg{position:absolute;inset:0;background-color:#0a0a0f;background-size:cover;background-position:center center;background-repeat:no-repeat;opacity:0;transition:opacity .8s var(--ease);}
.hero-bg.on{opacity:1;}
.hero-slides{position:relative;z-index:2;display:grid;width:100%;}
.hero-slide{grid-area:1/1;display:flex;align-items:center;opacity:0;pointer-events:none;transition:opacity .8s var(--ease);}
.hero-slide.on{opacity:1;pointer-events:auto;}
/* 左右切换箭头：相对 .hero 定位，z-index 高于 ::before(0)/::after(1)/grid-bg·glow(2)
   用 margin-top 负值做垂直居中（不用 transform，留给 hover 的位移用） */
.hero-arrow{position:absolute;top:50%;z-index:6;width:64px;height:64px;margin-top:-32px;border-radius:50%;border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.06);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:background .3s var(--ease),border-color .3s var(--ease),transform .3s var(--ease);}
.hero-arrow:hover{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.55);}
.hero-arrow:active{transform:scale(.94);}
.hero-arrow--prev{left:36px;}
.hero-arrow--next{right:36px;}
.hero-arrow--prev:hover{transform:translateX(-4px);}
.hero-arrow--next:hover{transform:translateX(4px);}
@media (max-width:900px){
  .hero-arrow{width:52px;height:52px;margin-top:-26px;}
  .hero-arrow--prev{left:14px;}
  .hero-arrow--next{right:14px;}
}
@media (max-width:560px){
  .hero-arrow{width:44px;height:44px;margin-top:-22px;}
  .hero-arrow--prev{left:8px;}
  .hero-arrow--next{right:8px;}
}
.hline-chars{display:inline-block;overflow:hidden;vertical-align:top;}
.hline-chars i{display:inline-block;transform:translateY(110%);animation:charUp .8s var(--ease) forwards;}
@keyframes charUp{to{transform:translateY(0);}}
/* Hero 逐字入场 */
.hero h1 .hr{display:block;}
.hero h1 .c{display:inline-block;overflow:hidden;vertical-align:bottom;padding:.02em 0;}
.hero h1 .c i{display:block;transform:translateY(125%);animation:charUp .85s var(--ease) forwards;font-style:normal;letter-spacing:-.02em;}
.hero h1 .c i.thin{color:#A9AEB9;font-weight:300;}
.hero h1 .c i.ac{color:#FF6B62;}
@media(max-width:900px){
  .hero-stats .hs{flex:1;}
  .hero{padding-top:110px;}
}

/* ---------------- Marquee ticker ---------------- */
.ticker{overflow:hidden;background:#fff;border-bottom:1px solid var(--line);padding:15px 0;white-space:nowrap;}
.ticker-track{display:inline-flex;align-items:center;animation:tick 26s linear infinite;}
.ticker:hover .ticker-track{animation-play-state:paused;}
.ticker-track span{display:inline-flex;align-items:center;font-size:14.5px;color:var(--ink-2);font-weight:500;letter-spacing:.08em;}
.ticker-track i{width:5px;height:5px;border-radius:50%;background:var(--acc);margin:0 26px;flex-shrink:0;}
@keyframes tick{to{transform:translateX(-50%);}}

/* ---------------- Sections ---------------- */
.sec{padding:104px 0;}
.sec--tint{background:var(--bg1);}
/* 首页「更多入口」区块的背景图（2026-09-16 按用户要求换成 images/xkjs.png）。
   ⚠️ 故意做成**只挂这一个区块**的 .sec--more，没有写进 .sec--tint：
      .sec--tint 还被 ZCMSSPage / YWPage / FeaturePanel 用着，改公共类会连带影响那些页面。
   ⚠️ 图片路径用绝对 /images/ 与 .hero::before 的 /images/tb.jpg 保持一致
      ⇒ 需要在 public/images/ 与 public/vue-app/images/ 各放一份（两个入口 docroot 不同）。 */
.sec--more{background-image:url('/images/xkjs.png');background-size:cover;background-position:center center;background-repeat:no-repeat;}
/* 同一区块：头图是深色照片，原来的深色字压上去对比度只剩 1.87:1（手机 1.18:1），几乎看不见
   ⇒ 2026-09-16 按用户要求把这块标题区文字改浅色（与 .sec--star.on 同一套取值）。 */
.sec--more .sec-head .sec-title{color:#fff;}
.sec--more .sec-head .sec-sub{color:rgba(255,255,255,.7);}
.sec--more .sec-head .tag{color:rgba(255,255,255,.6);}
.sec-head{max-width:720px;margin-bottom:58px;}
.sec-head.center{margin-left:auto;margin-right:auto;text-align:center;}
.tag{display:inline-flex;align-items:center;gap:9px;font-size:12.5px;font-weight:700;letter-spacing:.3em;text-transform:uppercase;color:var(--mute);}
.tag::before{content:"";width:9px;height:9px;border-radius:2.5px;background:var(--acc);}
.sec-head.center .tag::after{content:"";width:9px;height:9px;border-radius:2.5px;background:var(--acc);}
.sec-head.center .tag::before{display:none;}
.sec-title{font-size:clamp(30px,3.6vw,44px);font-weight:700;letter-spacing:-.02em;line-height:1.2;margin-top:16px;color:var(--ink);}
.sec-sub{margin-top:16px;color:var(--ink-2);font-size:16.5px;max-width:560px;}
.sec-head.center .sec-sub{margin-left:auto;margin-right:auto;}
/* ---------------- 首页新闻区：星空粒子背景（2026-09-16 新增，同日【已停用】） ----------------
   ⚠️ 2026-09-16 按用户要求把粒子特效从新闻区移除 ⇒ 由 NewsPanel.js 里的 ENABLE_STAR_BG 常量控制，
      现在置为 false，模板上的 sec--star / on 类与 .star-bg 层都不会再渲染。
   **样式全部保留未删**（项目一贯做法，同 .foot-links）：把 ENABLE_STAR_BG 改回 true 即整套恢复。
   插件 jquery-warpdrive（example1 那套特效）往 .star-bg 里塞一个 canvas，自己绘黑底星海。
   ⚠️ section 要 position:relative + overflow:hidden：
     ① 给背景层定位；② 顺带把两栏「向中间汇聚」的动画（translateX ±100%）裁在本区块内，
        滑入过程中不会盖到上面的跑马灯。 */
.sec--star{position:relative;overflow:hidden;}
/* ⚠️ 2026-09-16：新闻区两栏「向中间汇聚」的入场动画（translateX ±100%）**必须在本区块内裁掉**，
   否则动画跑的 1 秒里整页会出现 610px 横向溢出（冒横向滚动条）。
   这个裁剪原来顺带挂在 .sec--star 上，粒子特效停用之后 .sec--star 不再渲染 ⇒ 会把裁剪一起带走，
   所以独立成 .sec--clip 常挂在新闻区 section 上（与粒子开关无关）。
   实测：无裁剪 → 横向溢出 610px；有裁剪 → 0。 */
.sec--clip{position:relative;overflow:hidden;}
.sec--star .star-bg{position:absolute;inset:0;z-index:0;}
.sec--star .star-bg canvas{display:block;width:100%;height:100%;}
.sec--star > .shell{position:relative;z-index:1;}
/* ⚠️ 黑底 + 浅色字**只挂在 .on 上**，由 JS 在星空真正画出来之后保留（见 NewsPanel.js 的 setDark）。
   原来直接把 #000 写在 .sec--star 上，一旦插件没加载成功（例如脚本路径 404），
   整个新闻区就变成一片什么都没有的纯黑——踩过一次，别再改回去。 */
.sec--star.on{background:#000;}
.sec--star.on .sec-head .sec-title{color:#fff;}
.sec--star.on .sec-head .sec-sub{color:rgba(255,255,255,.66);}
.sec--star.on .sec-head .tag{color:rgba(255,255,255,.58);}
.sec-foot{display:flex;align-items:center;gap:26px;margin-top:44px;border-top:1px solid var(--line);padding-top:26px;color:var(--mute);font-size:14px;}
.sec-foot .lf{flex:1;letter-spacing:.05em;}

/* numbered mini-head */
.mh{display:flex;align-items:baseline;gap:14px;}
.mh .no{font-size:13px;font-weight:700;color:var(--acc);letter-spacing:.1em;font-variant-numeric:tabular-nums;}
.mh h3{font-size:19px;font-weight:700;letter-spacing:-.01em;}

/* ---------------- Biz Grid ---------------- */
.biz-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
.biz{position:relative;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:34px 26px 30px;overflow:hidden;transition:transform .5s var(--ease),border-color .3s,box-shadow .5s var(--ease);cursor:pointer;}
.biz:hover{transform:translateY(-6px);border-color:var(--line-2);box-shadow:var(--sh-lg);}
.biz .b-no{position:absolute;top:16px;right:22px;font-size:44px;font-weight:800;line-height:1;color:transparent;-webkit-text-stroke:1px #E7E8EC;transition:.4s;}
.biz:hover .b-no{color:var(--acc-soft);-webkit-text-stroke:1px transparent;}
.biz .b-ic{width:48px;height:48px;border-radius:13px;background:var(--bg1);display:flex;align-items:center;justify-content:center;color:var(--ink);transition:.4s var(--ease);}
.biz:hover .b-ic{background:var(--dark);color:#fff;transform:rotate(-6deg) scale(1.06);}
.biz h4{font-size:18.5px;font-weight:700;margin-top:22px;letter-spacing:-.01em;}
.biz .en{font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute);margin-top:3px;font-weight:600;}
.biz p{font-size:14px;color:var(--ink-2);margin-top:12px;line-height:1.65;}
.biz .go{display:inline-flex;align-items:center;gap:6px;margin-top:18px;font-size:13.5px;font-weight:600;color:var(--ink-2);transition:color .25s;}
.biz:hover .go{color:var(--acc);}
.biz .go svg{transition:transform .3s var(--ease);}
.biz:hover .go svg{transform:translateX(4px);}

/* ========================================================================
   主营业务四卡 · 复刻老站 zckjyxgs.com 的 section.busi
   ------------------------------------------------------------------------
   爬取来源（2026-09-10）：
     结构  老站首页  <section class="busi"><ul><li><a><div class="buisItem">
     样式  老站 /static/hs/css/style.css 第 128-151 行
     动画  老站 /static/hs/css/animate.css 的 fadeInUp / fadeInDown
     图标  /static/hs/images/icon04(解决方案) icon03(产品中心) icon05(技术服务)
   背景色：首卡 #FFF（深字）｜解决方案 #426fdb ｜产品中心 #0cb452 ｜技术服务 #f8b026
   悬停：图片 rotateZ(180deg) 0.5s linear；标题 fadeInDown 0.5s；副标题 fadeInUp 0.5s
   使用方法：<BusiCards/> 组件（js/components/BusiCards.js）
   ======================================================================== */
.busi-wrap{padding:2.5% 0 96px;}
.busi{width:100%;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;align-items:stretch;}
.busi > li{width:23.5%;}
.busi > li > a{display:block;width:100%;height:0;padding-top:40%;position:relative;}
.busi > li > a > .buisItem{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;align-items:center;box-sizing:border-box;padding:10px 10px 10px 20px;}
.busi .biTitle{width:100%;}
.busi .biTitle h3,.busi .biTitle p{width:100%;margin:0;font-weight:400;color:#FFF;line-height:1.5;font-size:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.busi .biTitle p{font-size:16px;text-transform:capitalize;}
.busi .biIcon{width:30%;flex-shrink:0;margin-left:10px;overflow:hidden;}
.busi .biIcon img{display:block;width:100%;transition:all .5s linear;}
/* 各卡背景色（按老站 :nth-of-type 顺序） */
.busi .bus-0 > a{background-color:#FFF;}
.busi .bus-1 > a{background-color:#426fdb;}
.busi .bus-2 > a{background-color:#0cb452;}
.busi .bus-3 > a{background-color:#f8b026;}
/* 首卡（主营业务）深色字、无图标、不参与文字动画 */
.busi .bus-0 .biTitle h3,.busi .bus-0 .biTitle p{color:#333;}
.busi .bus-0 > a > .buisItem{padding:10px 0;}
.busi .bus-0 .biTitle{align-self:flex-start;}
.busi .bus-0 .biTitle h3{font-weight:550;font-size:24px;}
.busi .bus-0 .biTitle p{font-size:16px;color:#999;}
/* 悬停动画 —— 与老站一致 */
.busi > li > a:hover .biIcon img{transform:rotateZ(180deg);-webkit-transform:rotateZ(180deg);}
.busi > li > a:hover .biTitle p{animation:fadeInUp .5s ease-in-out;-webkit-animation:fadeInUp .5s ease-in-out;}
.busi > li > a:hover .biTitle h3{animation:fadeInDown .5s ease-in-out;-webkit-animation:fadeInDown .5s ease-in-out;}
.busi .bus-0 > a:hover .biTitle p,.busi .bus-0 > a:hover .biTitle h3{animation:none;-webkit-animation:none;}
/* 关键帧 · 取自老站 animate.css */
@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0);}100%{opacity:1;transform:none;}}
@keyframes fadeInDown{0%{opacity:0;transform:translate3d(0,-100%,0);}100%{opacity:1;transform:none;}}
/* 响应式 · 对齐老站 media.css 断点 */
@media(max-width:768px){
  .busi{flex-wrap:wrap;}
  .busi > li{width:50%;}
  .busi > li > a{padding-top:50%;}
  .busi .biTitle h3{font-size:20px;}
  .busi .biTitle p{font-size:16px;}
  .busi .bus-0 .biTitle h3{font-size:24px;}
}
@media(max-width:640px){
  .busi .biTitle h3,.busi .bus-0 .biTitle h3{font-size:16px;}
  .busi .biTitle p,.busi .bus-0 .biTitle p{font-size:14px;}
}

/* ---------------- Feature (product) ---------------- */
.feat{border-radius:var(--r-lg);background:var(--dark);color:#fff;position:relative;overflow:hidden;padding:76px 70px;}
.feat .fgrid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.03) 1px,transparent 1px);background-size:44px 44px;mask-image:radial-gradient(ellipse at 85% 20%,#000,transparent 60%);}
.feat-wrap{position:relative;z-index:2;display:grid;grid-template-columns:1.05fr .95fr;gap:60px;align-items:center;}
.feat .tag{color:#8E93A0;}
.feat .tag::before{background:#fff;}
.feat h3{font-size:clamp(28px,3vw,40px);font-weight:700;letter-spacing:-.02em;line-height:1.22;margin-top:18px;}
.feat h3 .soft{color:#6F7581;font-weight:400;}
.feat p.desc{margin-top:20px;color:#A9AEB9;font-size:16px;line-height:1.85;}
.feat ul.f-list{margin-top:30px;display:grid;grid-template-columns:1fr 1fr;gap:13px 26px;}
.feat ul.f-list li{display:flex;align-items:center;gap:11px;color:#D8DAE0;font-size:15px;}
.feat ul.f-list li i{width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.1);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;}
.feat ul.f-list li i::after{content:"";width:7px;height:4px;border-left:1.8px solid #fff;border-bottom:1.8px solid #fff;transform:rotate(-45deg) translateY(-1px);}
.feat-actions{display:flex;gap:14px;margin-top:38px;}
.feat-visual{border:1px solid var(--dark-line);border-radius:22px;background:linear-gradient(160deg,rgba(255,255,255,.05),rgba(255,255,255,.015));padding:26px;backdrop-filter:blur(4px);}
.fv-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;}
.fv-head b{font-size:13px;font-weight:600;color:#B7BBC6;letter-spacing:.06em;}
.fv-head .live{display:inline-flex;align-items:center;gap:7px;font-size:11px;color:#3DDC84;letter-spacing:.1em;}
.fv-head .live i{width:7px;height:7px;border-radius:50%;background:#3DDC84;animation:pulse 1.6s infinite;}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(61,220,132,.4)}50%{box-shadow:0 0 0 7px rgba(61,220,132,0)}}
.fv-bars{display:flex;gap:6px;align-items:flex-end;height:110px;margin-bottom:8px;}
.fv-bars i{flex:1;border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,.12));animation:bars 2.4s var(--ease) infinite;transform-origin:bottom;}
.fv-bars i:nth-child(odd){animation-delay:.4s;}
@keyframes bars{0%,100%{transform:scaleY(.5)}50%{transform:scaleY(1)}}
.fv-meta{display:flex;justify-content:space-between;font-size:11px;color:#6F7581;letter-spacing:.08em;}
.fv-rows{margin-top:18px;display:flex;flex-direction:column;gap:11px;}
.fv-row{display:flex;align-items:center;gap:12px;font-size:13px;color:#C6CAD3;}
.fv-row .bar{flex:1;height:6px;border-radius:6px;background:rgba(255,255,255,.08);overflow:hidden;}
.fv-row .bar i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,#fff,#8B93FF 120%);transform-origin:left;animation:fill 2s var(--ease) forwards;}
@keyframes fill{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.fv-row b{font-weight:600;width:52px;text-align:right;font-variant-numeric:tabular-nums;}
@media(max-width:960px){
  .feat-wrap{grid-template-columns:1fr;gap:40px;}
  .feat{padding:52px 26px;}
}

/* ---------------- News ---------------- */
.news-layout{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
.news-card{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;transition:transform .5s var(--ease),box-shadow .5s var(--ease),border-color .3s;cursor:pointer;}
.news-card:hover{transform:translateY(-6px);box-shadow:var(--sh-lg);border-color:var(--line-2);}
.nc-thumb{aspect-ratio:16/10;overflow:hidden;background:var(--bg1);position:relative;}
.nc-thumb .cover{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:space-between;padding:14px 16px;}
.nc-thumb .cover .big{font-size:30px;font-weight:800;letter-spacing:-.02em;color:rgba(255,255,255,.9);line-height:1;}
.nc-thumb .cover .big small{display:block;font-size:13px;font-weight:500;opacity:.75;letter-spacing:.14em;}
.nc-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease);}
.news-card:hover .nc-thumb img{transform:scale(1.07);}
/* 头条配图：news.png 铺满 + 底部遮罩保证日期/标签可读 + hover 放大 1 倍（2x）后恢复 */
.nc-thumb .nc-bgimg{position:absolute;inset:0;z-index:0;object-fit:cover;}
.nc-thumb .nc-shade{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(8,10,18,.02) 0%,rgba(8,10,18,.05) 42%,rgba(8,10,18,.68) 100%);}
.nc-thumb .cover{z-index:2;background:transparent;}
.nc-thumb .cover .big{text-shadow:0 2px 16px rgba(0,0,0,.55);}
.news-card:hover .nc-thumb .nc-bgimg{transform:scale(2);}
.nc-body{padding:22px 22px 20px;display:flex;flex-direction:column;gap:10px;flex:1;}
.nc-body .cate{font-size:11.5px;font-weight:700;letter-spacing:.22em;color:var(--acc);text-transform:uppercase;}
.nc-body h4{font-size:17px;font-weight:700;line-height:1.45;letter-spacing:-.01em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.nc-body p{font-size:13.5px;color:var(--mute);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.nc-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;color:var(--mute);font-size:12.5px;letter-spacing:.04em;border-top:1px solid var(--bg1);padding-top:13px;margin-top:6px;}
.news-list-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:10px 22px 22px;}
.nl-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:6px;position:sticky;top:-1px;background:var(--card);border-radius:var(--r) var(--r) 0 0;z-index:3;}
.nl-tabs button{position:relative;padding:18px 4px;margin-right:26px;font-size:15px;font-weight:600;color:var(--mute);transition:color .25s;}
.nl-tabs button::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--ink);transform:scaleX(0);transition:transform .4s var(--ease);}
.nl-tabs button.on{color:var(--ink);}
.nl-tabs button.on::after{transform:scaleX(1);}
.nl-list li{display:flex;align-items:center;gap:22px;padding:15px 4px;border-bottom:1px solid var(--bg1);transition:transform .35s var(--ease),padding-left .35s var(--ease);}
.nl-list li:last-child{border-bottom:none;}
.nl-list li:hover{padding-left:10px;}
.nl-list .d{color:var(--mute);font-size:13px;letter-spacing:.04em;flex-shrink:0;font-variant-numeric:tabular-nums;width:78px;}
.nl-list a{flex:1;font-size:15px;color:var(--ink-2);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;transition:color .25s;}
.nl-list li:hover a{color:var(--acc);}
.nl-list .arr{color:var(--line-2);transition:color .25s,transform .3s var(--ease);}
.nl-list li:hover .arr{color:var(--acc);transform:translateX(3px);}

/* ---------------- Mosaic (info) —— ⚠️ 已停用（2026-09-11）----------------
   首页「更多入口」已改用旧站的 .card 布局（见下方「Card（首页「更多入口」四卡）」区块）。
   以下 .mosaic / .mo / .m-* 规则当前无任何引用，仅作回退备份保留；确认不再需要时可整块删除。 */
.mosaic{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
/* 通栏（full-bleed）：让马赛克突破 .shell 的 1200px 限宽，撑满整个浏览器宽度。
   原理：50% 取父内容盒（.shell）宽度的一半，50vw 取视口宽度的一半，两者相减
   即为「从 .shell 内容区向外拉回屏幕边缘」所需偏移量——
     视口 >1200px 时：把两侧空白抹掉，贴到屏幕左右边缘；
     视口 ≤1200px 时：自动补偿 .shell 的 28px 内边距，同样精确贴边。
   下面两行的 width/margin 是唯一改动。内部的 .mo 为 grid 的 1fr（等分自适应），
   图片 .m-img 为 width:100%;height:100%;object-fit:cover（铺满容器自适应），
   二者本身已是自适应，会随外层宽度自动变宽，无需改动。
   body 已有的 overflow-x:hidden 可吸收 100vw 含滚动条宽度的差异，不会产生横向滚动条。 */
.mosaic{width:100vw;margin-left:calc(50% - 50vw);}
.mo{position:relative;border-radius:var(--r);overflow:hidden;aspect-ratio:3/4;cursor:pointer;border:1px solid var(--line);}
.mo .m-bg{position:absolute;inset:0;transition:transform .9s var(--ease);}
.mo .m-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .9s var(--ease);}
.mo:hover .m-bg{transform:scale(1.07);}
.mo:hover .m-img{transform:scale(1.07);}
.mo .m-shade{position:absolute;inset:0;background:linear-gradient(180deg,transparent 42%,rgba(10,11,14,.82));transition:opacity .4s;}
.mo .m-txt{position:absolute;left:22px;right:22px;bottom:20px;color:#fff;z-index:2;}
.mo .m-txt .en{font-size:10.5px;letter-spacing:.26em;text-transform:uppercase;opacity:.66;font-weight:600;}
.mo .m-txt b{display:block;font-size:21px;font-weight:700;margin-top:6px;letter-spacing:-.01em;}
.mo .m-go{position:absolute;top:18px;right:18px;width:36px;height:36px;border-radius:50%;background:rgba(255,255,255,.16);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;color:#fff;opacity:0;transform:translateY(-8px);transition:.4s var(--ease);}
.mo:hover .m-go{opacity:1;transform:translateY(0);}

/* ---------------- Card（首页「更多入口」四卡）----------------
   2026-09-11：1:1 复刻旧站首页底部 <section class="card"> 的布局与样式。
   样式来源：旧站 /static/hs/css/style.css 的 .card 系列规则 + /static/hs/css/media.css 的响应式断点。
   结构：.card > ul(flex + space-between) > li(25%) > a > .cardImg（图，padding-top:52% 定高）
                                                        + .cardTitle（绝对定位覆盖整块，白字叠在图上）
   与旧站的差异：① 卡片直接放在 <section class="sec"> 下、不再用 .shell 包裹，天然全宽（旧站本身就是全宽）；
                ② 链接由 /gb2312/... 物理页改为本地 hash 路由；③ 图片路径改到 assets/img/。
   注：图片按旧站原样用 object-fit:fill（原图 627×250，撑进 1:0.52 的框会有纵向拉伸）。
       若不想拉伸，把下面 img 那条规则改成 object-fit:cover 即可（会改为上下裁切）。 */
.card{width:100%;height:auto;min-width:320px;}
.card > ul{width:100%;height:auto;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;align-items:center;}
.card > ul > li{width:25%;height:auto;position:relative;}
.card > ul > li > a{display:block;width:100%;}
.card > ul > li > a > .cardImg{width:100%;height:0;padding-top:52%;position:relative;overflow:hidden;}
.card > ul > li > a > .cardImg > img{width:100%;height:100%;position:absolute;left:0;top:0;object-fit:fill;transition:all .5s linear;-webkit-transition:all .5s linear;}
.card > ul > li > a > .cardTitle{width:100%;height:100%;position:absolute;left:0;top:0;box-sizing:border-box;padding:8%;display:flex;flex-direction:column;flex-wrap:nowrap;}
.card > ul > li > a > .cardTitle > h3,.card > ul > li > a > .cardTitle > p{width:100%;height:auto;line-height:1.6;text-align:left;font-weight:normal;font-size:18px;color:#FFF;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;}
.card > ul > li > a > .cardTitle > h3{text-transform:uppercase;}
.card > ul > li > a:hover > .cardImg > img{transform:scale(1.02,1.02);-webkit-transform:scale(1.02,1.02);}
.card > ul > li > a:hover > .cardTitle > p{animation:fadeInUp .5s ease-in-out;-webkit-animation:fadeInUp .5s ease-in-out;}
.card > ul > li > a:hover > .cardTitle > h3{animation:fadeInDown .5s ease-in-out;-webkit-animation:fadeInDown .5s ease-in-out;}
@media (max-width:992px){
  .card > ul > li > a > .cardTitle > h3,.card > ul > li > a > .cardTitle > p{font-size:16px;}
}
@media (max-width:768px){
  .card > ul{flex-wrap:wrap;}
  .card > ul > li{width:50%;}
}
@media (max-width:375px){
  .card > ul > li{width:100%;}
}

/* ---------------- Honors strip ---------------- */
.honors{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;}
/* 2026-09-16 按用户要求：资质荣誉条每一项鼠标移入显示小手（cursor:pointer） */
.honor{display:inline-flex;align-items:center;gap:10px;padding:13px 22px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:14px;font-weight:600;color:var(--ink-2);transition:.35s var(--ease);cursor:pointer;}
.honor:hover{border-color:var(--ink);color:var(--ink);transform:translateY(-3px);box-shadow:var(--sh);}
.honor i{width:8px;height:8px;border-radius:3px;background:var(--acc);}

/* ---------------- Footer ---------------- */
.foot{background:var(--dark);color:#9A9EA9;margin-top:0;}
.foot-cta{background:linear-gradient(150deg,var(--dark-2),var(--dark));border-bottom:1px solid var(--dark-line);}
/* 2026-09-11 按用户要求：本区块总高在原基础上减半（1440 下实测 222px → 111px）。
   内容区为固定 81px（h3 45 + p 26 + p 的 margin-top 10），故只压内边距：70px → 15px，
   即 15×2 + 81 = 111px。 */
.foot-cta .shell{display:flex;align-items:center;justify-content:space-between;gap:30px;padding-top:15px;padding-bottom:15px;flex-wrap:wrap;}
.foot-cta h3{color:#fff;font-size:clamp(24px,3vw,36px);font-weight:700;letter-spacing:-.02em;line-height:1.25;}
.foot-cta p{color:#7C818D;margin-top:10px;}

/* ---- 友情链接横条 —— ⚠️ 已停用（2026-09-11）----
   按用户要求，页脚的 .foot-links 容器已删除（AppFooter.js 里对应模板结构与 flinks 取数逻辑一并移除）。
   以下规则当前无引用，仅作回退备份保留；确认不再需要时可整块删除。
   原数据来自后台「友情链接」管理 → 接口 /api/flink?type=3
   厂家名称 + 跳转链接横向平铺，超出自动换行 */
.foot-links{border-top:1px solid var(--dark-line);}
.foot-links-in{display:flex;align-items:baseline;gap:22px;padding-top:26px;padding-bottom:26px;}
.fl-label{flex-shrink:0;font-size:13px;font-weight:600;color:#fff;letter-spacing:.1em;}
.fl-list{display:flex;flex-wrap:wrap;align-items:baseline;gap:12px 34px;flex:1;}
.fl-list a{font-size:13.5px;color:#8B8F99;letter-spacing:.02em;transition:color .25s var(--ease);}
.fl-list a:hover{color:#fff;}

.foot-main{display:grid;grid-template-columns:1.5fr 1fr 1fr 1.3fr;gap:56px;padding:70px 28px 46px;max-width:1200px;margin:0 auto;}
.foot h5{color:#fff;font-size:15px;font-weight:600;letter-spacing:.06em;margin-bottom:20px;}
.foot ul li{margin-bottom:11px;}
.foot ul a{font-size:14.5px;color:#8B8F99;transition:color .25s,padding-left .3s var(--ease);}
.foot ul a:hover{color:#fff;padding-left:6px;}
.foot .fb-txt{margin-top:22px;font-size:14px;color:#7C818D;line-height:1.9;max-width:340px;}
.foot .fb-contact li{display:flex;align-items:flex-start;gap:12px;font-size:14px;color:#8B8F99;}
.foot .fb-contact svg{flex-shrink:0;color:#5A5E69;margin-top:4px;}
/* ---------------- 联系方式里的「微信」：hover / focus 弹出二维码（2026-09-16 新增） ----------------
   图标是纯矢量 path（两个气泡 + 挖空的眼睛，眼睛用页脚底色填充），不依赖任何图标字体或位图。
   弹层 .fb-qr 包着 .fb-qr-in：外层带 padding-bottom，既作视觉间距、也是 hover 热区，
   这样鼠标从图标上移到二维码的途中不会"断触"导致面板闪退。 */
.foot .fb-contact .fb-wechat{position:relative;cursor:pointer;outline:none;}
.foot .fb-contact .fb-wechat .eye{fill:var(--dark);}          /* 眼睛挖空 = 页脚底色 */
.foot .fb-contact .fb-wechat:hover{color:#fff;}
.foot .fb-contact .fb-wechat:hover svg{color:#12B558;}        /* 微信绿提亮 */
.foot .fb-contact .fb-qr{
  position:absolute;left:0;bottom:100%;width:158px;padding-bottom:16px;
  opacity:0;visibility:hidden;pointer-events:none;z-index:30;
  transform:translate(0,8px);
  transition:opacity .3s var(--ease),transform .3s var(--ease),visibility .3s;
}
.foot .fb-contact .fb-wechat:hover .fb-qr,
.foot .fb-contact .fb-wechat:focus .fb-qr,
.foot .fb-contact .fb-wechat:focus-within .fb-qr{
  opacity:1;visibility:visible;pointer-events:auto;transform:translate(0,0);
}
.foot .fb-contact .fb-qr-in{
  position:relative;background:#fff;border-radius:14px;padding:10px 10px 8px;
  box-shadow:0 20px 44px -18px rgba(0,0,0,.55);
}
.foot .fb-contact .fb-qr-in::after{
  content:"";position:absolute;left:8px;bottom:-6px;width:12px;height:12px;
  background:#fff;transform:translateX(-50%) rotate(45deg);border-radius:2px;
}
.foot .fb-contact .fb-qr img{display:block;width:100%;height:auto;border-radius:8px;}
.foot .fb-contact .fb-qr em{
  display:block;margin-top:7px;font-style:normal;font-size:11.5px;
  color:#6B6F79;text-align:center;letter-spacing:.04em;white-space:nowrap;
}
.foot-bottom{border-top:1px solid var(--dark-line);}
.foot-bottom .shell{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-top:24px;padding-bottom:24px;font-size:13px;color:#646977;letter-spacing:.03em;}
.foot-bottom a{color:#8B8F99;}
.foot-bottom a:hover{color:#fff;}
.foot .logo-line{display:flex;align-items:center;gap:12px;}
.foot .logo-line .hdr-mark{width:44px;height:44px;border-radius:12px;}
.foot .logo-line b{color:#fff;font-size:20px;letter-spacing:.08em;font-weight:700;display:block;line-height:1.1;}
.foot .logo-line span{font-size:10px;letter-spacing:.3em;color:#646977;text-transform:uppercase;}
/* 点击"电话咨询"后：按钮文字直接变为高亮号码（无浮层/弹窗） */
/* ---- 电话咨询按钮：点击显示号码，再点收起 ----
   组件结构：<button class="btn btn--light tel-btn"> 内含 .tel-label（电话咨询）与 .tel-num（号码）两个 span
   显隐完全由下面的 CSS 控制（.is-open 切换），不用 <a href="tel:">，因此不会弹系统拨号框，也没有任何弹层 */
.tel-btn .tel-num{display:none;}
.tel-btn.is-open .tel-label{display:none;}
.tel-btn.is-open .tel-num{display:inline;}
.foot-cta .tel-btn.is-open{color:var(--acc);font-weight:800;font-size:17px;letter-spacing:.03em;font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 2px var(--acc);}
@media (max-width:640px){.foot-cta .tel-btn.is-open{font-size:15px;padding:0 14px;}}

/* ---------------- Page header (inner) ---------------- */
.page-hero{padding:150px 0 60px;background:var(--bg1);border-bottom:1px solid var(--line);}
.page-hero .crumb{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--mute);margin-top:14px;letter-spacing:.04em;}
.page-hero .crumb a:hover{color:var(--acc);}
.page-hero .crumb i{font-style:normal;}
.page-hero h1{font-size:clamp(30px,3.4vw,42px);font-weight:700;letter-spacing:-.02em;margin-top:12px;}

/* ---------------- Article grid / list / detail ---------------- */
.art-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;padding:64px 0 20px;}
.art{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;cursor:pointer;transition:transform .5s var(--ease),box-shadow .5s var(--ease);}
.art:hover{transform:translateY(-6px);box-shadow:var(--sh-lg);}
.art .a-thumb{aspect-ratio:16/10;overflow:hidden;position:relative;}
.art .a-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease);}
.art:hover .a-thumb img{transform:scale(1.06);}
.art .a-body{padding:20px 22px 22px;}
.art .a-body h3{font-size:17px;line-height:1.5;font-weight:700;letter-spacing:-.01em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;transition:color .25s;}
.art:hover .a-body h3{color:var(--acc);}
.art .a-meta{display:flex;gap:16px;margin-top:12px;color:var(--mute);font-size:12.5px;letter-spacing:.05em;}
.pager{display:flex;justify-content:center;align-items:center;gap:8px;padding:40px 0 90px;}
.pager button{min-width:42px;height:42px;padding:0 14px;border:1px solid var(--line-2);border-radius:12px;background:#fff;color:var(--ink-2);font-size:14px;font-weight:600;transition:.25s;display:inline-flex;align-items:center;justify-content:center;}
.pager button:hover:not(:disabled){border-color:var(--ink);color:var(--ink);transform:translateY(-2px);}
.pager button.on{background:var(--dark);border-color:var(--dark);color:#fff;}
.pager button:disabled{opacity:.4;cursor:not-allowed;}
.detail{max-width:820px;margin:0 auto;padding:64px 28px 100px;}
.detail h1{font-size:clamp(26px,3vw,38px);font-weight:700;letter-spacing:-.02em;line-height:1.35;}
.detail .d-meta{display:flex;gap:22px;margin:22px 0 10px;color:var(--mute);font-size:13.5px;letter-spacing:.04em;padding-bottom:26px;border-bottom:1px solid var(--line);}
.detail-body{margin-top:34px;font-size:16.5px;line-height:2;color:var(--ink-2);}
.detail-body img{max-width:100%;border-radius:14px;margin:18px 0;}
.detail-body video{display:block;max-width:100%;height:auto;margin:24px auto;border-radius:14px;box-shadow:var(--sh-lg);background:#000;}
.detail-body h2,.detail-body h3{margin:26px 0 10px;color:var(--ink);letter-spacing:-.01em;}
.detail-body p{margin:14px 0;}
.search-result{border-bottom:1px solid var(--line);padding:26px 4px;cursor:pointer;transition:padding-left .35s var(--ease);}
.search-result:hover{padding-left:12px;}
.search-result h3{font-size:19px;font-weight:700;letter-spacing:-.01em;transition:color .25s;}
.search-result:hover h3{color:var(--acc);}
.search-result .d{color:var(--mute);font-size:13px;margin-top:8px;letter-spacing:.05em;}
.search-result p{color:var(--ink-2);font-size:14.5px;margin-top:10px;line-height:1.8;}

/* ---------------- State blocks ---------------- */
.state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:90px 0;color:var(--mute);}
.state .st-ic{width:64px;height:64px;border-radius:20px;background:var(--bg1);display:flex;align-items:center;justify-content:center;}
.state b{color:var(--ink-2);font-weight:600;font-size:15px;}

/* Skeleton */
.sk{position:relative;overflow:hidden;background:#EFF0F3;border-radius:10px;}
.sk::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.7) 50%,transparent 70%);animation:sk 1.5s infinite;}
@keyframes sk{from{transform:translateX(-100%);}to{transform:translateX(100%);}}
.sk-block{display:flex;flex-direction:column;gap:14px;}
.sk-line{height:14px;border-radius:7px;}
.sk-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:22px;}

/* ---------------- Reveal / animation helpers ---------------- */
.rv{opacity:0;transform:translateY(26px);transition:opacity .9s var(--ease),transform .9s var(--ease);}
.rv.in{opacity:1;transform:none;}
/* ⚠️ 2026-09-15 修复「滑入后回不正」的定位错位：
   下面这些规则原本会盖掉 .rv.in{transform:none}（[data-dr] 让它们的特异性/书写顺序胜出），
   于是元素加上 in 类、opacity 已淡入，**但位移被永久钉住** ——
   首页新闻卡左移 56px、右侧列表右移 56px（.sec-head 与 .nc-thumb 左边对不齐就是这个），
   栏目页左右栏同理偏移 40px。
   加 :not(.in) 后，进入 in 状态即不再匹配，动画结束自动回到原位。 */
.rv[data-dr="l"]:not(.in){transform:translateX(-30px);}
.rv[data-dr="r"]:not(.in){transform:translateX(30px);}
.rv[data-dr="s"]:not(.in){transform:scale(.94);}

/* 新闻中心：左右容器左右渐入 1s（位移加大更明显） */
/* 2026-09-16 按用户要求：首页新闻区两栏改成「从两侧向中间汇聚」，
   对齐老站首页（`/gb2312/`）那个左图片栏 `.f2Flash wow fadeInRight`
   + 右内容栏 `.news wow fadeInLeft`（animate.css）的入场效果。
   老站参数：`translate3d(±100%,0,0)` → `none`，时长 1s，wow-delay .8s；
   原来这里只有 ±56px，位移太小、几乎看不出来，现改为 100%（= 各自整栏宽度）。 */
.news-layout .rv[data-dr="l"]:not(.in){transform:translateX(-100%);}
.news-layout .rv[data-dr="r"]:not(.in){transform:translateX(100%);}
.news-layout .rv[data-dr="l"],.news-layout .rv[data-dr="r"]{transition:opacity 1s var(--ease),transform 1s var(--ease);}

/* Back to top */
.backtop{position:fixed;right:26px;bottom:30px;z-index:150;width:48px;height:48px;border-radius:50%;background:var(--dark);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 10px 24px -8px rgba(15,17,21,.5);opacity:0;visibility:hidden;transform:translateY(12px);transition:.4s var(--ease);}
.backtop.show{opacity:1;visibility:visible;transform:none;}
.backtop:hover{background:var(--acc);transform:translateY(-3px);}
.backtop svg{transition:transform .3s var(--ease);}
.backtop:hover svg{transform:translateY(-2px);}

/* Router transitions */
.page-enter-active{transition:opacity .5s var(--ease),transform .5s var(--ease);}
.page-leave-active{transition:opacity .22s ease,transform .22s ease;}
.page-enter-from{opacity:0;transform:translateY(16px);}
.page-leave-to{opacity:0;transform:translateY(-8px);}

@media(max-width:1080px){
  .biz-grid,.mosaic,.news-layout{grid-template-columns:repeat(2,1fr);}
  .art-grid{grid-template-columns:repeat(2,1fr);}
}
@media(max-width:680px){
  .biz-grid,.mosaic,.news-layout,.art-grid{grid-template-columns:1fr;}
  .foot-main{grid-template-columns:1fr;gap:34px;}
  .hero-stats b{font-size:24px;}
  .sec{padding:70px 0;}
  /* 小屏顶栏改矮：只改变量，内容依旧居中 */
  :root{--hdr-h:64px;}
  /* 小屏顶栏收紧：logo 文案 + 图标间距都缩小，否则 logo+搜索+登录+汉堡总宽超出视口，
     右侧按钮（登录/菜单）会被挤出屏幕。桌面端（>680px）完全不受影响 */
  .hdr-in{gap:14px;}
  .hdr-logo{gap:8px;}
  .hdr-title span{display:none;}
  .hdr-side{gap:8px;}
  .hdr-login{height:36px;padding:0 12px;font-size:13px;gap:5px;}
  .menu-burger{width:40px;height:40px;}
  /* 下面这些把「放大 1.2 倍」的顶栏元素在小屏还原回放大前的尺寸，避免撑破视口 */
  .hdr-mark{width:40px;height:40px;border-radius:10px;}
  .hdr-title b{font-size:17px;}
  .hdr-search-btn{width:40px;height:40px;}
  .hdr-spanel-in{padding:18px 16px;gap:10px;}
  .hdr-spanel .sp-input{height:46px;font-size:15px;padding:0 18px;}
  .hdr-spanel .sp-btn{height:46px;padding:0 20px;font-size:14px;}
  .hdr-spanel .sp-close{width:44px;height:44px;}
  .menu-burger i{width:18px;height:2px;}
}
@media(max-width:400px){
  /* 超窄屏：logo 只留图标 */
  .hdr-title{display:none;}
}

/* ===== Boot: GSAP 一刀两断开屏 =====
 * 全屏左右两片深色遮罩 + 中央红色刀刃光带
 * finish(): 刀光一闪 → 两半向两侧滑出 → 露出首页
 * =================================================== */
#boot{position:fixed;inset:0;z-index:999;background:#0a0a0f;overflow:hidden;display:block;font-family:-apple-system,'SF Pro Display','Segoe UI','PingFang SC',sans-serif;}

/* 全局隐藏滚动条（滚动功能保留，仅视觉隐藏） */
html{scrollbar-width:none;-ms-overflow-style:none;}
html::-webkit-scrollbar,body::-webkit-scrollbar{width:0;height:0;display:none;}

/* 左右两半（默认对齐覆盖全屏，作为等待时的兜底）——刀口侧炽红渐变，向两侧淡入深空 */
.sl-half{position:absolute;top:0;width:50%;height:100%;will-change:transform;}
.sl-half-l{left:0;background:linear-gradient(90deg,#05050a 0%,#0a0a12 40%,#17131f 68%,#3a1019 86%,#68131b 100%);}
.sl-half-r{right:0;background:linear-gradient(270deg,#05050a 0%,#0a0a12 40%,#17131f 68%,#3a1019 86%,#68131b 100%);}
/* 刀口两侧的炽热辉光带（跟随两半一起滑出） */
.sl-half-l::after{content:"";position:absolute;top:0;bottom:0;right:0;width:140px;pointer-events:none;
  background:linear-gradient(90deg,rgba(227,0,1,0) 0%,rgba(227,0,1,.22) 78%,rgba(255,90,50,.38) 100%);filter:blur(5px);}
.sl-half-r::after{content:"";position:absolute;top:0;bottom:0;left:0;width:140px;pointer-events:none;
  background:linear-gradient(270deg,rgba(227,0,1,0) 0%,rgba(227,0,1,.22) 78%,rgba(255,90,50,.38) 100%);filter:blur(5px);}

/* 中央刀刃光带（贯穿上下，左右两半从此分开） */
.sl-edge{
  position:absolute;top:0;left:50%;width:2px;height:100%;
  background:linear-gradient(to bottom,
    rgba(227,0,1,0) 0%,
    rgba(227,0,1,.85) 14%,
    #ff3a1a 38%,
    #ffb477 50%,
    #ff3a1a 62%,
    rgba(227,0,1,.85) 86%,
    rgba(227,0,1,0) 100%);
  box-shadow:
    0 0 14px 2px rgba(227,0,1,.55),
    0 0 36px 8px rgba(255,90,40,.28),
    0 0 64px 14px rgba(227,0,1,.18);
  transform:translateX(-50%);
  z-index:2;
  will-change:transform,opacity,filter;
}
.sl-edge::before{                       /* 刀光颗粒流动层 */
  content:"";position:absolute;left:-6px;right:-6px;top:0;bottom:0;
  background:linear-gradient(180deg, transparent 0%, rgba(255,255,255,.18) 50%, transparent 100%);
  mix-blend-mode:screen;pointer-events:none;
}

/* 一刀落下的瞬间白光（横扫） */
.sl-flash{
  position:absolute;top:0;left:0;width:100%;height:100%;
  background:linear-gradient(90deg,
    rgba(255,255,255,0) 0%,
    rgba(255,255,255,.55) 48%,
    rgba(255,240,220,.95) 50%,
    rgba(255,255,255,.55) 52%,
    rgba(255,255,255,0) 100%);
  opacity:0;pointer-events:none;z-index:3;
  transform-origin:50% 50%;
  will-change:transform,opacity;
  mix-blend-mode:screen;
}

/* 中央 UI（不在两半内，可透出） */
.sl-ui{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  z-index:4;color:#fff;pointer-events:none;
}
.sl-logo{
  font-size:94px;font-weight:900;letter-spacing:.08em;   /* 原 64px + 30px */
  color:#fff;
  text-shadow:
    0 0 18px rgba(227,0,1,.55),
    0 0 4px rgba(255,255,255,.4);
  line-height:1;
}
.sl-text{
  margin-top:18px;font-size:43px;letter-spacing:.42em;font-weight:500;   /* 原 13px + 30px */
  color:#fff;text-shadow:0 0 14px rgba(255,140,40,.25);white-space:nowrap;
}
.sl-bar{
  margin-top:26px;width:220px;height:2px;border-radius:2px;
  background:rgba(255,255,255,.08);overflow:hidden;
  box-shadow:0 0 12px rgba(227,0,1,.18);
}
.sl-bar i{
  display:block;height:100%;width:0%;border-radius:2px;
  background:linear-gradient(90deg, #ff7a30, #ff2e5b 60%, #ffffff 100%);
  box-shadow:0 0 12px rgba(255,120,50,.55);
}
.sl-tip{
  margin-top:14px;font-size:40.5px;letter-spacing:.42em;font-weight:500;   /* 原 10.5px + 30px */
  color:rgba(255,255,255,.6);
}

/* 开屏粒子特效层（js/boot-particles.js 绘制；文字形状采样成的粒子云） */
.sl-particles{position:absolute;inset:0;z-index:5;pointer-events:none;mix-blend-mode:screen;display:block;}

@media (max-width:768px){
  .sl-logo{font-size:76px;}                                  /* 原 46px + 30px */
  .sl-text{font-size:41px;letter-spacing:.3em;}              /* 原 11px + 30px */
  .sl-bar{width:170px;}
  .sl-edge{box-shadow:0 0 10px 1px rgba(227,0,1,.5), 0 0 24px 6px rgba(255,90,40,.22);}
}

/* ========================================================================
   Category inner-page template (.catp)
   复刻参考站：banner（蓝紫科技渐变） → 面包屑 + 同级子栏目tab → 左右分栏
   左栏：英文标签 + 栏目名 + 配图 + 红杠
   右栏：content 正文 / 文章列表
   ======================================================================== */
.catp{padding-bottom:90px;background:var(--bg0);}

/* 全宽 banner */
.catp-banner{
  position:relative;
  margin-top:var(--hdr-h);
  height:220px;
  background:
    radial-gradient(circle at 18% 28%, rgba(227,0,1,.22) 0%, transparent 55%),
    radial-gradient(circle at 86% 72%, rgba(60,140,255,.26) 0%, transparent 55%),
    linear-gradient(135deg, #0A1A35 0%, #142147 45%, #0E1730 100%);
  overflow:hidden;
  display:flex;
  align-items:center;
  isolation:isolate;
}
/* banner 改用图片作背景时（2026-09-14）：图片铺满 + 居中；科技网格调淡，别压住照片 */
.catp-banner.has-img{background-size:cover;background-position:center;background-repeat:no-repeat;}
.catp-banner.has-img::before{opacity:.4;}
.catp-banner::before{
  /* 科技网格 */
  content:"";
  position:absolute;
  inset:0;
  background:
    linear-gradient(rgba(255,255,255,.045) 1px, transparent 1px) 0 0/44px 44px,
    linear-gradient(90deg, rgba(255,255,255,.045) 1px, transparent 1px) 0 0/44px 44px;
  mask-image:linear-gradient(180deg, rgba(0,0,0,.6) 0%, rgba(0,0,0,.2) 70%, transparent 100%);
  -webkit-mask-image:linear-gradient(180deg, rgba(0,0,0,.6) 0%, rgba(0,0,0,.2) 70%, transparent 100%);
  pointer-events:none;
}
.catp-banner::after{
  /* 顶部细红光线 */
  content:"";
  position:absolute;
  top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg, transparent 0%, var(--acc) 30%, var(--acc) 70%, transparent 100%);
  box-shadow:0 0 18px rgba(227,0,1,.45);
  pointer-events:none;
  z-index:2;
}
.catp-banner-in{position:relative;z-index:1;width:100%;}
.catp-banner-in b{
  display:block;
  font-size:13px;
  font-weight:500;
  letter-spacing:.42em;
  color:rgba(255,255,255,.7);
  text-transform:uppercase;
  margin-bottom:10px;
}
.catp-banner-in span{
  display:block;
  font-size:38px;
  font-weight:700;
  color:#fff;
  letter-spacing:.04em;
  position:relative;
  padding-left:18px;
  line-height:1.2;
}
.catp-banner-in span::before{
  content:"";
  position:absolute;
  left:0;top:8px;bottom:8px;
  width:4px;border-radius:4px;
  background:var(--acc);
}

/* 面包屑 + tab 横向条 */
.catp-nav{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:var(--hdr-h);z-index:50;}
.catp-nav-in{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:24px;
  height:64px;
  flex-wrap:wrap;
}
.catp-crumb{
  display:flex;
  align-items:center;
  gap:10px;
  font-size:13.5px;
  color:var(--mute);
  letter-spacing:.04em;
  white-space:nowrap;
}
.catp-crumb i{font-style:normal;color:var(--mute);}
.catp-crumb a{color:var(--mute);transition:color .25s;}
.catp-crumb a:hover{color:var(--acc);}
.catp-crumb .on{color:var(--ink);font-weight:600;}

.catp-tabs{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
/* 按需求隐藏「根级子栏目 tab 条」（只隐藏这一个容器，其它一律不动）。
   ⚠️ 这里用 visibility 而不是 display:none —— 需求要求「容器依旧占位」，
   display:none 会让元素脱离文档流、不再占位，吸顶条高度会变、下方内容会上移。
   用 visibility:hidden 则尺寸与位置完全保留，面包屑、吸顶条高度、
   下方左右分栏布局都保持原样；同时元素不响应鼠标事件（tab 点不到）。 */
.catp-tabs{visibility:hidden;}
.catp-tab{
  display:inline-flex;align-items:center;
  height:36px;padding:0 18px;
  font-size:14px;font-weight:500;
  color:var(--ink-2);
  border-radius:999px;
  background:transparent;
  border:1px solid transparent;
  transition:.3s var(--ease);
  white-space:nowrap;
}
.catp-tab:hover{
  color:var(--acc);
  background:var(--acc-soft);
  border-color:var(--acc-soft);
}
.catp-tab.on{
  color:#fff;
  background:var(--dark);
  border-color:var(--dark);
  font-weight:600;
  box-shadow:0 6px 16px -10px rgba(15,17,21,.6);
}
.catp-tab.on:hover{
  background:var(--acc);
  border-color:var(--acc);
  box-shadow:0 6px 16px -8px var(--acc);
}

/* 主体左右分栏 */
.catp-main{
  display:grid;
  grid-template-columns:300px 1fr;
  gap:28px;
  align-items:start;
  padding-top:48px;
}
/* 左栏容器：标题卡 + 若干业务主题卡纵向排列，2026-09-14 新增 */
.catp-l-col{display:flex;flex-direction:column;gap:24px;min-width:0;}

/* 业务主题卡（主营业务 / AI智能体 / 具身智能）—— ⚠️ 当前未使用：
   三张独立卡的方案已按需求「合一」为一张卡（结构同 .catp-l-card，见 CategoryPage 的「业务卡」），
   这几条保留以便回退到「各主题独立成卡」的方案 */
.catp-biz{cursor:pointer;transition:transform .3s var(--ease),box-shadow .3s var(--ease),border-color .3s var(--ease);}
.catp-biz:hover{transform:translateY(-2px);box-shadow:0 12px 30px -18px rgba(15,17,21,.45);}
.catp-biz.on{border-color:var(--acc);}
.catp-biz.on .catp-l-title{color:var(--acc);}

/* 左栏标题卡 */
.catp-l-card{
  background:#fff;
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:30px 26px 28px;
  position:relative;
  overflow:hidden;
  box-shadow:var(--sh);
}
.catp-l-card::before{
  /* 顶部红色微光条 */
  content:"";
  position:absolute;
  top:0;left:18px;right:18px;height:2px;
  background:linear-gradient(90deg, transparent, var(--acc), transparent);
  opacity:.85;
}
.catp-l-en{
  font-size:11.5px;
  font-weight:700;
  letter-spacing:.34em;
  color:var(--acc);
  text-transform:uppercase;
  margin-bottom:8px;
}
.catp-l-title{
  font-size:24px;
  font-weight:700;
  letter-spacing:-.01em;
  color:var(--ink);
  line-height:1.25;
  word-break:break-word;
}
.catp-l-pic{
  margin-top:22px;
  width:100%;
  aspect-ratio:1/1;
  border-radius:var(--r);
  overflow:hidden;
  position:relative;
  background:var(--bg1);
}
.catp-l-pic > img,
.catp-l-pic .cover{
  position:absolute;
  inset:0;
  width:100%;height:100%;
  object-fit:cover;
  display:block;
}
.catp-l-mark{
  position:absolute;
  bottom:14px;right:14px;
  width:54px;height:54px;
  border-radius:14px;
  background:rgba(255,255,255,.94);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 6px 18px -8px rgba(0,0,0,.4);
  backdrop-filter:blur(6px);
}
.catp-l-mark img{width:32px;height:32px;object-fit:contain;}
.catp-l-line{
  margin-top:22px;
  height:2px;border-radius:2px;
  background:linear-gradient(90deg, var(--acc) 0%, var(--acc) 28%, var(--line) 28%, var(--line) 100%);
}

/* 左栏子栏目导航列表 */
.catp-l-nav{
  margin-top:20px;
  display:flex;flex-direction:column;
}
.catp-l-item{
  position:relative;
  display:flex;align-items:center;gap:12px;
  padding:12px 4px;
  font-size:15px;
  color:var(--ink-2);
  border-bottom:1px dashed var(--line);
  transition:color .25s var(--ease), padding-left .25s var(--ease);
}
.catp-l-item:last-child{border-bottom:none;}
/* 左栏卡里的列表项有两种用法：导航链接（router-link）与「点击切换」的按钮（无 href 的 a），统一手型 */
a.catp-l-item{cursor:pointer;}
.catp-l-item .dot{
  width:7px;height:7px;border-radius:50%;
  background:var(--mute);opacity:.4;
  flex:0 0 auto;
  transition:background .25s,opacity .25s,transform .25s,box-shadow .25s;
}
.catp-l-item span{flex:1;line-height:1.45;}
.catp-l-item:hover{color:var(--acc);padding-left:6px;}
.catp-l-item:hover .dot{background:var(--acc);opacity:1;}
.catp-l-item.on{color:var(--acc);font-weight:600;}
.catp-l-item.on .dot{
  background:var(--acc);opacity:1;
  transform:scale(1.2);
  box-shadow:0 0 0 4px rgba(227,0,1,.12);
}
.catp-l-item.on span{color:var(--acc);}

/* 右栏主体 */
.catp-r{
  background:#fff;
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:36px 42px 46px;
  box-shadow:var(--sh);
  min-height:480px;
  position:relative;
}
.catp-r-head{
  position:relative;
  padding-bottom:22px;
  border-bottom:1px solid var(--line);
  margin-bottom:28px;
}
.catp-r-title{
  font-size:24px;
  font-weight:700;
  letter-spacing:-.01em;
  color:var(--ink);
  position:relative;
  display:inline-block;
  padding-bottom:14px;
}
.catp-r-title::after{
  content:"";
  position:absolute;
  left:0;right:60%;bottom:0;
  height:3px;
  background:linear-gradient(90deg, var(--acc) 0%, var(--acc) 60%, transparent 100%);
  border-radius:3px;
}
.catp-r-en{
  position:absolute;
  right:0;top:50%;
  transform:translateY(-50%);
  font-size:11px;
  font-weight:600;
  letter-spacing:.32em;
  color:var(--mute);
  text-transform:uppercase;
  pointer-events:none;
}

/* 文章列表 */
.catp-list{display:flex;flex-direction:column;}
.catp-item{
  display:grid;
  grid-template-columns:120px 1fr 32px;
  gap:18px;
  align-items:center;
  padding:18px 4px;
  border-bottom:1px solid var(--line);
  cursor:pointer;
  transition:padding-left .35s var(--ease), background .25s;
}
.catp-item:hover{
  padding-left:14px;
  background:linear-gradient(90deg, var(--acc-soft) 0%, transparent 60%);
}
.catp-item:last-child{border-bottom:none;}
.catp-item .d{
  font-size:13px;
  font-variant-numeric:tabular-nums;
  color:var(--mute);
  letter-spacing:.04em;
}
.catp-item .t{
  font-size:15px;
  color:var(--ink);
  font-weight:500;
  line-height:1.5;
  display:-webkit-box;
  -webkit-line-clamp:1;
  -webkit-box-orient:vertical;
  overflow:hidden;
  transition:color .25s;
}
.catp-item:hover .t{color:var(--acc);}
.catp-item .arr{
  display:inline-flex;align-items:center;justify-content:center;
  width:32px;height:32px;
  border-radius:50%;
  color:var(--mute);
  transition:.3s var(--ease);
}
.catp-item:hover .arr{
  background:var(--acc);
  color:#fff;
  transform:translateX(4px);
}

/* 富文本正文（图文章） */
.catp-richtext{font-size:15.5px;line-height:2;color:var(--ink-2);}
.catp-richtext p{margin:14px 0;}
.catp-richtext img{max-width:100%;border-radius:14px;margin:20px auto;display:block;box-shadow:var(--sh);}
.catp-richtext h2,.catp-richtext h3{margin:28px 0 12px;color:var(--ink);font-weight:700;line-height:1.4;}
.catp-richtext h2{font-size:22px;}
.catp-richtext h3{font-size:18px;}
.catp-richtext a{color:var(--acc);transition:opacity .2s;}
/* 公司简介配图（/category/25 右栏，2026-09-14 新增）
   width:100% → 宽度自适应父容器；height:auto → 高度按图片原比例，不拉伸不裁切 */
.catp-figure{margin:34px 0 0;}
.catp-figure img{display:block;width:100%;height:auto;border-radius:14px;box-shadow:var(--sh);}
.catp-richtext a:hover{opacity:.75;}
.catp-richtext ul,.catp-richtext ol{margin:14px 0;padding-left:24px;}
.catp-richtext ul{list-style:disc;}
.catp-richtext ol{list-style:decimal;}
.catp-richtext li{margin-bottom:6px;}
.catp-richtext strong{color:var(--ink);font-weight:700;}
.catp-richtext blockquote{
  margin:18px 0;padding:14px 22px;
  border-left:3px solid var(--acc);
  background:var(--bg1);
  border-radius:0 8px 8px 0;
  color:var(--ink-2);
}
.catp-richtext table{
  width:100%;border-collapse:collapse;margin:18px 0;font-size:14px;
}
.catp-richtext th,.catp-richtext td{
  border:1px solid var(--line);
  padding:10px 14px;
  text-align:left;
}
.catp-richtext th{background:var(--bg1);font-weight:600;color:var(--ink);}

/* ================================================================
   富文本可用样式类 · 给后台智诚科技CMS 预留的「语义类名」
   ----------------------------------------------------------------
   用法：在后台文章编辑器里点「源码」，给标签加 class，例如：
       <p class="art-lead">这是一段导语</p>
       <p class="art-note">这是一段灰色提示</p>
       <div class="art-gallery"><img src="..."><img src="..."></div>
   生效范围：.rt 容器 —— 文章详情页 .detail-body、栏目内页 .catp-richtext
   （两处模板都已挂上 rt 类，见 DetailPage.js / CategoryPage.js）

   全部可用类名：
     art-lead     导语（大字 + 左侧红杠）
     art-note     灰色提示框        art-warn  红色警示框
     art-ok       绿色结论框        art-quote 引用（可加 <cite> 署名）
     art-center   整段居中          art-right 整段右对齐
     art-hl       行内红色高亮      art-mark  行内黄底标记
     art-list     要点清单（红方块，写 <ul class="art-list"><li>…）
     art-cols2    文字分两栏        art-cols3 文字分三栏
     art-fig      图片 + 图注（<figure class="art-fig"><img><figcaption>…）
     art-full     通栏大图（突破正文 820px 宽度）
     art-media    图文左右并排（art-media--rev 图文互换）
     art-gallery  图片并排两列（art-gallery--3 为三列）
     art-btn      按钮式链接（art-btn--acc 红色版）
     art-hr       分隔线（<hr class="art-hr">）
     art-badge    行内小标签
   ================================================================ */

/* —— 导语 —— */
.rt .art-lead{
  font-size:17.5px;line-height:1.9;color:var(--ink);
  padding:2px 0 2px 18px;border-left:3px solid var(--acc);
  margin:24px 0 30px;
}

/* —— 提示 / 警示 / 结论框 —— */
.rt .art-note,
.rt .art-warn,
.rt .art-ok{
  border-radius:12px;padding:18px 22px;margin:26px 0;
  font-size:15px;line-height:1.85;
}
.rt .art-note{background:var(--bg1);border:1px solid var(--line);border-left:4px solid var(--line-2);color:var(--ink-2);}
.rt .art-warn{background:var(--acc-soft);border:1px solid rgba(227,0,1,.22);border-left:4px solid var(--acc);color:var(--ink);}
.rt .art-ok{background:#EDF7F1;border:1px solid rgba(29,158,117,.28);border-left:4px solid #1D9E75;color:var(--ink);}

/* —— 引用 —— */
.rt .art-quote{margin:26px 0;padding:2px 0 2px 20px;border-left:3px solid var(--line-2);color:var(--ink-2);}
.rt .art-quote cite{display:block;margin-top:8px;font-size:13px;color:var(--mute);font-style:normal;}

/* —— 对齐 —— */
.rt .art-center{text-align:center;}
.rt .art-right{text-align:right;}

/* —— 行内强调 —— */
.rt .art-hl{color:var(--acc);font-weight:600;}
.rt .art-mark{background:#FFF3C4;color:var(--ink);padding:1px 5px;border-radius:4px;}

/* —— 要点清单 —— */
.rt ul.art-list{list-style:none;padding-left:0;margin:20px 0;}
.rt .art-list li{position:relative;padding-left:22px;margin:10px 0;}
.rt .art-list li::before{content:"";position:absolute;left:2px;top:.7em;width:7px;height:7px;border-radius:2px;background:var(--acc);}

/* —— 分栏文字 —— */
.rt .art-cols2{column-count:2;column-gap:36px;}
.rt .art-cols3{column-count:3;column-gap:28px;}
.rt .art-cols2 p,.rt .art-cols3 p{margin:.5em 0;}

/* —— 配图 + 图注 —— */
.rt .art-fig{margin:30px 0;text-align:center;}
.rt .art-fig img{margin:0 auto;display:block;}
.rt .art-fig figcaption{margin-top:10px;font-size:13px;color:var(--mute);}

/* —— 通栏大图 —— */
.rt .art-full{width:min(1120px,92vw);margin-left:50%;transform:translateX(-50%);margin-top:34px;margin-bottom:34px;}
.rt .art-full img{width:100%;border-radius:16px;margin:0;}

/* —— 图文并排 —— */
.rt .art-media{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;align-items:center;margin:28px 0;}
.rt .art-media--rev .art-media-txt{order:-1;}
.rt .art-media img{width:100%;border-radius:14px;margin:0;}
.rt .art-media p:first-child{margin-top:0;}
.rt .art-media p:last-child{margin-bottom:0;}

/* —— 图片并排 —— */
.rt .art-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:26px 0;}
.rt .art-gallery--3{grid-template-columns:repeat(3,minmax(0,1fr));}
.rt .art-gallery img{width:100%;border-radius:12px;margin:0;}

/* —— 按钮式链接 —— */
.rt .art-btn{
  display:inline-block;margin:8px 10px 8px 0;padding:12px 26px;border-radius:999px;
  background:var(--dark);color:#fff !important;font-size:14.5px;font-weight:500;
  text-decoration:none;transition:background .25s var(--ease);
}
.rt .art-btn:hover{background:var(--acc);}
.rt .art-btn--acc{background:var(--acc);}
.rt .art-btn--acc:hover{background:var(--dark);}

/* —— 分隔线 / 小标签 —— */
.rt .art-hr{border:0;height:1px;background:var(--line);margin:38px 0;}
.rt .art-badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12.5px;background:var(--acc-soft);color:var(--acc);margin-right:8px;}

/* —— 富文本里插入的表格统一美化 —— */
.rt table{border-collapse:collapse;width:100%;margin:24px 0;font-size:14.5px;}
.rt th,.rt td{border:1px solid var(--line);padding:10px 14px;text-align:left;}
.rt th{background:var(--bg1);font-weight:600;color:var(--ink);}

@media(max-width:820px){
  .rt .art-cols2,.rt .art-cols3{column-count:1;}
  .rt .art-media{grid-template-columns:1fr;}
  .rt .art-media--rev .art-media-txt{order:0;}
  .rt .art-gallery--3{grid-template-columns:repeat(2,minmax(0,1fr));}
  .rt .art-full{width:100%;margin-left:0;transform:none;}
}
@media(max-width:560px){
  .rt .art-gallery,.rt .art-gallery--3{grid-template-columns:1fr;}
}

/* 空态 */
.catp-empty{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:90px 0;gap:14px;color:var(--mute);
  text-align:center;
}
.catp-empty b{font-size:15px;font-weight:500;color:var(--ink-2);}

/* 骨架 */
.catp-sk{padding:6px 0;}

/* v-reveal 进场 */
.catp-l.rv[data-dr="l"]:not(.in){transform:translateX(-40px);}
.catp-r.rv[data-dr="r"]:not(.in){transform:translateX(40px);}

/* Responsive */
@media(max-width:1080px){
  .catp-main{grid-template-columns:240px 1fr;gap:20px;padding-top:36px;}
  .catp-l-card{padding:24px 22px;}
  .catp-r{padding:30px 28px 38px;}
}
@media(max-width:860px){
  .catp-main{grid-template-columns:1fr;gap:18px;padding-top:24px;}
  .catp-l-card{display:none;}            /* 移动端折叠左栏 */
}
@media(max-width:680px){
  .catp-banner{height:170px;margin-top:var(--hdr-h);}
  .catp-banner-in span{font-size:28px;}
  .catp-banner-in b{font-size:11px;letter-spacing:.32em;}
  .catp-nav{top:var(--hdr-h);}
  .catp-nav-in{height:auto;padding:14px 28px;gap:12px;}
  .catp-tabs{width:100%;overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
  .catp-tabs::-webkit-scrollbar{display:none;}
  .catp-tab{flex-shrink:0;height:32px;padding:0 14px;font-size:13px;}
  .catp-r{padding:24px 20px 30px;}
  .catp-r-title{font-size:20px;}
  .catp-item{grid-template-columns:100px 1fr 28px;gap:12px;padding:14px 2px;}
  .catp-item .t{font-size:14px;}
}
