<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>瞻博物流 ZBWL - 给你无限可能与希望</title>
<link rel="preconnect" href="http://fonts.googleapis.com">
<link href="http://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700;900&family=Orbitron:wght@400;700;900&display=swap" rel="stylesheet">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
  --bg-deep: #050510; --bg-mid: #0a0a1a; --bg-surface: #111128;
  --neon-blue: #00d4ff; --neon-cyan: #00f5d4; --neon-purple: #a855f7;
  --neon-pink: #f472b6; --neon-orange: #fb923c; --neon-red: #ef4444;
  --text-primary: #e2e8f0; --text-secondary: #94a3b8; --text-muted: #64748b;
}
html { scroll-behavior: smooth; }
body {
  font-family: 'Noto Sans SC', sans-serif; background: var(--bg-deep);
  color: var(--text-primary); overflow-x: hidden; line-height: 1.7;
}
.nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
  display: flex; align-items: center; justify-content: space-between;
  padding: 20px 50px; transition: all 0.4s cubic-bezier(0.4,0,0.2,1);
}
.nav.glass {
  background: rgba(5,5,16,0.85); backdrop-filter: blur(30px) saturate(180%);
  border-bottom: 1px solid rgba(0,212,255,0.08); padding: 14px 50px;
}
.nav-brand { display: flex; align-items: center; gap: 14px; }
.nav-logo {
  width: 42px; height: 42px; border-radius: 10px;
  background: linear-gradient(135deg, var(--neon-orange), #e85d04);
  display: flex; align-items: center; justify-content: center;
  position: relative; overflow: hidden;
  box-shadow: 0 0 20px rgba(251,146,60,0.3);
}
.nav-logo::before {
  content: ''; position: absolute; width: 0; height: 0;
  border-left: 10px solid white; border-top: 6px solid transparent;
  border-bottom: 6px solid transparent; transform: translateX(2px);
}
.nav-logo::after {
  content: ''; position: absolute; width: 20px; height: 20px;
  border: 2px solid white; border-radius: 50%;
  border-right-color: transparent; transform: rotate(45deg);
}
.nav-name { font-family: 'Orbitron', sans-serif; font-size: 22px; font-weight: 700; letter-spacing: 3px; }
.nav-name span { color: var(--neon-orange); font-weight: 900; }
.nav-right { display: flex; align-items: center; gap: 12px; }
.nav-login {
  padding: 10px 32px; border: 1px solid rgba(0,212,255,0.3); border-radius: 8px;
  background: transparent; color: var(--neon-blue); font-size: 14px; font-family: inherit;
  cursor: pointer; transition: all 0.3s ease; letter-spacing: 2px;
}
.nav-login:hover { border-color: var(--neon-blue); box-shadow: 0 0 20px rgba(0,212,255,0.2), inset 0 0 20px rgba(0,212,255,0.05); text-shadow: 0 0 10px rgba(0,212,255,0.5); }

.login-overlay {
  position: fixed; inset: 0; z-index: 9999;
  background: rgba(5,5,16,0.85); backdrop-filter: blur(20px);
  display: flex; align-items: center; justify-content: center;
  opacity: 0; visibility: hidden; transition: all 0.4s cubic-bezier(0.4,0,0.2,1);
}
.login-overlay.active { opacity: 1; visibility: visible; }
.login-modal {
  width: 800px; max-width: 95vw; display: flex;
  background: rgba(17,17,40,0.7); border: 1px solid rgba(0,212,255,0.15);
  border-radius: 24px; overflow: hidden; position: relative;
  transform: scale(0.9) translateY(20px);
  transition: all 0.4s cubic-bezier(0.4,0,0.2,1); backdrop-filter: blur(30px);
}
.login-overlay.active .login-modal { transform: scale(1) translateY(0); }
.login-modal::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, var(--neon-blue), var(--neon-purple), var(--neon-blue));
  background-size: 200% 100%; animation: border-flow 3s linear infinite;
}
@keyframes border-flow { 0% { background-position: 0% 50%; } 100% { background-position: 200% 50%; } }
.login-modal::after {
  content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%;
  background: radial-gradient(circle, rgba(0,212,255,0.03) 0%, transparent 60%);
  animation: card-glow 6s ease-in-out infinite; pointer-events: none;
}
@keyframes card-glow { 0%, 100% { transform: rotate(0deg); } 50% { transform: rotate(180deg); } }
.login-modal-left {
  flex: 1; padding: 48px 40px; display: flex; flex-direction: column;
  justify-content: center; position: relative; z-index: 2;
  border-right: 1px solid rgba(0,212,255,0.08);
}
.login-modal-brand { display: flex; align-items: center; gap: 12px; margin-bottom: 32px; }
.login-modal-brand-icon {
  width: 40px; height: 40px; border-radius: 10px;
  background: linear-gradient(135deg, var(--neon-orange), #e85d04);
  display: flex; align-items: center; justify-content: center; position: relative;
}
.login-modal-brand-icon::before {
  content: ''; position: absolute; width: 0; height: 0;
  border-left: 9px solid white; border-top: 5px solid transparent;
  border-bottom: 5px solid transparent; transform: translateX(1px);
}
.login-modal-brand-icon::after {
  content: ''; position: absolute; width: 18px; height: 18px;
  border: 2px solid white; border-radius: 50%;
  border-right-color: transparent; transform: rotate(45deg);
}
.login-modal-brand-text { font-family: 'Orbitron', sans-serif; font-size: 20px; font-weight: 700; }
.login-modal-brand-text span { color: var(--neon-orange); }
.login-modal-left h3 { font-size: 26px; font-weight: 300; line-height: 1.4; margin-bottom: 16px; }
.login-modal-left h3 strong {
  display: block; font-weight: 900; font-size: 32px;
  background: linear-gradient(135deg, var(--text-primary), var(--neon-blue));
  -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
}
.login-modal-left p { font-size: 13px; color: var(--text-secondary); line-height: 2; margin-bottom: 32px; }
.login-modal-features { display: flex; gap: 20px; }
.login-modal-feature { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-muted); }
.login-modal-feature::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--neon-blue); box-shadow: 0 0 8px var(--neon-blue); }
.login-modal-right { width: 360px; padding: 48px 36px; position: relative; z-index: 2; }
.login-modal-header { text-align: center; margin-bottom: 32px; }
.login-modal-header h2 { font-size: 24px; font-weight: 700; margin-bottom: 6px; }
.login-modal-header p { font-size: 12px; color: var(--text-muted); letter-spacing: 2px; }
.login-modal-close {
  position: absolute; top: 20px; right: 20px; width: 36px; height: 36px;
  border-radius: 50%; border: 1px solid rgba(0,212,255,0.2); background: transparent;
  color: var(--text-muted); font-size: 20px; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: all 0.3s; z-index: 10;
}
.login-modal-close:hover { border-color: var(--neon-blue); color: var(--neon-blue); box-shadow: 0 0 15px rgba(0,212,255,0.2); }
.modal-input-group { margin-bottom: 18px; }
.modal-input-group label { display: block; font-size: 11px; color: var(--text-muted); margin-bottom: 6px; letter-spacing: 1px; text-transform: uppercase; }
.modal-input-wrap { position: relative; }
.modal-input-wrap input {
  width: 100%; padding: 12px 14px 12px 40px;
  background: rgba(5,5,16,0.6); border: 1px solid rgba(0,212,255,0.15); border-radius: 10px;
  color: var(--text-primary); font-size: 14px; font-family: inherit; outline: none;
  transition: all 0.3s ease;
}
.modal-input-wrap input::placeholder { color: var(--text-muted); }
.modal-input-wrap input:focus { border-color: var(--neon-blue); box-shadow: 0 0 15px rgba(0,212,255,0.1); }
.modal-input-wrap input.error { border-color: var(--neon-red); box-shadow: 0 0 15px rgba(239,68,68,0.15); }
.modal-input-icon { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); font-size: 16px; color: var(--text-muted); pointer-events: none; transition: color 0.3s; }
.modal-toggle-pwd { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 16px; padding: 4px; transition: color 0.3s; }
.modal-toggle-pwd:hover { color: var(--neon-blue); }
.modal-error-msg {
  display: none; font-size: 12px; color: var(--neon-red); margin-bottom: 8px;
  padding: 8px 12px; background: rgba(239,68,68,0.08); border: 1px solid rgba(239,68,68,0.2);
  border-radius: 8px; text-align: center;
}
.modal-error-msg.visible { display: block; }
.modal-options { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; }
.modal-remember { display: flex; align-items: center; gap: 8px; cursor: pointer; }
.modal-remember input { width: 14px; height: 14px; accent-color: var(--neon-blue); cursor: pointer; }
.modal-remember span { font-size: 12px; color: var(--text-secondary); }
.modal-login-btn {
  width: 100%; padding: 14px;
  background: linear-gradient(135deg, var(--neon-blue), #0072ff);
  border: none; border-radius: 10px; color: white; font-size: 15px; font-weight: 700;
  font-family: inherit; cursor: pointer; position: relative; overflow: hidden;
  transition: all 0.3s ease; letter-spacing: 2px;
}
.modal-login-btn:disabled { opacity: 0.6; cursor: not-allowed; }
.modal-login-btn::before {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(135deg, transparent, rgba(255,255,255,0.2), transparent);
  transform: translateX(-100%); transition: transform 0.5s;
}
.modal-login-btn:hover:not(:disabled)::before { transform: translateX(100%); }
.modal-login-btn:hover:not(:disabled) { box-shadow: 0 10px 40px rgba(0,212,255,0.3); transform: translateY(-2px); }

.hero { position: relative; min-height: 100vh; display: flex; align-items: center; justify-content: center; overflow: hidden; background: var(--bg-deep); }
#heroCanvas { position: absolute; inset: 0; z-index: 0; }
.scanline { position: absolute; inset: 0; z-index: 1; pointer-events: none; background: repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,212,255,0.015) 2px, rgba(0,212,255,0.015) 4px); }
.vignette { position: absolute; inset: 0; z-index: 2; pointer-events: none; background: radial-gradient(ellipse at center, transparent 40%, var(--bg-deep) 100%); }
.hero-inner { position: relative; z-index: 10; display: flex; align-items: center; justify-content: center; gap: 80px; width: 100%; max-width: 1400px; padding: 0 50px; }
.hero-content { flex: 0 0 auto; max-width: 520px; }
.hero-tag { display: inline-flex; align-items: center; gap: 8px; padding: 6px 18px; border: 1px solid rgba(0,212,255,0.2); border-radius: 20px; font-size: 12px; color: var(--neon-blue); letter-spacing: 3px; margin-bottom: 30px; opacity: 0; transform: translateY(20px); animation: fadeInUp 0.8s ease forwards 0.2s; }
.hero-tag::before { content: ''; width: 6px; height: 6px; background: var(--neon-blue); border-radius: 50%; box-shadow: 0 0 10px var(--neon-blue); animation: pulse-dot 2s ease-in-out infinite; }
@keyframes pulse-dot { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(0.7); } }
.hero-title { font-size: 48px; font-weight: 300; line-height: 1.2; margin-bottom: 20px; opacity: 0; transform: translateY(30px); animation: fadeInUp 0.8s ease forwards 0.4s; }
.hero-title strong { display: block; font-weight: 900; font-size: 56px; background: linear-gradient(135deg, var(--text-primary), var(--neon-blue)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; position: relative; }
.hero-title strong::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 80px; height: 3px; background: linear-gradient(90deg, var(--neon-blue), transparent); border-radius: 2px; }
.hero-subtitle { font-family: 'Orbitron', sans-serif; font-size: 12px; color: var(--text-muted); letter-spacing: 5px; text-transform: uppercase; opacity: 0; transform: translateY(30px); animation: fadeInUp 0.8s ease forwards 0.6s; }
.hero-stats { display: flex; gap: 32px; margin-top: 50px; opacity: 0; transform: translateY(30px); animation: fadeInUp 0.8s ease forwards 0.8s; }
.stat-item { position: relative; }
.stat-item::before { content: ''; position: absolute; left: -16px; top: 50%; transform: translateY(-50%); width: 1px; height: 30px; background: linear-gradient(180deg, transparent, var(--neon-blue), transparent); opacity: 0.3; }
.stat-item:first-child::before { display: none; }
.stat-num { font-family: 'Orbitron', sans-serif; font-size: 28px; font-weight: 700; color: var(--neon-blue); text-shadow: 0 0 20px rgba(0,212,255,0.3); }
.stat-label { font-size: 11px; color: var(--text-muted); letter-spacing: 2px; margin-top: 4px; }
@keyframes fadeInUp { to { opacity: 1; transform: translateY(0); } }

.hero-hub { flex: 0 0 auto; width: 420px; height: 420px; opacity: 0; animation: fadeInUp 1s ease forwards 0.6s; }
.hub-container { position: relative; width: 100%; height: 100%; }
.hub-base { position: absolute; bottom: 8%; left: 50%; transform: translateX(-50%); width: 260px; height: 100px; }
.hex-grid { position: absolute; inset: 0; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='52' viewBox='0 0 30 52'%3E%3Cpath d='M15 0L30 8.66v17.32L15 34.64 0 25.98V8.66z' fill='none' stroke='rgba(0,212,255,0.08)' stroke-width='1'/%3E%3C/svg%3E"); background-size: 30px 52px; mask-image: radial-gradient(ellipse at center, black 40%, transparent 80%); -webkit-mask-image: radial-gradient(ellipse at center, black 40%, transparent 80%); animation: hex-pulse 4s ease-in-out infinite; }
@keyframes hex-pulse { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } }
.hub-core { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90px; height: 90px; }
.hub-core-inner { width: 100%; height: 100%; border-radius: 50%; background: radial-gradient(circle at 30% 30%, rgba(0,212,255,0.4), rgba(0,100,200,0.1) 60%, transparent 70%); border: 1px solid rgba(0,212,255,0.2); position: relative; animation: core-breathe 3s ease-in-out infinite; }
.hub-core-inner::before { content: '📦'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 32px; filter: drop-shadow(0 0 15px rgba(0,212,255,0.5)); }
.hub-core-inner::after { content: ''; position: absolute; inset: -20px; border-radius: 50%; border: 1px solid rgba(0,212,255,0.1); animation: core-ring 3s ease-out infinite; }
@keyframes core-breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } }
@keyframes core-ring { 0% { transform: scale(0.8); opacity: 0.6; } 100% { transform: scale(1.5); opacity: 0; } }
.hub-orbit { position: absolute; top: 50%; left: 50%; border: 1px dashed rgba(0,212,255,0.15); border-radius: 50%; transform: translate(-50%, -50%); }
.hub-orbit-1 { width: 180px; height: 180px; animation: orbit-spin 20s linear infinite; }
.hub-orbit-2 { width: 280px; height: 280px; animation: orbit-spin 30s linear infinite reverse; }
.hub-orbit-3 { width: 360px; height: 360px; animation: orbit-spin 40s linear infinite; }
@keyframes orbit-spin { from { transform: translate(-50%, -50%) rotate(0deg); } to { transform: translate(-50%, -50%) rotate(360deg); } }
.orbit-node { position: absolute; width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 14px; background: rgba(17,17,40,0.9); border: 1px solid rgba(0,212,255,0.3); box-shadow: 0 0 15px rgba(0,212,255,0.2); animation: node-glow 2s ease-in-out infinite; }
@keyframes node-glow { 0%, 100% { box-shadow: 0 0 10px rgba(0,212,255,0.2); } 50% { box-shadow: 0 0 25px rgba(0,212,255,0.4); } }
.hub-orbit-1 .orbit-node:nth-child(1) { top: -16px; left: 50%; transform: translateX(-50%); }
.hub-orbit-1 .orbit-node:nth-child(2) { bottom: -16px; left: 50%; transform: translateX(-50%); animation-delay: 0.5s; }
.hub-orbit-1 .orbit-node:nth-child(3) { left: -16px; top: 50%; transform: translateY(-50%); animation-delay: 1s; }
.hub-orbit-1 .orbit-node:nth-child(4) { right: -16px; top: 50%; transform: translateY(-50%); animation-delay: 1.5s; }
.hub-orbit-2 .orbit-node:nth-child(1) { top: -16px; left: 30%; }
.hub-orbit-2 .orbit-node:nth-child(2) { bottom: -16px; right: 30%; animation-delay: 0.7s; }
.hub-orbit-2 .orbit-node:nth-child(3) { left: -16px; bottom: 30%; animation-delay: 1.4s; }
.hub-orbit-2 .orbit-node:nth-child(4) { right: -16px; top: 30%; animation-delay: 2.1s; }
.hub-orbit-3 .orbit-node:nth-child(1) { top: -16px; right: 20%; }
.hub-orbit-3 .orbit-node:nth-child(2) { bottom: -16px; left: 20%; animation-delay: 0.6s; }
.hub-orbit-3 .orbit-node:nth-child(3) { left: -16px; top: 20%; animation-delay: 1.2s; }
.hub-orbit-3 .orbit-node:nth-child(4) { right: -16px; bottom: 20%; animation-delay: 1.8s; }
.hub-label { position: absolute; padding: 5px 10px; background: rgba(17,17,40,0.8); border: 1px solid rgba(0,212,255,0.15); border-radius: 6px; font-size: 10px; color: var(--text-secondary); backdrop-filter: blur(10px); white-space: nowrap; }
.hub-label strong { color: var(--neon-blue); font-family: 'Orbitron', sans-serif; font-size: 12px; display: block; }
.scroll-hint { position: absolute; bottom: 40px; left: 50%; transform: translateX(-50%); z-index: 10; display: flex; flex-direction: column; align-items: center; gap: 8px; opacity: 0; animation: fadeInUp 0.8s ease forwards 1.2s; }
.scroll-hint-text { font-size: 11px; color: var(--text-muted); letter-spacing: 3px; }
.scroll-hint-line { width: 1px; height: 40px; background: linear-gradient(180deg, var(--neon-blue), transparent); animation: scroll-pulse 2s ease-in-out infinite; }
@keyframes scroll-pulse { 0%, 100% { opacity: 0.3; transform: scaleY(0.5); } 50% { opacity: 1; transform: scaleY(1); } }

.about { position: relative; min-height: 100vh; padding: 140px 50px 100px; background: var(--bg-mid); overflow: hidden; }
.about-grid-bg { position: absolute; inset: 0; background-image: linear-gradient(rgba(0,212,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0,212,255,0.03) 1px, transparent 1px); background-size: 80px 80px; mask-image: radial-gradient(ellipse at center, black 30%, transparent 70%); -webkit-mask-image: radial-gradient(ellipse at center, black 30%, transparent 70%); }
.about-content { position: relative; z-index: 2; max-width: 1200px; margin: 0 auto; }
.about-header { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 80px; }
.about-title-group { position: relative; }
.about-title-group::before { content: ''; position: absolute; left: -20px; top: 10px; width: 4px; height: 60px; background: linear-gradient(180deg, var(--neon-blue), transparent); border-radius: 2px; }
.about-label { font-family: 'Orbitron', sans-serif; font-size: 12px; color: var(--neon-blue); letter-spacing: 4px; margin-bottom: 12px; display: flex; align-items: center; gap: 10px; }
.about-label::after { content: ''; width: 40px; height: 1px; background: linear-gradient(90deg, var(--neon-blue), transparent); }
.about-title { font-size: 42px; font-weight: 700; line-height: 1.2; }
.about-title span { color: var(--neon-blue); }
.about-subtitle { font-family: 'Orbitron', sans-serif; font-size: 13px; color: var(--text-muted); letter-spacing: 4px; }
.about-viz { display: grid; grid-template-columns: 1fr 1fr; gap: 60px; align-items: center; }
.about-text-col { display: flex; flex-direction: column; gap: 28px; }
.about-text-block { padding: 28px; background: rgba(17,17,40,0.4); border: 1px solid rgba(0,212,255,0.08); border-radius: 16px; position: relative; overflow: hidden; transition: all 0.4s ease; }
.about-text-block::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: linear-gradient(90deg, var(--neon-blue), transparent); opacity: 0; transition: opacity 0.4s; }
.about-text-block:hover { border-color: rgba(0,212,255,0.2); transform: translateY(-4px); box-shadow: 0 20px 60px rgba(0,0,0,0.3); }
.about-text-block:hover::before { opacity: 1; }
.about-text-block p { font-size: 15px; color: var(--text-secondary); line-height: 2; }
.about-visual { position: relative; height: 500px; display: flex; align-items: center; justify-content: center; }
.viz-ring { position: absolute; border-radius: 50%; border: 1px solid rgba(0,212,255,0.1); }
.viz-ring-1 { width: 400px; height: 400px; animation: spin 30s linear infinite; }
.viz-ring-2 { width: 300px; height: 300px; animation: spin 20s linear infinite reverse; }
.viz-ring-3 { width: 200px; height: 200px; animation: spin 15s linear infinite; }
.viz-ring::before { content: ''; position: absolute; width: 8px; height: 8px; background: var(--neon-blue); border-radius: 50%; box-shadow: 0 0 15px var(--neon-blue); top: -4px; left: 50%; transform: translateX(-50%); }
@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
.viz-center { width: 120px; height: 120px; border-radius: 50%; background: radial-gradient(circle, rgba(0,212,255,0.2), transparent 70%); display: flex; align-items: center; justify-content: center; position: relative; }
.viz-center::before { content: ''; position: absolute; width: 60px; height: 60px; border: 2px solid var(--neon-blue); border-radius: 50%; border-right-color: transparent; animation: spin 3s linear infinite; }
.viz-center::after { content: '📦'; font-size: 32px; z-index: 2; }
.viz-data-points { position: absolute; inset: 0; }
.viz-point { position: absolute; padding: 10px 16px; background: rgba(17,17,40,0.8); border: 1px solid rgba(0,212,255,0.15); border-radius: 8px; font-size: 12px; color: var(--text-secondary); backdrop-filter: blur(10px); animation: point-float 4s ease-in-out infinite; }
.viz-point strong { display: block; font-family: 'Orbitron', sans-serif; font-size: 18px; color: var(--neon-blue); margin-bottom: 2px; }
@keyframes point-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }

.advantages { position: relative; min-height: 100vh; padding: 140px 50px 100px; background: var(--bg-deep); overflow: hidden; }
.adv-bg-lines { position: absolute; inset: 0; overflow: hidden; }
.adv-line { position: absolute; height: 1px; background: linear-gradient(90deg, transparent, rgba(0,212,255,0.08), transparent); animation: line-move 8s linear infinite; }
@keyframes line-move { 0% { transform: translateX(-100%); } 100% { transform: translateX(100vw); } }
.adv-content { position: relative; z-index: 2; max-width: 1300px; margin: 0 auto; }
.adv-header { text-align: center; margin-bottom: 80px; }
.adv-label { font-family: 'Orbitron', sans-serif; font-size: 12px; color: var(--neon-blue); letter-spacing: 4px; margin-bottom: 16px; }
.adv-title { font-size: 42px; font-weight: 700; }
.adv-title span { color: var(--neon-blue); }
.adv-subtitle { font-family: 'Orbitron', sans-serif; font-size: 13px; color: var(--text-muted); letter-spacing: 4px; margin-top: 12px; }
.adv-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; }
.adv-card { position: relative; padding: 40px 28px; background: rgba(17,17,40,0.3); border: 1px solid rgba(255,255,255,0.05); border-radius: 20px; overflow: hidden; transition: all 0.5s cubic-bezier(0.4,0,0.2,1); cursor: default; }
.adv-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--card-accent); opacity: 0; transition: opacity 0.5s; }
.adv-card::after { content: ''; position: absolute; inset: 0; background: radial-gradient(circle at var(--mouse-x, 50%) var(--mouse-y, 50%), rgba(0,212,255,0.08), transparent 50%); opacity: 0; transition: opacity 0.3s; pointer-events: none; }
.adv-card:hover::before { opacity: 1; }
.adv-card:hover::after { opacity: 1; }
.adv-card:hover { transform: translateY(-8px); border-color: rgba(0,212,255,0.15); box-shadow: 0 30px 60px rgba(0,0,0,0.4), 0 0 40px rgba(0,212,255,0.05); }
.adv-card-icon { width: 64px; height: 64px; border-radius: 16px; display: flex; align-items: center; justify-content: center; font-size: 28px; margin-bottom: 24px; position: relative; background: var(--card-accent); box-shadow: 0 10px 30px var(--card-glow); }
.adv-card-icon::before { content: ''; position: absolute; inset: -4px; border-radius: 20px; border: 1px solid var(--card-accent); opacity: 0.3; animation: icon-pulse 3s ease-in-out infinite; }
@keyframes icon-pulse { 0%, 100% { transform: scale(1); opacity: 0.3; } 50% { transform: scale(1.1); opacity: 0.1; } }
.adv-card-title { font-size: 20px; font-weight: 700; margin-bottom: 16px; color: var(--text-primary); }
.adv-card-desc { font-size: 14px; color: var(--text-secondary); line-height: 1.9; }
.adv-card-num { position: absolute; top: 20px; right: 20px; font-family: 'Orbitron', sans-serif; font-size: 48px; font-weight: 900; color: rgba(255,255,255,0.03); line-height: 1; }
.adv-card-1 { --card-accent: linear-gradient(135deg, #00c6ff, #0072ff); --card-glow: rgba(0,114,255,0.2); }
.adv-card-2 { --card-accent: linear-gradient(135deg, #00f260, #0575e6); --card-glow: rgba(0,242,96,0.2); }
.adv-card-3 { --card-accent: linear-gradient(135deg, #8e2de2, #4a00e0); --card-glow: rgba(142,45,226,0.2); }
.adv-card-4 { --card-accent: linear-gradient(135deg, #ff416c, #ff4b2b); --card-glow: rgba(255,65,108,0.2); }

.reveal { opacity: 0; transform: translateY(50px); transition: all 1s cubic-bezier(0.4,0,0.2,1); }
.reveal.active { opacity: 1; transform: translateY(0); }
.reveal-delay-1 { transition-delay: 0.1s; }
.reveal-delay-2 { transition-delay: 0.2s; }
.reveal-delay-3 { transition-delay: 0.3s; }
.reveal-delay-4 { transition-delay: 0.4s; }

@media (max-width: 1200px) {
  .hero-inner { flex-direction: column; gap: 40px; text-align: center; }
  .hero-content { max-width: 100%; }
  .hero-stats { justify-content: center; }
  .hero-hub { width: 350px; height: 350px; }
  .hero-title strong::after { left: 50%; transform: translateX(-50%); }
  .adv-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 768px) {
  .nav, .nav.glass { padding: 14px 20px; }
  .hero-inner { padding: 0 20px; flex-direction: column; gap: 30px; }
  .hero-title { font-size: 28px; }
  .hero-title strong { font-size: 32px; }
  .hero-stats { gap: 16px; }
  .stat-num { font-size: 22px; }
  .hero-hub { width: 260px; height: 260px; }
  .about, .advantages { padding: 100px 20px 60px; }
  .about-header { flex-direction: column; align-items: flex-start; gap: 16px; margin-bottom: 50px; }
  .about-viz { grid-template-columns: 1fr; }
  .about-visual { height: 350px; }
  .adv-grid { grid-template-columns: 1fr; }
  .about-title, .adv-title { font-size: 32px; }
  .login-modal { flex-direction: column; width: 95vw; }
  .login-modal-left { border-right: none; border-bottom: 1px solid rgba(0,212,255,0.08); padding: 28px 22px; }
  .login-modal-left h3 { font-size: 22px; }
  .login-modal-left h3 strong { font-size: 26px; }
  .login-modal-right { width: 100%; padding: 28px 22px; }
  .hub-orbit-1 { width: 150px; height: 150px; }
  .hub-orbit-2 { width: 220px; height: 220px; }
  .hub-orbit-3 { width: 280px; height: 280px; }
}
@media (max-width: 375px) {
  .nav-name { font-size: 18px; letter-spacing: 1px; }
  .nav-login { padding: 8px 20px; font-size: 12px; }
  .hero-title strong { font-size: 26px; }
  .hero-stats { flex-direction: column; gap: 12px; align-items: center; }
  .stat-item::before { display: none; }
}
</style>
</head>
<body>
<nav class="nav" id="nav">
  <div class="nav-brand">
    <div class="nav-logo"></div>
</section>
</body>
</html>>
    <div class="nav-name">ZBWL <span>瞻博</span></div>
  </div>
  <div class="nav-right">
    <button class="nav-login" id="navLoginBtn" onclick="openLogin()">登录系统</button>
  </div>
</nav>

<div class="login-overlay" id="loginOverlay" onclick="closeLogin(event)">
  <form class="login-modal" id="loginForm" onclick="event.stopPropagation()" autocomplete="off">
    <button type="button" class="login-modal-close" onclick="closeLogin()">×</button>
    <div class="login-modal-left">
      <div class="login-modal-brand">
        <div class="login-modal-brand-icon"></div>
        <div class="login-modal-brand-text">ZBWL <span>瞻博</span></div>
      </div>
      <h3>给你无限可能与希望<strong>瞻博物流</strong></h3>
      <p>智能物流系统，让每一次运输都精准可控。登录后即可查看订单状态、追踪货物位置、管理物流方案。</p>
      <div class="login-modal-features">
        <div class="login-modal-feature">智能调度</div>
        <div class="login-modal-feature">实时追踪</div>
        <div class="login-modal-feature">安全可靠</div>
      </div>
    </div>
    <div class="login-modal-right">
      <div class="login-modal-header"><h2>欢迎登录</h2><p>WELCOME BACK</p></div>
      <div id="loginError" class="modal-error-msg"></div>
      <div class="modal-input-group">
        <label>账号</label>
        <div class="modal-input-wrap">
          <input type="text" placeholder="请输入账号" id="modalUsername" autocomplete="username" required>
          <span class="modal-input-icon">👤</span>
        </div>
      </div>
      <div class="modal-input-group">
        <label>密码</label>
        <div class="modal-input-wrap">
          <input type="password" placeholder="请输入密码" id="modalPassword" autocomplete="current-password" required>
          <span class="modal-input-icon">🔒</span>
          <button type="button" class="modal-toggle-pwd" onclick="toggleModalPwd()">👁️</button>
        </div>
      </div>
      <button type="submit" class="modal-login-btn" id="loginBtn">登 录</button>
    </div>
  </form>
</div>

<section class="hero" id="hero">
  <canvas id="heroCanvas"></canvas>
  <div class="scanline"></div>
  <div class="vignette"></div>
  <div class="hero-inner">
    <div class="hero-content">
      <div class="hero-tag">智能物流系统已启动</div>
      <h1 class="hero-title">给你无限可能与希望<strong>瞻博物流</strong></h1>
      <p class="hero-subtitle">Give You Infinite Possibilities And Hope</p>
      <div class="hero-stats">
        <div class="stat-item"><div class="stat-num" data-target="50000">0</div><div class="stat-label">日均订单</div></div>
        <div class="stat-item"><div class="stat-num" data-target="99.8">0</div><div class="stat-label">准时率 %</div></div>
        <div class="stat-item"><div class="stat-num" data-target="2000">0</div><div class="stat-label">覆盖城市</div></div>
      </div>
    </div>
    <div class="hero-hub">
      <div class="hub-container">
        <div class="hub-base"><div class="hex-grid"></div></div>
        <div class="hub-core"><div class="hub-core-inner"></div></div>
        <div class="hub-orbit hub-orbit-1">
          <div class="orbit-node">🚚</div><div class="orbit-node">✈️</div><div class="orbit-node">🚢</div><div class="orbit-node">🚄</div>
        </div>
        <div class="hub-orbit hub-orbit-2">
          <div class="orbit-node">📦</div><div class="orbit-node">🏭</div><div class="orbit-node">🏪</div><div class="orbit-node">🏠</div>
        </div>
        <div class="hub-orbit hub-orbit-3">
          <div class="orbit-node">📡</div><div class="orbit-node">🌐</div><div class="orbit-node">📊</div><div class="orbit-node">🔒</div>
        </div>
        <div class="hub-label" style="top:5%;left:10%;"><strong>AI调度</strong>智能路径规划</div>
        <div class="hub-label" style="top:15%;right:5%;"><strong>5G物联</strong>实时数据传输</div>
        <div class="hub-label" style="bottom:20%;left:0;"><strong>区块链</strong>全程溯源追踪</div>
        <div class="hub-label" style="bottom:10%;right:10%;"><strong>大数据</strong>精准需求预测</div>
      </div>
    </div>
  </div>
  <div class="scroll-hint">
    <span class="scroll-hint-text">SCROLL</span>
    <div class="scroll-hint-line"></div>
  </div>
</section>

<section class="about" id="about">
  <div class="about-grid-bg"></div>
  <div class="about-content">
    <div class="about-header reveal">
      <div class="about-title-group">
        <div class="about-label">ABOUT US</div>
        <h2 class="about-title">关于 <span>瞻博物流</span></h2>
      </div>
      <div class="about-subtitle">Welcome To The Zhanbo</div>
    </div>
    <div class="about-viz">
      <div class="about-text-col">
        <div class="about-text-block reveal reveal-delay-1"><p>在这个快节奏的时代，物流效率至关重要。瞻博物流，以抢到高效为服务宗旨，致力于为您提供迅速、精准的物流服务。我们明白，时间就是金钱，因此我们将速度和效率放在首位，确保您的货物能够在最短的时间内安全送达。</p></div>
        <div class="about-text-block reveal reveal-delay-2"><p>同时，瞻博物流还为您提供全程可视化的物流服务。通过我们的先进系统，您可以实时追踪货物的位置和状态，无论是陆运、海运还是空运，一切尽在您的掌控之中。这种透明度不仅让您安心，更能让您灵活调整计划，应对各种突发情况。</p></div>
        <div class="about-text-block reveal reveal-delay-3"><p>我们深知，专业的服务是物流行业的核心竞争力。瞻博物流拥有一支经验丰富、技术过硬的团队，他们精通物流操作的各个环节，能够为您提供定制化的解决方案。从包装、仓储到配送，我们都将竭尽全力满足您的需求，确保每一次服务都能让您满意。</p></div>
        <div class="about-text-block reveal reveal-delay-4"><p>瞻博物流，抢到高效，实现可视化，提供专业服务。我们期待与您携手共进，共创美好未来！选择瞻博，选择专业与高效！</p></div>
      </div>
      <div class="about-visual reveal reveal-delay-2">
        <div class="viz-ring viz-ring-1"></div>
        <div class="viz-ring viz-ring-2"></div>
        <div class="viz-ring viz-ring-3"></div>
        <div class="viz-center"></div>
        <div class="viz-data-points">
          <div class="viz-point" style="top:10%;left:5%"><strong>24h</strong>全天候监控</div>
          <div class="viz-point" style="top:60%;right:0"><strong>AI</strong>智能调度</div>
          <div class="viz-point" style="bottom:10%;left:10%"><strong>5G</strong>实时传输</div>
        </div>
      </div>
    </div>
  </div>
</section>

<section class="advantages" id="advantages">
  <div class="adv-bg-lines">
    <div class="adv-line" style="top:20%"></div>
    <div class="adv-line" style="top:50%;animation-delay:2s"></div>
    <div class="adv-line" style="top:80%;animation-delay:4s"></div>
  </div>
  <div class="adv-content">
    <div class="adv-header reveal">
      <div class="adv-label">OUR ADVANTAGES</div>
      <h2 class="adv-title">我们的<span>优势</span></h2>
      <div class="adv-subtitle">Welcome To The Zhanbo</div>
    </div>
    <div class="adv-grid">
      <div class="adv-card adv-card-1 reveal reveal-delay-1"><div class="adv-card-num">01</div><div class="adv-card-icon">🌐</div><h3 class="adv-card-title">覆盖全国</h3><p class="adv-card-desc">无论您需要将货物送往哪里，无论是北方的雪原还是南方的热带雨林，瞻博物流都能为您提供覆盖全国的专业服务。无论远近，无论城乡，我们都将确保您的货物安全、准时送达。</p></div>
      <div class="adv-card adv-card-2 reveal reveal-delay-2"><div class="adv-card-num">02</div><div class="adv-card-icon">⚙️</div><h3 class="adv-card-title">个性定制</h3><p class="adv-card-desc">我们明白每个客户的需求都是独特的，无论您有什么样的特殊要求，无论您需要何种特定的物流方案，我们都会竭尽全力满足，确保为您提供最贴心、最周到的个性化服务。</p></div>
      <div class="adv-card adv-card-3 reveal reveal-delay-3"><div class="adv-card-num">03</div><div class="adv-card-icon">💰</div><h3 class="adv-card-title">费用低廉</h3><p class="adv-card-desc">在选择物流服务时，我们始终致力于提供费用低廉但质量不打折的服务。选择我们，就是选择了性价比之选，让您在节省成本的同时，也能享受到一流的专业物流服务。</p></div>
      <div class="adv-card adv-card-4 reveal reveal-delay-4"><div class="adv-card-num">04</div><div class="adv-card-icon">📍</div><h3 class="adv-card-title">可视管控</h3><p class="adv-card-desc">在物流过程中，货物的安全和位置总是让人牵挂。瞻博物流提供的可视管控服务，让您随时随地都能掌握货物的最新动态。您可以轻松追踪货物的位置和状态。</p></div>
    </div>
  </div>
  </div>
</section>
<script>
(function() {
  var API_BASE = '/api';
  var TOKEN_KEY = 'zhanbo2_token';
  var SPA_PATH = '/app/';

  function showError(msg) {
    var el = document.getElementById('loginError');
    el.textContent = msg;
    el.classList.add('visible');
  }
  function hideError() {
    var el = document.getElementById('loginError');
    el.classList.remove('visible');
  }
  function setInputError(id, hasError) {
    var el = document.getElementById(id);
    if (hasError) el.classList.add('error');
    else el.classList.remove('error');
  }

  window.openLogin = function() {
    document.getElementById('loginOverlay').classList.add('active');
    document.body.style.overflow = 'hidden';
    hideError();
    setInputError('modalUsername', false);
    setInputError('modalPassword', false);
    document.getElementById('modalUsername').value = '';
    document.getElementById('modalPassword').value = '';
    setTimeout(function() { document.getElementById('modalUsername').focus(); }, 200);
  };

  window.closeLogin = function(e) {
    if (e && e.target !== e.currentTarget) return;
    document.getElementById('loginOverlay').classList.remove('active');
    document.body.style.overflow = '';
  };

  window.toggleModalPwd = function() {
    var pwd = document.getElementById('modalPassword');
    var btn = document.querySelector('.modal-toggle-pwd');
    if (pwd.type === 'password') { pwd.type = 'text'; btn.textContent = '🙈'; }
    else { pwd.type = 'password'; btn.textContent = '👁️'; }
  };

  document.getElementById('loginForm').addEventListener('submit', function(e) {
    e.preventDefault();
    var btn = document.getElementById('loginBtn');
    var username = document.getElementById('modalUsername').value.trim();
    var password = document.getElementById('modalPassword').value;
    hideError();
    if (!username) { showError('请输入账号'); setInputError('modalUsername', true); return; }
    if (!password) { showError('请输入密码'); setInputError('modalPassword', true); return; }
    btn.disabled = true;
    btn.textContent = '登录中...';

    fetch(API_BASE + '/auth/login', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ username: username, password: password })
    })
    .then(function(res) {
      return res.json().then(function(data) { return { ok: res.ok, status: res.status, data: data }; });
    })
    .then(function(result) {
      if (!result.ok) {
        var msg = (result.data && result.data.error && result.data.error.message) || ('登录失败 (' + result.status + ')');
        throw new Error(msg);
      }
      if (!result.data.token) throw new Error('响应缺少 token');
      localStorage.setItem(TOKEN_KEY, result.data.token);
      btn.textContent = '登录成功';
      setTimeout(function() {
        window.location.href = SPA_PATH + '?ztoken=' + encodeURIComponent(result.data.token);
      }, 500);
    })
    .catch(function(err) {
      btn.disabled = false;
      btn.textContent = '登 录';
      showError(err.message || '网络错误，请稍后重试');
      setInputError('modalUsername', true);
      setInputError('modalPassword', true);
    });
  });

  document.addEventListener('keydown', function(e) {
    if (e.key === 'Escape') closeLogin();
  });

  // Check existing session
  (function() {
    var token = localStorage.getItem(TOKEN_KEY);
    if (!token) return;
    var btn = document.getElementById('navLoginBtn');
    btn.textContent = '进入系统';
    btn.onclick = function() { window.location.href = SPA_PATH; };
  })();
})();

// Canvas particles
(function(){
  var canvas = document.getElementById('heroCanvas');
  var ctx = canvas.getContext('2d');
  var particles = [];
  var mouse = { x: -1000, y: -1000 };
  var frameCount = 0;

  function resizeCanvas() { canvas.width = window.innerWidth; canvas.height = window.innerHeight; }
  resizeCanvas();
  window.addEventListener('resize', resizeCanvas);

  var Particle = (function() {
    function Particle() {
      this.x = Math.random() * canvas.width;
      this.y = Math.random() * canvas.height;
      this.vx = (Math.random() - 0.5) * 0.3;
      this.vy = (Math.random() - 0.5) * 0.3;
      this.size = Math.random() * 1.5 + 0.5;
      this.opacity = Math.random() * 0.4 + 0.15;
    }
    Particle.prototype.update = function() {
      this.x += this.vx; this.y += this.vy;
      if (this.x < 0 || this.x > canvas.width) this.vx *= -1;
      if (this.y < 0 || this.y > canvas.height) this.vy *= -1;
      var dx = this.x - mouse.x;
      var dy = this.y - mouse.y;
      var dist = Math.sqrt(dx*dx + dy*dy);
      if (dist < 100) { var force = (100 - dist) / 100; this.x += dx * force * 0.01; this.y += dy * force * 0.01; }
    };
    Particle.prototype.draw = function() {
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
      ctx.fillStyle = 'rgba(0,212,255,' + this.opacity + ')';
      ctx.fill();
    };
    return Particle;
  })();

  function initParticles() {
    particles = [];
    var count = Math.min(60, Math.floor(canvas.width * canvas.height / 15000));
    for (var i = 0; i < count; i++) particles.push(new Particle());
  }
  initParticles();

  function drawLines() {
    var maxDist = 100, maxConn = 2;
    for (var i = 0; i < particles.length; i++) {
      var conn = 0;
      for (var j = i + 1; j < particles.length && conn < maxConn; j++) {
        var dx = particles[i].x - particles[j].x;
        var dy = particles[i].y - particles[j].y;
        var ds = dx*dx + dy*dy;
        if (ds < maxDist * maxDist) {
          var dist = Math.sqrt(ds);
          var op = (1 - dist / maxDist) * 0.08;
          ctx.beginPath(); ctx.moveTo(particles[i].x, particles[i].y);
          ctx.lineTo(particles[j].x, particles[j].y);
          ctx.strokeStyle = 'rgba(0,212,255,' + op + ')';
          ctx.lineWidth = 0.5; ctx.stroke(); conn++;
        }
      }
    }
  }

  function animate() {
    frameCount++;
    if (frameCount % 2 !== 0) { requestAnimationFrame(animate); return; }
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    var g = ctx.createRadialGradient(canvas.width*0.5, canvas.height*0.5, 0, canvas.width*0.5, canvas.height*0.5, canvas.width*0.4);
    g.addColorStop(0, 'rgba(0,212,255,0.015)'); g.addColorStop(1, 'transparent');
    ctx.fillStyle = g; ctx.fillRect(0, 0, canvas.width, canvas.height);
    particles.forEach(function(p) { p.update(); p.draw(); });
    drawLines();
    requestAnimationFrame(animate);
  }
  animate();
  canvas.addEventListener('mousemove', function(e) { mouse.x = e.clientX; mouse.y = e.clientY; });
  canvas.addEventListener('mouseleave', function() { mouse.x = -1000; mouse.y = -1000; });
})();

// Number counter
var numbersAnimated = false;
function animateNumbers() {
  if (numbersAnimated) return; numbersAnimated = true;
  document.querySelectorAll('.stat-num').forEach(function(num) {
    var target = parseFloat(num.dataset.target);
    var isFloat = target % 1 !== 0, duration = 2000, start = performance.now();
    function update(t) {
      var e = Math.min((t - start) / duration, 1);
      var v = target * (1 - Math.pow(1 - e, 3));
      num.textContent = isFloat ? v.toFixed(1) : Math.floor(v).toLocaleString();
      if (e < 1) requestAnimationFrame(update);
    }
    requestAnimationFrame(update);
  });
}

function handleNav() {
  var nav = document.getElementById('nav');
  if (window.scrollY > 50) nav.classList.add('glass');
  else nav.classList.remove('glass');
}
function handleReveal() {
  document.querySelectorAll('.reveal').forEach(function(el) {
    var r = el.getBoundingClientRect();
    if (r.top < window.innerHeight - 80) el.classList.add('active');
  });
  var stats = document.querySelector('.hero-stats');
  if (stats && stats.getBoundingClientRect().top < window.innerHeight) animateNumbers();
}
document.querySelectorAll('.adv-card').forEach(function(card) {
  card.addEventListener('mousemove', function(e) {
    var r = card.getBoundingClientRect();
    card.style.setProperty('--mouse-x', ((e.clientX - r.left)/r.width*100) + '%');
    card.style.setProperty('--mouse-y', ((e.clientY - r.top)/r.height*100) + '%');
  });
});
window.addEventListener('scroll', function() { handleNav(); handleReveal(); });
window.addEventListener('load', handleReveal);
handleReveal();
</script>
</body>
</html>