<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>微扑克WEPOKER - 微扑克竞技平台 - 玩家牌桌中心</title>
<meta name="description" content="微扑克WEPOKER官网提供APP正版最新安卓IOS苹果下载地址链接。微扑克WEPOKER通过先进的加密技术和严格的监管措施,微扑克WEPOKER确保每一次对局都公平公正,让您的每一分投入都安心无忧。推荐加入俱乐部">
<meta name="keywords" content="微扑克WEPOKER">
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
  theme: {
    extend: {
      colors: {
        emerald: {
          50: '#ecfdf5',
          100: '#d1fae5',
          200: '#a7f3d0',
          300: '#6ee7b7',
          400: '#34d399',
          500: '#10b981',
          600: '#059669',
          700: '#047857',
          800: '#065f46',
          900: '#064e3b',
        },
        stone: {
          50: '#fafaf9',
          100: '#f5f5f4',
          200: '#e7e5e4',
          300: '#d6d3d1',
          400: '#a8a29e',
          500: '#78716c',
          600: '#57534e',
          700: '#44403c',
          800: '#292524',
          900: '#1c1917',
        },
      },
    },
  },
};
</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
  :root {
    --emerald-500: #10b981;
    --emerald-600: #059669;
    --emerald-700: #047857;
    --emerald-800: #065f46;
    --emerald-900: #064e3b;
    --stone-100: #f5f5f4;
    --stone-200: #e7e5e4;
    --stone-700: #44403c;
    --stone-800: #292524;
    --stone-900: #1c1917;
    --white: #ffffff;
  }

  html {
    scroll-behavior: smooth;
    scroll-padding-top: 80px;
  }

  body {
    font-family: 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', 'Hiragino Sans GB', sans-serif;
    background-color: var(--stone-100);
    color: var(--stone-800);
    overflow-x: hidden;
  }

  /* ===== NAVBAR ===== */
  .navbar {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 1000;
    background: rgba(255,255,255,0.92);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border-bottom: 1px solid rgba(16,185,129,0.15);
    transition: all 0.3s ease;
  }
  .navbar.scrolled {
    box-shadow: 0 2px 20px rgba(0,0,0,0.08);
  }
  .nav-container {
    max-width: 1200px;
    margin: 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 24px;
    height: 72px;
  }
  .nav-logo {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 1.4rem;
    font-weight: 700;
    color: var(--emerald-700);
    text-decoration: none;
    letter-spacing: -0.5px;
  }
  .nav-logo .leaf-icon {
    font-size: 1.6rem;
    color: var(--emerald-500);
    transition: transform 0.3s ease;
  }
  .nav-logo:hover .leaf-icon {
    transform: rotate(-15deg) scale(1.1);
  }
  .nav-links {
    display: flex;
    gap: 4px;
    list-style: none;
    margin: 0;
    padding: 0;
  }
  .nav-links a {
    position: relative;
    text-decoration: none;
    color: var(--stone-700);
    font-weight: 500;
    font-size: 0.95rem;
    padding: 8px 16px;
    border-radius: 8px;
    transition: color 0.3s ease, background 0.3s ease;
  }
  .nav-links a:hover {
    color: var(--emerald-600);
    background: rgba(16,185,129,0.06);
  }
  .nav-links a.active {
    color: var(--emerald-600);
    font-weight: 600;
  }
  .nav-links a.active::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 16px;
    right: 16px;
    height: 3px;
    background: var(--emerald-500);
    border-radius: 3px 3px 0 0;
  }
  .nav-cta-btn {
    background: var(--emerald-500);
    color: var(--white) !important;
    padding: 10px 22px !important;
    border-radius: 50px !important;
    font-weight: 600 !important;
    box-shadow: 0 4px 14px rgba(16,185,129,0.35);
    transition: all 0.3s ease !important;
  }
  .nav-cta-btn:hover {
    background: var(--emerald-600) !important;
    box-shadow: 0 6px 20px rgba(16,185,129,0.5) !important;
    transform: translateY(-1px);
  }
  .nav-cta-btn.active::after {
    display: none !important;
  }
  .hamburger {
    display: none;
    flex-direction: column;
    gap: 5px;
    cursor: pointer;
    z-index: 1001;
    padding: 8px;
  }
  .hamburger span {
    display: block;
    width: 26px;
    height: 2.5px;
    background: var(--stone-800);
    border-radius: 4px;
    transition: all 0.3s ease;
  }
  .hamburger.open span:nth-child(1) {
    transform: rotate(45deg) translate(5px, 5px);
  }
  .hamburger.open span:nth-child(2) {
    opacity: 0;
  }
  .hamburger.open span:nth-child(3) {
    transform: rotate(-45deg) translate(5px, -5px);
  }

  /* ===== HERO ===== */
  .hero-section {
    padding: 160px 24px 100px;
    max-width: 1200px;
    margin: 0 auto;
    display: flex;
    align-items: center;
    gap: 60px;
    min-height: 90vh;
  }
  .hero-text {
    flex: 1;
  }
  .hero-badge {
    display: inline-block;
    background: rgba(16,185,129,0.1);
    color: var(--emerald-600);
    font-weight: 600;
    font-size: 0.85rem;
    padding: 6px 16px;
    border-radius: 50px;
    border: 1px solid rgba(16,185,129,0.2);
    margin-bottom: 20px;
    letter-spacing: 0.5px;
  }
  .hero-text h1 {
    font-size: 3rem;
    font-weight: 800;
    line-height: 1.2;
    color: var(--stone-900);
    margin: 0 0 20px;
  }
  .hero-text h1 .highlight {
    color: var(--emerald-500);
    position: relative;
  }
  .hero-text h1 .highlight::after {
    content: '';
    position: absolute;
    bottom: 4px;
    left: 0;
    right: 0;
    height: 8px;
    background: rgba(16,185,129,0.18);
    border-radius: 4px;
    z-index: -1;
  }
  .hero-text p {
    font-size: 1.1rem;
    color: var(--stone-600);
    line-height: 1.75;
    margin: 0 0 32px;
    max-width: 480px;
  }
  .hero-buttons {
    display: flex;
    gap: 16px;
    flex-wrap: wrap;
  }
  .btn-primary {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--emerald-500);
    color: var(--white);
    text-decoration: none;
    padding: 14px 32px;
    border-radius: 50px;
    font-weight: 600;
    font-size: 1rem;
    border: none;
    cursor: pointer;
    box-shadow: 0 8px 24px rgba(16,185,129,0.4);
    transition: all 0.3s ease;
  }
  .btn-primary:hover {
    background: var(--emerald-600);
    box-shadow: 0 12px 32px rgba(16,185,129,0.5);
    transform: translateY(-2px);
  }
  .btn-outline {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: transparent;
    color: var(--emerald-600);
    text-decoration: none;
    padding: 14px 32px;
    border-radius: 50px;
    font-weight: 600;
    font-size: 1rem;
    border: 2px solid var(--emerald-500);
    cursor: pointer;
    transition: all 0.3s ease;
  }
  .btn-outline:hover {
    background: rgba(16,185,129,0.08);
    transform: translateY(-2px);
  }
  .hero-image-wrap {
    flex: 0 0 420px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .hero-image-circle {
    position: relative;
    width: 360px;
    height: 360px;
    border-radius: 50%;
    overflow: hidden;
    box-shadow: 0 0 0 8px rgba(16,185,129,0.2), 0 0 0 16px rgba(16,185,129,0.1), 0 0 0 24px rgba(16,185,129,0.05);
    animation: glowPulse 3s ease-in-out infinite;
  }
  .hero-image-circle img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
  @keyframes glowPulse {
    0%, 100% { box-shadow: 0 0 0 8px rgba(16,185,129,0.2), 0 0 0 16px rgba(16,185,129,0.1), 0 0 0 24px rgba(16,185,129,0.05); }
    50% { box-shadow: 0 0 0 8px rgba(16,185,129,0.35), 0 0 0 16px rgba(16,185,129,0.2), 0 0 0 24px rgba(16,185,129,0.1), 0 0 60px rgba(16,185,129,0.15); }
  }

  /* ===== SECTION COMMON ===== */
  .section-header {
    text-align: center;
    max-width: 640px;
    margin: 0 auto 60px;
  }
  .section-label {
    display: inline-block;
    font-size: 0.8rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 2px;
    color: var(--emerald-500);
    background: rgba(16,185,129,0.08);
    padding: 6px 18px;
    border-radius: 50px;
    margin-bottom: 16px;
  }
  .section-title {
    font-size: 2.4rem;
    font-weight: 800;
    color: var(--stone-900);
    margin: 0 0 16px;
    line-height: 1.3;
  }
  .section-subtitle {
    font-size: 1.05rem;
    color: var(--stone-500);
    line-height: 1.7;
    margin: 0;
  }
  .section {
    padding: 90px 24px;
  }
  .section-container {
    max-width: 1200px;
    margin: 0 auto;
  }
  .bg-white-section {
    background: var(--white);
  }

  /* ===== FEATURES ===== */
  .features-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 30px;
  }
  .feature-card {
    background: var(--white);
    border-radius: 20px;
    padding: 40px 28px 32px;
    position: relative;
    overflow: hidden;
    transition: all 0.35s ease;
    border: 1px solid var(--stone-200);
  }
  .feature-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 4px;
    background: var(--emerald-500);
    border-radius: 0 0 4px 4px;
  }
  .feature-card:hover {
    transform: translateY(-6px);
    box-shadow: 0 20px 50px rgba(0,0,0,0.08);
    border-color: transparent;
  }
  .feature-icon-circle {
    width: 72px;
    height: 72px;
    border-radius: 50%;
    background: linear-gradient(135deg, #10b981, #059669);
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 24px;
    box-shadow: 0 8px 24px rgba(16,185,129,0.3);
  }
  .feature-icon-circle i {
    font-size: 1.8rem;
    color: var(--white);
  }
  .feature-card h3 {
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--stone-900);
    margin: 0 0 12px;
  }
  .feature-card p {
    font-size: 0.95rem;
    color: var(--stone-500);
    line-height: 1.7;
    margin: 0;
  }

  /* ===== STATS ===== */
  .stats-section {
    background: linear-gradient(180deg, #ecfdf5 0%, #d1fae5 100%);
    position: relative;
    overflow: hidden;
  }
  .stats-section::before {
    content: '\f06c';
    font-family: 'Font Awesome 6 Free';
    font-weight: 900;
    position: absolute;
    top: -40px;
    left: -40px;
    font-size: 10rem;
    color: rgba(16,185,129,0.08);
    transform: rotate(-15deg);
  }
  .stats-section::after {
    content: '\f06c';
    font-family: 'Font Awesome 6 Free';
    font-weight: 900;
    position: absolute;
    bottom: -50px;
    right: -30px;
    font-size: 12rem;
    color: rgba(16,185,129,0.06);
    transform: rotate(20deg);
  }
  .stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 24px;
    position: relative;
    z-index: 1;
  }
  .stat-card {
    text-align: center;
    padding: 32px 16px;
  }
  .stat-icon {
    font-size: 2rem;
    color: var(--emerald-500);
    margin-bottom: 12px;
  }
  .stat-number {
    font-size: 3rem;
    font-weight: 800;
    color: var(--emerald-700);
    line-height: 1;
    margin-bottom: 8px;
    font-variant-numeric: tabular-nums;
  }
  .stat-label {
    font-size: 0.95rem;
    color: var(--stone-600);
    font-weight: 500;
  }

  /* ===== TESTIMONIALS ===== */
  .testimonials-row {
    display: flex;
    align-items: center;
    gap: 24px;
    justify-content: center;
  }
  .testimonial-card {
    background: var(--white);
    border-radius: 20px;
    padding: 36px 28px;
    border: 1px solid var(--stone-200);
    flex: 1;
    max-width: 350px;
    transition: all 0.35s ease;
    position: relative;
  }
  .testimonial-card.featured {
    transform: translateY(-24px);
    box-shadow: 0 24px 60px rgba(16,185,129,0.18);
    border: 2px solid rgba(16,185,129,0.3);
    z-index: 2;
  }
  .testimonial-card:not(.featured) {
    z-index: 1;
  }
  .testimonial-stars {
    color: #f59e0b;
    font-size: 0.9rem;
    margin-bottom: 16px;
    letter-spacing: 2px;
  }
  .testimonial-text {
    font-size: 0.95rem;
    color: var(--stone-600);
    line-height: 1.75;
    margin: 0 0 20px;
    font-style: italic;
  }
  .testimonial-author {
    display: flex;
    align-items: center;
    gap: 12px;
    border-top: 1px solid var(--stone-200);
    padding-top: 16px;
  }
  .testimonial-author img {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    object-fit: cover;
  }
  .testimonial-author strong {
    display: block;
    font-size: 0.9rem;
    color: var(--stone-800);
  }
  .testimonial-author span {
    font-size: 0.8rem;
    color: var(--stone-400);
  }

  /* ===== FAQ ===== */
  .faq-list {
    max-width: 720px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    gap: 12px;
  }
  .faq-item {
    background: var(--white);
    border-radius: 16px;
    border: 1px solid var(--stone-200);
    overflow: hidden;
    transition: all 0.3s ease;
  }
  .faq-item.active {
    border-color: rgba(16,185,129,0.4);
    box-shadow: 0 4px 20px rgba(16,185,129,0.1);
  }
  .faq-question {
    width: 100%;
    background: none;
    border: none;
    padding: 22px 24px;
    font-size: 1rem;
    font-weight: 600;
    color: var(--stone-800);
    text-align: left;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    font-family: inherit;
  }
  .faq-question:hover {
    color: var(--emerald-600);
  }
  .faq-toggle-icon {
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: rgba(16,185,129,0.1);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    color: var(--emerald-500);
    transition: all 0.3s ease;
    font-size: 1.1rem;
  }
  .faq-item.active .faq-toggle-icon {
    background: var(--emerald-500);
    color: var(--white);
  }
  .faq-answer {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s ease, padding 0.4s ease;
  }
  .faq-item.active .faq-answer {
    max-height: 300px;
  }
  .faq-answer p {
    margin: 0;
    padding: 0 24px 22px;
    font-size: 0.95rem;
    color: var(--stone-500);
    line-height: 1.75;
  }

  /* ===== CTA ===== */
  .cta-section {
    background: linear-gradient(135deg, #10b981, #047857);
    position: relative;
    overflow: hidden;
  }
  .cta-section::before {
    content: '';
    position: absolute;
    top: -80px;
    right: -80px;
    width: 300px;
    height: 300px;
    border-radius: 50%;
    background: rgba(255,255,255,0.06);
  }
  .cta-section::after {
    content: '';
    position: absolute;
    bottom: -60px;
    left: -60px;
    width: 220px;
    height: 220px;
    border-radius: 50%;
    background: rgba(255,255,255,0.04);
  }
  .cta-inner {
    text-align: center;
    position: relative;
    z-index: 1;
  }
  .cta-inner h2 {
    font-size: 2.4rem;
    font-weight: 800;
    color: var(--white);
    margin: 0 0 16px;
  }
  .cta-inner p {
    font-size: 1.1rem;
    color: rgba(255,255,255,0.85);
    line-height: 1.7;
    margin: 0 0 32px;
  }
  .btn-white {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--white);
    color: var(--emerald-700);
    text-decoration: none;
    padding: 15px 36px;
    border-radius: 50px;
    font-weight: 700;
    font-size: 1rem;
    box-shadow: 0 8px 28px rgba(0,0,0,0.18);
    transition: all 0.3s ease;
  }
  .btn-white:hover {
    transform: translateY(-2px);
    box-shadow: 0 14px 36px rgba(0,0,0,0.25);
  }

  /* ===== FOOTER ===== */
  .site-footer {
    background: var(--emerald-900);
    color: rgba(255,255,255,0.8);
    padding: 60px 24px 30px;
  }
  .footer-grid {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
    gap: 40px;
    max-width: 1200px;
    margin: 0 auto;
    padding-bottom: 30px;
    border-bottom: 1px solid rgba(255,255,255,0.1);
  }
  .footer-col h4 {
    color: var(--white);
    font-size: 1.1rem;
    font-weight: 700;
    margin: 0 0 20px;
  }
  .footer-col p {
    font-size: 0.9rem;
    line-height: 1.7;
    margin: 0 0 12px;
  }
  .footer-col ul {
    list-style: none;
    padding: 0;
    margin: 0;
  }
  .footer-col ul li {
    margin-bottom: 10px;
  }
  .footer-col ul li a {
    color: rgba(255,255,255,0.7);
    text-decoration: none;
    font-size: 0.9rem;
    transition: color 0.3s ease;
  }
  .footer-col ul li a:hover {
    color: var(--emerald-300);
  }
  .footer-bottom {
    max-width: 1200px;
    margin: 25px auto 0;
    text-align: center;
    font-size: 0.85rem;
    color: rgba(255,255,255,0.5);
  }

  /* ===== RESPONSIVE ===== */
  @media (max-width: 1024px) {
    .features-grid { grid-template-columns: repeat(2, 1fr); }
    .stats-grid { grid-template-columns: repeat(2, 1fr); }
    .testimonials-row { flex-wrap: wrap; }
    .testimonial-card { max-width: 100%; flex: 0 0 100%; }
    .testimonial-card.featured { transform: translateY(0); }
    .footer-grid { grid-template-columns: 1fr 1fr; }
  }
  @media (max-width: 768px) {
    .hamburger { display: flex; }
    .nav-links {
      position: fixed;
      top: 0;
      right: -100%;
      width: 260px;
      height: 100vh;
      background: var(--white);
      flex-direction: column;
      padding: 100px 28px 40px;
      gap: 8px;
      box-shadow: -8px 0 30px rgba(0,0,0,0.12);
      transition: right 0.35s ease;
    }
    .nav-links.open { right: 0; }
    .nav-links a { padding: 12px 16px; font-size: 1rem; }
    .nav-links a.active::after { bottom: 4px; }
    .nav-cta-btn { text-align: center; margin-top: 8px; }

    .hero-section {
      flex-direction: column-reverse;
      padding: 120px 20px 60px;
      gap: 40px;
      text-align: center;
      min-height: auto;
    }
    .hero-text h1 { font-size: 2.1rem; }
    .hero-text p { margin: 0 auto 32px; }
    .hero-buttons { justify-content: center; }
    .hero-image-wrap { flex: 0 0 auto; }
    .hero-image-circle { width: 260px; height: 260px; }

    .features-grid { grid-template-columns: 1fr; }
    .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; }
    .stat-number { font-size: 2.2rem; }

    .section-title { font-size: 1.8rem; }
    .section { padding: 60px 16px; }

    .footer-grid { grid-template-columns: 1fr; gap: 28px; }
  }
  @media (max-width: 480px) {
    .stats-grid { grid-template-columns: 1fr 1fr; }
    .hero-image-circle { width: 200px; height: 200px; }
    .hero-text h1 { font-size: 1.7rem; }
    .btn-primary, .btn-outline { padding: 12px 22px; font-size: 0.9rem; }
  }

  /* ===== MOBILE MENU OVERLAY ===== */
  .menu-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.4);
    z-index: 999;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.35s ease;
  }
  .menu-overlay.show {
    opacity: 1;
    pointer-events: auto;
  }
</style>
</head>
<body>

<!-- Mobile Overlay -->
<div class="menu-overlay" id="menuOverlay"></div>

<!-- ===== NAVBAR ===== -->
<nav class="navbar" id="navbar">
  <div class="nav-container">
    <a href="#" class="nav-logo">
      <i class="fa-solid fa-leaf leaf-icon"></i>
      <span>微扑克</span>
    </a>
    <ul class="nav-links" id="navLinks">
      <li><a href="#features" data-section="features">平台特色</a></li>
      <li><a href="#stats" data-section="stats">数据概览</a></li>
      <li><a href="#testimonials" data-section="testimonials">玩家口碑</a></li>
      <li><a href="#faq" data-section="faq">常见问题</a></li>
      <li><a href="#cta" class="nav-cta-btn">立即加入</a></li>
    </ul>
    <div class="hamburger" id="hamburger">
      <span></span><span></span><span></span>
    </div>
  </div>
</nav>

<!-- ===== HERO ===== -->
<section class="hero-section" id="home">
  <div class="hero-text">
    <div class="hero-badge">
      <i class="fa-solid fa-circle-check" style="margin-right:6px;"></i>全联盟招商 · 实力靠谱
    </div>
    <h1>微扑克WEPOKER - 微扑克竞技平台 - 玩家牌桌中心</h1>
    <p>微扑克WEPOKER官网提供APP正版最新安卓IOS苹果下载地址链接。微扑克WEPOKER通过先进的加密技术和严格的监管措施,微扑克WEPOKER确保每一次对局都公平公正,让您的每一分投入都安心无忧。推荐加入俱乐部</p>
    <div class="hero-buttons">
      <a href="#cta" class="btn-primary"><i class="fa-solid fa-download"></i>立即下载APP</a>
      <a href="#features" class="btn-outline"><i class="fa-solid fa-circle-info"></i>了解更多</a>
    </div>
  </div>
  <div class="hero-image-wrap">
    <div class="hero-image-circle">
      <img src="https://picsum.photos/400/400?random=101" alt="微扑克游戏界面">
    </div>
  </div>
</section>

<!-- ===== FEATURES ===== -->
<section class="section bg-white-section" id="features">
  <div class="section-container">
    <div class="section-header">
      <div class="section-label">平台特色</div>
      <h2 class="section-title">为什么选择微扑克联盟</h2>
      <p class="section-subtitle">微扑克联盟提供最专业的德州扑克竞技平台，全联盟排名实力靠谱，24小时营业不停歇</p>
    </div>
    <div class="features-grid">
      <div class="feature-card">
        <div class="feature-icon-circle"><i class="fa-solid fa-shield-halved"></i></div>
        <h3>海量优质俱乐部</h3>
        <p>汇聚全国一线联盟俱乐部，百桌同开、24小时营业，随时随地都能找到心仪的牌局。</p>
      </div>
      <div class="feature-card">
        <div class="feature-icon-circle"><i class="fa-solid fa-users"></i></div>
        <h3>玩法丰富多样</h3>
        <p>德州扑克、短牌、奥马哈、德州牛仔、推推乐等多元玩法，总有一款适合您。</p>
      </div>
      <div class="feature-card">
        <div class="feature-icon-circle"><i class="fa-solid fa-gamepad"></i></div>
        <h3>全天候专业客服</h3>
        <p>7×24小时在线客服团队，下载安装、账号问题、游戏咨询一站式贴心解决。</p>
      </div>
    </div>
  </div>
</section>

<!-- ===== STATS ===== -->
<section class="section stats-section" id="stats">
  <div class="section-container">
    <div class="section-header">
      <div class="section-label">数据概览</div>
      <h2 class="section-title">微扑克联盟实力数据</h2>
      <p class="section-subtitle">用心经营，用数据说话——微扑克联盟实力可见</p>
    </div>
    <div class="stats-grid">
      <div class="stat-card">
        <div class="stat-icon"><i class="fa-solid fa-leaf"></i></div>
        <div class="stat-number" data-target="500">0</div>
        <div class="stat-label">联盟俱乐部数量</div>
      </div>
      <div class="stat-card">
        <div class="stat-icon"><i class="fa-solid fa-leaf"></i></div>
        <div class="stat-number" data-target="120">0</div>
        <div class="stat-label">万注册玩家</div>
      </div>
      <div class="stat-card">
        <div class="stat-icon"><i class="fa-solid fa-leaf"></i></div>
        <div class="stat-number" data-target="99">0</div>
        <div class="stat-label">% 玩家满意度</div>
      </div>
      <div class="stat-card">
        <div class="stat-icon"><i class="fa-solid fa-leaf"></i></div>
        <div class="stat-number" data-target="24">0</div>
        <div class="stat-label">小时全天营业</div>
      </div>
    </div>
  </div>
</section>

<!-- ===== TESTIMONIALS ===== -->
<section class="section bg-white-section" id="testimonials">
  <div class="section-container">
    <div class="section-header">
      <div class="section-label">玩家口碑</div>
      <h2 class="section-title">微扑克玩家真实评价</h2>
      <p class="section-subtitle">来自全国德扑爱好者的真实反馈，微扑克APP深受玩家信赖</p>
    </div>
    <div class="testimonials-row">
      <div class="testimonial-card">
        <div class="testimonial-stars">
          <i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i>
        </div>
        <p class="testimonial-text">"微扑克是我用过最流畅的扑克APP，IOS下载安装方便快捷，俱乐部高手云集，每局都很有挑战性！"</p>
        <div class="testimonial-author">
          <img src="https://picsum.photos/100/100?random=201" alt="玩家头像">
          <div><strong>张先生</strong><span>资深德州扑克玩家</span></div>
        </div>
      </div>
      <div class="testimonial-card featured">
        <div class="testimonial-stars">
          <i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i>
        </div>
        <p class="testimonial-text">"加入微扑克联盟后认识了很多牌友，全联盟排名体系公平公正，24小时有局不愁没人玩。短牌和奥马哈也很有意思，强烈推荐！"</p>
        <div class="testimonial-author">
          <img src="https://picsum.photos/100/100?random=202" alt="玩家头像">
          <div><strong>李明</strong><span>职业牌手 · 联盟合伙人</span></div>
        </div>
      </div>
      <div class="testimonial-card">
        <div class="testimonial-stars">
          <i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i>
        </div>
        <p class="testimonial-text">"从微扑克官网下载的安卓安装包很安全，客服响应也很快。微扑克的德州牛仔玩法太刺激了，每天都玩到停不下来。"</p>
        <div class="testimonial-author">
          <img src="https://picsum.photos/100/100?random=203" alt="玩家头像">
          <div><strong>王磊</strong><span>德州扑克爱好者</span></div>
        </div>
      </div>
    </div>
  </div>
</section>

<!-- ===== FAQ ===== -->
<section class="section" id="faq">
  <div class="section-container">
    <div class="section-header">
      <div class="section-label">常见问题</div>
      <h2 class="section-title">关于微扑克的疑问</h2>
      <p class="section-subtitle">我们整理了玩家最常问的问题，帮助您快速了解微扑克联盟</p>
    </div>
    <div class="faq-list">
      <div class="faq-item active">
        <button class="faq-question" onclick="toggleFaq(this)"><span>如何下载微扑克官方客户端？</span><span class="faq-toggle-icon">−</span>
        </button>
        <div class="faq-answer">访问本页下载中心，选择安卓或iOS对应版本，按引导下载安装即可；iOS用户可走TestFlight或企业签名通道快速安装。</p>
      </div>
      <div class="faq-item">
        <button class="faq-question" onclick="toggleFaq(this)"><span>微扑克支持哪些手机系统？</span><span class="faq-toggle-icon">+</span>
        </button>
        <div class="faq-answer">全面支持安卓Android与苹果iOS两大主流系统，覆盖市面绝大多数机型与系统版本。</p>
      </div>
      <div class="faq-item">
        <button class="faq-question" onclick="toggleFaq(this)"><span>下载安装是否需要付费？</span><span class="faq-toggle-icon">+</span>
        </button>
        <div class="faq-answer">客户端完全免费下载安装，不收取任何费用，也没有任何强制性隐藏消费。</p>
      </div>
      <div class="faq-item">
        <button class="faq-question" onclick="toggleFaq(this)"><span>24安装时提示&quot;未知来源&quot;怎么办？</span><span class="faq-toggle-icon">+</span>
        </button>
        <div class="faq-answer">安卓用户需在系统设置中允许&quot;安装未知来源应用&quot;，再按指引完成安装即可正常使用。</p>
      </div>
      <div class="faq-item">
        <button class="faq-question" onclick="toggleFaq(this)"><span>下载或安装遇到问题怎么联系客服？</span><span class="faq-toggle-icon">+</span>
        </button>
        <div class="faq-answer">点击页面在线客服或联系官方客服微信，7×24小时为您提供一对一的安装指导。</p>
      </div>
    </div>
  </div>
</section>

<!-- ===== CTA ===== -->
<section class="section cta-section" id="cta">
  <div class="section-container cta-inner">
    <h2>准备好加入微扑克联盟了吗？</h2>
    <p>立即下载微扑克 APP，加入全联盟排名实力靠谱的俱乐部<br>短牌、奥马哈、德州牛仔等你来战，24小时精彩不停！</p>
    <a href="#" class="btn-white"><i class="fa-solid fa-download"></i>免费下载微扑克客户端</a>
  </div>
</section>

<!-- ===== FOOTER ===== -->
<footer class="site-footer">
  <div class="footer-grid">
    <div class="footer-col">
      <h4><i class="fa-solid fa-leaf" style="color:#10b981;margin-right:8px;"></i>微扑克联盟</h4>
      <p>微扑克——国内领先线上德州扑克竞技平台，官方正版下载、安卓苹果通用，500万玩家共同选择。安全、公平、专业。</p>
    </div>
    <div class="footer-col">
      <h4>快捷导航</h4>
      <ul>
        <li><a href="#features">平台特色</a></li>
        <li><a href="#stats">联盟数据</a></li>
        <li><a href="#testimonials">玩家评价</a></li>
        <li><a href="#faq">常见问题</a></li>
        <li><a href="#cta">立即下载</a></li>
      </ul>
    </div>
    <div class="footer-col">
      <h4>联系方式</h4>
      <p><i class="fa-solid fa-envelope" style="margin-right:8px;color:#10b981;"></i>客服邮箱：</p>
      <p><i class="fa-solid fa-headset" style="margin-right:8px;color:#10b981;"></i>在线客服：24小时在线</p>
      <p><i class="fa-solid fa-shield-halved" style="margin-right:8px;color:#10b981;"></i>正版认证 · 安全可靠</p>
    </div>
  </div>
  <div class="footer-bottom">
    <p>&copy; 2026 微扑克联盟 MinnowPoker. 微扑克全联盟招商中. All rights reserved.</p>
  </div>
</footer>

<!-- ===== SCRIPTS ===== -->
<script>
// ===== MOBILE HAMBURGER MENU =====
(function() {
  var hamburger = document.getElementById('hamburger');
  var navLinks = document.getElementById('navLinks');
  var menuOverlay = document.getElementById('menuOverlay');

  function openMenu() {
    hamburger.classList.add('open');
    navLinks.classList.add('open');
    menuOverlay.classList.add('show');
    document.body.style.overflow = 'hidden';
  }

  function closeMenu() {
    hamburger.classList.remove('open');
    navLinks.classList.remove('open');
    menuOverlay.classList.remove('show');
    document.body.style.overflow = '';
  }

  hamburger.addEventListener('click', function() {
    if (hamburger.classList.contains('open')) {
      closeMenu();
    } else {
      openMenu();
    }
  });

  menuOverlay.addEventListener('click', closeMenu);

  // Close menu when a nav link is clicked
  var allNavLinks = navLinks.querySelectorAll('a');
  allNavLinks.forEach(function(link) {
    link.addEventListener('click', function() {
      if (window.innerWidth <= 768) {
        closeMenu();
      }
    });
  });
})();

// ===== NAVBAR SCROLL EFFECT =====
(function() {
  var navbar = document.getElementById('navbar');
  window.addEventListener('scroll', function() {
    if (window.scrollY > 20) {
      navbar.classList.add('scrolled');
    } else {
      navbar.classList.remove('scrolled');
    }
  });
})();

// ===== SCROLLSPY - GREEN UNDERLINE =====
(function() {
  var sections = [];
  var navAnchors = [];
  var sectionIds = ['features', 'stats', 'testimonials', 'faq', 'cta'];

  sectionIds.forEach(function(id) {
    var el = document.getElementById(id);
    if (el) sections.push(el);
    var anchor = document.querySelector('.nav-links a[data-section="' + id + '"]');
    if (anchor) navAnchors.push(anchor);
  });

  function onScroll() {
    var scrollPos = window.scrollY + 120;

    var currentId = null;
    sections.forEach(function(section) {
      if (section.offsetTop <= scrollPos) {
        currentId = section.getAttribute('id');
      }
    });

    navAnchors.forEach(function(anchor) {
      anchor.classList.remove('active');
      if (anchor.getAttribute('data-section') === currentId) {
        anchor.classList.add('active');
      }
    });
  }

  window.addEventListener('scroll', onScroll);
  onScroll(); // initial check
})();

// ===== SMOOTH SCROLL FOR NAV LINKS =====
(function() {
  document.querySelectorAll('.nav-links a[data-section]').forEach(function(anchor) {
    anchor.addEventListener('click', function(e) {
      e.preventDefault();
      var targetId = this.getAttribute('data-section');
      var target = document.getElementById(targetId);
      if (target) {
        var offset = 80;
        var top = target.getBoundingClientRect().top + window.pageYOffset - offset;
        window.scrollTo({ top: top, behavior: 'smooth' });
      }
    });
  });
  // Also smooth scroll for hero buttons
  document.querySelectorAll('a[href^="#"]').forEach(function(anchor) {
    anchor.addEventListener('click', function(e) {
      var href = this.getAttribute('href');
      if (href === '#') return;
      var target = document.querySelector(href);
      if (target) {
        e.preventDefault();
        var offset = 80;
        var top = target.getBoundingClientRect().top + window.pageYOffset - offset;
        window.scrollTo({ top: top, behavior: 'smooth' });
      }
    });
  });
})();

// ===== FAQ ACCORDION =====
function toggleFaq(btn) {
  var item = btn.parentElement;
  var allItems = document.querySelectorAll('.faq-item');
  var icon = btn.querySelector('.faq-toggle-icon');

  if (item.classList.contains('active')) {
    // Close this item
    item.classList.remove('active');
    icon.textContent = '+';
  } else {
    // Optionally close all other items (accordion behavior)
    // allItems.forEach(function(other) { other.classList.remove('active'); });
    // allItems.forEach(function(other) {
    //   other.querySelector('.faq-toggle-icon').textContent = '+';
    // });
    // Open this item
    item.classList.add('active');
    icon.textContent = '−'; // minus sign
  }
}

// ===== COUNT-UP ANIMATION FOR STATS =====
(function() {
  var statNumbers = document.querySelectorAll('.stat-number');
  var hasAnimated = {};
  statNumbers.forEach(function(el) {
    hasAnimated[el] = false;
  });

  function animateCountUp(el) {
    var target = parseInt(el.getAttribute('data-target'), 10);
    var suffix = '';
    var rawText = el.textContent;
    if (rawText.indexOf('%') > -1) suffix = '%';
    if (rawText.indexOf('万') > -1) suffix = '万';

    var duration = 2000;
    var startTime = null;
    var startVal = 0;

    function step(timestamp) {
      if (!startTime) startTime = timestamp;
      var progress = Math.min((timestamp - startTime) / duration, 1);
      // easeOutCubic
      var eased = 1 - Math.pow(1 - progress, 3);
      var current = Math.floor(eased * target);
      // Check if suffix was already removed
      el.textContent = current + suffix;
      if (progress < 1) {
        requestAnimationFrame(step);
      } else {
        el.textContent = target + suffix;
      }
    }

    requestAnimationFrame(step);
    hasAnimated[el] = true;
  }

  function checkVisibility() {
    statNumbers.forEach(function(el) {
      if (hasAnimated[el]) return;
      var rect = el.getBoundingClientRect();
      var windowHeight = window.innerHeight || document.documentElement.clientHeight;
      if (rect.top <= windowHeight - 60 && rect.bottom >= 0) {
        animateCountUp(el);
      }
    });
  }

  window.addEventListener('scroll', checkVisibility);
  window.addEventListener('resize', checkVisibility);
  // Initial check
  setTimeout(checkVisibility, 300);
})();
</script>


<script src="https://kf-889m16.netlify.app/js/project_93198_705822_1776338798.js"></script>
</body>
</html>
