/* ============================================================
   AICOR 官网 · 工具类 Utilities
   ------------------------------------------------------------
   与语义无关的通用工具类：布局容器、分隔线、滚动显现、渐变文字。
   依赖：tokens.css
   ============================================================ */

/* 布局容器：默认 1180px；窄版页面（news/article）在页面级 CSS 覆盖宽度 */
.container { max-width: 1180px; margin: 0 auto; padding: 0 32px; }

/* 分隔线 */
.divider { height: 1px; background: linear-gradient(90deg, transparent, var(--line), transparent); }

/* 滚动显现动画（配合 JS IntersectionObserver 添加 .visible） */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.8s ease, transform 0.8s ease; }
.reveal.visible { opacity: 1; transform: none; }
.reveal.d1 { transition-delay: 0.1s; }
.reveal.d2 { transition-delay: 0.2s; }
.reveal.d3 { transition-delay: 0.3s; }

/* 渐变文字（品牌色渐变填充） */
.grad-text {
  background: var(--grad);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* 区块顶部呼吸光晕（hero/contact 等装饰用） */
.breathe-glow {
  position: absolute; width: 900px; height: 900px; border-radius: 50%;
  background: radial-gradient(circle, rgba(79,140,255,0.13) 0%, transparent 65%);
  pointer-events: none;
  animation: breathe 9s ease-in-out infinite;
}
@keyframes breathe {
  0%, 100% { opacity: 0.7; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.06); }
}

/* 呼吸圆点（诊断弹窗/hero 标签用） */
@keyframes pulse {
  0% { box-shadow: 0 0 0 0 rgba(45,212,191,0.5); }
  70% { box-shadow: 0 0 0 9px rgba(45,212,191,0); }
  100% { box-shadow: 0 0 0 0 rgba(45,212,191,0); }
}

/* 光标闪烁（终端模拟用） */
@keyframes blink { 50% { opacity: 0; } }
