/* ==========================================================================
   NeoLinks 官网 · 场景与动效
   首屏极光、真机舞台、滚动进度、章节点、各类微交互。
   ========================================================================== */

/* ---------- 顶部滚动进度 ---------- */

.scroll-progress {
  position: fixed;
  inset: 0 0 auto;
  height: 2px;
  z-index: var(--z-progress);
  transform-origin: 0 50%;
  transform: scaleX(0);
  background: var(--grad-brand);
  opacity: .9;
  pointer-events: none;
}

/* ---------- 首屏 ---------- */

.hero {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-height: 100vh;
  min-height: 100svh;
  padding-top: clamp(116px, 13vw, 168px);
  padding-bottom: clamp(36px, 5vw, 64px);
  overflow: hidden;
  isolation: isolate;
}

.hero-bg {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  pointer-events: none;
}

.hero-aurora {
  position: absolute;
  inset: -25% -12% auto;
  height: 130%;
  filter: blur(72px);
  opacity: .95;
  -webkit-mask-image: radial-gradient(78% 72% at 50% 34%, #000 0%, transparent 76%);
  mask-image: radial-gradient(78% 72% at 50% 34%, #000 0%, transparent 76%);
}

.blob {
  position: absolute;
  border-radius: 50%;
  will-change: transform;
}

.blob-a {
  width: min(720px, 62vw);
  height: min(720px, 62vw);
  top: -12%;
  left: 2%;
  background: var(--aurora-sky);
  animation: driftA 26s var(--ease-soft) infinite alternate;
}

.blob-b {
  width: min(560px, 50vw);
  height: min(560px, 50vw);
  top: 8%;
  right: -4%;
  background: var(--aurora-grass);
  animation: driftB 32s var(--ease-soft) infinite alternate;
}

.blob-c {
  width: min(460px, 42vw);
  height: min(460px, 42vw);
  top: 46%;
  left: 38%;
  background: var(--aurora-sun);
  animation: driftC 29s var(--ease-soft) infinite alternate;
}

@keyframes driftA {
  from { transform: translate3d(0, 0, 0) scale(1); }
  to { transform: translate3d(6%, 4%, 0) scale(1.12); }
}

@keyframes driftB {
  from { transform: translate3d(0, 0, 0) scale(1.05); }
  to { transform: translate3d(-7%, 6%, 0) scale(.94); }
}

@keyframes driftC {
  from { transform: translate3d(-3%, 2%, 0) scale(.96); }
  to { transform: translate3d(5%, -5%, 0) scale(1.1); }
}

.hero-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(var(--grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
  background-size: clamp(48px, 6vw, 76px) clamp(48px, 6vw, 76px);
  background-position: center top;
  -webkit-mask-image: radial-gradient(72% 62% at 50% 26%, #000 0%, transparent 82%);
  mask-image: radial-gradient(72% 62% at 50% 26%, #000 0%, transparent 82%);
}

/* 首屏底部的一条品牌波形（取自图标里的那道白色波） */
.hero-wave {
  position: absolute;
  left: 50%;
  bottom: -2px;
  width: max(160%, 1600px);
  transform: translateX(-50%);
  z-index: -1;
  opacity: .5;
  pointer-events: none;
}

.hero-wave path {
  fill: none;
  stroke: url(#heroWaveGradient);
  stroke-width: 1.1;
}

.hero-inner {
  display: grid;
  grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr);
  gap: clamp(24px, 4vw, 52px);
  align-items: center;
  flex: 1;
}

@media (max-width: 980px) {
  .hero {
    min-height: 0;
    padding-top: clamp(104px, 15vw, 128px);
    padding-bottom: clamp(32px, 6vw, 56px);
  }

  .hero-inner {
    grid-template-columns: minmax(0, 1fr);
    gap: clamp(32px, 7vw, 56px);
  }

  .hero-copy {
    max-width: 100%;
  }
}

.hero-copy {
  position: relative;
  max-width: 640px;
}

.hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  height: 36px;
  padding: 0 16px 0 13px;
  margin-bottom: clamp(20px, 2.6vw, 30px);
  border-radius: var(--r-pill);
  border: 1px solid var(--line-glass);
  background: var(--glass-bg);
  box-shadow: var(--shadow-sm);
  -webkit-backdrop-filter: blur(18px) saturate(var(--glass-saturate));
  backdrop-filter: blur(18px) saturate(var(--glass-saturate));
  font-size: var(--fs-xs);
  font-weight: 560;
  letter-spacing: .02em;
  color: var(--ink-soft);
}

.hero-title {
  margin-bottom: clamp(20px, 2.6vw, 28px);
  line-height: .98;
}

.hero-title .line {
  display: block;
  overflow: hidden;
  padding-bottom: .06em;
}

/* 两行标题各自单行显示：中文断行会把「自己说了算」拆散，视觉上很碎 */
.hero-title .line > span {
  display: block;
  white-space: nowrap;
  transform: translateY(108%);
  animation: titleRise 1.05s var(--ease-out) forwards;
}

@media (max-width: 560px) {
  .hero-title .line > span {
    white-space: normal;
  }
}

.hero-title .line:nth-child(1) > span { animation-delay: .08s; }
.hero-title .line:nth-child(2) > span { animation-delay: .19s; }
.hero-title .line:nth-child(3) > span { animation-delay: .3s; }

.hero-title .grad {
  background: var(--grad-brand);
  background-size: 160% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: titleRise 1.05s var(--ease-out) .19s forwards, gradShift 9s ease-in-out 1.2s infinite;
}

@keyframes titleRise {
  to { transform: translateY(0); }
}

@keyframes gradShift {
  0%, 100% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
}

.hero-description {
  max-width: 46ch;
  font-size: var(--fs-lead);
  line-height: 1.72;
  color: var(--muted);
  opacity: 0;
  animation: fadeUp .9s var(--ease-out) .42s forwards;
}

.hero-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--sp-4);
  margin-top: clamp(24px, 3vw, 34px);
  opacity: 0;
  animation: fadeUp .9s var(--ease-out) .54s forwards;
}

.compatibility-note {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-3) var(--sp-5);
  margin-top: clamp(24px, 3vw, 34px);
  font-size: var(--fs-xs);
  color: var(--muted-soft);
  opacity: 0;
  animation: fadeUp .9s var(--ease-out) .66s forwards;
}

.compatibility-note span {
  position: relative;
  padding-left: 14px;
}

.compatibility-note span::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 4px;
  height: 4px;
  margin-top: -2px;
  border-radius: 50%;
  background: var(--line-strong);
}

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: none; }
}

/* ---------- 真机舞台 ---------- */

.hero-stage {
  position: relative;
  min-height: 420px;
  display: grid;
  place-items: center;
}

.device-stack {
  position: relative;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  width: 100%;
  transform-style: preserve-3d;
  transform:
    perspective(1500px)
    rotateX(calc(var(--py, 0) * -4deg))
    rotateY(calc(var(--px, 0) * 7deg));
  transition: transform .6s var(--ease-out);
}

.hero-device {
  position: relative;
  flex: none;
}

.hero-device-main {
  width: min(282px, 55%);
  z-index: 2;
  animation: floatMain 11s ease-in-out infinite;
}

.hero-device-back {
  width: min(212px, 42%);
  margin-left: -26px;
  margin-bottom: 22px;
  z-index: 1;
  transform: translateZ(-70px) rotateY(9deg);
  opacity: .96;
  animation: floatBack 13s ease-in-out infinite;
}

@keyframes floatMain {
  0%, 100% { transform: translate3d(0, 0, 34px); }
  50% { transform: translate3d(0, -14px, 34px); }
}

@keyframes floatBack {
  0%, 100% { transform: translate3d(0, 0, -70px) rotateY(9deg); }
  50% { transform: translate3d(0, -8px, -70px) rotateY(9deg); }
}

/* 浮在设备上的玻璃信息卡 */
.hero-float {
  position: absolute;
  z-index: 5;
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 11px 15px;
  border-radius: var(--r-panel);
  border: 1px solid var(--line-glass);
  background: var(--glass-bg-strong);
  box-shadow: var(--shadow-md);
  -webkit-backdrop-filter: blur(22px) saturate(var(--glass-saturate));
  backdrop-filter: blur(22px) saturate(var(--glass-saturate));
  white-space: nowrap;
  animation: floatCard 11s ease-in-out infinite;
}

.hero-float.is-left {
  left: -3%;
  top: 9%;
}

.hero-float.is-right {
  right: -3%;
  bottom: 12%;
  animation-delay: -4s;
}

.hero-float b {
  display: block;
  font-size: .82rem;
  font-weight: 640;
  letter-spacing: -.01em;
  color: var(--ink);
}

.hero-float small {
  display: block;
  font-size: .68rem;
  color: var(--muted-soft);
  letter-spacing: .01em;
}

.hero-float-icon {
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border-radius: var(--r-chip);
  background: var(--grad-brand-soft);
  color: var(--accent);
}

.hero-float-icon svg {
  width: 17px;
  height: 17px;
}

@keyframes floatCard {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-9px); }
}

@media (max-width: 980px) {
  .hero-stage {
    min-height: 0;
    margin-top: var(--sp-2);
  }

  .hero-float.is-left { left: 1%; top: 4%; }
  .hero-float.is-right { right: 1%; bottom: 6%; }
}

@media (max-width: 640px) {
  .hero-scroll-hint {
    display: none;
  }

  /* 小屏只留一台设备，避免首屏把两张截图都挤扁 */
  .hero-device-main { width: 58%; }
  .hero-device-back { display: none; }
  .hero-float.is-right { display: none; }
  .hero-float.is-left { left: 0; top: 2%; }
}

@media (max-width: 520px) {
  .hero-float {
    padding: 9px 12px;
  }

  .hero-float small {
    display: none;
  }

  .hero-device-main { width: 58%; }
  .hero-device-back { width: 46%; margin-left: -34px; }
}

/* 滚动提示 */
.hero-scroll-hint {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: clamp(28px, 4vw, 48px);
  font-size: var(--fs-xs);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--muted-soft);
}

.hero-scroll-hint::before {
  content: "";
  width: 1px;
  height: 34px;
  background: linear-gradient(var(--line-strong), transparent);
  animation: hintDrop 2.6s var(--ease-soft) infinite;
  transform-origin: top;
}

@keyframes hintDrop {
  0% { transform: scaleY(0); opacity: 0; }
  35% { opacity: 1; }
  100% { transform: scaleY(1); opacity: 0; }
}

/* ---------- 章节点（右侧） ---------- */

.section-dots {
  position: fixed;
  right: clamp(12px, 2vw, 28px);
  top: 50%;
  transform: translateY(-50%);
  z-index: 40;
  display: flex;
  flex-direction: column;
  gap: 12px;
  opacity: 0;
  transition: opacity var(--dur-3) var(--ease-out);
}

.section-dots.is-visible {
  opacity: 1;
}

.section-dots a {
  position: relative;
  display: block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: color-mix(in srgb, var(--ink) 18%, transparent);
  transition: background var(--dur-2) var(--ease-out), transform var(--dur-2) var(--ease-spring);
}

.section-dots a::after {
  content: attr(data-label);
  position: absolute;
  right: 20px;
  top: 50%;
  transform: translateY(-50%) translateX(6px);
  padding: 5px 10px;
  border-radius: var(--r-badge);
  background: var(--cta-bg);
  color: var(--cta-ink);
  font-size: .68rem;
  letter-spacing: .04em;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--dur-2) var(--ease-out), transform var(--dur-2) var(--ease-out);
}

.section-dots a:hover::after {
  opacity: 1;
  transform: translateY(-50%) translateX(0);
}

.section-dots a.is-active {
  background: var(--accent);
  transform: scale(1.5);
}

@media (max-width: 1180px) {
  .section-dots {
    display: none;
  }
}

/* ---------- 滚动驱动：设备随页面轻移 ---------- */

.parallax-slow {
  transform: translate3d(0, calc(var(--scroll-shift, 0) * 1px), 0);
  will-change: transform;
}

/* ---------- 登录 / 能力网格 ---------- */

.capability-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--sp-4);
}

.capability {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: clamp(20px, 2.4vw, 28px);
  border-radius: var(--r-card);
  border: 1px solid var(--line);
  background: color-mix(in srgb, var(--surface) 72%, transparent);
  box-shadow: var(--shadow-xs);
  overflow: hidden;
  transition: transform var(--dur-2) var(--ease-out), box-shadow var(--dur-2) var(--ease-out), border-color var(--dur-2) var(--ease-out);
}

.capability:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-md);
  border-color: var(--line-glass);
}

.capability-icon {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  margin-bottom: 6px;
  border-radius: var(--r-control);
  background: var(--grad-brand-soft);
  color: var(--accent);
}

.capability-icon svg {
  width: 21px;
  height: 21px;
}

.capability strong {
  font-size: 1rem;
  font-weight: 620;
  letter-spacing: -.015em;
}

.capability span {
  font-size: var(--fs-sm);
  color: var(--muted);
  line-height: 1.66;
}

@media (max-width: 900px) {
  .capability-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 600px) {
  .capability-grid {
    grid-template-columns: 1fr;
  }
}

/* ---------- 分隔光带 ---------- */

.divider-glow {
  height: 1px;
  margin-inline: auto;
  max-width: var(--container);
  background: linear-gradient(90deg, transparent, var(--line-strong), transparent);
}

/* ---------- 减少动效 ---------- */

@media (prefers-reduced-motion: reduce) {
  .blob,
  .hero-device-main,
  .hero-device-back,
  .hero-float,
  .hero-scroll-hint::before,
  .marquee-track,
  .local-bridge::after,
  .status-dot {
    animation: none !important;
  }

  .hero-title .line > span,
  .hero-title .grad,
  .hero-description,
  .hero-actions,
  .compatibility-note {
    opacity: 1;
    transform: none;
    animation: none !important;
  }

  .device-stack {
    transform: none !important;
  }
}
