/* ===== Reset & Variables ===== */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  --bg:   #080c14;
  --bg-2: #0d1421;
  --bg-3: #111827;
  --bg-4: #1a2338;
  --card: rgba(255,255,255,0.04);
  --card-h: rgba(255,255,255,0.07);
  --border: rgba(255,255,255,0.08);
  --border-a: rgba(0,212,255,0.35);
  --cyan: #00d4ff;
  --blue: #4f8ef7;
  --grad: linear-gradient(135deg, #00d4ff 0%, #4f8ef7 100%);
  --grad-r: linear-gradient(135deg, #4f8ef7 0%, #00d4ff 100%);
  --text:   #e8edf5;
  --text-2: #8899aa;
  --text-3: #4a5568;
  --font: 'Inter', 'Noto Sans SC', 'Source Han Sans CN', -apple-system, sans-serif;
  --r: 12px;
  --r-lg: 20px;
  --glow: 0 0 40px rgba(0,212,255,0.12);
  --glow-s: 0 0 60px rgba(0,212,255,0.25);
  --t: 0.3s cubic-bezier(0.4,0,0.2,1);
}

html { scroll-behavior: smooth; }
/* body 背景：极光风（青翠紫）。
 * 北极光风格 —— 冷色为主但混一抹翠绿制造流动灵气。
 * 保持"高级淡强度"设计（不是抢眼张扬风）。
 * 层次（后写覆盖前写）：
 *   1. 左上青光 —— alpha 0.20 品牌色主锚点
 *   2. 右上翠绿 —— alpha 0.14 灵动性亮点
 *   3. 右下紫红 —— alpha 0.22 冷色系收尾
 *   4. 底色 135° 从 #080c14 → 稍亮 #0d1a24 的过渡
 * background-attachment: fixed 让光斑固定在视口，滚动时保持
 * 首页 .hero 区自己的 orb 光斑（position absolute）跟 body 层独立 */
body {
  font-family: var(--font);
  background:
    radial-gradient(ellipse 900px 700px at 15% 15%, rgba(0, 212, 255, 0.20) 0%, transparent 55%),
    radial-gradient(ellipse 700px 600px at 85% 20%, rgba(16, 185, 129, 0.14) 0%, transparent 55%),
    radial-gradient(ellipse 1000px 800px at 80% 90%, rgba(192, 38, 211, 0.22) 0%, transparent 55%),
    linear-gradient(135deg, #080c14 0%, #0d1a24 100%);
  background-attachment: fixed;
  color: var(--text);
  line-height: 1.6;
  overflow-x: hidden;
}
img { max-width: 100%; height: auto; display: block; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; }

/* ===== Typography ===== */
h1,h2,h3,h4 { font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; }
h1 { font-size: clamp(1.8rem, 4vw, 3rem); }
h2 { font-size: clamp(1.4rem, 3vw, 2rem); }
h3 { font-size: clamp(1rem, 2vw, 1.25rem); }
h4 { font-size: 0.95rem; }
p  { color: var(--text-2); }

.grad-text {
  background: var(--grad);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* ===== Layout ===== */
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.section    { padding: 64px 0; }
.section-sm { padding: 40px 0; }
.section-dark { background: var(--bg-2); }

.section-header { text-align: center; margin-bottom: 40px; }
.section-header h2 { margin-bottom: 10px; }
.section-header p  { font-size: 0.95rem; max-width: 560px; margin: 0 auto; }

.section-tag {
  display: inline-block;
  font-size: 0.72rem; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase;
  color: var(--cyan);
  background: rgba(0,212,255,0.08);
  border: 1px solid rgba(0,212,255,0.2);
  padding: 4px 14px; border-radius: 100px; margin-bottom: 14px;
}

.grid-2 { display: grid; grid-template-columns: repeat(2,1fr); gap: 24px; }
.grid-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 24px; }
.grid-4 { display: grid; grid-template-columns: repeat(4,1fr); gap: 20px; }

/* ===== Navigation ===== */
.nav {
  position: sticky; top: 0; left: 0; right: 0; z-index: 1000;
  padding: 12px 0; transition: var(--t);
  background: rgba(8,12,20,0.92);
  backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
  border-bottom: 1px solid var(--border);
}
.nav.scrolled {
  padding: 10px 0;
  background: rgba(8,12,20,0.96);
}
.nav-inner { display: flex; align-items: center; justify-content: space-between; }
.nav-logo {
  font-size: 1.35rem; font-weight: 800;
  background: var(--grad); -webkit-background-clip: text;
  -webkit-text-fill-color: transparent; background-clip: text;
  display: inline-flex; align-items: center; gap: 8px;
}
.nav-logo-img { height: 32px; width: auto; display: block; flex-shrink: 0; -webkit-text-fill-color: initial; }
.nav-logo-text { background: var(--grad); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.nav-links { display: flex; gap: 32px; align-items: center; }
.nav-links a {
  font-size: 0.88rem; font-weight: 500; color: var(--text-2);
  transition: color var(--t); position: relative;
}
.nav-links a::after {
  content: ''; position: absolute; bottom: -4px; left: 0; right: 0;
  height: 2px; background: var(--grad);
  transform: scaleX(0); transition: transform var(--t);
}
.nav-links a:hover { color: var(--text); }
.nav-links a:hover::after { transform: scaleX(1); }
/* 当前页高亮：文字变白 + 淡青底 + 青色描边。伪元素下划线不参与（背景+边框已足够醒目）。 */
.nav-links a.active {
  color: var(--text);
  background: rgba(0, 212, 255, 0.18);
  border: 1px solid var(--border-a);
  border-radius: 100px;
  padding: 5px 13px;
}
.nav-links a.active::after { display: none; }
.nav-cta {
  background: var(--grad); color: #fff !important;
  padding: 8px 20px; border-radius: 100px;
  font-weight: 600; font-size: 0.84rem;
  transition: opacity var(--t), transform var(--t) !important;
}
.nav-cta::after { display: none !important; }
.nav-cta:hover { opacity: 0.88; transform: translateY(-1px) !important; }
.nav-mobile-btn { display: none; flex-direction: column; gap: 5px; cursor: pointer; padding: 4px; background: transparent; border: none; }
.nav-mobile-btn span { display: block; width: 24px; height: 2px; background: var(--text); border-radius: 2px; transition: var(--t); }

/* ===== Hero ===== */
.hero {
  min-height: 78vh; display: flex; align-items: center;
  position: relative; overflow: hidden; padding: 60px 0;
}
.hero-bg {
  position: absolute; inset: 0;
  background:
    radial-gradient(ellipse 80% 60% at 50% -10%, rgba(0,212,255,0.13) 0%, transparent 60%),
    radial-gradient(ellipse 60% 50% at 80% 80%, rgba(79,142,247,0.08) 0%, transparent 50%);
}
.hero-grid {
  position: absolute; inset: 0;
  background-image:
    linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);
  background-size: 60px 60px;
  mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 30%, transparent 100%);
  -webkit-mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 30%, transparent 100%);
}
.hero-orb {
  position: absolute; border-radius: 50%; filter: blur(80px); pointer-events: none;
}
.hero-orb-1 { width: 500px; height: 500px; background: rgba(0,212,255,0.06); top: -100px; right: -100px; }
.hero-orb-2 { width: 400px; height: 400px; background: rgba(79,142,247,0.07); bottom: -50px; left: -80px; }
.hero-content { position: relative; z-index: 1; max-width: 820px; }
.hero-badge {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(0,212,255,0.07); border: 1px solid rgba(0,212,255,0.2);
  border-radius: 100px; padding: 4px 14px;
  font-size: 0.75rem; color: var(--cyan); margin-bottom: 20px;
}
.hero-badge-dot { width: 6px; height: 6px; background: var(--cyan); border-radius: 50%; animation: pulse 2s infinite; }
.hero h1 { margin-bottom: 16px; }
.hero-desc { font-size: clamp(0.9rem, 1.8vw, 1rem); color: var(--text-2); max-width: 560px; margin-bottom: 28px; line-height: 1.7; }
.hero-actions { display: flex; gap: 16px; flex-wrap: wrap; }
.hero-scroll {
  position: absolute; bottom: 40px; left: 50%; transform: translateX(-50%);
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  color: var(--text-3); font-size: 0.75rem; animation: bounce 2s infinite;
}
.hero-scroll-line { width: 1px; height: 40px; background: linear-gradient(to bottom, var(--cyan), transparent); }

/* ===== Buttons ===== */
.btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 10px 22px; border-radius: 100px;
  font-weight: 600; font-size: 0.875rem; cursor: pointer;
  transition: var(--t); border: none; font-family: var(--font);
}
.btn-primary { background: var(--grad); color: #fff; box-shadow: 0 4px 20px rgba(0,212,255,0.22); }
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 8px 30px rgba(0,212,255,0.35); }
.btn-outline { background: transparent; color: var(--text); border: 1px solid var(--border); }
.btn-outline:hover { border-color: var(--border-a); background: rgba(0,212,255,0.05); transform: translateY(-2px); }
.btn-ghost { background: rgba(255,255,255,0.06); color: var(--text); backdrop-filter: blur(10px); }
.btn-ghost:hover { background: rgba(255,255,255,0.1); transform: translateY(-2px); }
.btn-sm { padding: 8px 18px; font-size: 0.82rem; }

/* ===== Cards ===== */
.card {
  background: var(--card); border: 1px solid var(--border);
  border-radius: var(--r-lg); backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px); transition: var(--t); overflow: hidden;
}
.card:hover { border-color: var(--border-a); background: var(--card-h); transform: translateY(-4px); box-shadow: var(--glow); }

/* ===== Item Cards (product / case) ===== */
.item-card { display: flex; flex-direction: column; }
.item-card-img { width: 100%; aspect-ratio: 16/9; object-fit: cover; background: var(--bg-3); }
.item-card-placeholder {
  width: 100%; aspect-ratio: 16/9;
  background: linear-gradient(135deg, var(--bg-3), var(--bg-2));
  display: flex; align-items: center; justify-content: center;
  color: var(--text-3); font-size: 2.5rem;
}
.item-card-body { padding: 18px; flex: 1; display: flex; flex-direction: column; }
.item-card-tag { font-size: 0.7rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--cyan); margin-bottom: 8px; }
.item-card-title { font-size: 1.05rem; font-weight: 700; color: var(--text); margin-bottom: 10px; line-height: 1.4; }
.item-card-desc { font-size: 0.88rem; color: var(--text-2); line-height: 1.7; flex: 1; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.item-card-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }
.item-card-link { font-size: 0.84rem; font-weight: 600; color: var(--cyan); display: flex; align-items: center; gap: 6px; transition: gap var(--t); }
.item-card-link:hover { gap: 10px; }
.item-card-version { font-size: 0.75rem; color: var(--text-3); background: var(--bg-3); padding: 2px 8px; border-radius: 4px; }

/* ===== News Cards ===== */
.news-card { display: flex; gap: 20px; padding: 24px; }
.news-card-img { width: 110px; height: 74px; object-fit: cover; border-radius: 8px; flex-shrink: 0; background: var(--bg-3); }
.news-card-body { flex: 1; min-width: 0; }
.news-card-date { font-size: 0.73rem; color: var(--text-3); margin-bottom: 6px; }
.news-card-title { font-size: 0.97rem; font-weight: 600; color: var(--text); margin-bottom: 6px; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.news-card-desc { font-size: 0.84rem; color: var(--text-2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* ===== About ===== */
.about-single { max-width: 900px; margin: 0 auto; }
.about-content h2 { margin-bottom: 20px; }
.about-content p { margin-bottom: 16px; line-height: 1.8; }
/* 首页公司简介"预览截断"渐隐效果 —— 只在 index.html 里挂 .about-preview 时生效，
 * 独立页 /about/ 不带这个类，展示完整内容不受影响。
 * mask-image 从上到下由完全不透明渐变到 60% 处透明，暗示"下面还有内容被遮住了"。 */
.about-preview {
  position: relative;
  max-height: 260px;
  overflow: hidden;
  mask-image: linear-gradient(180deg, #000 55%, transparent 100%);
  -webkit-mask-image: linear-gradient(180deg, #000 55%, transparent 100%);
}

/* ===== Stats ===== */
.stats-row { display: grid; grid-template-columns: repeat(4,1fr); gap: 1px; background: var(--border); border-radius: var(--r); overflow: hidden; margin-top: 40px; }
.stat-item { background: var(--bg-2); padding: 20px 16px; text-align: center; }
.stat-num { font-size: 1.8rem; font-weight: 800; background: var(--grad); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; line-height: 1; }
.stat-label { font-size: 0.78rem; color: var(--text-2); margin-top: 5px; }

/* ===== Contact ===== */
.contact-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 60px; }
.contact-info h3 { margin-bottom: 24px; }
.contact-item { display: flex; align-items: center; gap: 16px; padding: 16px 0; border-bottom: 1px solid var(--border); }
.contact-item:last-child { border-bottom: none; }
.contact-icon { width: 44px; height: 44px; background: rgba(0,212,255,0.08); border: 1px solid rgba(0,212,255,0.15); border-radius: 12px; display: flex; align-items: center; justify-content: center; color: var(--cyan); flex-shrink: 0; font-size: 1.1rem; }
.contact-label { font-size: 0.73rem; color: var(--text-3); margin-bottom: 2px; }
.contact-value { font-size: 0.93rem; color: var(--text); font-weight: 500; }
.contact-qr { text-align: center; }
.contact-qr img { width: 160px; height: 160px; border-radius: var(--r); margin: 0 auto 12px; border: 1px solid var(--border); }
.contact-qr p { font-size: 0.82rem; }

/* ===== Salespeople ===== */
.sales-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px,1fr)); gap: 20px; }
.sales-card { text-align: center; padding: 28px 20px; }
.sales-avatar { width: 72px; height: 72px; border-radius: 50%; object-fit: cover; margin: 0 auto 14px; border: 2px solid var(--border-a); }
.sales-avatar-placeholder { width: 72px; height: 72px; border-radius: 50%; background: var(--grad); display: flex; align-items: center; justify-content: center; margin: 0 auto 14px; font-size: 1.6rem; font-weight: 700; color: #fff; }
.sales-name { font-size: 0.95rem; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.sales-contact { font-size: 0.8rem; color: var(--text-2); line-height: 1.6; }

/* ===== Page Header (inner pages) ===== */
.page-header {
  padding: 56px 0 40px;
  background: var(--bg-2);
  position: relative; overflow: hidden;
}
.page-header::before {
  content: ''; position: absolute; inset: 0;
  background: radial-gradient(ellipse 70% 80% at 50% 0%, rgba(0,212,255,0.1) 0%, transparent 60%);
}
.page-header .container { position: relative; z-index: 1; }
.page-header h1 { margin-bottom: 12px; }
.page-header p { font-size: 1.05rem; }
.breadcrumb { display: flex; align-items: center; gap: 8px; font-size: 0.82rem; color: var(--text-3); margin-bottom: 16px; }
.breadcrumb a { color: var(--cyan); }
.breadcrumb-sep { color: var(--text-3); }

/* ===== Detail Page ===== */
/* 详情页布局：折中方案 —— Flex 两栏 + sticky 侧栏，整块居中。
 * - 外层 .detail-layout: width:min(75vw, 1600px)，min-width 兜底 900px 防止窄屏主内容不可读；
 *   margin:0 auto 让整块在屏幕居中。相比常规 1120px 容器，视觉上主内容更居中一些。
 *   (术语：75vw = 视口宽度的 75%；min() = 取多值中最小的一个)
 * - 主内容 flex:1 自适应剩余宽度，侧栏固定 260px。
 * - 侧栏 position:sticky + align-self:flex-start，滚动时吸顶跟随。
 *   (术语：sticky = 粘性定位，元素滚到 top 阈值后钉在视口，超出父容器时自然释放)
 * - 断点 1024px：以下走单列，侧栏落到主内容下方。 */
.detail-layout {
  display: flex;
  gap: 32px;
  align-items: flex-start;
  width: min(75vw, 1600px);
  min-width: min(900px, 100%);
  margin: 0 auto;
}
/* 详情页封面：模糊填补方案 —— 保持 16:9 容器统一高度，图片完整不裁，letterbox 区域
 * 由模糊放大的同一张图填补，视觉上无边、无裁。灵感 Instagram/YouTube 竖版视频处理。
 * 结构：<div class="detail-cover">
 *         <img class="detail-cover-blur" ... aria-hidden>  ← 绝对定位、object-fit:cover+blur(30px)+scale(1.15)
 *         <img class="detail-cover-img"  ... >              ← 相对定位、object-fit:contain 完整图
 *       </div>
 * 同一 URL 浏览器缓存，只 1 次网络请求。 */
.detail-cover {
  width: 100%;
  aspect-ratio: 16/9;
  border-radius: var(--r-lg);
  overflow: hidden;
  margin-bottom: 32px;
  position: relative;
  background-color: var(--bg-3);
}
.detail-cover-blur {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: blur(30px);
  transform: scale(1.15);
  z-index: 0;
}
.detail-cover-img {
  position: relative;
  width: 100%;
  height: 100%;
  object-fit: contain;
  z-index: 1;
  display: block;
}
/* .detail-content：玻璃拟态卡片包裹正文（方案 C）。
 * body 极光风渐变背景 + 卡片 backdrop-filter blur(20px) 组合 —— 卡片内的模糊背景是青翠紫混色，
 * 玻璃质感真正显现。
 * - background rgba(255,255,255,0.04)：半透明白，让卡片"浮"起来
 * - border 描一层非常淡的白线
 * - box-shadow 外阴影 + inset 内高光提升立体感
 * - padding 40px 44px：正文四周呼吸空间；移动端下面 @media 缩到 24px 20px */
.detail-content {
  font-size: 0.97rem;
  line-height: 1.9;
  color: var(--text-2);
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.06);
  border-radius: var(--r-lg);
  padding: 40px 44px;
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.04);
}
.detail-content h1,.detail-content h2,.detail-content h3 { color: var(--text); margin: 28px 0 12px; }
.detail-content p { margin-bottom: 16px; }
.detail-content img { border-radius: var(--r); margin: 20px 0; }
.detail-content ul,.detail-content ol { padding-left: 24px; margin-bottom: 16px; }
.detail-content li { margin-bottom: 6px; }
.detail-main {
  flex: 1;
  min-width: 0;
}
/* 侧栏 sticky 吸顶：Flex 下必须 align-self:flex-start，否则默认 stretch 拉伸满高 sticky 就失效。
 * 260px 是抄知乎(300)、掘金(240)取的中值；top:88px 让开 nav 高度。
 * max-height + overflow-y：侧栏内容过长时内部滚动，不会溢出视口。 */
.detail-sidebar {
  width: 260px;
  flex-shrink: 0;
  align-self: flex-start;
  position: sticky;
  top: 88px;
  max-height: calc(100vh - 112px);
  overflow-y: auto;
}
.sidebar-card { padding: 18px; margin-bottom: 20px; }
.sidebar-card h4 { color: var(--text); margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
/* 侧栏卡片继承 .card 但不参与其 hover 上移。原因：侧栏为 fixed 定位、
 * 上方紧贴 nav，整体 translateY(-4px) 会让顶部被 nav 遮住产生"缺角"错觉。
 * 边框和背景的 hover 变化仍保留（.card:hover 里的其他两条属性）。 */
.sidebar-card:hover { transform: none; box-shadow: none; }

/* ===== Footer ===== */
.footer { background: var(--bg-2); border-top: 1px solid var(--border); padding: 40px 0 24px; }
.footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 36px; margin-bottom: 32px; }
.footer-brand p { font-size: 0.88rem; margin-top: 14px; line-height: 1.7; }
.footer-col h5 { font-size: 0.82rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-3); margin-bottom: 16px; }
.footer-col a { display: block; font-size: 0.88rem; color: var(--text-2); padding: 4px 0; transition: color var(--t); }
.footer-col a:hover { color: var(--cyan); }
.footer-bottom { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; padding-top: 28px; border-top: 1px solid var(--border); font-size: 0.82rem; color: var(--text-3); }
.footer-icp { display: inline-flex; align-items: center; gap: 6px; flex-wrap: nowrap; white-space: nowrap; }
.footer-icp a { color: var(--text-3); transition: color var(--t); }
.footer-icp a:hover { color: var(--cyan); }
.footer-beian-icon-link { display: inline-flex; align-items: center; }
.footer-beian-icon-link img { display: block; width: 1em; height: 1em; }

/* ===== AI Panel ===== */
/* 暂时隐藏 AI 助手入口与面板（保留 DOM 与 JS 逻辑，恢复时删除下一条规则即可） */
.ai-trigger,
.ai-panel { display: none !important; }

.ai-trigger {
  position: fixed; right: 24px; bottom: 24px; z-index: 900;
  width: 52px; height: 52px; border-radius: 50%;
  background: var(--grad); border: none; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 20px rgba(0,212,255,0.35);
  transition: var(--t); font-size: 1.3rem;
}
.ai-trigger:hover { transform: scale(1.1); box-shadow: 0 8px 30px rgba(0,212,255,0.5); }
.ai-panel {
  position: fixed; right: 0; top: 0; bottom: 0; z-index: 950;
  width: 420px; max-width: 100vw;
  background: var(--bg-2); border-left: 1px solid var(--border);
  display: flex; flex-direction: column;
  transform: translateX(100%); transition: transform 0.4s cubic-bezier(0.4,0,0.2,1);
}
.ai-panel.open { transform: translateX(0); }
.ai-panel-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 20px 24px; border-bottom: 1px solid var(--border);
  background: rgba(0,212,255,0.04);
}
.ai-panel-title { font-weight: 700; font-size: 1rem; display: flex; align-items: center; gap: 10px; }
.ai-panel-dot { width: 8px; height: 8px; background: var(--cyan); border-radius: 50%; animation: pulse 2s infinite; }
.ai-panel-close { background: none; border: none; color: var(--text-2); cursor: pointer; font-size: 1.2rem; padding: 4px; transition: color var(--t); }
.ai-panel-close:hover { color: var(--text); }
.ai-messages { flex: 1; overflow-y: auto; padding: 20px 24px; display: flex; flex-direction: column; gap: 16px; }
.ai-msg { max-width: 85%; }
.ai-msg-user { align-self: flex-end; background: var(--grad); color: #fff; padding: 12px 16px; border-radius: 16px 16px 4px 16px; font-size: 0.9rem; }
.ai-msg-bot { align-self: flex-start; background: var(--card); border: 1px solid var(--border); padding: 12px 16px; border-radius: 16px 16px 16px 4px; font-size: 0.9rem; color: var(--text); }
.ai-msg-bot p { color: var(--text); margin: 0; }
.ai-sources { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border); }
.ai-source-item { font-size: 0.75rem; color: var(--cyan); padding: 2px 0; }
.ai-typing { display: flex; gap: 4px; align-items: center; padding: 12px 16px; }
.ai-typing span { width: 6px; height: 6px; background: var(--text-3); border-radius: 50%; animation: typing 1.2s infinite; }
.ai-typing span:nth-child(2) { animation-delay: 0.2s; }
.ai-typing span:nth-child(3) { animation-delay: 0.4s; }
.ai-input-area { padding: 16px 24px; border-top: 1px solid var(--border); display: flex; gap: 10px; }
.ai-input { flex: 1; background: var(--card); border: 1px solid var(--border); border-radius: 24px; padding: 10px 16px; color: var(--text); font-family: var(--font); font-size: 0.9rem; outline: none; resize: none; transition: border-color var(--t); }
.ai-input:focus { border-color: var(--border-a); }
.ai-send { background: var(--grad); border: none; border-radius: 50%; width: 40px; height: 40px; cursor: pointer; display: flex; align-items: center; justify-content: center; color: #fff; flex-shrink: 0; transition: var(--t); }
.ai-send:hover { transform: scale(1.1); }

/* ===== Demo Modal ===== */
.modal-overlay {
  position: fixed; inset: 0; z-index: 1100;
  background: rgba(0,0,0,0.7); backdrop-filter: blur(6px);
  display: flex; align-items: center; justify-content: center;
  opacity: 0; pointer-events: none; transition: opacity var(--t);
}
.modal-overlay.open { opacity: 1; pointer-events: all; }
.modal {
  background: var(--bg-2); border: 1px solid var(--border);
  border-radius: var(--r-lg); padding: 36px; width: 520px; max-width: calc(100vw - 32px);
  transform: translateY(20px) scale(0.97); transition: transform var(--t);
  max-height: 90vh; overflow-y: auto;
}
.modal-overlay.open .modal { transform: translateY(0) scale(1); }
.modal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 28px; }
.modal-header h3 { font-size: 1.2rem; }
.modal-close { background: none; border: none; color: var(--text-2); cursor: pointer; font-size: 1.3rem; padding: 4px; transition: color var(--t); }
.modal-close:hover { color: var(--text); }
.modal-step { display: none; }
.modal-step.active { display: block; }
.modal-step-title { font-size: 0.8rem; color: var(--text-3); margin-bottom: 20px; }
.sales-select-grid { display: grid; grid-template-columns: repeat(2,1fr); gap: 12px; margin-bottom: 24px; }
.sales-select-card {
  padding: 16px; border: 2px solid var(--border); border-radius: var(--r);
  cursor: pointer; transition: var(--t); text-align: center;
}
.sales-select-card:hover,.sales-select-card.selected { border-color: var(--cyan); background: rgba(0,212,255,0.06); }
.sales-select-card .sales-avatar,.sales-select-card .sales-avatar-placeholder { width: 48px; height: 48px; font-size: 1.1rem; margin-bottom: 8px; }
.sales-select-card .sales-name { font-size: 0.88rem; }
.sales-select-card .sales-contact { font-size: 0.75rem; }
.email-form { display: flex; flex-direction: column; gap: 14px; }
.form-group label { display: block; font-size: 0.8rem; color: var(--text-2); margin-bottom: 6px; }
.form-group input,.form-group textarea {
  width: 100%; background: var(--card); border: 1px solid var(--border);
  border-radius: var(--r); padding: 10px 14px; color: var(--text);
  font-family: var(--font); font-size: 0.9rem; outline: none; transition: border-color var(--t);
}
.form-group input:focus,.form-group textarea:focus { border-color: var(--border-a); }
.form-group textarea { resize: vertical; min-height: 120px; }
.modal-actions { display: flex; gap: 12px; justify-content: flex-end; margin-top: 24px; }

/* ===== Animations ===== */
@keyframes pulse {
  0%,100% { opacity: 1; transform: scale(1); }
  50%      { opacity: 0.5; transform: scale(0.85); }
}
@keyframes bounce {
  0%,100% { transform: translateX(-50%) translateY(0); }
  50%      { transform: translateX(-50%) translateY(8px); }
}
@keyframes typing {
  0%,60%,100% { transform: translateY(0); opacity: 0.4; }
  30%          { transform: translateY(-6px); opacity: 1; }
}
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.fade-in { opacity: 0; transform: translateY(24px); transition: opacity 0.6s ease, transform 0.6s ease; }
.fade-in.visible { opacity: 1; transform: translateY(0); }
.fade-in-delay-1 { transition-delay: 0.1s; }
.fade-in-delay-2 { transition-delay: 0.2s; }
.fade-in-delay-3 { transition-delay: 0.3s; }

/* ===== Divider ===== */
.divider { height: 1px; background: var(--border); margin: 0; }
.divider-grad { height: 1px; background: linear-gradient(90deg, transparent, var(--cyan), transparent); }

/* ===== CTA Section ===== */
.cta-section {
  text-align: center; padding: 64px 0;
  background: radial-gradient(ellipse 80% 60% at 50% 50%, rgba(0,212,255,0.07) 0%, transparent 70%);
}
.cta-section h2 { margin-bottom: 10px; }
.cta-section p { font-size: 0.95rem; margin-bottom: 24px; }
.cta-actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }

/* ===== Responsive ===== */
/* 详情页布局在 1024px 以下走单列：Flex 改成纵向，侧栏落到主内容下方并释放 sticky。 */
@media (max-width: 1024px) {
  .grid-4 { grid-template-columns: repeat(2,1fr); }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .detail-layout {
    flex-direction: column;
    gap: 48px;
  }
  .detail-sidebar {
    width: auto;
    position: static;
    max-height: none;
    overflow: visible;
  }
}
@media (max-width: 768px) {
  .grid-3 { grid-template-columns: repeat(2,1fr); }
  .grid-2 { grid-template-columns: 1fr; }
  .contact-grid { grid-template-columns: 1fr; }
  .stats-row { grid-template-columns: repeat(2,1fr); }
  .nav-links { display: none; }
  .nav-mobile-btn { display: flex; }
  .footer-grid { grid-template-columns: 1fr; gap: 32px; }
  .footer-bottom { display: flex; flex-direction: column; gap: 8px; text-align: center; }
  .ai-panel { width: 100vw; }
  .sales-select-grid { grid-template-columns: 1fr; }
}
@media (max-width: 480px) {
  .grid-3 { grid-template-columns: 1fr; }
  .grid-4 { grid-template-columns: 1fr; }
  .hero-actions { flex-direction: column; }
  .news-card { flex-direction: column; }
  .news-card-img { width: 100%; height: 160px; }
}

/* ===== Scrollbar ===== */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--text-3); }

/* ===== Selection ===== */
::selection { background: rgba(0,212,255,0.25); color: var(--text); }

/* ===== Product Mini Cards (homepage) ===== */
.products-home-grid { gap: 16px; }
.product-mini-card {
  display: flex; flex-direction: column; padding: 20px 18px; gap: 10px;
  text-decoration: none;
}
.product-mini-icon {
  width: 48px; height: 48px; border-radius: 12px;
  background: rgba(0,212,255,0.08); border: 1px solid rgba(0,212,255,0.15);
  display: flex; align-items: center; justify-content: center;
  font-size: 1.4rem; flex-shrink: 0; overflow: hidden;
}
.product-mini-icon img { width: 100%; height: 100%; object-fit: cover; }
.product-mini-body { flex: 1; }
.product-mini-title { font-size: 0.97rem; font-weight: 700; color: var(--text); margin-bottom: 6px; line-height: 1.4; }
.product-mini-desc { font-size: 0.82rem; color: var(--text-2); line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.product-mini-arrow { font-size: 0.78rem; font-weight: 600; color: var(--cyan); margin-top: auto; }

/* ===== Case Row List (homepage) ===== */
.cases-list { display: flex; flex-direction: column; gap: 2px; }
.case-row {
  display: flex; align-items: center; gap: 16px;
  padding: 14px 20px; border-radius: var(--r);
  background: var(--card); border: 1px solid var(--border);
  transition: var(--t); text-decoration: none;
}
.case-row:hover { border-color: var(--border-a); background: var(--card-h); transform: translateX(4px); }
.case-row-icon {
  width: 44px; height: 44px; border-radius: 10px; flex-shrink: 0;
  background: rgba(0,212,255,0.07); border: 1px solid rgba(0,212,255,0.12);
  display: flex; align-items: center; justify-content: center; overflow: hidden; font-size: 1.2rem;
}
.case-row-icon img { width: 100%; height: 100%; object-fit: cover; }
.case-row-body { flex: 1; min-width: 0; }
.case-row-name { font-size: 0.93rem; font-weight: 600; color: var(--text); margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.case-row-desc { font-size: 0.8rem; color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.case-row-arrow { font-size: 0.78rem; font-weight: 600; color: var(--cyan); flex-shrink: 0; }

/* ===== News Feed List (homepage) ===== */
.news-feed { display: flex; flex-direction: column; gap: 0; }
.news-feed-item {
  display: flex; align-items: flex-start; gap: 20px;
  padding: 18px 0; border-bottom: 1px solid var(--border);
  text-decoration: none; transition: var(--t);
}
.news-feed-item:first-child { border-top: 1px solid var(--border); }
.news-feed-item:hover .news-feed-title { color: var(--cyan); }
.news-feed-date {
  flex-shrink: 0; width: 80px; padding-top: 3px;
  font-size: 0.72rem; color: var(--text-3); line-height: 1.5;
}
.news-feed-content { flex: 1; min-width: 0; }
.news-feed-title { font-size: 0.95rem; font-weight: 600; color: var(--text); margin-bottom: 4px; line-height: 1.4; transition: color var(--t); }
.news-feed-desc { font-size: 0.82rem; color: var(--text-2); display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
.news-feed-thumb { width: 80px; height: 54px; object-fit: cover; border-radius: 8px; flex-shrink: 0; background: var(--bg-3); }

/* ===== Footer Company Logo ===== */
.footer-company-logo { margin-top: 12px; }
.footer-company-logo img { height: 28px; width: auto; display: block; opacity: 0.85; }

/* ===== Footer QR ===== */
.footer-qr { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; margin-top: 16px; }
.footer-qr img { width: 88px; height: 88px; border-radius: 8px; border: 1px solid var(--border); }
.footer-qr span { font-size: 0.75rem; color: var(--text-3); }

/* ===== Responsive additions ===== */
@media (max-width: 1024px) {
  .products-home-grid { grid-template-columns: repeat(2,1fr); }
}
@media (max-width: 640px) {
  .products-home-grid { grid-template-columns: 1fr 1fr; }
  .case-row-desc { display: none; }
  .news-feed-thumb { display: none; }
  .news-feed-date { width: 68px; }
}

/* ===== Carousel ===== */
.carousel { position: relative; height: clamp(420px, 70vh, 720px); overflow: hidden; background: var(--bg); }
.carousel-track { display: flex; height: 100%; transition: transform 0.6s cubic-bezier(0.4,0,0.2,1); }
.carousel-slide {
  position: relative; flex: 0 0 100%; height: 100%;
  background-size: cover; background-position: center; display: flex; align-items: center;
}
.carousel-overlay {
  position: absolute; inset: 0;
  background:
    linear-gradient(180deg,
      rgba(8,12,20,0.55) 0%,
      rgba(8,12,20,0.15) 30%,
      rgba(8,12,20,0.15) 70%,
      rgba(8,12,20,0.55) 100%),
    rgba(8,12,20,0.30);
}
/* .carousel-content：从"左侧 640px 窄栏"改成"占满 container 宽、内部三行居中"。
 * 主标题限宽 75% 让长标题自然折 2 行且两侧留呼吸感；副标题限宽 720px 保持视觉聚焦；
 * 按钮外层 fade-in <div> 通过 text-align:center 使内联的 <a class="btn"> 居中显示。
 * 手机端在 @media (max-width: 640px) 里把 h1/sub 都放开到 100%。 */
.carousel-content { position: relative; z-index: 2; width: 100%; text-align: center; }
.carousel-content h1 { margin: 0 auto 16px; max-width: 75%; }
.carousel-sub {
  font-size: clamp(0.95rem, 2vw, 1.2rem); color: var(--text);
  margin: 0 auto 28px; max-width: 720px; opacity: 0.9;
}
.carousel-arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 3;
  width: 48px; height: 48px; border-radius: 50%; border: 1px solid var(--border);
  background: rgba(8,12,20,0.5); color: var(--text); font-size: 1.8rem; line-height: 1;
  cursor: pointer; transition: var(--t); display: flex; align-items: center; justify-content: center;
}
.carousel-arrow:hover { background: var(--card-h); border-color: var(--border-a); }
.carousel-prev { left: 24px; }
.carousel-next { right: 24px; }
.carousel-dots { position: absolute; bottom: 24px; left: 50%; transform: translateX(-50%); z-index: 3; display: flex; gap: 10px; }
.carousel-dot { width: 10px; height: 10px; border-radius: 50%; border: none; background: rgba(255,255,255,0.3); cursor: pointer; transition: var(--t); padding: 0; }
.carousel-dot.active { background: var(--cyan); width: 28px; border-radius: 5px; }

/* ===== Downloads ===== */
.download-list { display: flex; flex-direction: column; gap: 14px; }
.download-item { display: flex; align-items: center; gap: 18px; padding: 20px 24px; transition: var(--t); }
.download-item:hover { background: var(--card-h); border-color: var(--border-a); transform: translateY(-2px); }
.download-icon {
  width: 56px; height: 56px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--r);
  background: linear-gradient(135deg, rgba(0,212,255,0.10), rgba(79,142,247,0.10));
  border: 1px solid var(--border);
  color: var(--cyan);
}
.download-icon svg { width: 30px; height: 30px; }
.download-body { flex: 1; min-width: 0; }
.download-title { font-weight: 600; font-size: 1.05rem; margin-bottom: 4px; }
.download-desc { color: var(--text-2); font-size: 0.9rem; margin-bottom: 8px; }
.download-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; font-size: 0.8rem; color: var(--text-3); }
.download-tag { display: inline-block; padding: 2px 10px; border-radius: 20px; background: var(--card); border: 1px solid var(--border); color: var(--cyan); }
.download-actions {
  flex-shrink: 0;
  display: flex; flex-direction: column; gap: 8px;
  min-width: 108px;
}
.download-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 8px 14px; border-radius: var(--r);
  font-size: 0.85rem; font-weight: 600; white-space: nowrap;
  cursor: pointer; text-decoration: none;
  border: 1px solid transparent; transition: var(--t);
  font-family: var(--font);
}
.download-btn svg { width: 15px; height: 15px; }
.download-btn-primary {
  background: var(--grad); color: #051622; border-color: transparent;
}
.download-btn-primary:hover { transform: translateY(-1px); box-shadow: var(--glow); }
.download-btn-ghost {
  background: transparent; color: var(--cyan); border-color: var(--border-a);
}
.download-btn-ghost:hover { background: rgba(0,212,255,0.08); }
@media (max-width: 640px) {
  .carousel-arrow { width: 38px; height: 38px; font-size: 1.4rem; }
  .carousel-prev { left: 10px; }
  .carousel-next { right: 10px; }
  /* 手机端箭头（38px 宽 + 10px 边距 = 48px 侵入内容区）会压在文字上。
   * 给内容加 40px 左右内边距 → 文字从容器 24px 起 +40px = 64px，
   * 距离箭头右缘 48px 留 16px 安全缓冲，不再重叠。桌面端不受影响。
   * h1/sub 的 max-width 桌面端限宽在窄屏下会导致每行只有几个字，这里放开成 100%。 */
  .carousel-content { padding: 0 40px; }
  .carousel-content h1,
  .carousel-sub { max-width: 100%; }
  .download-item { flex-wrap: wrap; gap: 12px; }
  .download-actions { flex-direction: row; width: 100%; justify-content: flex-end; }
  .download-btn { flex: 1; max-width: 160px; }
}

/* ===== POC Modal =====
 * 视觉方向：宽 modal + 四列扁平流 + 意向产品横排 4 张产品卡片
 * - modal 单色底 var(--bg-4) 比 --bg-2 亮一档，视觉不再"压"
 * - modal 宽 960px，桌面端字段用四列 grid 铺开
 * - 单一 .poc-section 卡片包裹所有字段，内部用小标题 + 分割线做视觉分区
 * - 意向产品做成 4 张卡片一排（产品固定 4 个，直接铺平比下拉更直观）
 *   - 每张卡片包裹 <input type="checkbox" name="products">，作数据载体，
 *     JS 提交逻辑（querySelectorAll('input[name=products]:checked')）零改动
 * - 手机端 ≤1100px 表单降 3 列，≤900px 降 2 列，≤640px 单列 + submit sticky
 *   - 产品卡片同步降列（1100 降 3、900 降 2、640 降 1）
 * - 桌面态（≥641px）同样吸底 submit + 按 max-height 分两档（900/740）压纵向间距，
 *   兼顾 1366×768 / 1536×864 等常见笔记本视口，尽量一屏放完不必滚动 */
/* .modal.poc-modal 用双 class 提权到 (0,2,0)，覆盖上游 .modal { width: 520px }。
 * max-width: calc(100vw - 32px) 从 .modal 继承，不需重复声明。 */
.modal.poc-modal {
  width: 960px;
  padding: 28px 28px 24px;
  /* 覆盖 .modal 的 var(--bg-2) 深底：改成 --bg-4 (#1a2338)，比 --bg-2 (#0d1421) 亮
   * 一档，视觉上"不闷"。之前用渐变是为了做上亮下暗层次感，但 sticky 底栏跟渐变
   * 中段颜色错位会显得"黑一块"，改单色后 section 卡片的白底叠加继续提供层次感，
   * 且 sticky 底栏能与 modal 底融为一体。 */
  background: var(--bg-4);
  border-color: rgba(255,255,255,0.10);
}
.poc-modal .modal-header { margin-bottom: 8px; }
.poc-modal-body .modal-step-title { margin-bottom: 18px; color: var(--text-2); }

.poc-section {
  background: rgba(255,255,255,0.07);
  border: 1px solid rgba(255,255,255,0.14);
  border-radius: var(--r);
  padding: 20px 20px 16px;
}
.poc-section-title {
  font-size: 0.78rem; font-weight: 700; letter-spacing: 0.08em; color: var(--cyan);
  margin: 0 0 14px; padding-left: 10px; border-left: 3px solid var(--cyan);
}
/* 同一 section 里的第 2/3... 个小标题上面加间距，跟前一段区分开 */
.poc-section-title + * { margin-top: 0; }
.poc-section .poc-section-title:not(:first-child) { margin-top: 6px; }
/* section 内部软分割线：用来在同一张卡片里分开"企业信息"和"试用产品"两块 */
.poc-divider { height: 1px; background: rgba(255,255,255,0.10); margin: 18px 0 16px; }
.poc-form .form-group { margin-bottom: 12px; }
.poc-form .form-group:last-child { margin-bottom: 0; }
.poc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 14px; }
.poc-grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px 14px; }
.poc-grid .form-group,
.poc-grid-4 .form-group { margin-bottom: 0; }
.poc-grid + .form-group,
.poc-grid-4 + .form-group { margin-top: 12px; }
.poc-form label { display: block; font-size: 0.8rem; color: var(--text-2); margin-bottom: 6px; }
.poc-req::after { content: ' *'; color: #ff6b6b; }

/* 输入框：底色进一步提亮（section 已经有 5% 白底了，这里再叠一层白让输入框自身可见）
 * 注意 :not([type=checkbox])：意向产品的 <input type=checkbox> 也是 .poc-form 后代，
 * 但它下面有独立的 appearance:none 自绘规则，不能被这里的通用输入框样式命中，
 * 否则聚焦时会显示成"选中样"（青边+青底），误导用户以为已勾选。 */
.poc-form input:not([type="checkbox"]),
.poc-form select,
.poc-form textarea {
  width: 100%;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.18);
  border-radius: var(--r);
  padding: 10px 14px;
  color: var(--text);
  font-family: var(--font);
  font-size: 0.9rem;
  outline: none;
  transition: border-color var(--t), box-shadow var(--t), background var(--t);
}
.poc-form input:not([type="checkbox"])::placeholder,
.poc-form textarea::placeholder { color: rgba(232,237,245,0.35); }
.poc-form input:not([type="checkbox"]):hover,
.poc-form select:hover,
.poc-form textarea:hover { border-color: rgba(255,255,255,0.28); }
.poc-form input:not([type="checkbox"]):focus,
.poc-form select:focus,
.poc-form textarea:focus {
  border-color: var(--cyan);
  background: rgba(0,212,255,0.08);
  box-shadow: 0 0 0 3px rgba(0,212,255,0.16);
}
.poc-form textarea { resize: vertical; min-height: 76px; }
.poc-form select { appearance: none; -webkit-appearance: none; background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' stroke='%238899aa' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>"); background-repeat: no-repeat; background-position: right 14px center; padding-right: 36px; }
/* 原生 <option> 弹层用 UA 样式，不继承父 select 背景，需显式指定深色底避免被系统主题渲染成白色。 */
.poc-form select option { background: var(--bg-4); color: var(--text); }

/* ── 手机端自绘下拉框（.wis-select）──
 * 手机上原生 <select> 的下拉是 OS 接管的全屏白底列表，无法用 CSS 控制成深色。
 * 方案：JS 在每个 .poc-form select 后面插一个 .wis-select 自绘壳子，
 *   - 手机（≤640px）：隐藏原生 select、显示自绘壳子；
 *   - 电脑（≥641px）：隐藏自绘壳子、保留原生 select（沿用系统就地下拉）。
 * 数据仍存在原生 select 里，自绘壳子只负责界面 + 把选中值写回 select，提交逻辑零改动。 */
.wis-select { display: none; position: relative; width: 100%; }  /* 默认（电脑）不显示，走原生 select */
/* 触发框：视觉复刻 .poc-form select（同底色/边框/圆角/右侧箭头） */
.wis-select-trigger {
  width: 100%;
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.18);
  border-radius: var(--r);
  padding: 10px 14px;
  color: var(--text);
  font-family: var(--font);
  font-size: 0.9rem;
  text-align: left;
  cursor: pointer;
  outline: none;
  transition: border-color var(--t), box-shadow var(--t), background var(--t);
}
.wis-select-trigger:hover { border-color: rgba(255,255,255,0.28); }
.wis-select[data-open="true"] .wis-select-trigger {
  border-color: var(--cyan);
  background: rgba(0,212,255,0.08);
  box-shadow: 0 0 0 3px rgba(0,212,255,0.16);
}
/* 触发框文字：单行省略，占位（未选/请选择）用弱色区分 */
.wis-select-value { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wis-select.is-placeholder .wis-select-value { color: rgba(232,237,245,0.35); }
/* 右侧箭头：跟随展开旋转 */
.wis-select-arrow {
  flex-shrink: 0; width: 12px; height: 8px;
  transition: transform var(--t);
  color: var(--text-2);
}
.wis-select[data-open="true"] .wis-select-arrow { transform: rotate(180deg); }
/* 选项面板：就地展开在触发框正下方（绝对定位，不挤压弹窗其它字段） */
.wis-select-panel {
  position: absolute; top: calc(100% + 6px); left: 0; right: 0; z-index: 30;
  background: var(--bg-4);
  border: 1px solid rgba(255,255,255,0.18);
  border-radius: var(--r);
  box-shadow: 0 12px 32px rgba(0,0,0,0.45);
  padding: 4px;
  max-height: 240px; overflow-y: auto;      /* 选项多时面板内部滚动 */
  display: none;
}
.wis-select[data-open="true"] .wis-select-panel { display: block; }
.wis-select-option {
  padding: 10px 12px;
  border-radius: 8px;
  color: var(--text);
  font-size: 0.9rem;
  line-height: 1.3;
  cursor: pointer;
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
}
.wis-select-option:hover { background: rgba(255,255,255,0.06); }
/* 当前选中项：青色高亮 + 右侧 ✓ */
.wis-select-option.is-selected { color: var(--cyan); background: rgba(0,212,255,0.08); }
.wis-select-option.is-selected::after { content: '✓'; flex-shrink: 0; font-size: 0.85rem; }

/* 意向产品：一排 4 张产品卡片
 * 每张卡片是 `<label>` 包裹隐藏的原生 `<input type="checkbox" name="products">`。
 * 点击整卡即勾选（label→input 原生转发），submit handler 用
 * `querySelectorAll('input[name="products"]:checked')` 收集，零 JS 参与数据流。 */
.poc-product-cards {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
}
/* label.poc-product-card：显式加 label 元素前缀把特异性提到 (0,1,1)，
 * 平掉 .form-group label / .poc-form label 的 display:block 覆盖 —— 否则 flex 布局
 * 被降级为 block，内部 .poc-product-card-check 退回 inline，18×18 方框视觉消失，
 * 剩下 ::after 对钩叠到产品名上。 */
label.poc-product-card {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 14px;
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.16);
  border-radius: var(--r);
  cursor: pointer;
  transition: border-color var(--t), background var(--t), box-shadow var(--t);
  user-select: none;
  min-height: 48px;
  /* 显式定位上下文：内部隐藏 checkbox 用 position:absolute，靠这里锚定，
   * 避免个别浏览器把它算到更远的祖先（modal / body），焦点滚动时可能偏。 */
  position: relative;
}
.poc-product-card:hover { border-color: rgba(255,255,255,0.30); background: rgba(255,255,255,0.09); }
/* input 视觉隐藏但不 display:none —— :checked 仍需被同级 .poc-product-card-check 命中 */
.poc-product-card > input[type="checkbox"] {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}
.poc-product-card-check {
  flex-shrink: 0;
  width: 18px; height: 18px;
  border: 1.5px solid rgba(255,255,255,0.45);
  border-radius: 4px;
  background: rgba(0,0,0,0.25);
  position: relative;
  transition: background var(--t), border-color var(--t);
}
.poc-product-card-check::after {
  content: '';
  position: absolute; left: 5px; top: 1px;
  width: 5px; height: 10px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg) scale(0);
  transition: transform var(--t);
}
.poc-product-card-name {
  font-size: 0.9rem;
  color: var(--text);
  line-height: 1.35;
  /* 产品名过长时优雅截断 —— 不影响 4 列均匀铺开
   * min-width: 0 是 flex 子项 ellipsis 生效的关键：flex 项默认 min-width:auto = 内容
   * 自然宽度，nowrap 文字会拒绝收缩、把 .poc-product-card-check 挤到不见。
   * 显式设 0 后允许收缩到 0，overflow+ellipsis 才能真正触发。 */
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* 选中态：整张卡青色高亮 + 勾选框打钩
 * 注意：`:has()` 和 `.is-checked` 必须拆成独立规则，不能用逗号并列。
 * 原因：CSS 顶层选择器列表不是 forgiving 的（forgiving 只在 `:is()/:where()` 里生效），
 * 老浏览器（Safari <15.4 / Firefox <121）不识别 `:has()` 会把整条规则视作非法丢弃 ——
 * `.is-checked` fallback 也一起报废，勾选后卡片完全没视觉反馈。
 * 拆两条独立规则后，`:has()` 规则在老浏览器上被丢弃，`.is-checked` 规则仍然生效。 */
.poc-product-card.is-checked {
  border-color: var(--cyan);
  background: rgba(0,212,255,0.12);
  box-shadow: 0 0 0 1px var(--cyan) inset;
}
.poc-product-card:has(> input[type="checkbox"]:checked) {
  border-color: var(--cyan);
  background: rgba(0,212,255,0.12);
  box-shadow: 0 0 0 1px var(--cyan) inset;
}
.poc-product-card.is-checked .poc-product-card-check {
  background: var(--cyan);
  border-color: var(--cyan);
}
.poc-product-card:has(> input[type="checkbox"]:checked) .poc-product-card-check {
  background: var(--cyan);
  border-color: var(--cyan);
}
.poc-product-card.is-checked .poc-product-card-check::after {
  transform: rotate(45deg) scale(1);
}
.poc-product-card:has(> input[type="checkbox"]:checked) .poc-product-card-check::after {
  transform: rotate(45deg) scale(1);
}
/* 键盘可达：input focus 时给外层卡片一圈发光 */
.poc-product-card:focus-within {
  border-color: var(--cyan);
  box-shadow: 0 0 0 3px rgba(0,212,255,0.20);
}

/* "暂不确定"单独一行，弱化处理
 * 同 .poc-product-card：显式加 label 前缀避免被 .form-group label 的 display:block 覆盖。 */
label.poc-product-fallback {
  display: inline-flex; align-items: center; gap: 8px;
  margin-top: 10px;
  padding: 6px 4px;
  font-size: 0.85rem;
  color: var(--text-2);
  cursor: pointer;
}
.poc-product-fallback input[type="checkbox"] {
  width: 15px; height: 15px;
  accent-color: var(--cyan);
  cursor: pointer;
}

/* 意向产品下拉多选组件的 CSS 已随产品卡片方案下线，历史见 git log */

.poc-submit-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-top: 4px; padding-top: 16px;
  border-top: 1px solid rgba(255,255,255,0.10);
}
/* .poc-note 用 text-2 而非 text-3：#4a5568 在 modal 底 var(--bg-4) 上对比度只有 ~2:1，
 * 提示文字（如"请至少选择一个意向产品"）几乎不可读；#8899aa 对比度 ~5.4:1 过 WCAG AA。
 * 错误态另有 #ff6b6b 独立高亮。 */
.poc-note { font-size: 0.78rem; color: var(--text-2); }
.poc-note.error { color: #ff6b6b; }
.poc-success { display: none; text-align: center; padding: 24px 8px 8px; }
.poc-success.active { display: block; }
.poc-success-icon {
  width: 56px; height: 56px; border-radius: 50%; margin: 0 auto 16px;
  background: var(--grad); color: #fff; font-size: 1.8rem;
  display: flex; align-items: center; justify-content: center;
}
.poc-success h4 { color: var(--text); margin-bottom: 8px; }
.poc-success p { font-size: 0.88rem; margin-bottom: 20px; }

/* 中间视口断点：
 *   ≤1100px：4 列降 3 列 —— modal max-width 已被 calc(100vw - 32px) 收窄，字段挤压
 *   ≤900px： 3 列降 2 列
 *   ≤640px： 单列（在下一 @media 块） */
@media (max-width: 1100px) {
  .poc-grid-4 { grid-template-columns: 1fr 1fr 1fr; }
  .poc-product-cards { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 900px) {
  .poc-grid-4 { grid-template-columns: 1fr 1fr; }
  .poc-product-cards { grid-template-columns: repeat(2, 1fr); }
}

/* 桌面端一屏收纳：从 1024px 起（含笔记本/桌面显示器）轻微收紧间距，
 * 目标是让 modal 在 1080p 视口内不出滚动条。手机端 @640 和平板 641-1023 均不受影响。
 * 只减间距/padding/最小高度，不改字段结构、字号、颜色、布局列数。
 * .modal.poc-modal 用双 class 提权到 (0,2,0)，覆盖默认桌面规则 (0,2,0) 但因位置靠后而生效。 */
@media (min-width: 1024px) {
  .modal.poc-modal { padding: 22px 24px 18px; }
  .poc-modal .modal-header { margin-bottom: 4px; }
  .poc-modal-body .modal-step-title { margin-bottom: 10px; }
  .poc-section { padding: 16px 18px 12px; }
  .poc-section-title { margin-bottom: 10px; }
  .poc-divider { margin: 12px 0 10px; }
  .poc-form .form-group { margin-bottom: 10px; }
  /* 上一条 .poc-form .form-group 特异性 (0,2,0) 会覆盖 line 800 的 .poc-grid .form-group 兜底
   * (同为 (0,2,0)、源顺序更晚)。这里显式复刻兜底规则，让 grid 内字段继续靠 gap 排布、
   * 不叠 margin-bottom，避免栅格纵向间距被撑大。 */
  .poc-grid .form-group,
  .poc-grid-4 .form-group { margin-bottom: 0; }
  .poc-form label { margin-bottom: 4px; }
  .poc-form input:not([type="checkbox"]),
  .poc-form select,
  .poc-form textarea { padding: 8px 12px; }
  .poc-form textarea { min-height: 60px; }
  .poc-product-cards { gap: 8px; }
  label.poc-product-card { padding: 10px 12px; min-height: 44px; }
  .poc-submit-row { padding-top: 12px; }
}

/* POC 弹窗（>640px 桌面 / 小笔记本）：整体字号收一档 + 业务问题、补充说明两个 textarea
 * 收到约 2 行高，进一步压缩纵向占位，让更多屏幕一屏放下、减少滚动条。
 * 位置放在 min-width:1024 块之后、max-width:640 块之前，作用范围：
 *   ≥1024：与 1024 块同时命中，本块源序靠后 → 字号/textarea 高度以本块为准，
 *          padding 仍沿用 1024 块的紧凑值（本块不设 padding）；
 *   641–1023：仅命中本块，padding 用基础值；
 *   ≤640：手机端 —— 本块与 1024 块都命中不到，完全不受影响。 */
@media (min-width: 641px) {
  .poc-modal .modal-header h3 { font-size: 1.1rem; }
  .poc-modal-body .modal-step-title { font-size: 0.76rem; }
  .poc-section-title { font-size: 0.74rem; }
  .poc-form label { font-size: 0.76rem; }
  .poc-form input:not([type="checkbox"]),
  .poc-form select,
  .poc-form textarea { font-size: 0.84rem; }
  /* 两个 textarea（业务问题 / 补充说明）压到约 2 行；line-height 收到 1.5 让 2 行高度可控，
   * 仍保留 resize: vertical，用户可自行拖大。 */
  .poc-form textarea { min-height: 60px; line-height: 1.5; }
  .poc-product-card-name { font-size: 0.84rem; }
  label.poc-product-fallback { font-size: 0.8rem; }
  /* 提交栏兜底：无论视口多矮、上方字段是否被压缩到位，提交按钮始终吸附在 modal
   * 可视区底部，不会被"藏"到需要专门滚动才能找到的位置（复用手机端已验证的 sticky 思路，
   * sticky 的定位基准是 .modal 本身的 overflow-y:auto 滚动区，无需额外包一层滚动容器）。
   * 桌面态左右仍有 modal 内边距，不必像手机端那样负 margin 撑满通栏。 */
  .poc-submit-row {
    position: sticky; bottom: 0;
    background: var(--bg-4);
    z-index: 2;
  }
}

/* 视口高度紧张时的纵向再压缩：line 998 起的 min-width:1024 压缩块只按“宽度”分级，
 * 但实测更常见的瓶颈是“高度”——1536×864（Windows 125% 缩放下的常见有效分辨率）、
 * 1366×768 等笔记本机型，浏览器可用高度往往只有 650~770px，比 1024 块假设的桌面场景更矮，
 * 表单仍会溢出 90vh 触发滚动。这里按 max-height 分两档在原压缩基础上继续收紧纵向间距，
 * 目标是覆盖到常见笔记本分辨率下也能一屏放完（含提交按钮），不再需要滚动。
 * 限定 min-width:641px 避免影响 ≤640 的手机端断点。 */
@media (min-width: 641px) and (max-height: 900px) {
  .modal.poc-modal { padding: 16px 22px 14px; }
  .poc-modal .modal-header { margin-bottom: 2px; }
  .poc-modal-body .modal-step-title { margin-bottom: 6px; }
  .poc-section { padding: 12px 16px 10px; }
  .poc-section-title { margin-bottom: 6px; }
  .poc-section .poc-section-title:not(:first-child) { margin-top: 2px; }
  .poc-divider { margin: 8px 0; }
  .poc-form .form-group { margin-bottom: 7px; }
  .poc-grid .form-group,
  .poc-grid-4 .form-group { margin-bottom: 0; }
  .poc-grid,
  .poc-grid-4 { gap: 7px 14px; }
  .poc-form label { margin-bottom: 3px; }
  .poc-form input:not([type="checkbox"]),
  .poc-form select,
  .poc-form textarea { padding: 6px 12px; }
  .poc-form textarea { min-height: 40px; line-height: 1.4; }
  .poc-product-cards { gap: 6px; }
  label.poc-product-card { padding: 7px 12px; min-height: 36px; }
  label.poc-product-fallback { margin-top: 6px; }
  .poc-submit-row { padding-top: 8px; margin-top: 2px; }
}
@media (min-width: 641px) and (max-height: 740px) {
  .modal.poc-modal { padding: 12px 20px 10px; }
  .poc-section { padding: 9px 14px 7px; }
  .poc-form textarea { min-height: 30px; }
  label.poc-product-card { padding: 5px 10px; min-height: 30px; }
}

/* 手机端：单列 + sticky 底栏 + 卡片略收边
 * 用 .modal.poc-modal 保持跟桌面态一致的双 class 特异性 (0,2,0)，
 * 覆盖通用手机端规则 `.modal { padding: 24px 20px … }` 的 (0,1,0)。 */
@media (max-width: 640px) {
  .modal.poc-modal { padding: 20px 16px 0; }
  .modal.poc-modal .modal-header { padding: 0 4px; }
  .poc-section { padding: 14px 14px 10px; }
  .poc-grid,
  .poc-grid-4 { grid-template-columns: 1fr; gap: 10px; }
  /* 产品卡片手机端强制单列：与其它字段（公司/行业/…）保持一致的"一屏一栏"节奏，
   * 覆盖 @900px 断点里 .poc-product-cards 的 2 列布局。 */
  .poc-product-cards { grid-template-columns: 1fr; gap: 8px; }
  label.poc-product-card { padding: 10px 12px; min-height: 44px; }
  .poc-product-card-name { font-size: 0.85rem; }
  /* 手机端：隐藏"已被 JS 成功增强"的原生 select（打了 .wis-enhanced 标记的），
   * 改用自绘 .wis-select（避免 OS 全屏白底列表）。
   * 若 JS 未加载/失败，select 不带该标记，仍显示原生下拉，功能不丢。 */
  .poc-form select.wis-enhanced { display: none; }
  .poc-form .wis-select { display: block; }
  .poc-submit-row {
    /* 突破 .poc-modal 的左右 padding，铺满宽度，粘在滚动容器底部。
     * 背景色对齐 .poc-modal 单色底 var(--bg-4)，与 modal 底融为一体，无色差断层。 */
    position: sticky; bottom: 0;
    margin: 12px -16px 0;
    padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
    background: var(--bg-4);
    border-top: 1px solid rgba(255,255,255,0.10);
    z-index: 2;
  }
}

/* ===== Preview Modal ===== */
.preview-modal {
  width: 90vw; max-width: 90vw;
  height: 90vh; max-height: 90vh;
  padding: 24px; display: flex; flex-direction: column;
}
.preview-header { margin-bottom: 16px; flex-shrink: 0; }
.preview-header h3 {
  font-size: 1.05rem; font-weight: 600;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  max-width: calc(100% - 40px);
}
.preview-body {
  flex: 1; min-height: 0; position: relative;
  background: var(--bg-3);
  border: 1px solid var(--border);
  border-radius: var(--r);
  overflow: hidden;
}
.preview-frame { width: 100%; height: 100%; border: 0; background: #fff; }
.preview-image {
  width: 100%; height: 100%; object-fit: contain;
  background: #0a0f1a;
}
.preview-html {
  width: 100%; height: 100%; overflow: auto; padding: 32px 40px;
  color: var(--text); font-size: 0.95rem; line-height: 1.7;
  background: var(--bg-2);
}
.preview-html h1, .preview-html h2, .preview-html h3, .preview-html h4 {
  color: var(--text); margin: 1.2em 0 0.6em;
}
.preview-html h1 { font-size: 1.6rem; }
.preview-html h2 { font-size: 1.35rem; }
.preview-html h3 { font-size: 1.15rem; }
.preview-html p { margin: 0.8em 0; color: var(--text); }
.preview-html ul, .preview-html ol { margin: 0.8em 0 0.8em 1.4em; }
.preview-html li { margin: 0.3em 0; }
.preview-html a { color: var(--cyan); }
.preview-html img { max-width: 100%; height: auto; border-radius: 6px; margin: 0.8em 0; }
.preview-html table {
  border-collapse: collapse; margin: 1em 0; width: 100%;
  font-size: 0.9rem;
}
.preview-html th, .preview-html td {
  border: 1px solid var(--border); padding: 8px 12px; text-align: left;
}
.preview-html th { background: var(--card); color: var(--text); font-weight: 600; }
.preview-html code {
  background: var(--card); padding: 2px 6px; border-radius: 4px;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 0.88em;
}
.preview-html pre {
  background: var(--bg); border: 1px solid var(--border); border-radius: var(--r);
  padding: 14px 16px; overflow-x: auto; margin: 1em 0;
}
.preview-html pre code { background: transparent; padding: 0; }
.preview-html blockquote {
  border-left: 3px solid var(--cyan); padding: 4px 14px;
  margin: 1em 0; color: var(--text-2); background: var(--card);
}
.preview-loading, .preview-empty {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; color: var(--text-2); font-size: 0.9rem;
}
/* hidden 属性默认 display:none 会被上面的 display:flex 覆盖，显式恢复。 */
.preview-body [hidden] { display: none !important; }
.preview-spinner {
  width: 36px; height: 36px; border-radius: 50%;
  border: 3px solid var(--border); border-top-color: var(--cyan);
  animation: preview-spin 0.8s linear infinite;
}
@keyframes preview-spin { to { transform: rotate(360deg); } }
@media (max-width: 640px) {
  .preview-modal { width: 100vw; max-width: 100vw; height: 100vh; max-height: 100vh; border-radius: 0; padding: 16px; }
  .preview-html { padding: 20px; }
}

/* ===== Mobile Enhancements (additive — safe to remove as a block) ===== */

/* Mobile nav dropdown (classList-based, no inline styles) */
@media (max-width: 768px) {
  .nav-links {
    display: none;
    position: absolute;
    top: 100%; left: 0; right: 0;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    background: rgba(8,12,20,0.97);
    -webkit-backdrop-filter: blur(20px);
    backdrop-filter: blur(20px);
    padding: 12px 16px calc(16px + env(safe-area-inset-bottom));
    border-bottom: 1px solid var(--border);
    box-shadow: 0 12px 24px rgba(0,0,0,0.35);
  }
  .nav-links.open { display: flex; }
  .nav-links li { width: 100%; }
  .nav-links a {
    display: block;
    padding: 12px 8px;
    font-size: 0.95rem;
    color: var(--text);
    border-bottom: 1px solid var(--border);
  }
  .nav-links a::after { display: none; }
  /* 移动端 active：保留桌面端的淡青底 + 圆角，但恢复 block 的 padding、去掉描边，避免撑破菜单项。 */
  .nav-links a.active { padding: 12px 8px; border-color: transparent; }
  .nav-links li:last-child a { border-bottom: none; }
  .nav-cta {
    display: inline-block;
    margin-top: 8px;
    text-align: center;
    padding: 10px 20px !important;
  }
  /* Hamburger → X */
  .nav-mobile-btn span { transition: transform 0.25s ease, opacity 0.2s ease; transform-origin: center; }
  .nav-mobile-btn.active span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
  .nav-mobile-btn.active span:nth-child(2) { opacity: 0; }
  .nav-mobile-btn.active span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
}

/* Tighter spacing on narrow screens */
@media (max-width: 768px) {
  .container { padding: 0 16px; }
  .section { padding: 44px 0; }
  .section-sm { padding: 28px 0; }
  .section-header { margin-bottom: 28px; }
  .page-header { padding: 40px 0 28px; }
  .page-header p { font-size: 0.95rem; }
  .contact-grid { gap: 32px; }
}

/* Hero / carousel adjustments */
@media (max-width: 640px) {
  .hero { min-height: auto; padding: 44px 0 60px; }
  .hero-desc { margin-bottom: 22px; }
  .hero-actions .btn { width: 100%; justify-content: center; }
  .hero-scroll { display: none; }
  .hero-orb-1 { width: 260px; height: 260px; top: -60px; right: -60px; }
  .hero-orb-2 { width: 220px; height: 220px; bottom: -40px; left: -40px; }
  .carousel { height: clamp(340px, 62vh, 520px); }
  .carousel-sub { margin-bottom: 20px; }
  .carousel-dots { bottom: 14px; gap: 8px; }
  .carousel-dot { width: 8px; height: 8px; }
  .carousel-dot.active { width: 22px; }
}

/* Buttons: comfortable tap target */
@media (max-width: 640px) {
  .btn { min-height: 42px; padding: 10px 20px; }
  .btn-sm { min-height: 38px; padding: 8px 16px; }
}

/* Modal: allow action buttons to wrap, respect iOS safe area */
@media (max-width: 640px) {
  .modal {
    padding: 24px 20px calc(24px + env(safe-area-inset-bottom));
    border-radius: 16px;
    max-height: calc(100vh - 24px);
  }
  .modal-header { margin-bottom: 20px; }
  .modal-actions { flex-wrap: wrap; }
  .modal-actions .btn { flex: 1 1 auto; justify-content: center; }
  .sales-select-grid { gap: 10px; }
}

/* Footer overflow safety */
@media (max-width: 640px) {
  .footer { padding-bottom: calc(24px + env(safe-area-inset-bottom)); }
  .footer-icp {
    white-space: normal;
    justify-content: center;
    gap: 6px;
    flex-wrap: wrap;
  }
  .footer-bottom { gap: 10px; }
}

/* AI panel: iOS smooth scroll + safe area */
.ai-messages { -webkit-overflow-scrolling: touch; }
@media (max-width: 768px) {
  .ai-panel-header { padding: 16px 20px; padding-top: calc(16px + env(safe-area-inset-top)); }
  .ai-input-area { padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); }
}

/* Rich text overflow protection (prevents wide <pre>/<table>/<img>/<video> from breaking layout).
 * Video 需单独兜底：<video> 标签默认按视频原生像素展示，1920×1080 的视频会撑破容器；
 * img 有全局的 img{max-width:100%} 兜着，video 没有，得显式加。业务里富文本会频繁插视频。
 * border-radius / margin 与 .detail-content img 视觉保持一致。
 *
 * width 改为 100%（而非 auto）原因：RichEditor.tsx 和后端 richtext.go 已经把 <img> 上的
 * inline width/height 全部清洗掉，图片不再带自身尺寸诉求，此时 width:auto 只会让原图按
 * 原始像素显示，若原图比 .detail-content（.detail-layout 拓宽后可达 75vw/1600px）窄，
 * 右侧会留出大片空白。改成 100% 让正文配图始终撑满容器；.detail-content 本身是
 * flex:1 的流式宽度（无固定 width），所以这条规则在桌面端和 768px 断点下的移动端
 * 都统一生效，无需再单独适配移动端。
 * !important 仍保留兜底：防止清洗逻辑漏网的旧内容里仍有 inline width（如清洗上线前存量数据）。 */
.detail-content img { height: auto !important; max-width: 100% !important; width: 100% !important; }
.detail-content video {
  max-width: 100%; height: auto; display: block;
  border-radius: var(--r); margin: 20px 0;
}
/* 富文本正文里的表格样式（Word 导入 / 手动插入的 <table> 走这套规则）。
 * 科技青边框风：表头深底青字 + 底部 2px cyan 分隔线；单元格淡青边框 15%；
 * 单元格背景保持透明（透过页面主背景），既有品牌感又不喧宾夺主。
 * 移动端会被下面的 @media 覆盖成横滚保护。 */
.detail-content table {
  width: 100% !important;
  border-collapse: collapse;
  margin: 16px 0;
  table-layout: auto;
}
.detail-content th,
.detail-content td {
  border: 1px solid rgba(0, 212, 255, 0.15);
  padding: 10px 14px;
  text-align: left;
  vertical-align: top;
}
.detail-content td {
  color: var(--text);
  background: transparent;
}
.detail-content th {
  background: var(--bg-3);
  color: var(--cyan);
  font-weight: 600;
  border-bottom: 2px solid var(--cyan);
}
@media (max-width: 768px) {
  .detail-layout { gap: 32px; }
  .sidebar-card { padding: 16px; }
  .detail-content {
    word-break: break-word;
    overflow-wrap: anywhere;
    padding: 24px 20px;
    border-radius: var(--r);
  }
  .detail-content pre {
    max-width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  .detail-content table {
    display: block;
    max-width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  .detail-content iframe,
  .detail-content video { max-width: 100%; }
}

/* Hover effects only on real hover devices — avoid stuck :hover on touch */
@media (hover: none) {
  .card:hover,
  .case-row:hover,
  .btn-primary:hover,
  .btn-outline:hover,
  .btn-ghost:hover {
    transform: none;
    box-shadow: none;
  }
  .case-row:hover { background: var(--card); }
  .card:hover { background: var(--card); border-color: var(--border); }
}

/* Prevent iOS Safari from zooming form fields on focus (needs ≥16px)
 * .poc-form input:not([type=checkbox]) 是为了对齐上方 POC 输入框规则的特异性 (0,2,1)，
 * 让本规则靠源顺序在后覆盖字号，否则 iOS 聚焦会自动放大页面。 */
@media (max-width: 640px) {
  .poc-form input:not([type="checkbox"]),
  .poc-form select,
  .poc-form textarea,
  .form-group input,
  .form-group textarea,
  .ai-input { font-size: 16px; }
}

/* ============================================================================
 * ===== Homepage Section Palette（首页模块渐变辨识 · v2 强化版）================
 * ============================================================================
 * 目的：让首页 5 大内容模块（About / Products / Solutions / Cases / News）
 *      在深色主题下拥有各自可辨识的"氛围光晕"，用户滚动时能一眼分清模块边界。
 *
 * v2 相对 v1 的强化（因 body 主题换成 Linear 深紫后 v1 辨识度不足）：
 *   - 光斑透明度 7-9% → 24-30%（跟 body 紫光 α=0.28 同量级，压得住）
 *   - 光斑覆盖 55%×65% → 95-120%×80-90%（从角落扩到覆盖整块）
 *   - 加"顶部下拉渐变"：模块前 45% 高度从辅助色 α=0.12 渐到透明，
 *     一进视口就有明显的"这块变色了"入场感
 *   - 5 个模块统一叠 var(--bg-2) 深底兜底 —— 覆盖 .section-dark 的同款底色
 *     以及 Products/News 原本透 body 紫的行为，让辅助色能顶起来
 *   - 底部分界线 1px → 2px + box-shadow 20-24px 光晕，物理分隔感强
 *
 * 设计约束（不变）：
 *   1. 只用 id 选择器精确命中首页 section，绝不动 .section / .section-dark 本身
 *      —— 内页 (product_detail / case_list 等) 复用这些类，不能受影响。
 *   2. 4 个模块用靠近品牌青蓝色系的邻近色（靛紫 indigo / 品牌蓝 / 青绿 teal /
 *      品牌青），唯一暖色是 Cases 的琥珀金（语义 = 成就 / 荣誉），作为整页
 *      唯一暖色锚点。
 *
 * 实现要点：
 *   - section 加 position:relative + overflow:hidden（不影响锚点跳转）
 *   - background 承载"顶部下拉辅助色渐变" + "var(--bg-2) 深底兜底"
 *   - ::before 承载 radial 光斑（inset:0, pointer-events:none, z:0）
 *   - ::after 承载底部 2px 发光分界线（带 box-shadow 光晕）
 *   - > .container 抬到 z:1，避免被伪元素盖住，保持子元素可交互
 *
 * 不影响：hero-orb / carousel / cta-section / --grad / .grad-text / 卡片 /
 *        按钮 / nav / footer / body 深紫渐变背景。
 * ============================================================================ */

#about > .container,
#products > .container,
#solutions > .container,
#cases > .container,
#news > .container {
  position: relative;
  z-index: 1;
}

/* ── About：靛紫（indigo-400），左上光斑 · 语义 = 沉稳 / 信任 / 底蕴 ── */
#about {
  position: relative; overflow: hidden;
  background:
    linear-gradient(180deg, rgba(129,140,248,0.12) 0%, transparent 45%),
    var(--bg-2);
}
#about::before {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: radial-gradient(ellipse 100% 85% at 15% 20%,
    rgba(129,140,248,0.28) 0%, transparent 60%);
}
#about::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0;
  height: 2px; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(129,140,248,0.55), transparent);
  box-shadow: 0 0 20px rgba(129,140,248,0.35);
}

/* ── Products：品牌蓝，右上光斑 · 语义 = 核心 / 主力 ── */
#products {
  position: relative; overflow: hidden;
  background:
    linear-gradient(180deg, rgba(79,142,247,0.12) 0%, transparent 45%),
    var(--bg-2);
}
#products::before {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: radial-gradient(ellipse 95% 80% at 88% 18%,
    rgba(79,142,247,0.30) 0%, transparent 58%);
}
#products::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0;
  height: 2px; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(79,142,247,0.55), transparent);
  box-shadow: 0 0 20px rgba(79,142,247,0.35);
}

/* ── Solutions：青绿（teal-400），左下光斑 · 语义 = 方案 / 组合 / 灵活 ── */
#solutions {
  position: relative; overflow: hidden;
  background:
    linear-gradient(180deg, rgba(45,212,191,0.11) 0%, transparent 45%),
    var(--bg-2);
}
#solutions::before {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: radial-gradient(ellipse 100% 90% at 18% 82%,
    rgba(45,212,191,0.28) 0%, transparent 60%);
}
#solutions::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0;
  height: 2px; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(45,212,191,0.55), transparent);
  box-shadow: 0 0 20px rgba(45,212,191,0.35);
}

/* ── Cases：玫瑰粉（rose-400），右下 + 中心双光斑 · 语义 = 温度 / 合作 / 成就 ──
 * 整页唯一暖色锚点。v2 原本用琥珀金 amber-400，在深紫 body + 深灰蓝底叠加下
 * 会呈现"土棕/生锈"污渍感（黄橙 + 深紫 = 灰棕的色相化学反应），故 v2.1
 * 改用玫瑰粉：R 分量高、B 分量中等，在深底上稳定呈现"淡粉红光晕"不变色。
 * 强度也相应下调，与其它 4 个冷色模块视觉重量一致。 */
#cases {
  position: relative; overflow: hidden;
  background:
    linear-gradient(180deg, rgba(244,114,182,0.08) 0%, transparent 45%),
    var(--bg-2);
}
#cases::before {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background:
    radial-gradient(ellipse 65% 75% at 85% 78%,
      rgba(244,114,182,0.20) 0%, transparent 58%),
    radial-gradient(ellipse 55% 55% at 30% 30%,
      rgba(244,114,182,0.10) 0%, transparent 60%);
}
#cases::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0;
  height: 2px; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(244,114,182,0.5), transparent);
  box-shadow: 0 0 22px rgba(244,114,182,0.3);
}

/* ── News：品牌青，正上一带光斑 · 语义 = 新鲜 / 及时 · 回归品牌主色收敛节奏 ── */
#news {
  position: relative; overflow: hidden;
  background:
    linear-gradient(180deg, rgba(0,212,255,0.12) 0%, transparent 45%),
    var(--bg-2);
}
#news::before {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: radial-gradient(ellipse 120% 60% at 50% -5%,
    rgba(0,212,255,0.24) 0%, transparent 65%);
}
#news::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0;
  height: 2px; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(0,212,255,0.55), transparent);
  box-shadow: 0 0 20px rgba(0,212,255,0.35);
}

/* ============================================================================
 * ===== 手机端补强规则（13 项适配问题批量修复）================================
 * ============================================================================
 * 本块只做"追加"，不覆盖之前的任何规则。定位在文件末尾便于回滚 —— 删除本块
 * 即恢复到"补强前"的状态。每条规则都注明修的哪个问题。
 * ============================================================================ */

/* ── 通用工具类：详情页侧栏销售卡片（替代原 inline style，问题 10） ────────── */
.sidebar-sales-item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 0; border-bottom: 1px solid var(--border);
}
.sidebar-sales-item .sales-avatar,
.sidebar-sales-item .sales-avatar-placeholder {
  width: 40px; height: 40px; margin: 0;
}
.sidebar-sales-item .sales-avatar-placeholder { font-size: 1rem; }
.sidebar-sales-item .sales-info { min-width: 0; flex: 1; }
.sidebar-sales-item .sales-name { font-size: 0.88rem; }

/* 详情页侧栏"相关产品"链接（原 inline style 复用） */
.sidebar-related-link {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 0; border-bottom: 1px solid var(--border);
  color: var(--text); font-size: 0.88rem;
  transition: color var(--t), padding-left var(--t);
}
.sidebar-related-link:last-child { border-bottom: none; }
.sidebar-related-link .arrow {
  color: var(--cyan);
  transition: transform var(--t);
}
.sidebar-related-link:hover {
  color: var(--cyan);
  padding-left: 6px;
}
.sidebar-related-link:hover .arrow {
  transform: translateX(3px);
}

/* 详情页侧栏"最新动态"链接（news_detail 用） */
.sidebar-news-item {
  display: block; padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.sidebar-news-item .date {
  font-size: 0.72rem; color: var(--text-3); margin-bottom: 4px;
}
.sidebar-news-item .title {
  font-size: 0.88rem; color: var(--text-2); line-height: 1.4;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* 详情页 page-header 中的次要文字（时间戳等）。
 * 用 p.page-header-meta 提升特异性（0-2-1）以压过 .page-header p (0-1-1)，
 * 否则 font-size 会被 .page-header p{font-size:1.05rem} 覆盖。 */
p.page-header-meta {
  color: var(--text-3); font-size: 0.85rem; margin-top: 8px;
}

/* solution_detail 侧栏"获取方案"卡里的辅助说明文字。
 * 用 color-mix 把主文本色 --text 与透明色混合成 75% 亮度，
 * 好处：跟随主题变量走，将来改 --text 不用同步这里；避免硬编码色值。
 * (术语：color-mix() = CSS 官方的颜色混合函数，in srgb 指定色彩空间) */
.sidebar-card .sidebar-desc {
  color: color-mix(in srgb, var(--text) 75%, transparent); font-size: 0.88rem; margin-bottom: 16px;
}

/* product_detail 侧栏"产品信息"里字段名（复用 .contact-label class）
 * 全局 .contact-label 用 --text-3 (#4a5568)，在深色侧栏卡上几乎看不见；
 * 仅在侧栏作用域内提亮，不影响 contact.html "地址/电话/邮箱" 等标签。 */
.sidebar-card .contact-label { color: color-mix(in srgb, var(--text) 75%, transparent); }

/* 侧栏卡里的按钮包装器（原 inline width/justify-content 抽出；margin 保留在模板 inline 以精确保留原视觉间距）。 */
.sidebar-action .btn { width: 100%; justify-content: center; }

/* 列表页空状态占位（问题 11，替代原 <p style="padding:80px 0"> inline style） */
.empty-state {
  text-align: center; color: var(--text-3);
  padding: 80px 0; font-size: 0.95rem;
}
@media (max-width: 640px) {
  .empty-state { padding: 48px 16px; font-size: 0.9rem; }
}

/* ── 问题 1：footer-grid 平板段（768-1024）品牌区独占一行 ─────────────────── */
@media (max-width: 1024px) and (min-width: 769px) {
  .footer-grid { grid-template-columns: repeat(3, 1fr); }
  .footer-brand { grid-column: 1 / -1; }
}

/* ── 问题 2 + 4：stats-row 数字在窄屏下缩小，避免挤爆 ──────────────────────── */
@media (max-width: 480px) {
  .stat-num { font-size: 1.4rem; }
  .stat-label { font-size: 0.72rem; }
  .stat-item { padding: 16px 10px; }
}

/* ── 问题 3：contact QR 二维码超窄屏下收缩 ───────────────────────────────── */
@media (max-width: 480px) {
  .contact-qr img { width: 128px; height: 128px; }
  .contact-qr .card { padding: 20px !important; }
}

/* ── 问题 5：首页公司简介预览截断，手机端放宽 max-height 避免过紧 ─────────── */
@media (max-width: 768px) {
  .about-preview { max-height: 380px; }
}
@media (max-width: 480px) {
  .about-preview { max-height: 320px; }
}

/* ── 问题 6：section-header 在超窄屏下继续收紧间距 ───────────────────────── */
@media (max-width: 480px) {
  .section-header { margin-bottom: 20px; }
  .section-header h2 { margin-bottom: 6px; }
}

/* ── 问题 7：CTA 区块手机端收窄，避免占满一屏 ─────────────────────────────── */
@media (max-width: 640px) {
  .cta-section { padding: 44px 0; }
  .cta-section h2 { font-size: clamp(1.3rem, 5vw, 1.8rem); }
  .cta-section p { font-size: 0.9rem; margin-bottom: 20px; }
  .cta-actions .btn { width: 100%; justify-content: center; }
}

/* ── 问题 8 + 13：detail-cover 手机端更小的 border-radius 和 aspect-ratio 兜底 ─
 * 手机上 16:9 高瘦，如果图更宽（如 21:9 banner）letterbox 上下过多。
 * 放宽到 5:3，视觉上更舒服；圆角从 20px 缩到 12px 避免小屏突兀。 */
@media (max-width: 640px) {
  .detail-cover {
    aspect-ratio: 5 / 3;
    border-radius: var(--r);
    margin-bottom: 20px;
  }
}

/* ── 问题 9：download-btn 手机端两个按钮并排时更紧凑 ──────────────────────── */
@media (max-width: 640px) {
  .download-btn { max-width: none; padding: 10px 12px; font-size: 0.82rem; }
}
@media (max-width: 380px) {
  .download-actions { flex-direction: column; gap: 6px; }
  .download-btn { width: 100%; }
}

/* ── 详情页侧栏销售条目右侧的"销售个人微信二维码"（各自的 WechatQR，点击弹大图）
 * 放在销售员姓名/电话右边；QR 用固定 64px，销售条目行高自然被撑起来。
 * 上下 padding 也加高，避免 QR 顶到边框。 */
.sidebar-sales-item .sales-inline-qr {
  width: 64px; height: 64px; flex-shrink: 0;
  border-radius: 6px; border: 1px solid var(--border);
  object-fit: contain; background: #fff;
  cursor: zoom-in;
  transition: transform var(--t), border-color var(--t);
}
.sidebar-sales-item .sales-inline-qr:hover {
  transform: scale(1.05);
  border-color: var(--cyan);
}
/* 有 QR 时销售条目上下留白多一点，避免 QR 贴分割线 */
.sidebar-sales-item:has(.sales-inline-qr) { padding: 14px 0; }
@media (max-width: 640px) {
  .sidebar-sales-item .sales-inline-qr { width: 56px; height: 56px; }
}

/* ── 二维码放大 lightbox（复用 .modal-overlay 遮罩层与 open 动画） ─────────── */
.qr-lightbox { z-index: 1200; }
.qr-lightbox-inner {
  position: relative;
  display: flex; flex-direction: column; align-items: center;
  gap: 14px;
  transform: translateY(20px) scale(0.97);
  transition: transform var(--t);
}
.qr-lightbox.open .qr-lightbox-inner { transform: translateY(0) scale(1); }
.qr-lightbox-img {
  width: min(320px, 78vw); height: auto; aspect-ratio: 1 / 1;
  border-radius: var(--r); background: #fff;
  border: 1px solid var(--border);
  box-shadow: 0 20px 60px rgba(0,0,0,0.5);
  object-fit: contain;
}
.qr-lightbox-caption {
  color: var(--text); font-size: 0.92rem;
  text-align: center; max-width: min(320px, 78vw);
  word-break: break-all;
}
.qr-lightbox-close {
  position: absolute; top: -44px; right: -4px;
  color: #fff; font-size: 1.5rem;
}
@media (max-width: 480px) {
  .qr-lightbox-img { width: 80vw; }
  .qr-lightbox-close { top: -40px; right: 0; }
}
