Browse Source

feat: 添加亿图腾企业官网页面

实现公司品牌官网,包含导航/关于/产品/五维哲学/幸福矩阵/核心功能/平台角色/联系方式等完整板块

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Xiaogang Liao 2 months ago
parent
commit
e746acafb0
3 changed files with 2938 additions and 0 deletions
  1. 1722 0
      web/css/style.css
  2. 707 0
      web/index.html
  3. 509 0
      web/js/main.js

+ 1722 - 0
web/css/style.css

@@ -0,0 +1,1722 @@
+/* ============================================================
+   亿图腾 · 浠艾福 — 企业官网样式表
+   设计系统基于 DESIGN.md 设计 Token
+   ============================================================ */
+
+/* ----------------------------------------------------------
+   0. CSS Custom Properties (Design Tokens)
+   ---------------------------------------------------------- */
+:root {
+  /* Brand Colors (from DESIGN.md parent palette) */
+  --color-primary: #FF8C42;
+  --color-primary-hover: #FF7A2E;
+  --color-primary-light: #FFF5E6;
+  --color-secondary: #4ECDC4;
+  --color-accent: #FFD93D;
+  --color-accent-light: #FFFBEB;
+
+  /* Text Colors */
+  --color-text-primary: #2D3436;
+  --color-text-secondary: #636E72;
+  --color-text-muted: #B2BEC3;
+
+  /* Surfaces */
+  --bg-body: #FFF9F0;
+  --bg-surface: #FFFFFF;
+  --bg-section-alt: #FFF9F0;
+
+  /* Other UI */
+  --color-border: #E8E0D8;
+  --color-border-light: #F0EAE0;
+  --shadow-sm: 0 1px 3px rgba(45, 52, 54, .08);
+  --shadow-md: 0 4px 12px rgba(45, 52, 54, .10);
+  --shadow-lg: 0 12px 40px rgba(45, 52, 54, .12);
+  --shadow-xl: 0 24px 60px rgba(45, 52, 54, .15);
+
+  /* Typography */
+  --font-family: system-ui, -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;
+  --font-size-display: clamp(2.25rem, 5vw, 3.5rem);
+  --font-size-h1: clamp(1.75rem, 4vw, 2.5rem);
+  --font-size-h2: clamp(1.5rem, 3vw, 2.25rem);
+  --font-size-h3: 1.25rem;
+  --font-size-body: 1rem;
+  --font-size-small: .875rem;
+  --font-size-tiny: .75rem;
+
+  /* Spacing */
+  --space-xs: .5rem;
+  --space-sm: .75rem;
+  --space-md: 1rem;
+  --space-lg: 1.5rem;
+  --space-xl: 2rem;
+  --space-2xl: 3rem;
+  --space-3xl: 4rem;
+  --space-section: 5rem;
+
+  /* Border Radius */
+  --radius-sm: 8px;
+  --radius-md: 12px;
+  --radius-lg: 16px;
+  --radius-xl: 24px;
+  --radius-full: 9999px;
+
+  /* Transitions */
+  --transition-fast: .2s ease;
+  --transition-normal: .3s ease;
+  --transition-slow: .5s cubic-bezier(.4, 0, .2, 1);
+
+  /* Layout */
+  --max-width: 1200px;
+  --header-height: 64px;
+}
+
+/* ----------------------------------------------------------
+   1. Reset & Base
+   ---------------------------------------------------------- */
+*, *::before, *::after {
+  margin: 0;
+  padding: 0;
+  box-sizing: border-box;
+}
+
+html {
+  scroll-behavior: smooth;
+  -webkit-text-size-adjust: 100%;
+  scroll-padding-top: var(--header-height);
+  scroll-snap-type: y mandatory;
+}
+
+/* All major sections snap to top when scrolling stops */
+section[id] {
+  scroll-snap-align: start;
+  scroll-snap-stop: always;
+}
+
+body {
+  font-family: var(--font-family);
+  font-size: var(--font-size-body);
+  line-height: 1.6;
+  color: var(--color-text-primary);
+  background: var(--bg-body);
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  overflow-x: hidden;
+}
+
+img { max-width: 100%; height: auto; display: block; }
+a { color: inherit; text-decoration: none; }
+ul { list-style: none; }
+
+/* ----------------------------------------------------------
+   2. Container
+   ---------------------------------------------------------- */
+.container {
+  width: 100%;
+  max-width: var(--max-width);
+  margin: 0 auto;
+  padding: 0 var(--space-xl);
+}
+
+/* ----------------------------------------------------------
+   3. Header / Navigation
+   ---------------------------------------------------------- */
+.site-header {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: var(--header-height);
+  background: rgba(255, 249, 240, .92);
+  backdrop-filter: blur(16px) saturate(180%);
+  -webkit-backdrop-filter: blur(16px) saturate(180%);
+  border-bottom: 1px solid var(--color-border-light);
+  z-index: 1000;
+  transition: box-shadow var(--transition-normal);
+}
+
+.site-header.scrolled {
+  box-shadow: var(--shadow-sm);
+}
+
+.header-inner {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  height: 100%;
+}
+
+/* Logo */
+.logo {
+  display: flex;
+  align-items: center;
+  gap: var(--space-xs);
+  font-weight: 700;
+  font-size: 1.125rem;
+}
+
+.logo-icon { font-size: 1.5rem; }
+
+.logo-text {
+  color: var(--color-text-primary);
+}
+
+.logo-tag {
+  color: var(--color-primary);
+  font-weight: 600;
+}
+
+/* Nav Toggle (Mobile) */
+.nav-toggle {
+  display: none;
+  flex-direction: column;
+  gap: 5px;
+  background: none;
+  border: none;
+  cursor: pointer;
+  padding: 4px;
+  z-index: 1001;
+}
+
+.nav-toggle span {
+  display: block;
+  width: 24px;
+  height: 2px;
+  background: var(--color-text-primary);
+  border-radius: 2px;
+  transition: var(--transition-fast);
+  transform-origin: center;
+}
+
+.nav-toggle.active span:nth-child(1) {
+  transform: translateY(7px) rotate(45deg);
+}
+
+.nav-toggle.active span:nth-child(2) {
+  opacity: 0;
+}
+
+.nav-toggle.active span:nth-child(3) {
+  transform: translateY(-7px) rotate(-45deg);
+}
+
+/* Nav List */
+.nav-list {
+  display: flex;
+  align-items: center;
+  gap: var(--space-lg);
+}
+
+.nav-link {
+  font-size: var(--font-size-small);
+  font-weight: 500;
+  color: var(--color-text-secondary);
+  transition: color var(--transition-fast);
+  position: relative;
+  padding: var(--space-xs) 0;
+}
+
+.nav-link::after {
+  content: '';
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 0;
+  height: 2px;
+  background: var(--color-primary);
+  border-radius: 1px;
+  transition: width var(--transition-normal);
+}
+
+.nav-link:hover,
+.nav-link.active {
+  color: var(--color-primary);
+}
+
+.nav-link:hover::after,
+.nav-link.active::after {
+  width: 100%;
+}
+
+/* Nav login button */
+.nav-login-btn {
+  display: inline-flex;
+  align-items: center;
+  padding: .5rem 1.125rem;
+  font-size: var(--font-size-tiny);
+  font-weight: 600;
+  color: #fff;
+  background: var(--color-primary);
+  border-radius: var(--radius-full);
+  transition: all var(--transition-fast);
+  margin-left: var(--space-md);
+  white-space: nowrap;
+}
+
+.nav-login-btn:hover {
+  background: var(--color-primary-hover);
+  transform: translateY(-1px);
+  box-shadow: 0 4px 12px rgba(255, 140, 66, .3);
+}
+
+/* ----------------------------------------------------------
+   4. Section Shell
+   ---------------------------------------------------------- */
+.section {
+  padding: var(--space-section) 0;
+}
+
+.section-header {
+  text-align: center;
+  max-width: 720px;
+  margin: 0 auto var(--space-3xl);
+}
+
+.section-tag {
+  display: inline-block;
+  font-size: var(--font-size-tiny);
+  font-weight: 600;
+  letter-spacing: .08em;
+  text-transform: uppercase;
+  color: var(--color-primary);
+  background: var(--color-primary-light);
+  padding: .35em 1em;
+  border-radius: var(--radius-full);
+  margin-bottom: var(--space-md);
+}
+
+.section-title {
+  font-size: var(--font-size-h1);
+  font-weight: 700;
+  line-height: 1.25;
+  margin-bottom: var(--space-md);
+  color: var(--color-text-primary);
+}
+
+.section-desc {
+  font-size: var(--font-size-body);
+  color: var(--color-text-secondary);
+  line-height: 1.7;
+  max-width: 600px;
+  margin: 0 auto;
+}
+
+/* ----------------------------------------------------------
+   5. Buttons
+   ---------------------------------------------------------- */
+.btn {
+  display: inline-flex;
+  align-items: center;
+  gap: var(--space-xs);
+  padding: .75rem 1.75rem;
+  font-family: var(--font-family);
+  font-size: var(--font-size-small);
+  font-weight: 600;
+  border-radius: var(--radius-md);
+  border: 2px solid transparent;
+  cursor: pointer;
+  transition: all var(--transition-fast);
+  text-align: center;
+}
+
+.btn-primary {
+  background: var(--color-primary);
+  color: #fff;
+  border-color: var(--color-primary);
+}
+
+.btn-primary:hover {
+  background: var(--color-primary-hover);
+  border-color: var(--color-primary-hover);
+  transform: translateY(-2px);
+  box-shadow: 0 8px 24px rgba(255, 140, 66, .35);
+}
+
+.btn-outline {
+  background: transparent;
+  color: var(--color-text-primary);
+  border-color: var(--color-border);
+}
+
+.btn-outline:hover {
+  border-color: var(--color-primary);
+  color: var(--color-primary);
+  transform: translateY(-2px);
+}
+
+/* Hero service provider link */
+.hero-service-link {
+  margin-top: var(--space-lg);
+  font-size: var(--font-size-small);
+  color: var(--color-text-muted);
+  display: flex;
+  align-items: center;
+  gap: var(--space-xs);
+}
+
+.hero-service-link a {
+  color: var(--color-primary);
+  font-weight: 600;
+  transition: color var(--transition-fast);
+}
+
+.hero-service-link a:hover {
+  color: var(--color-primary-hover);
+  text-decoration: underline;
+}
+
+/* Role card login button */
+.role-login-btn {
+  display: inline-block;
+  margin-top: var(--space-md);
+  padding: .5rem 1.25rem;
+  font-size: var(--font-size-tiny);
+  font-weight: 600;
+  color: #fff;
+  background: var(--color-text-primary);
+  border-radius: var(--radius-full);
+  transition: all var(--transition-fast);
+}
+
+.role-login-btn:hover {
+  background: var(--color-primary);
+  transform: translateY(-1px);
+  box-shadow: 0 4px 12px rgba(255, 140, 66, .25);
+}
+
+.role-teacher .role-login-btn:hover {
+  background: #3B82F6;
+  box-shadow: 0 4px 12px rgba(59, 130, 246, .3);
+}
+
+.role-admin .role-login-btn:hover {
+  background: #6366F1;
+  box-shadow: 0 4px 12px rgba(99, 102, 241, .3);
+}
+
+/* ----------------------------------------------------------
+   6. Hero Section
+   ---------------------------------------------------------- */
+.hero {
+  min-height: 100vh;
+  display: flex;
+  align-items: center;
+  position: relative;
+  padding-top: var(--header-height);
+  overflow: hidden;
+}
+
+.hero-bg {
+  position: absolute;
+  inset: 0;
+  background:
+    radial-gradient(ellipse 80% 50% at 50% -10%, rgba(255, 140, 66, .10), transparent),
+    radial-gradient(ellipse 60% 40% at 80% 80%, rgba(78, 205, 196, .08), transparent),
+    radial-gradient(ellipse 50% 50% at 20% 70%, rgba(255, 217, 61, .06), transparent);
+  pointer-events: none;
+}
+
+.hero-inner {
+  display: grid;
+  grid-template-columns: 1fr 1fr;
+  gap: var(--space-3xl);
+  align-items: center;
+  position: relative;
+  z-index: 1;
+}
+
+.hero-badge {
+  display: inline-block;
+  font-size: var(--font-size-tiny);
+  font-weight: 600;
+  letter-spacing: .06em;
+  color: var(--color-primary);
+  background: var(--color-primary-light);
+  padding: .4em 1.2em;
+  border-radius: var(--radius-full);
+  margin-bottom: var(--space-lg);
+}
+
+.hero-title {
+  font-size: var(--font-size-display);
+  font-weight: 800;
+  line-height: 1.15;
+  margin-bottom: var(--space-lg);
+}
+
+.highlight {
+  color: var(--color-primary);
+}
+
+.hero-desc {
+  font-size: 1.0625rem;
+  color: var(--color-text-secondary);
+  line-height: 1.8;
+  margin-bottom: var(--space-xl);
+  max-width: 540px;
+}
+
+.hero-desc strong {
+  color: var(--color-text-primary);
+}
+
+.hero-actions {
+  display: flex;
+  gap: var(--space-md);
+  flex-wrap: wrap;
+}
+
+/* Hero Visual - Orbit Animation */
+.hero-visual {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.dimension-orbit {
+  position: relative;
+  width: 320px;
+  height: 320px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.orbit-center {
+  width: 80px;
+  height: 80px;
+  border-radius: 50%;
+  background: var(--color-primary);
+  color: #fff;
+  font-size: 1.5rem;
+  font-weight: 700;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: 0 0 40px rgba(255, 140, 66, .3);
+  position: relative;
+  z-index: 2;
+  animation: pulseCenter 3s ease-in-out infinite;
+}
+
+@keyframes pulseCenter {
+  0%, 100% { box-shadow: 0 0 40px rgba(255, 140, 66, .3); transform: scale(1); }
+  50% { box-shadow: 0 0 60px rgba(255, 140, 66, .5); transform: scale(1.05); }
+}
+
+.orbit-item {
+  position: absolute;
+  width: 56px;
+  height: 56px;
+  border-radius: 50%;
+  background: var(--bg-surface);
+  border: 2px solid var(--color-border-light);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 1.25rem;
+  font-weight: 700;
+  color: var(--color-text-secondary);
+  box-shadow: var(--shadow-sm);
+  animation: orbit 12s linear infinite;
+  animation-delay: calc(var(--i) * -2.4s);
+  z-index: 1;
+}
+
+@keyframes orbit {
+  0% {
+    transform: rotate(0deg) translateX(130px) rotate(0deg);
+  }
+  100% {
+    transform: rotate(360deg) translateX(130px) rotate(-360deg);
+  }
+}
+
+.orbit-item:nth-child(2) { --i: 1; }
+.orbit-item:nth-child(3) { --i: 2; }
+.orbit-item:nth-child(4) { --i: 3; }
+.orbit-item:nth-child(5) { --i: 4; }
+
+/* Scroll Indicator */
+.scroll-indicator {
+  position: absolute;
+  bottom: var(--space-xl);
+  left: 50%;
+  transform: translateX(-50%);
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: var(--space-xs);
+  color: var(--color-text-muted);
+  font-size: var(--font-size-tiny);
+  animation: fadeInUp 1s ease 1s both;
+}
+
+.scroll-arrow {
+  width: 20px;
+  height: 20px;
+  border-right: 2px solid var(--color-text-muted);
+  border-bottom: 2px solid var(--color-text-muted);
+  transform: rotate(45deg);
+  animation: scrollBounce 2s ease-in-out infinite;
+}
+
+@keyframes scrollBounce {
+  0%, 100% { transform: rotate(45deg) translateY(0); opacity: .5; }
+  50% { transform: rotate(45deg) translateY(6px); opacity: 1; }
+}
+
+@keyframes fadeInUp {
+  from { opacity: 0; transform: translateX(-50%) translateY(10px); }
+  to { opacity: 1; transform: translateX(-50%) translateY(0); }
+}
+
+/* ----------------------------------------------------------
+   7. About Section
+   ---------------------------------------------------------- */
+.section-about {
+  background: var(--bg-surface);
+}
+
+.about-grid {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: var(--space-xl);
+}
+
+.about-card {
+  background: var(--bg-surface);
+  border: 1px solid var(--color-border-light);
+  border-radius: var(--radius-lg);
+  padding: var(--space-2xl);
+  text-align: center;
+  transition: all var(--transition-normal);
+}
+
+.about-card:hover {
+  transform: translateY(-4px);
+  box-shadow: var(--shadow-md);
+  border-color: transparent;
+}
+
+.about-icon {
+  width: 72px;
+  height: 72px;
+  margin: 0 auto var(--space-lg);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.about-card h3 {
+  font-size: var(--font-size-h3);
+  margin-bottom: var(--space-sm);
+  font-weight: 700;
+}
+
+.about-card p {
+  color: var(--color-text-secondary);
+  line-height: 1.7;
+  font-size: var(--font-size-small);
+}
+
+/* ----------------------------------------------------------
+   8. Product Section
+   ---------------------------------------------------------- */
+.section-product {
+  background: linear-gradient(180deg, var(--bg-body) 0%, var(--color-primary-light) 100%);
+}
+
+.product-showcase {
+  max-width: 800px;
+  margin: 0 auto;
+}
+
+.product-quote {
+  background: var(--bg-surface);
+  border-left: 4px solid var(--color-primary);
+  padding: var(--space-xl) var(--space-2xl);
+  border-radius: 0 var(--radius-md) var(--radius-md) 0;
+  margin-bottom: var(--space-2xl);
+  box-shadow: var(--shadow-sm);
+}
+
+.product-quote p {
+  font-size: 1.0625rem;
+  line-height: 1.9;
+  color: var(--color-text-secondary);
+  font-style: italic;
+}
+
+.product-stats {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr);
+  gap: var(--space-lg);
+  margin-bottom: var(--space-2xl);
+}
+
+.stat {
+  text-align: center;
+  padding: var(--space-lg);
+  background: var(--bg-surface);
+  border-radius: var(--radius-md);
+  border: 1px solid var(--color-border-light);
+}
+
+.stat-num {
+  display: block;
+  font-size: 2rem;
+  font-weight: 800;
+  color: var(--color-primary);
+  line-height: 1.2;
+  margin-bottom: var(--space-xs);
+}
+
+.stat-label {
+  font-size: var(--font-size-tiny);
+  color: var(--color-text-secondary);
+  font-weight: 500;
+}
+
+/* 幸福三支柱 */
+.pillar-section {
+  margin-top: var(--space-3xl);
+  text-align: center;
+}
+
+.pillar-heading {
+  font-size: 1.35rem;
+  font-weight: 700;
+  color: var(--color-text-primary);
+  margin-bottom: var(--space-2xl);
+  position: relative;
+  display: inline-block;
+}
+.pillar-heading::after {
+  content: '';
+  display: block;
+  width: 60px;
+  height: 3px;
+  background: linear-gradient(90deg, var(--color-primary), var(--color-accent));
+  border-radius: 2px;
+  margin: var(--space-sm) auto 0;
+}
+
+.pillar-grid {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: var(--space-xl);
+  max-width: 960px;
+  margin: 0 auto;
+}
+
+.pillar-card {
+  background: var(--bg-surface);
+  border-radius: var(--radius-lg);
+  padding: var(--space-2xl) var(--space-lg);
+  text-align: center;
+  border: 1px solid var(--color-border-light);
+  transition: transform .3s ease, box-shadow .3s ease;
+}
+.pillar-card:hover {
+  transform: translateY(-6px);
+  box-shadow: var(--shadow-lg);
+}
+
+.pillar-icon {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  width: 64px;
+  height: 64px;
+  border-radius: 50%;
+  background: var(--pillar-bg, var(--color-primary-light));
+  margin-bottom: var(--space-md);
+}
+
+.pillar-card h4 {
+  font-size: 1.125rem;
+  font-weight: 700;
+  color: var(--pillar-color, var(--color-primary));
+  margin-bottom: var(--space-sm);
+}
+
+.pillar-card p {
+  font-size: var(--font-size-small);
+  color: var(--color-text-secondary);
+  line-height: 1.7;
+  margin: 0;
+}
+
+@media (max-width: 768px) {
+  .pillar-grid {
+    grid-template-columns: 1fr;
+    gap: var(--space-lg);
+  }
+}
+
+/* ----------------------------------------------------------
+   9. Dimensions Section
+   ---------------------------------------------------------- */
+.section-dimensions {
+  background: var(--bg-surface);
+}
+
+.dimension-grid {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: var(--space-xl);
+}
+
+.dimension-card {
+  background: var(--bg-surface);
+  border: 1px solid var(--color-border-light);
+  border-radius: var(--radius-lg);
+  padding: var(--space-2xl);
+  position: relative;
+  overflow: hidden;
+  transition: all var(--transition-normal);
+}
+
+.dimension-card::before {
+  content: '';
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 4px;
+  background: var(--dim-color);
+  opacity: .6;
+  transition: opacity var(--transition-normal);
+}
+
+.dimension-card:hover {
+  transform: translateY(-6px);
+  box-shadow: var(--shadow-lg);
+  border-color: transparent;
+}
+
+.dimension-card:hover::before {
+  opacity: 1;
+}
+
+.dim-title {
+  font-size: var(--font-size-h3);
+  font-weight: 700;
+  margin-bottom: var(--space-sm);
+  display: flex;
+  align-items: center;
+  gap: var(--space-xs);
+}
+
+.dim-emoji {
+  font-size: 1.5rem;
+}
+
+.dim-desc {
+  font-size: var(--font-size-small);
+  color: var(--color-text-secondary);
+  line-height: 1.8;
+  margin-bottom: var(--space-md);
+}
+
+.dim-points {
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--space-xs);
+}
+
+.dim-points li {
+  font-size: var(--font-size-tiny);
+  font-weight: 500;
+  color: var(--dim-color);
+  background: var(--dim-bg);
+  padding: .3em .9em;
+  border-radius: var(--radius-full);
+}
+
+/* Make 2 items in last row centered */
+/* 5 items in 3-col grid: items 4 & 5 naturally wrap to row 2, cols 1 & 2 */
+
+/* ----------------------------------------------------------
+   10. Features Section
+   ---------------------------------------------------------- */
+.section-features {
+  background: var(--bg-section-alt);
+}
+
+.features-grid {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr);
+  gap: var(--space-lg);
+}
+
+.feature-card {
+  background: var(--bg-surface);
+  border: 1px solid var(--color-border-light);
+  border-radius: var(--radius-lg);
+  padding: var(--space-xl);
+  transition: all var(--transition-normal);
+  text-align: center;
+}
+
+.feature-card:hover {
+  transform: translateY(-4px);
+  box-shadow: var(--shadow-md);
+  border-color: transparent;
+}
+
+.feature-icon {
+  width: 56px;
+  height: 56px;
+  margin: 0 auto var(--space-md);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: var(--radius-md);
+  background: color-mix(in srgb, var(--fc) 10%, white);
+  color: var(--fc);
+}
+
+.feature-card h3 {
+  font-size: 1rem;
+  font-weight: 700;
+  margin-bottom: var(--space-sm);
+}
+
+.feature-card p {
+  font-size: var(--font-size-small);
+  color: var(--color-text-secondary);
+  line-height: 1.7;
+}
+
+/* ----------------------------------------------------------
+   11. Roles Section
+   ---------------------------------------------------------- */
+.section-roles {
+  background: var(--bg-surface);
+}
+
+.roles-flow {
+  display: flex;
+  align-items: stretch;
+  justify-content: center;
+  gap: var(--space-xl);
+  max-width: 960px;
+  margin: 0 auto;
+}
+
+.role-card {
+  flex: 1;
+  background: var(--bg-surface);
+  border: 1px solid var(--color-border-light);
+  border-radius: var(--radius-lg);
+  padding: var(--space-xl);
+  text-align: center;
+  position: relative;
+  transition: all var(--transition-normal);
+}
+
+.role-card:hover {
+  transform: translateY(-4px);
+  box-shadow: var(--shadow-md);
+}
+
+.role-badge {
+  display: inline-block;
+  font-size: var(--font-size-tiny);
+  font-weight: 600;
+  padding: .25em 1em;
+  border-radius: var(--radius-full);
+  margin-bottom: var(--space-md);
+}
+
+.role-parent .role-badge { background: var(--color-primary-light); color: var(--color-primary); }
+.role-teacher .role-badge { background: #F0F7FF; color: #3B82F6; }
+.role-admin .role-badge { background: #EEF0FF; color: #6366F1; }
+
+.role-icon {
+  margin-bottom: var(--space-md);
+}
+
+.role-card h3 {
+  font-size: var(--font-size-h3);
+  font-weight: 700;
+  margin-bottom: var(--space-sm);
+}
+
+.role-card > p {
+  font-size: var(--font-size-small);
+  color: var(--color-text-secondary);
+  line-height: 1.7;
+  margin-bottom: var(--space-md);
+}
+
+.role-perms {
+  text-align: left;
+}
+
+.role-perms li {
+  font-size: var(--font-size-tiny);
+  color: var(--color-text-secondary);
+  padding: .35em 0;
+  display: flex;
+  align-items: center;
+  gap: var(--space-xs);
+}
+
+.role-perms li::before {
+  content: '';
+  width: 5px;
+  height: 5px;
+  border-radius: 50%;
+  background: var(--color-primary);
+  flex-shrink: 0;
+}
+
+.role-teacher .role-perms li::before { background: #3B82F6; }
+.role-admin .role-perms li::before { background: #6366F1; }
+
+/* 客户角色 — 小程序二维码 */
+.role-qr {
+  margin-top: var(--space-lg);
+  padding-top: var(--space-md);
+  border-top: 1px solid var(--color-border-light);
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: var(--space-xs);
+}
+.role-qr-code {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  width: 80px;
+  height: 80px;
+  border-radius: var(--radius-md);
+  background: #fff;
+  box-shadow: 0 2px 8px rgba(0,0,0,.08);
+  transition: transform .3s ease, box-shadow .3s ease;
+  cursor: pointer;
+}
+.role-qr-code:hover {
+  transform: scale(1.08);
+  box-shadow: 0 4px 16px rgba(0,0,0,.12);
+}
+.role-qr-label {
+  font-size: var(--font-size-tiny);
+  color: var(--color-text-secondary);
+  font-weight: 500;
+  letter-spacing: .05em;
+}
+
+.roles-connector {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: var(--space-xs);
+  color: var(--color-text-muted);
+  font-size: var(--font-size-tiny);
+  font-weight: 500;
+  flex-shrink: 0;
+  align-self: center;
+}
+
+.connector-arrow {
+  width: 2px;
+  height: 40px;
+  background: var(--color-border);
+  position: relative;
+}
+
+.connector-arrow::after {
+  content: '';
+  position: absolute;
+  bottom: -4px;
+  left: 50%;
+  transform: translateX(-50%);
+  border: 5px solid transparent;
+  border-top-color: var(--color-border);
+}
+
+/* ----------------------------------------------------------
+   12. Contact Section
+   ---------------------------------------------------------- */
+.section-contact {
+  background: linear-gradient(180deg, var(--bg-surface) 0%, var(--bg-body) 100%);
+}
+
+.contact-grid {
+  display: grid;
+  grid-template-columns: 1fr 1fr;
+  gap: var(--space-3xl);
+  align-items: start;
+  max-width: 800px;
+  margin: 0 auto;
+}
+
+.contact-info {
+  display: flex;
+  flex-direction: column;
+  gap: var(--space-lg);
+}
+
+.contact-item {
+  display: flex;
+  align-items: flex-start;
+  gap: var(--space-md);
+  padding: var(--space-lg);
+  background: var(--bg-surface);
+  border-radius: var(--radius-md);
+  border: 1px solid var(--color-border-light);
+}
+
+.contact-item svg {
+  flex-shrink: 0;
+  margin-top: 2px;
+}
+
+.contact-item strong {
+  display: block;
+  font-size: var(--font-size-tiny);
+  color: var(--color-text-muted);
+  font-weight: 500;
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  margin-bottom: 2px;
+}
+
+.contact-item span {
+  font-weight: 600;
+  color: var(--color-text-primary);
+}
+
+.contact-cta {
+  text-align: center;
+  padding: var(--space-2xl);
+  background: var(--bg-surface);
+  border-radius: var(--radius-lg);
+  border: 1px solid var(--color-border-light);
+}
+
+.contact-cta > p {
+  font-size: var(--font-size-h3);
+  font-weight: 700;
+  margin-bottom: var(--space-xs);
+}
+
+.cta-sub {
+  font-size: var(--font-size-small) !important;
+  font-weight: 400 !important;
+  color: var(--color-text-secondary);
+  margin-bottom: var(--space-xl) !important;
+}
+
+.cta-cards {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: var(--space-sm);
+}
+
+.cta-card {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: var(--space-xs);
+  padding: var(--space-md);
+  background: var(--bg-body);
+  border-radius: var(--radius-md);
+  font-size: var(--font-size-tiny);
+  font-weight: 600;
+  border: 1px solid var(--color-border-light);
+  transition: all var(--transition-fast);
+}
+
+.cta-card:hover {
+  border-color: var(--color-primary);
+  background: var(--color-primary-light);
+}
+
+.cta-card-icon {
+  font-size: 1.5rem;
+}
+
+.cta-card-desc {
+  font-weight: 400;
+  color: var(--color-text-muted);
+  font-size: var(--font-size-tiny);
+}
+
+/* ----------------------------------------------------------
+   13. Footer
+   ---------------------------------------------------------- */
+.site-footer {
+  background: var(--color-text-primary);
+  color: #fff;
+  padding: var(--space-3xl) 0 0;
+}
+
+.footer-inner {
+  display: flex;
+  justify-content: space-between;
+  gap: var(--space-3xl);
+  padding-bottom: var(--space-2xl);
+  border-bottom: 1px solid rgba(255, 255, 255, .1);
+}
+
+.footer-brand .logo-text {
+  color: #fff;
+  font-size: 1.25rem;
+  font-weight: 700;
+}
+
+.footer-brand .logo-tag {
+  color: var(--color-primary);
+  font-weight: 600;
+  font-size: 1.25rem;
+}
+
+.footer-brand p {
+  color: rgba(255, 255, 255, .6);
+  font-size: var(--font-size-small);
+  margin-top: var(--space-sm);
+  max-width: 300px;
+  line-height: 1.7;
+}
+
+.footer-links {
+  display: flex;
+  gap: var(--space-3xl);
+}
+
+.footer-col h4 {
+  font-size: var(--font-size-tiny);
+  font-weight: 600;
+  text-transform: uppercase;
+  letter-spacing: .06em;
+  color: rgba(255, 255, 255, .5);
+  margin-bottom: var(--space-md);
+}
+
+.footer-col ul li {
+  margin-bottom: var(--space-sm);
+}
+
+.footer-col ul li a {
+  font-size: var(--font-size-small);
+  color: rgba(255, 255, 255, .7);
+  transition: color var(--transition-fast);
+}
+
+.footer-col ul li a:hover {
+  color: var(--color-primary);
+}
+
+.footer-bottom {
+  text-align: center;
+  padding: var(--space-lg) 0;
+}
+
+.footer-bottom p {
+  font-size: var(--font-size-tiny);
+  color: rgba(255, 255, 255, .4);
+}
+
+/* ----------------------------------------------------------
+   14. Scroll Animations (AOS-like)
+   ---------------------------------------------------------- */
+.reveal {
+  opacity: 0;
+  transform: translateY(30px);
+  transition: opacity .6s ease, transform .6s cubic-bezier(.4, 0, .2, 1);
+}
+
+.reveal.visible {
+  opacity: 1;
+  transform: translateY(0);
+}
+
+/* ----------------------------------------------------------
+   15. Responsive - Tablet
+   ---------------------------------------------------------- */
+@media (max-width: 1024px) {
+  .hero-inner {
+    grid-template-columns: 1fr;
+    text-align: center;
+  }
+
+  .hero-desc {
+    margin-left: auto;
+    margin-right: auto;
+  }
+
+  .hero-actions {
+    justify-content: center;
+  }
+
+  .hero-visual {
+    display: none;
+  }
+
+  .dimension-grid {
+    grid-template-columns: repeat(2, 1fr);
+  }
+
+  /* Reset grid centering */
+  .dimension-card:nth-child(4) {
+    grid-column: auto;
+    justify-self: auto;
+    width: auto;
+  }
+
+  .dimension-card:nth-child(5) {
+    grid-column: auto;
+    justify-self: auto;
+    width: auto;
+  }
+
+  .features-grid {
+    grid-template-columns: repeat(2, 1fr);
+  }
+
+  .roles-flow {
+    gap: var(--space-md);
+  }
+
+  .role-card {
+    padding: var(--space-lg) var(--space-md);
+  }
+
+  .roles-connector {
+    flex-direction: row;
+    gap: 0;
+  }
+
+  .connector-arrow {
+    width: 40px;
+    height: 2px;
+  }
+
+  .connector-arrow::after {
+    top: 50%;
+    left: auto;
+    right: -4px;
+    bottom: auto;
+    transform: translateY(-50%);
+    border: 5px solid transparent;
+    border-left-color: var(--color-border);
+    border-top-color: transparent;
+  }
+
+  .contact-grid {
+    grid-template-columns: 1fr;
+  }
+
+  .product-stats {
+    grid-template-columns: repeat(2, 1fr);
+  }
+}
+
+/* ----------------------------------------------------------
+   16. Responsive - Mobile
+   ---------------------------------------------------------- */
+@media (max-width: 768px) {
+  :root {
+    --space-section: 3.5rem;
+    --header-height: 56px;
+  }
+
+  .container {
+    padding: 0 var(--space-md);
+  }
+
+  /* Mobile Nav */
+  .nav-toggle {
+    display: flex;
+  }
+
+  .nav {
+    position: fixed;
+    top: var(--header-height);
+    left: 0;
+    right: 0;
+    background: rgba(255, 249, 240, .98);
+    backdrop-filter: blur(16px);
+    -webkit-backdrop-filter: blur(16px);
+    border-bottom: 1px solid var(--color-border-light);
+    padding: var(--space-lg);
+    transform: translateY(-110%);
+    opacity: 0;
+    transition: all var(--transition-normal);
+    pointer-events: none;
+  }
+
+  .nav.open {
+    transform: translateY(0);
+    opacity: 1;
+    pointer-events: auto;
+  }
+
+  .nav-list {
+    flex-direction: column;
+    gap: 0;
+  }
+
+  .nav-link {
+    display: block;
+    padding: var(--space-md) 0;
+    border-bottom: 1px solid var(--color-border-light);
+    width: 100%;
+  }
+
+  .nav-link::after {
+    display: none;
+  }
+
+  /* Hero */
+  .hero-title {
+    font-size: clamp(1.75rem, 7vw, 2.5rem);
+  }
+
+  .hero-desc {
+    font-size: var(--font-size-small);
+  }
+
+  .hero-actions {
+    flex-direction: column;
+    align-items: stretch;
+  }
+
+  .btn {
+    justify-content: center;
+  }
+
+  /* Grids */
+  .about-grid {
+    grid-template-columns: 1fr;
+  }
+
+  .dimension-grid {
+    grid-template-columns: 1fr;
+  }
+
+  .features-grid {
+    grid-template-columns: 1fr;
+  }
+
+  .contact-grid {
+    grid-template-columns: 1fr;
+  }
+
+  .product-stats {
+    grid-template-columns: repeat(2, 1fr);
+  }
+
+  .cta-cards {
+    grid-template-columns: 1fr;
+  }
+
+  .footer-inner {
+    flex-direction: column;
+    gap: var(--space-xl);
+  }
+
+  .footer-links {
+    gap: var(--space-xl);
+  }
+
+  .product-quote {
+    padding: var(--space-md) var(--space-lg);
+  }
+
+  .product-quote p {
+    font-size: var(--font-size-small);
+  }
+
+  .stat-num {
+    font-size: 1.5rem;
+  }
+
+  /* Roles row — tighter spacing */
+  .roles-flow {
+    gap: var(--space-sm);
+  }
+
+  .role-card {
+    padding: var(--space-md);
+  }
+
+  .role-card h3 {
+    font-size: calc(var(--font-size-h3) * 0.85);
+  }
+
+  .role-perms li {
+    font-size: calc(var(--font-size-tiny) * 0.9);
+  }
+
+  .role-qr-code {
+    width: 64px;
+    height: 64px;
+  }
+
+  .role-qr-code svg {
+    width: 56px;
+    height: 56px;
+  }
+}
+
+@media (max-width: 480px) {
+  .product-stats {
+    grid-template-columns: repeat(2, 1fr);
+    gap: var(--space-sm);
+  }
+
+  .stat {
+    padding: var(--space-md);
+  }
+
+  .roles-flow {
+    flex-direction: column;
+    gap: var(--space-md);
+  }
+
+  .roles-connector {
+    flex-direction: column;
+    gap: var(--space-xs);
+  }
+
+  .connector-arrow {
+    width: 2px;
+    height: 40px;
+  }
+
+  .connector-arrow::after {
+    top: auto;
+    left: 50%;
+    right: auto;
+    bottom: -4px;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: var(--color-border);
+    border-left-color: transparent;
+  }
+
+  .footer-links {
+    flex-direction: column;
+    gap: var(--space-lg);
+  }
+}
+
+/* ----------------------------------------------------------
+   17. Logo
+   ---------------------------------------------------------- */
+.logo-img {
+  display: block;
+  flex-shrink: 0;
+  border-radius: 8px;
+  width: 36px;
+  height: 36px;
+  object-fit: contain;
+}
+
+.footer-logo-img {
+  display: block;
+  flex-shrink: 0;
+  border-radius: 10px;
+  margin-bottom: var(--space-xs);
+  object-fit: contain;
+}
+
+/* ----------------------------------------------------------
+   18. Wuxing Philosophy Section
+   ---------------------------------------------------------- */
+.section-wuxing {
+  background: linear-gradient(180deg, var(--bg-body) 0%, var(--bg-surface) 100%);
+}
+
+/* --- Diagram --- */
+.wuxing-diagram {
+  position: relative;
+  width: 100%;
+  max-width: 480px;
+  aspect-ratio: 1;
+  margin: 0 auto var(--space-3xl);
+}
+
+.wuxing-diagram canvas {
+  display: block;
+  width: 100%;
+  height: 100%;
+}
+
+/* --- Explanation Cards --- */
+.wuxing-explanations {
+  max-width: 900px;
+  margin: 0 auto;
+}
+
+.we-section {
+  margin-bottom: var(--space-2xl);
+}
+
+.we-section:last-child {
+  margin-bottom: 0;
+}
+
+.we-title {
+  font-size: var(--font-size-h3);
+  font-weight: 700;
+  margin-bottom: var(--space-xs);
+}
+
+.we-sheng {
+  color: var(--color-secondary);
+}
+
+.we-ke {
+  color: var(--color-primary);
+}
+
+.we-subtitle {
+  font-size: var(--font-size-small);
+  color: var(--color-text-secondary);
+  margin-bottom: var(--space-lg);
+}
+
+.we-grid {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr);
+  gap: var(--space-md);
+}
+
+.wuxing-card {
+  background: var(--bg-surface);
+  border: 1px solid var(--color-border-light);
+  border-radius: var(--radius-md);
+  padding: var(--space-lg);
+  text-align: center;
+  transition: all var(--transition-normal);
+  position: relative;
+  overflow: hidden;
+}
+
+.wuxing-card::before {
+  content: '';
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 3px;
+  background: var(--wc-color);
+  opacity: .5;
+  transition: opacity var(--transition-normal);
+}
+
+.wuxing-card:hover {
+  transform: translateY(-4px);
+  box-shadow: var(--shadow-md);
+  border-color: transparent;
+}
+
+.wuxing-card:hover::before {
+  opacity: 1;
+}
+
+.wc-arrow {
+  display: inline-block;
+  font-size: var(--font-size-tiny);
+  font-weight: 700;
+  color: var(--wc-color);
+  padding: .15em .6em;
+  border-radius: var(--radius-full);
+  background: color-mix(in srgb, var(--wc-color) 10%, white);
+  margin-bottom: var(--space-sm);
+}
+
+.wuxing-card h4 {
+  font-size: 1rem;
+  font-weight: 700;
+  margin-bottom: var(--space-xs);
+  color: var(--color-text-primary);
+}
+
+.wuxing-card p {
+  font-size: var(--font-size-tiny);
+  color: var(--color-text-secondary);
+  line-height: 1.6;
+}
+
+/* ----------------------------------------------------------
+   19. Dimension Energy Tips
+   ---------------------------------------------------------- */
+.dim-energy {
+  margin-top: var(--space-md);
+  padding-top: var(--space-md);
+  border-top: 1px dashed var(--color-border-light);
+}
+
+.dim-energy h4 {
+  font-size: var(--font-size-small);
+  font-weight: 700;
+  color: var(--dim-color);
+  margin-bottom: var(--space-sm);
+}
+
+.dim-energy ul {
+  display: flex;
+  flex-direction: column;
+  gap: var(--space-xs);
+}
+
+.dim-energy ul li {
+  font-size: var(--font-size-tiny);
+  color: var(--color-text-secondary);
+  padding: .25em 0;
+  display: flex;
+  align-items: center;
+  gap: var(--space-xs);
+}
+
+.dim-energy ul li::before {
+  content: '✦';
+  color: var(--dim-color);
+  font-size: 10px;
+  flex-shrink: 0;
+}
+
+/* Dim element badge */
+.dim-element {
+  display: inline-block;
+  font-size: 10px;
+  font-weight: 600;
+  color: #fff;
+  padding: .15em .6em;
+  border-radius: var(--radius-full);
+  margin-left: var(--space-xs);
+  vertical-align: middle;
+  letter-spacing: .04em;
+}
+
+/* Responsive: Wuxing diagram — handled by aspect-ratio and Canvas redraw */
+@media (max-width: 600px) {
+  .wuxing-diagram {
+    max-width: 360px;
+  }
+}
+
+@media (max-width: 1024px) {
+  .we-grid {
+    grid-template-columns: repeat(3, 1fr);
+  }
+}
+
+@media (max-width: 600px) {
+  .we-grid {
+    grid-template-columns: repeat(2, 1fr);
+  }
+}
+
+@media (max-width: 480px) {
+  .we-grid {
+    grid-template-columns: 1fr;
+  }
+}

+ 707 - 0
web/index.html

@@ -0,0 +1,707 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta name="description" content="亿图腾(北京)科技有限公司 — 浠艾福(Care Family)家庭健康成长平台,围绕身、心、智、行、富五个维度,赋能每个家庭实现健康与幸福。">
+  <meta name="keywords" content="亿图腾,浠艾福,Care Family,家庭教育,健康成长,五维能量,亲子成长,五行相生相克">
+  <meta property="og:title" content="亿图腾 · 浠艾福 — 家庭健康成长平台">
+  <meta property="og:description" content="给全家的一站式幸福提案 — 身·心·智·行·富 五维全景幸福矩阵 · 五行相生相克">
+  <meta property="og:type" content="website">
+  <meta name="theme-color" content="#FF8C42">
+  <title>亿图腾 · 浠艾福 — 家庭健康成长平台</title>
+  <link rel="stylesheet" href="css/style.css">
+</head>
+<body>
+
+  <!-- ==================== Navigation ==================== -->
+  <header class="site-header" id="header">
+    <div class="container header-inner">
+      <a href="#hero" class="logo">
+        <img src="logo.png" alt="浠艾福" class="logo-img" width="36" height="36">
+        <span class="logo-text">亿图腾</span>
+        <span class="logo-tag">· 浠艾福</span>
+      </a>
+      <button class="nav-toggle" id="navToggle" aria-label="切换导航">
+        <span></span><span></span><span></span>
+      </button>
+      <nav class="nav" id="nav">
+        <ul class="nav-list">
+          <li><a href="#about" class="nav-link">关于我们</a></li>
+          <li><a href="#product" class="nav-link">浠艾福</a></li>
+          <li><a href="#wuxing" class="nav-link">五维哲学</a></li>
+          <li><a href="#dimensions" class="nav-link">五维幸福</a></li>
+          <li><a href="#features" class="nav-link">核心功能</a></li>
+          <li><a href="#roles" class="nav-link">平台角色</a></li>
+          <li><a href="#contact" class="nav-link">联系我们</a></li>
+        </ul>
+      </nav>
+    </div>
+  </header>
+
+  <!-- ==================== Hero ==================== -->
+  <section class="hero" id="hero">
+    <div class="hero-bg"></div>
+    <div class="container hero-inner">
+      <div class="hero-content">
+        <span class="hero-badge">家庭健康成长平台</span>
+        <h1 class="hero-title">
+          给全家的<br>
+          <span class="highlight">一站式幸福提案</span>
+        </h1>
+        <p class="hero-desc">
+          亿图腾科技倾力打造——<strong>浠艾福(Care Family)</strong>家庭健康成长俱乐部,
+          围绕 <strong>身·智·富·行·心</strong> 五大核心领域,
+          以五行哲学为根基,以五维能量为引擎,为每个家庭定制全生命周期解决方案。
+        </p>
+        <div class="hero-actions">
+          <a href="#product" class="btn btn-primary">了解浠艾福</a>
+          <a href="#wuxing" class="btn btn-outline">探索五维哲学</a>
+        </div>
+        <div class="hero-service-link">
+          <span>服务商?</span>
+          <a href="/admin/">登录管理后台 →</a>
+        </div>
+      </div>
+      <div class="hero-visual">
+        <div class="dimension-orbit">
+          <div class="orbit-center">家</div>
+          <div class="orbit-item o1" style="--i:0">身</div>
+          <div class="orbit-item o2" style="--i:1">智</div>
+          <div class="orbit-item o3" style="--i:2">富</div>
+          <div class="orbit-item o4" style="--i:3">行</div>
+          <div class="orbit-item o5" style="--i:4">心</div>
+        </div>
+      </div>
+    </div>
+    <div class="scroll-indicator">
+      <span>向下滚动</span>
+      <div class="scroll-arrow"></div>
+    </div>
+  </section>
+
+  <!-- ==================== About ==================== -->
+  <section class="section section-about" id="about">
+    <div class="container">
+      <div class="section-header">
+        <span class="section-tag">关于我们</span>
+        <h2 class="section-title">亿图腾(北京)科技有限公司</h2>
+        <p class="section-desc">
+          以科技为引擎,以家庭为中心,致力于为中国家庭提供一站式健康成长解决方案。
+        </p>
+      </div>
+      <div class="about-grid">
+        <div class="about-card">
+          <div class="about-icon">
+            <svg viewBox="0 0 48 48" fill="none" width="48" height="48"><circle cx="24" cy="24" r="20" stroke="#FF8C42" stroke-width="2" fill="#FFF5E6"/><path d="M24 32s-7-5-7-9c0-2.5 2-4.5 4-4.5s3 1.5 3 3c0-1.5 1-3 3-3s4 2 4 4.5c0 4-7 9-7 9z" fill="#FF8C42" fill-opacity=".15" stroke="#FF8C42" stroke-width="1.5" stroke-linejoin="round"/><path d="M17 20c-1-3 1-6 4-6s4 2 4 4-2 4-4 4-4-1-4-2z" fill="#FF8C42" fill-opacity=".15" stroke="#FF8C42" stroke-width="1.5"/><circle cx="32" cy="18" r="2.5" fill="#FF8C42" fill-opacity=".3"/></svg>
+          </div>
+          <h3>企业使命</h3>
+          <p>用科技赋能每个家庭,让健康与幸福成为每个家庭的生活方式。</p>
+        </div>
+        <div class="about-card">
+          <div class="about-icon">
+            <svg viewBox="0 0 48 48" fill="none" width="48" height="48"><circle cx="24" cy="24" r="20" stroke="#4ECDC4" stroke-width="2" fill="#E6FFF9"/><circle cx="17" cy="19" r="4" fill="#4ECDC4" fill-opacity=".15" stroke="#4ECDC4" stroke-width="1.5"/><circle cx="31" cy="19" r="4" fill="#4ECDC4" fill-opacity=".15" stroke="#4ECDC4" stroke-width="1.5"/><circle cx="24" cy="32" r="4" fill="#4ECDC4" fill-opacity=".15" stroke="#4ECDC4" stroke-width="1.5"/><path d="M20 22l-1 2M28 22l1 2M22 29l-3-6M26 29l3-6" stroke="#4ECDC4" stroke-width="1.2" stroke-linecap="round"/></svg>
+          </div>
+          <h3>核心产品</h3>
+          <p>浠艾福(Care Family)—— 连接家庭客户、专业服务商与平台的三方协同成长服务平台。</p>
+        </div>
+        <div class="about-card">
+          <div class="about-icon">
+            <svg viewBox="0 0 48 48" fill="none" width="48" height="48"><circle cx="24" cy="24" r="20" stroke="#FFD93D" stroke-width="2" fill="#FFFDE6"/><circle cx="24" cy="12" r="3" fill="#FFD93D" fill-opacity=".4"/><circle cx="35.5" cy="19.5" r="3" fill="#FFD93D" fill-opacity=".4"/><circle cx="31" cy="33" r="3" fill="#FFD93D" fill-opacity=".4"/><circle cx="17" cy="33" r="3" fill="#FFD93D" fill-opacity=".4"/><circle cx="12.5" cy="19.5" r="3" fill="#FFD93D" fill-opacity=".4"/><path d="M24 15L33 21l-3 10H18l-3-10z" stroke="#FFD93D" stroke-width="1.5" fill="#FFD93D" fill-opacity=".08" stroke-linejoin="round"/></svg>
+          </div>
+          <h3>品牌理念</h3>
+          <p>家庭的成长不只是孩子的教育,更是全家在五个维度上的共同提升。</p>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- ==================== Product (XAF) ==================== -->
+  <section class="section section-product" id="product">
+    <div class="container">
+      <div class="section-header">
+        <span class="section-tag">核心产品</span>
+        <h2 class="section-title">浠艾福 · Care Family</h2>
+        <p class="section-desc">
+          以家庭为单位的健康成长平台,围绕五大维度,通过活动、课程、商品、任务、咨询等多元服务,
+          连接家庭客户、专业服务商与平台运营三方角色,以五维能量体系驱动全家持续成长。
+        </p>
+      </div>
+
+      <div class="product-showcase">
+        <div class="product-intro">
+          <div class="product-quote">
+            <p>"在充满变化的时代,一个家庭最顶级、最稳固的幸福——<br>
+            是身体的舒服长久,是下一代的大智慧,<br>
+            是长辈与家族的爱心传承,是知行合一的活力,<br>
+            更是衣食无忧的底气。"</p>
+          </div>
+          <div class="product-stats">
+            <div class="stat">
+              <span class="stat-num">5</span>
+              <span class="stat-label">五维幸福维度</span>
+            </div>
+            <div class="stat">
+              <span class="stat-num">3</span>
+              <span class="stat-label">三方角色协同</span>
+            </div>
+            <div class="stat">
+              <span class="stat-num">50+</span>
+              <span class="stat-label">功能页面</span>
+            </div>
+            <div class="stat">
+              <span class="stat-num">15+</span>
+              <span class="stat-label">核心功能模块</span>
+            </div>
+          </div>
+        </div>
+
+        <!-- 幸福三支柱 -->
+        <div class="pillar-section">
+          <h3 class="pillar-heading">一个家庭最顶级、最稳固的幸福</h3>
+          <div class="pillar-grid">
+            <div class="pillar-card" style="--pillar-color:#F59E0B;--pillar-bg:#FFFBEB;">
+              <div class="pillar-icon">
+                <svg viewBox="0 0 48 48" fill="none" width="40" height="40"><circle cx="24" cy="24" r="20" stroke="#F59E0B" stroke-width="2" fill="#FFFBEB"/><path d="M18 30c2-6 10-6 12 0" stroke="#F59E0B" stroke-width="2" stroke-linecap="round"/><circle cx="24" cy="18" r="5" fill="#F59E0B" fill-opacity=".12" stroke="#F59E0B" stroke-width="1.5"/><path d="M15 22l3 2M33 22l-3 2" stroke="#F59E0B" stroke-width="1.2" stroke-linecap="round"/></svg>
+              </div>
+              <h4>衣食无忧</h4>
+              <p>经济基础决定家庭底气,依托低门槛创客生态实现第二收入曲线,让每个家庭不为物质所困。</p>
+            </div>
+            <div class="pillar-card" style="--pillar-color:#FF6B9D;--pillar-bg:#FFF0F5;">
+              <div class="pillar-icon">
+                <svg viewBox="0 0 48 48" fill="none" width="40" height="40"><circle cx="24" cy="24" r="20" stroke="#FF6B9D" stroke-width="2" fill="#FFF0F5"/><path d="M32 18c0-3-2-5-4-5s-4 2-4 4c0-2-2-4-4-4s-4 2-4 5" stroke="#FF6B9D" stroke-width="2" stroke-linecap="round"/><path d="M24 34s-6-4-6-8c0-2 1.5-3.5 3-3.5s3 1.5 3 3c0-1.5 1.5-3 3-3s3 1.5 3 3.5c0 4-6 8-6 8z" fill="#FF6B9D" fill-opacity=".12" stroke="#FF6B9D" stroke-width="1.5" stroke-linejoin="round"/></svg>
+              </div>
+              <h4>子女传承</h4>
+              <p>将家族智慧与家风代代相传,在爱与价值观的滋养中,培养下一代健全人格与核心竞争力。</p>
+            </div>
+            <div class="pillar-card" style="--pillar-color:#6366F1;--pillar-bg:#EEF0FF;">
+              <div class="pillar-icon">
+                <svg viewBox="0 0 48 48" fill="none" width="40" height="40"><circle cx="24" cy="24" r="20" stroke="#6366F1" stroke-width="2" fill="#EEF0FF"/><path d="M24 14l3 3h4v4l3 3-3 3v4h-4l-3 3-3-3h-4v-4l-3-3 3-3v-4h4z" stroke="#6366F1" stroke-width="1.2" fill="#6366F1" fill-opacity=".08"/><path d="M24 18v12M18 24h12" stroke="#6366F1" stroke-width="1.8" stroke-linecap="round"/></svg>
+              </div>
+              <h4>受人尊敬</h4>
+              <p>以智慧与品格赢得社会的敬仰与尊崇,在成长中成就个人价值、实现家族荣耀的升华。</p>
+            </div>
+          </div>
+        </div>
+
+      </div>
+    </div>
+  </section>
+
+  <!-- ==================== Wuxing Philosophy ==================== -->
+  <section class="section section-wuxing" id="wuxing">
+    <div class="container">
+      <div class="section-header">
+        <span class="section-tag">五维哲学</span>
+        <h2 class="section-title">五行相生相克 · 五维动态平衡</h2>
+        <p class="section-desc">
+          五维幸福并非各自孤立,而是像一个有机生态系统——
+          <strong>相生让系统前进,相克让系统不翻车</strong>。
+          每一维都在为下一维积蓄能量,同时也受到制约不至过度失衡。
+        </p>
+      </div>
+
+      <!-- Wuxing Cycle Diagram -->
+      <div class="wuxing-diagram">
+        <canvas id="wuxingCanvas"></canvas>
+      </div>
+
+      <!-- Explanation Cards -->
+      <div class="wuxing-explanations">
+        <!-- 相生 -->
+        <div class="we-section">
+          <h3 class="we-title we-sheng">✨ 相生关系 · 循环促进</h3>
+          <p class="we-subtitle">每一维为下一维注入能量,形成正向螺旋上升</p>
+          <div class="we-grid">
+            <div class="wuxing-card wc-sheng" style="--wc-color:#FF8C42">
+              <span class="wc-arrow">身 → 智</span>
+              <h4>身生智</h4>
+              <p>强健体魄孕育智慧,身心健康奠定智慧根基。</p>
+            </div>
+            <div class="wuxing-card wc-sheng" style="--wc-color:#6366F1">
+              <span class="wc-arrow">智 → 富</span>
+              <h4>智生富</h4>
+              <p>智慧启迪财富之门,知识赋能价值创造。</p>
+            </div>
+            <div class="wuxing-card wc-sheng" style="--wc-color:#F59E0B">
+              <span class="wc-arrow">富 → 行</span>
+              <h4>富生行</h4>
+              <p>财富滋养关系网络,经济从容成就人情温暖。</p>
+            </div>
+            <div class="wuxing-card wc-sheng" style="--wc-color:#10B981">
+              <span class="wc-arrow">行 → 心</span>
+              <h4>行生心</h4>
+              <p>关系和谐温暖心灵,良好人际滋养爱与归属。</p>
+            </div>
+            <div class="wuxing-card wc-sheng" style="--wc-color:#FF6B9D">
+              <span class="wc-arrow">心 → 身</span>
+              <h4>心生身</h4>
+              <p>家族大爱呵护健康,情感关怀滋养体魄。</p>
+            </div>
+          </div>
+        </div>
+
+        <!-- 相克 -->
+        <div class="we-section">
+          <h3 class="we-title we-ke">⚖️ 相克关系 · 动态制衡</h3>
+          <p class="we-subtitle">每个维度都有制约机制,防止任何一维过度膨胀</p>
+          <div class="we-grid">
+            <div class="wuxing-card wc-ke" style="--wc-color:#FF8C42">
+              <span class="wc-arrow">身 ⨯ 富</span>
+              <h4>身克富</h4>
+              <p>健康是最大财富,莫用健康换金钱。</p>
+            </div>
+            <div class="wuxing-card wc-ke" style="--wc-color:#6366F1">
+              <span class="wc-arrow">智 ⨯ 行</span>
+              <h4>智克行</h4>
+              <p>算计人际关系得失不如真诚以待,关系不需要完美策略。</p>
+            </div>
+            <div class="wuxing-card wc-ke" style="--wc-color:#F59E0B">
+              <span class="wc-arrow">富 ⨯ 心</span>
+              <h4>富克心</h4>
+              <p>勿让铜臭掩盖温情,财富服务于家庭。</p>
+            </div>
+            <div class="wuxing-card wc-ke" style="--wc-color:#10B981">
+              <span class="wc-arrow">行 ⨯ 身</span>
+              <h4>行克身</h4>
+              <p>人际有度,关爱有方,莫因取悦他人透支自身健康。</p>
+            </div>
+            <div class="wuxing-card wc-ke" style="--wc-color:#FF6B9D">
+              <span class="wc-arrow">心 ⨯ 智</span>
+              <h4>心克智</h4>
+              <p>大爱需留理性空间,不过度保护。</p>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- ==================== Five Dimensions ==================== -->
+  <section class="section section-dimensions" id="dimensions">
+    <div class="container">
+      <div class="section-header">
+        <span class="section-tag">五维幸福矩阵</span>
+        <h2 class="section-title">身 · 智 · 富 · 行 · 心</h2>
+        <p class="section-desc">
+          五大维度覆盖家庭健康成长的方方面面,能量值按比例分配至各维度,
+          综合计算健康指数,直观呈现家庭成长状态。
+        </p>
+      </div>
+
+      <div class="dimension-grid">
+        <!-- 身(土) — 01 -->
+        <div class="dimension-card" style="--dim-color: #FF8C42; --dim-bg: #FFF5E6;">
+          <h3 class="dim-title">
+            <span class="dim-emoji">🌏</span>
+            身 · 主动健康
+            <span class="dim-element" style="background:#FF8C42">五行属土</span>
+          </h3>
+          <p class="dim-desc">用最适合、最简单的方法(好水与精准营养),从根源调理家人体质。让身体无疾,心情愉快,畅享高质量的舒服长寿生活。</p>
+          <ul class="dim-points">
+            <li>精准营养推荐</li>
+            <li>健康报告解析</li>
+            <li>体质调理方案</li>
+          </ul>
+          <div class="dim-energy">
+            <h4>⚡ 能量提升</h4>
+            <ul>
+              <li>均衡膳食营养,三餐定时定量</li>
+              <li>规律作息睡眠,早睡早起</li>
+              <li>适度运动锻炼,每周3-5次</li>
+              <li>定期健康检测,防患于未然</li>
+            </ul>
+          </div>
+        </div>
+
+        <!-- 智(金) — 02 -->
+        <div class="dimension-card" style="--dim-color: #6366F1; --dim-bg: #EEF0FF;">
+          <h3 class="dim-title">
+            <span class="dim-emoji">⚔️</span>
+            智 · 赋能未来
+            <span class="dim-element" style="background:#6366F1">五行属金</span>
+          </h3>
+          <p class="dim-desc">通过专业心智测评与综合素质培养,开启青少年面向未来的大智慧、健全人格与核心竞争力。</p>
+          <ul class="dim-points">
+            <li>专业心智测评</li>
+            <li>综合素质培养</li>
+            <li>成长档案追踪</li>
+          </ul>
+          <div class="dim-energy">
+            <h4>⚡ 能量提升</h4>
+            <ul>
+              <li>广泛阅读积累,建立知识体系</li>
+              <li>参与专业心智测评,认识自我</li>
+              <li>培养一项核心兴趣技能</li>
+              <li>跨学科思维训练,开拓视野</li>
+            </ul>
+          </div>
+        </div>
+
+        <!-- 富(水) — 03 -->
+        <div class="dimension-card" style="--dim-color: #F59E0B; --dim-bg: #FFFBEB;">
+          <h3 class="dim-title">
+            <span class="dim-emoji">💧</span>
+            富 · 利他创富
+            <span class="dim-element" style="background:#F59E0B">五行属水</span>
+          </h3>
+          <p class="dim-desc">依托低门槛的创客成长生态,在利他分享中顺便实现家庭的"第二收入曲线",实现物质与精神的双重富沛。</p>
+          <ul class="dim-points">
+            <li>创客成长生态</li>
+            <li>积分奖励体系</li>
+            <li>服务套餐市场</li>
+          </ul>
+          <div class="dim-energy">
+            <h4>⚡ 能量提升</h4>
+            <ul>
+              <li>财商启蒙教育,树立正确金钱观</li>
+              <li>参与创客成长计划</li>
+              <li>利他分享,创造价值</li>
+              <li>积分奖励激励,正向循环</li>
+            </ul>
+          </div>
+        </div>
+
+        <!-- 行(木) — 04 -->
+        <div class="dimension-card" style="--dim-color: #10B981; --dim-bg: #ECFDF5;">
+          <h3 class="dim-title">
+            <span class="dim-emoji">🌿</span>
+            行 · 人际和谐
+            <span class="dim-element" style="background:#10B981">五行属木</span>
+          </h3>
+          <p class="dim-desc">"行"不仅是行动与行为,更核心的是人与人的关系——亲子关系、夫妻关系、同事关系、朋友关系。以和谐关系滋养家庭幸福,以善意行动温暖身边每一个人。</p>
+          <ul class="dim-points">
+            <li>亲子关系建设</li>
+            <li>夫妻情感经营</li>
+            <li>社交与人脉拓展</li>
+          </ul>
+          <div class="dim-energy">
+            <h4>⚡ 能量提升</h4>
+            <ul>
+              <li>高质量陪伴家人,每日专注沟通</li>
+              <li>夫妻定期约会,经营亲密关系</li>
+              <li>主动维系朋友与同事关系</li>
+              <li>参与社区活动,拓展社交圈</li>
+            </ul>
+          </div>
+        </div>
+
+        <!-- 心(火) — 05 -->
+        <div class="dimension-card" style="--dim-color: #FF6B9D; --dim-bg: #FFF0F5;">
+          <h3 class="dim-title">
+            <span class="dim-emoji">🔥</span>
+            心 · 大爱相随
+            <span class="dim-element" style="background:#FF6B9D">五行属火</span>
+          </h3>
+          <p class="dim-desc">将长辈陪护与家庭情感,升华为以"心"传心的家族纽带。用大爱反哺父母,用言传身教启迪下一代。</p>
+          <ul class="dim-points">
+            <li>情绪管理与疏导</li>
+            <li>家庭情感联结</li>
+            <li>家风传承记录</li>
+          </ul>
+          <div class="dim-energy">
+            <h4>⚡ 能量提升</h4>
+            <ul>
+              <li>坚持家庭情感沟通,每周家庭会议</li>
+              <li>高质量亲子陪伴,放下手机全心投入</li>
+              <li>培养感恩之心,每日分享与表达</li>
+              <li>传承家风文化,记录家族故事</li>
+            </ul>
+          </div>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- ==================== Features ==================== -->
+  <section class="section section-features" id="features">
+    <div class="container">
+      <div class="section-header">
+        <span class="section-tag">核心功能</span>
+        <h2 class="section-title">全方位家庭成长服务</h2>
+        <p class="section-desc">
+          从任务管理到五维能量,从专业测评到成长档案,浠艾福为每个家庭提供完整的数字化成长解决方案。
+        </p>
+      </div>
+
+      <div class="features-grid">
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#FF8C42"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><path d="M6 16l6 6 14-14" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
+          <h3>任务管理系统</h3>
+          <p>创建、下发、执行与审核,支持小游戏互动,让好习惯在趣味中养成。</p>
+        </div>
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#4ECDC4"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><circle cx="16" cy="16" r="10" stroke="currentColor" stroke-width="2"/><path d="M16 10v6l4 4" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/></svg></div>
+          <h3>五维能量体系</h3>
+          <p>身心灵全方位能量追踪,能量按比例分配,健康指数可视化呈现。</p>
+        </div>
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#6366F1"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><rect x="6" y="10" width="20" height="14" rx="2" stroke="currentColor" stroke-width="2"/><path d="M10 6v4M22 6v4" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></div>
+          <h3>测评预约系统</h3>
+          <p>家长申请、选择规划师、支付、结果录入,全流程线上化,专业测评报告一键获取。</p>
+        </div>
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#FF6B9D"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><path d="M16 26S6 20 6 14c0-3 2-5 5-5s5 2 5 4c0-2 2-4 5-4s5 2 5 5c0 6-10 12-10 12z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></svg></div>
+          <h3>家庭邀请与关系</h3>
+          <p>邀请二维码、令牌验证、家庭关系图,轻松构建家庭数字空间。</p>
+        </div>
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#F59E0B"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><path d="M16 4l3 9h10l-8 6 3 9-8-5-8 5 3-9-8-6h10l3-9z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></svg></div>
+          <h3>心愿与奖励</h3>
+          <p>孩子创建心愿、家长审批兑换,积分驱动的正向激励体系。</p>
+        </div>
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#10B981"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><path d="M8 24h16M8 8v16M8 8l16 8-16 8" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
+          <h3>套餐与商城</h3>
+          <p>服务套餐市场、商品商城、订单管理,连接优质服务商与家庭需求。</p>
+        </div>
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#A78BFA"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><path d="M8 6v20M8 16l4-4 4 4 8-8" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
+          <h3>成长档案</h3>
+          <p>成长记录、健康报告、成长计划,完整记录每个家庭的成长轨迹。</p>
+        </div>
+        <div class="feature-card">
+          <div class="feature-icon" style="--fc:#0EA5E9"><svg viewBox="0 0 32 32" fill="none" width="32" height="32"><circle cx="16" cy="10" r="4" stroke="currentColor" stroke-width="2"/><path d="M6 28c0-6 4-10 10-10s10 4 10 10" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></div>
+          <h3>多角色支持</h3>
+          <p>家长、孩子、成长规划师、平台运营,四类角色各司其职,协同成长。</p>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- ==================== Roles ==================== -->
+  <section class="section section-roles" id="roles">
+    <div class="container">
+      <div class="section-header">
+        <span class="section-tag">平台角色</span>
+        <h2 class="section-title">三方协同 · 各司其职</h2>
+        <p class="section-desc">
+          浠艾福连接家庭客户、专业服务商与平台运营三方角色,构建完整的家庭成长服务生态。
+        </p>
+      </div>
+
+      <div class="roles-flow">
+        <div class="role-card role-parent">
+          <div class="role-badge">客户</div>
+          <div class="role-icon" style="display:flex;gap:4px;justify-content:center;">
+            <svg viewBox="0 0 48 48" fill="none" width="36" height="36"><circle cx="24" cy="24" r="20" stroke="#FF8C42" stroke-width="2" fill="#FFF5E6"/><circle cx="24" cy="18" r="6" fill="#FF8C42" fill-opacity=".2" stroke="#FF8C42" stroke-width="1.5"/><path d="M14 36c0-6 4-10 10-10s10 4 10 10" stroke="#FF8C42" stroke-width="2" stroke-linecap="round"/></svg>
+          </div>
+          <h3>家庭客户</h3>
+          <p>以家庭为服务单位,覆盖全家各年龄段成员的健康成长需求。</p>
+          <ul class="role-perms">
+            <li><strong>家长</strong> — 付费决策、任务审批、成长管理</li>
+            <li><strong>孩子</strong> — 执行任务、参与活动、收集成长徽章</li>
+            <li><strong>老人</strong> — 健康管理、亲情陪伴、家风传承</li>
+          </ul>
+          <div class="role-qr">
+            <div class="role-qr-code">
+              <svg viewBox="0 0 100 100" fill="none" width="72" height="72">
+                <rect width="100" height="100" rx="6" fill="#fff"/>
+                <rect x="6" y="6" width="22" height="22" rx="3" stroke="#222" stroke-width="2" fill="#fff"/>
+                <rect x="10" y="10" width="14" height="14" rx="2" fill="#222"/>
+                <rect x="14" y="14" width="6" height="6" fill="#fff"/>
+                <rect x="72" y="6" width="22" height="22" rx="3" stroke="#222" stroke-width="2" fill="#fff"/>
+                <rect x="76" y="10" width="14" height="14" rx="2" fill="#222"/>
+                <rect x="80" y="14" width="6" height="6" fill="#fff"/>
+                <rect x="6" y="72" width="22" height="22" rx="3" stroke="#222" stroke-width="2" fill="#fff"/>
+                <rect x="10" y="76" width="14" height="14" rx="2" fill="#222"/>
+                <rect x="14" y="80" width="6" height="6" fill="#fff"/>
+                <rect x="34" y="6" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="44" y="6" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="54" y="6" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="64" y="6" width="4" height="6" rx="1" fill="#222"/>
+                <rect x="6" y="34" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="16" y="34" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="28" y="34" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="38" y="34" width="4" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="46" y="34" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="56" y="34" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="66" y="34" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="84" y="34" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="94" y="34" width="4" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="6" y="44" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="16" y="44" width="6" height="4" rx="1" fill="#222"/>
+                <rect x="26" y="44" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="36" y="44" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="46" y="46" width="6" height="4" rx="1" fill="#222"/>
+                <rect x="56" y="44" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="76" y="44" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="86" y="44" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="6" y="54" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="16" y="56" width="6" height="4" rx="1" fill="#222"/>
+                <rect x="28" y="54" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="44" y="54" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="54" y="54" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="64" y="54" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="84" y="54" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="34" y="64" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="44" y="64" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="64" y="64" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="74" y="64" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="84" y="64" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="94" y="64" width="4" height="6" rx="1" fill="#222"/>
+                <rect x="36" y="76" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="46" y="76" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="58" y="76" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="68" y="76" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="84" y="76" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="94" y="76" width="4" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="6" y="86" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="16" y="86" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="28" y="86" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="44" y="86" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="58" y="86" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="68" y="86" width="6" height="6" rx="1" fill="#222"/>
+                <rect x="78" y="86" width="6" height="6" rx="1" fill="#FF8C42" opacity=".7"/>
+                <rect x="90" y="86" width="6" height="6" rx="1" fill="#222"/>
+              </svg>
+            </div>
+            <span class="role-qr-label">扫码开启</span>
+          </div>
+        </div>
+
+        <div class="roles-connector">
+          <div class="connector-arrow"></div>
+          <div class="connector-label">服务</div>
+        </div>
+
+        <div class="role-card role-teacher">
+          <div class="role-badge">服务商</div>
+          <div class="role-icon" style="display:flex;gap:4px;justify-content:center;">
+            <svg viewBox="0 0 48 48" fill="none" width="36" height="36"><circle cx="24" cy="24" r="20" stroke="#3B82F6" stroke-width="2" fill="#F0F7FF"/><path d="M16 28c2-6 14-6 16 0M24 18a3 3 0 100-6 3 3 0 000 6z" stroke="#3B82F6" stroke-width="2" stroke-linecap="round"/></svg>
+          </div>
+          <h3>专业服务团队</h3>
+          <p>多领域专业服务者,为家庭提供全方位的成长支持与解决方案。</p>
+          <ul class="role-perms">
+            <li><strong>成长规划师</strong> — 成长路径规划、任务下发、测评解读</li>
+            <li><strong>健康营养师</strong> — 精准营养方案、体质调理指导</li>
+            <li><strong>心理咨询师</strong> — 情绪疏导、家庭关系、心智评估</li>
+            <li><strong>活动管理员</strong> — 亲子活动组织、主题沙龙策划</li>
+          </ul>
+          <a href="/admin/" class="role-login-btn">登录管理后台</a>
+        </div>
+
+        <div class="roles-connector">
+          <div class="connector-arrow"></div>
+          <div class="connector-label">运营</div>
+        </div>
+
+        <div class="role-card role-admin">
+          <div class="role-badge">平台</div>
+          <div class="role-icon">
+            <svg viewBox="0 0 48 48" fill="none" width="48" height="48"><circle cx="24" cy="24" r="20" stroke="#6366F1" stroke-width="2" fill="#EEF0FF"/><rect x="16" y="14" width="16" height="20" rx="2" stroke="#6366F1" stroke-width="2"/><path d="M20 22h8M20 28h6" stroke="#6366F1" stroke-width="2" stroke-linecap="round"/></svg>
+          </div>
+          <h3>平台运营</h3>
+          <p>系统管理者,审核入驻、配置系统、数据管理、操作日志。</p>
+          <ul class="role-perms">
+            <li>用户与家庭管理</li>
+            <li>商品套餐审核</li>
+            <li>系统配置与数据</li>
+            <li>操作日志审计</li>
+          </ul>
+          <a href="/admin/" class="role-login-btn">登录管理后台</a>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- ==================== Contact ==================== -->
+  <section class="section section-contact" id="contact">
+    <div class="container">
+      <div class="section-header">
+        <span class="section-tag">联系我们</span>
+        <h2 class="section-title">携手共建家庭幸福未来</h2>
+        <p class="section-desc">
+          无论您是家长、成长规划师,还是合作伙伴,我们都期待与您一起,
+          为中国家庭的健康成长贡献力量。
+        </p>
+      </div>
+
+      <div class="contact-grid">
+        <div class="contact-info">
+          <div class="contact-item">
+            <svg viewBox="0 0 24 24" fill="none" width="24" height="24"><circle cx="12" cy="12" r="10" stroke="#FF8C42" stroke-width="2"/><path d="M12 6v8l4 4" stroke="#FF8C42" stroke-width="2" stroke-linecap="round"/></svg>
+            <div>
+              <strong>公司全称</strong>
+              <span>亿图腾(北京)科技有限公司</span>
+            </div>
+          </div>
+          <div class="contact-item">
+            <svg viewBox="0 0 24 24" fill="none" width="24" height="24"><rect x="4" y="6" width="16" height="12" rx="2" stroke="#FF8C42" stroke-width="2"/><path d="M4 8l8 5 8-5" stroke="#FF8C42" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
+            <div>
+              <strong>产品名称</strong>
+              <span>浠艾福(Care Family)</span>
+            </div>
+          </div>
+          <div class="contact-item">
+            <svg viewBox="0 0 24 24" fill="none" width="24" height="24"><path d="M12 2C8 2 4 5 4 9c0 5 8 13 8 13s8-8 8-13c0-4-4-7-8-7z" stroke="#FF8C42" stroke-width="2"/><circle cx="12" cy="9" r="3" stroke="#FF8C42" stroke-width="2"/></svg>
+            <div>
+              <strong>公司地址</strong>
+              <span>中国 · 北京</span>
+            </div>
+          </div>
+        </div>
+        <div class="contact-cta">
+          <p>欢迎体验浠艾福家庭健康成长平台</p>
+          <p class="cta-sub">微信小程序搜索「浠艾福」即可体验</p>
+          <div class="cta-cards">
+            <div class="cta-card">
+              <span class="cta-card-icon">📱</span>
+              <span>家长端</span>
+              <span class="cta-card-desc">管理家庭成长</span>
+            </div>
+            <div class="cta-card">
+              <span class="cta-card-icon">👤</span>
+              <span>孩子端</span>
+              <span class="cta-card-desc">完成任务挑战</span>
+            </div>
+            <div class="cta-card">
+              <span class="cta-card-icon">📊</span>
+              <span>规划师端</span>
+              <span class="cta-card-desc">专业服务管理</span>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- ==================== Footer ==================== -->
+  <footer class="site-footer">
+    <div class="container">
+      <div class="footer-inner">
+        <div class="footer-brand">
+          <img src="logo.png" alt="浠艾福" class="footer-logo-img" width="48" height="48">
+          <span class="logo-text">亿图腾</span>
+          <span class="logo-tag">· 浠艾福</span>
+          <p>以科技赋能每个家庭,让健康与幸福触手可及。</p>
+        </div>
+        <div class="footer-links">
+          <div class="footer-col">
+            <h4>产品</h4>
+            <ul>
+              <li><a href="#product">浠艾福平台</a></li>
+              <li><a href="#dimensions">五维幸福</a></li>
+              <li><a href="#features">核心功能</a></li>
+            </ul>
+          </div>
+          <div class="footer-col">
+            <h4>关于</h4>
+            <ul>
+              <li><a href="#about">公司介绍</a></li>
+              <li><a href="#roles">平台角色</a></li>
+              <li><a href="#contact">联系方式</a></li>
+            </ul>
+          </div>
+        </div>
+      </div>
+      <div class="footer-bottom">
+        <p>&copy; 2026 亿图腾(北京)科技有限公司. All rights reserved.</p>
+      </div>
+    </div>
+  </footer>
+
+  <!-- JavaScript -->
+  <script src="js/main.js"></script>
+</body>
+</html>

+ 509 - 0
web/js/main.js

@@ -0,0 +1,509 @@
+/**
+ * 亿图腾 · 浠艾福 — 企业官网交互脚本
+ * Mobile nav, scroll animations, header effects
+ */
+
+document.addEventListener('DOMContentLoaded', () => {
+
+  // --------------------------------------------------------
+  // 1. Mobile Nav Toggle
+  // --------------------------------------------------------
+  const navToggle = document.getElementById('navToggle');
+  const nav = document.getElementById('nav');
+
+  if (navToggle && nav) {
+    navToggle.addEventListener('click', () => {
+      navToggle.classList.toggle('active');
+      nav.classList.toggle('open');
+      const isOpen = nav.classList.contains('open');
+      navToggle.setAttribute('aria-label', isOpen ? '关闭导航' : '切换导航');
+    });
+
+    // Close nav on link click
+    nav.querySelectorAll('.nav-link').forEach(link => {
+      link.addEventListener('click', () => {
+        navToggle.classList.remove('active');
+        nav.classList.remove('open');
+        navToggle.setAttribute('aria-label', '切换导航');
+      });
+    });
+  }
+
+  // --------------------------------------------------------
+  // 2. Header shadow on scroll
+  // --------------------------------------------------------
+  const header = document.getElementById('header');
+  if (header) {
+    let ticking = false;
+    window.addEventListener('scroll', () => {
+      if (!ticking) {
+        requestAnimationFrame(() => {
+          header.classList.toggle('scrolled', window.scrollY > 40);
+          ticking = false;
+        });
+        ticking = true;
+      }
+    }, { passive: true });
+  }
+
+  // --------------------------------------------------------
+  // 3. Active nav link tracking (Intersection Observer)
+  // --------------------------------------------------------
+  const sections = document.querySelectorAll('section[id]');
+  const navLinks = document.querySelectorAll('.nav-link');
+
+  if (sections.length && navLinks.length) {
+    const observerOptions = {
+      rootMargin: '-50% 0px -50% 0px',
+      threshold: 0
+    };
+
+    const sectionObserver = new IntersectionObserver((entries) => {
+      entries.forEach(entry => {
+        if (entry.isIntersecting) {
+          const id = entry.target.getAttribute('id');
+          navLinks.forEach(link => {
+            link.classList.remove('active');
+            if (link.getAttribute('href') === `#${id}`) {
+              link.classList.add('active');
+            }
+          });
+        }
+      });
+    }, observerOptions);
+
+    sections.forEach(section => sectionObserver.observe(section));
+  }
+
+  // --------------------------------------------------------
+  // 4. Scroll-triggered reveal animations
+  // --------------------------------------------------------
+  const revealElements = document.querySelectorAll(
+    '.about-card, .dimension-card, .feature-card, .role-card, ' +
+    '.stat, .contact-item, .cta-card, .product-quote'
+  );
+
+  if (revealElements.length) {
+    // Add reveal class
+    revealElements.forEach(el => el.classList.add('reveal'));
+
+    const revealObserver = new IntersectionObserver((entries) => {
+      entries.forEach(entry => {
+        if (entry.isIntersecting) {
+          // Stagger animation based on index
+          const siblings = Array.from(entry.target.parentElement.children)
+            .filter(child => child.classList.contains('reveal'));
+          const index = siblings.indexOf(entry.target);
+          entry.target.style.transitionDelay = `${index * 80}ms`;
+          entry.target.classList.add('visible');
+          revealObserver.unobserve(entry.target);
+        }
+      });
+    }, {
+      threshold: 0.15,
+      rootMargin: '0px 0px -40px 0px'
+    });
+
+    revealElements.forEach(el => revealObserver.observe(el));
+  }
+
+  // --------------------------------------------------------
+  // 5. Smooth scroll for anchor links (progressive enhancement)
+  // --------------------------------------------------------
+  document.querySelectorAll('a[href^="#"]').forEach(anchor => {
+    anchor.addEventListener('click', (e) => {
+      const targetId = anchor.getAttribute('href');
+      if (targetId === '#') return;
+
+      const target = document.querySelector(targetId);
+      if (target) {
+        e.preventDefault();
+        const headerOffset = 64; // --header-height
+        const targetPosition = target.getBoundingClientRect().top + window.scrollY - headerOffset;
+
+        window.scrollTo({
+          top: targetPosition,
+          behavior: 'smooth'
+        });
+      }
+    });
+  });
+
+  // --------------------------------------------------------
+  // 6. Orbit animation pause on hover (accessibility)
+  // --------------------------------------------------------
+  const orbitItems = document.querySelectorAll('.orbit-item');
+  orbitItems.forEach(item => {
+    item.addEventListener('mouseenter', () => {
+      item.style.animationPlayState = 'paused';
+    });
+    item.addEventListener('mouseleave', () => {
+      item.style.animationPlayState = 'running';
+    });
+  });
+
+  // --------------------------------------------------------
+  // 7. Performance: debounced resize handler
+  // --------------------------------------------------------
+  let resizeTimer;
+  window.addEventListener('resize', () => {
+    clearTimeout(resizeTimer);
+    resizeTimer = setTimeout(() => {
+      // Close mobile nav on resize to desktop
+      if (window.innerWidth > 768 && nav && nav.classList.contains('open')) {
+        navToggle.classList.remove('active');
+        nav.classList.remove('open');
+        navToggle.setAttribute('aria-label', '切换导航');
+      }
+      // Redraw wuxing canvas on resize
+      drawWuxingDiagram();
+    }, 200);
+  }, { passive: true });
+
+  // --------------------------------------------------------
+  // 8. Wuxing Diagram — Canvas 2D (redesigned elegant version)
+  // --------------------------------------------------------
+  function drawWuxingDiagram() {
+    const canvas = document.getElementById('wuxingCanvas');
+    if (!canvas) return;
+
+    const container = canvas.parentElement;
+    const size = container.clientWidth;
+    if (size < 10) return;
+
+    const dpr = window.devicePixelRatio || 1;
+    canvas.width = size * dpr;
+    canvas.height = size * dpr;
+    canvas.style.width = size + 'px';
+    canvas.style.height = size + 'px';
+
+    const ctx = canvas.getContext('2d');
+    ctx.scale(dpr, dpr);
+
+    const cx = size / 2;
+    const cy = size / 2;
+    const outerR = size * 0.38;
+
+    // ---- calculate 5 outer vertices ----
+    function calcPentagonVertices(cx, cy, radius) {
+      const pts = [];
+      for (let i = 0; i < 5; i++) {
+        const angle = -Math.PI / 2 + i * 2 * Math.PI / 5;
+        pts.push({
+          x: cx + radius * Math.cos(angle),
+          y: cy + radius * Math.sin(angle)
+        });
+      }
+      return pts;
+    }
+
+    const outer = calcPentagonVertices(cx, cy, outerR);
+
+    // dimension data [身, 智, 富, 行, 心] (top clockwise)
+    const dims = [
+      { name: '身', element: '土', color: '#FF8C42', bg: '#FFF5E6', desc: '主动健康' },
+      { name: '智', element: '金', color: '#6366F1', bg: '#EEF0FF', desc: '赋能未来' },
+      { name: '富', element: '水', color: '#F59E0B', bg: '#FFFBEB', desc: '利他创富' },
+      { name: '行', element: '木', color: '#10B981', bg: '#ECFDF5', desc: '人际和谐' },
+      { name: '心', element: '火', color: '#FF6B9D', bg: '#FFF0F5', desc: '子女传承' }
+    ];
+
+    // ---- helpers ----
+    function midPoint(p1, p2) {
+      return { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 };
+    }
+
+    // ================================================================
+    // 1. Background — soft radial glow
+    // ================================================================
+    var bgGrad = ctx.createRadialGradient(cx, cy, 0, cx, cy, outerR * 1.4);
+    bgGrad.addColorStop(0, 'rgba(255, 140, 66, 0.04)');
+    bgGrad.addColorStop(0.6, 'rgba(255, 140, 66, 0.02)');
+    bgGrad.addColorStop(1, 'rgba(255, 140, 66, 0)');
+    ctx.fillStyle = bgGrad;
+    ctx.beginPath();
+    ctx.arc(cx, cy, outerR * 1.4, 0, Math.PI * 2);
+    ctx.fill();
+
+    // ================================================================
+    // 2. Outer orbit ring
+    // ================================================================
+    ctx.beginPath();
+    ctx.arc(cx, cy, outerR + outerR * 0.08, 0, Math.PI * 2);
+    ctx.strokeStyle = 'rgba(180, 170, 160, 0.25)';
+    ctx.lineWidth = 1;
+    ctx.setLineDash([3, 5]);
+    ctx.stroke();
+    ctx.setLineDash([]);
+
+    // Inner orbit ring
+    ctx.beginPath();
+    ctx.arc(cx, cy, outerR * 0.55, 0, Math.PI * 2);
+    ctx.strokeStyle = 'rgba(180, 170, 160, 0.12)';
+    ctx.lineWidth = 1;
+    ctx.setLineDash([2, 4]);
+    ctx.stroke();
+    ctx.setLineDash([]);
+
+    // ================================================================
+    // 3. 相克 (pentagram star) — drawn first so it sits behind
+    // ================================================================
+    var keOrder = [0, 2, 4, 1, 3]; // 身→富→心→智→行→身
+    var keColor = 'rgba(255, 140, 66, 0.45)';
+    var nodeR = Math.max(24, size * 0.068);
+
+    for (var i = 0; i < 5; i++) {
+      var from = outer[keOrder[i % 5]];
+      var to = outer[keOrder[(i + 1) % 5]];
+
+      // dashed line
+      ctx.beginPath();
+      ctx.moveTo(from.x, from.y);
+      ctx.lineTo(to.x, to.y);
+      ctx.strokeStyle = keColor;
+      ctx.lineWidth = 1.5;
+      ctx.setLineDash([4, 5]);
+      ctx.stroke();
+      ctx.setLineDash([]);
+
+      // Arrow near the end (before the target node)
+      var dx = to.x - from.x;
+      var dy = to.y - from.y;
+      var len = Math.sqrt(dx * dx + dy * dy) || 1;
+      var arrowDist = nodeR + 8;
+      var ax = to.x - (dx / len) * arrowDist;
+      var ay = to.y - (dy / len) * arrowDist;
+      var angle = Math.atan2(dy, dx);
+      var s = 8;
+      ctx.save();
+      ctx.translate(ax, ay);
+      ctx.rotate(angle);
+      ctx.beginPath();
+      ctx.moveTo(s, 0);
+      ctx.lineTo(-s * 0.5, -s * 0.6);
+      ctx.lineTo(-s * 0.5, s * 0.6);
+      ctx.closePath();
+      ctx.fillStyle = 'rgba(255, 140, 66, 0.6)';
+      ctx.fill();
+      ctx.restore();
+    }
+
+    // ================================================================
+    // 4. 相生 (outer pentagon) — elegant gradient lines
+    // ================================================================
+    var shengColors = ['#4ECDC4', '#45B7AA', '#4ECDC4', '#45B7AA', '#4ECDC4'];
+
+    for (var i = 0; i < 5; i++) {
+      var from = outer[i];
+      var to = outer[(i + 1) % 5];
+
+      // Glow shadow under the line
+      ctx.beginPath();
+      ctx.moveTo(from.x, from.y);
+      ctx.lineTo(to.x, to.y);
+      ctx.strokeStyle = 'rgba(78, 205, 196, 0.15)';
+      ctx.lineWidth = 6;
+      ctx.shadowColor = 'rgba(78, 205, 196, 0.3)';
+      ctx.shadowBlur = 8;
+      ctx.stroke();
+      ctx.shadowColor = 'transparent';
+      ctx.shadowBlur = 0;
+
+      // Main line with gradient
+      var grad = ctx.createLinearGradient(from.x, from.y, to.x, to.y);
+      grad.addColorStop(0, shengColors[i]);
+      grad.addColorStop(1, shengColors[(i + 1) % 5]);
+      ctx.beginPath();
+      ctx.moveTo(from.x, from.y);
+      ctx.lineTo(to.x, to.y);
+      ctx.strokeStyle = grad;
+      ctx.lineWidth = 2.5;
+      ctx.lineCap = 'round';
+      ctx.stroke();
+
+      // Elegant arrow at midpoint
+      var mp = midPoint(from, to);
+      var angle = Math.atan2(to.y - from.y, to.x - from.x);
+      var s = 11;
+      ctx.save();
+      ctx.translate(mp.x, mp.y);
+      ctx.rotate(angle);
+      ctx.beginPath();
+      ctx.moveTo(s, 0);
+      ctx.lineTo(-s * 0.4, -s * 0.5);
+      ctx.lineTo(-s * 0.2, 0);
+      ctx.lineTo(-s * 0.4, s * 0.5);
+      ctx.closePath();
+      ctx.fillStyle = 'rgba(78, 205, 196, 0.8)';
+      ctx.fill();
+      ctx.restore();
+    }
+
+    // ================================================================
+    // 5. Dimension nodes — multi-layered polished circles
+    // ================================================================
+
+    for (var i = 0; i < 5; i++) {
+      var v = outer[i];
+      var d = dims[i];
+
+      // Outer soft glow
+      var glowGrad = ctx.createRadialGradient(v.x, v.y, nodeR * 0.3, v.x, v.y, nodeR * 2.2);
+      glowGrad.addColorStop(0, d.color + '22');
+      glowGrad.addColorStop(1, d.color + '00');
+      ctx.fillStyle = glowGrad;
+      ctx.beginPath();
+      ctx.arc(v.x, v.y, nodeR * 2.2, 0, Math.PI * 2);
+      ctx.fill();
+
+      // Outer ring (stroke only)
+      ctx.beginPath();
+      ctx.arc(v.x, v.y, nodeR + 4, 0, Math.PI * 2);
+      ctx.strokeStyle = d.color + '55';
+      ctx.lineWidth = 1.5;
+      ctx.stroke();
+
+      // Inner white fill
+      ctx.beginPath();
+      ctx.arc(v.x, v.y, nodeR, 0, Math.PI * 2);
+      ctx.fillStyle = d.bg;
+      ctx.fill();
+
+      // Colored border
+      ctx.beginPath();
+      ctx.arc(v.x, v.y, nodeR, 0, Math.PI * 2);
+      ctx.strokeStyle = d.color;
+      ctx.lineWidth = 2.5;
+      ctx.stroke();
+
+      // Soft inner highlight (top-left)
+      var hlGrad = ctx.createRadialGradient(
+        v.x - nodeR * 0.3, v.y - nodeR * 0.3, 0,
+        v.x, v.y, nodeR
+      );
+      hlGrad.addColorStop(0, 'rgba(255,255,255,0.6)');
+      hlGrad.addColorStop(0.5, 'rgba(255,255,255,0)');
+      hlGrad.addColorStop(1, 'rgba(0,0,0,0.03)');
+      ctx.beginPath();
+      ctx.arc(v.x, v.y, nodeR, 0, Math.PI * 2);
+      ctx.fillStyle = hlGrad;
+      ctx.fill();
+
+      // Dimension name
+      var fs = Math.max(15, nodeR * 0.58);
+      ctx.font = 'bold ' + fs + 'px "PingFang SC","Microsoft YaHei",sans-serif';
+      ctx.textAlign = 'center';
+      ctx.textBaseline = 'middle';
+      ctx.fillStyle = d.color;
+      ctx.fillText(d.name, v.x, v.y - fs * 0.25);
+
+      // Element badge (small pill below name)
+      var elemSize = Math.max(10, fs * 0.5);
+      ctx.font = elemSize + 'px "PingFang SC","Microsoft YaHei",sans-serif';
+      ctx.fillStyle = d.color;
+      ctx.globalAlpha = 0.55;
+      ctx.fillText(d.element, v.x, v.y + fs * 0.55);
+      ctx.globalAlpha = 1;
+
+      // Small decorative dot on outer ring (node edge highlight)
+      for (var dAngle = 0; dAngle < 5; dAngle++) {
+        var da = -Math.PI / 2 + dAngle * 2 * Math.PI / 5;
+        var dx = v.x + (nodeR + 2) * Math.cos(da);
+        var dy = v.y + (nodeR + 2) * Math.sin(da);
+        ctx.beginPath();
+        ctx.arc(dx, dy, 1.5, 0, Math.PI * 2);
+        ctx.fillStyle = d.color + '66';
+        ctx.fill();
+      }
+    }
+
+    // ================================================================
+    // 6. Center emblem — "五行平衡" with refined design
+    // ================================================================
+    var centerR = outerR * 0.27;
+
+    // Large soft glow
+    var bigGlow = ctx.createRadialGradient(cx, cy, centerR * 0.2, cx, cy, centerR * 2.5);
+    bigGlow.addColorStop(0, 'rgba(255, 140, 66, 0.1)');
+    bigGlow.addColorStop(1, 'rgba(255, 140, 66, 0)');
+    ctx.fillStyle = bigGlow;
+    ctx.beginPath();
+    ctx.arc(cx, cy, centerR * 2.5, 0, Math.PI * 2);
+    ctx.fill();
+
+    // Outer ring with subtle dash
+    ctx.beginPath();
+    ctx.arc(cx, cy, centerR + 6, 0, Math.PI * 2);
+    ctx.strokeStyle = 'rgba(255, 140, 66, 0.2)';
+    ctx.lineWidth = 1;
+    ctx.setLineDash([2, 3]);
+    ctx.stroke();
+    ctx.setLineDash([]);
+
+    // Main gradient circle
+    ctx.beginPath();
+    ctx.arc(cx, cy, centerR, 0, Math.PI * 2);
+    var cGrad = ctx.createRadialGradient(
+      cx - centerR * 0.25, cy - centerR * 0.25, 0,
+      cx, cy, centerR
+    );
+    cGrad.addColorStop(0, '#FFB366');
+    cGrad.addColorStop(0.5, '#FF994D');
+    cGrad.addColorStop(1, '#E67A2E');
+    ctx.fillStyle = cGrad;
+    ctx.fill();
+
+    // Subtle white inner ring
+    ctx.beginPath();
+    ctx.arc(cx, cy, centerR * 0.78, 0, Math.PI * 2);
+    ctx.strokeStyle = 'rgba(255,255,255,0.12)';
+    ctx.lineWidth = 1;
+    ctx.setLineDash([2, 3]);
+    ctx.stroke();
+    ctx.setLineDash([]);
+
+    // Center line — horizontal subtle divider
+    ctx.beginPath();
+    ctx.moveTo(cx - centerR * 0.6, cy);
+    ctx.lineTo(cx + centerR * 0.6, cy);
+    ctx.strokeStyle = 'rgba(255,255,255,0.08)';
+    ctx.lineWidth = 0.5;
+    ctx.stroke();
+
+    // "五行平衡" text — two lines
+    var ts = Math.max(12, centerR * 0.34);
+    ctx.font = 'bold ' + ts + 'px "PingFang SC","Microsoft YaHei",sans-serif';
+    ctx.textAlign = 'center';
+    ctx.textBaseline = 'middle';
+    ctx.fillStyle = '#fff';
+    ctx.shadowColor = 'rgba(0,0,0,0.15)';
+    ctx.shadowBlur = 4;
+    ctx.fillText('五行', cx, cy - ts * 0.35);
+    ctx.shadowBlur = 0;
+    ctx.fillText('平衡', cx, cy + ts * 0.65);
+
+    // Two yin-yang dots
+    var dotR2 = Math.max(2.5, centerR * 0.055);
+    ctx.beginPath();
+    ctx.arc(cx - centerR * 0.32, cy - centerR * 0.08, dotR2, 0, Math.PI * 2);
+    ctx.fillStyle = 'rgba(255,255,255,0.2)';
+    ctx.fill();
+    ctx.beginPath();
+    ctx.arc(cx + centerR * 0.32, cy + centerR * 0.08, dotR2, 0, Math.PI * 2);
+    ctx.fillStyle = 'rgba(255,255,255,0.15)';
+    ctx.fill();
+  }
+
+  // Initial draw
+  drawWuxingDiagram();
+
+  // Redraw on orientation/resize via ResizeObserver
+  if (window.ResizeObserver) {
+    const wuxingContainer = document.querySelector('.wuxing-diagram');
+    if (wuxingContainer) {
+      const ro = new ResizeObserver(() => drawWuxingDiagram());
+      ro.observe(wuxingContainer);
+    }
+  }
+
+});