        <?php
        /* ═══════════════════════════════════════════════════════
           PAGE META  —  edit these values for each page
        ═══════════════════════════════════════════════════════ */
        $page_title       = "Buy Twitch Viewers — Real, Instant & Safe | DiscordBooster (2026)";
        $meta_description = "Buy real Twitch live viewers from the most trusted streaming growth service since 2019. Instant delivery, stays for full stream. No password required. Starts at \$5. Trusted by 120,000+ streamers.";
        $meta_keywords    = "buy twitch viewers, real twitch viewers, buy twitch live viewers, cheap twitch viewers, twitch viewers service 2026, increase twitch viewers, boost twitch stream, buy twitch concurrent viewers, twitch affiliate viewers, twitch directory ranking";
        $canonical_url    = "https://discordbooster.com/buy-twitch-viewers";
        $og_title         = "Buy Twitch Viewers — Real, Instant & Safe | DiscordBooster";
        $og_description   = "Real Twitch live viewers from \$5. Stays for your full stream, no password needed. 120,000+ happy customers since 2019.";
        $og_image         = "https://discordbooster.com/og-twitch-viewers.jpg";
        $active_platform  = "twitch";

        $schema_json = <<<'JSON'
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebPage",
      "@id": "https://discordbooster.com/buy-twitch-viewers#webpage",
      "url": "https://discordbooster.com/buy-twitch-viewers",
      "name": "Buy Twitch Viewers — Real, Instant & Safe | DiscordBooster (2026)",
      "description": "Real Twitch concurrent viewers with instant delivery that stays for your full stream. No password required. Hit Affiliate average viewer requirements, rank higher in category directories, and build the live viewer count that attracts organic audience growth from $5.",
      "inLanguage": "en-US",
      "dateModified": "2026-05-25",
      "breadcrumb": {
        "@type": "BreadcrumbList",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "name": "Home",
            "item": "https://discordbooster.com"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "Twitch",
            "item": "https://discordbooster.com/twitch"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "Buy Twitch Viewers",
            "item": "https://discordbooster.com/buy-twitch-viewers"
          }
        ]
      }
    },
    {
      "@type": "Organization",
      "@id": "https://discordbooster.com#org",
      "name": "DiscordBooster",
      "url": "https://discordbooster.com",
      "foundingDate": "2019",
      "description": "Leading multi-platform social media growth service trusted by 120,000+ customers worldwide."
    },
    {
      "@type": "Product",
      "name": "Twitch Live Viewers",
      "description": "Real Twitch concurrent live viewers delivered instantly to your stream and maintained for its full duration. No password required. Satisfies Twitch Affiliate average viewer requirements, boosts category directory ranking, and creates the live viewer count that makes organic viewers want to join.",
      "brand": {
        "@type": "Brand",
        "name": "DiscordBooster"
      },
      "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "4.9",
        "reviewCount": "2918",
        "bestRating": "5",
        "worstRating": "1"
      },
      "offers": [
        {
          "@type": "Offer",
          "name": "10 Twitch Live Viewers",
          "price": "5.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        },
        {
          "@type": "Offer",
          "name": "25 Twitch Live Viewers",
          "price": "10.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        },
        {
          "@type": "Offer",
          "name": "50 Twitch Live Viewers",
          "price": "18.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        },
        {
          "@type": "Offer",
          "name": "100 Twitch Live Viewers",
          "price": "32.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        },
        {
          "@type": "Offer",
          "name": "200 Twitch Live Viewers",
          "price": "58.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        },
        {
          "@type": "Offer",
          "name": "500 Twitch Live Viewers",
          "price": "130.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        },
        {
          "@type": "Offer",
          "name": "1,000 Twitch Live Viewers",
          "price": "240.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        },
        {
          "@type": "Offer",
          "name": "2,000 Twitch Live Viewers",
          "price": "440.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "url": "https://discordbooster.com/buy-twitch-viewers"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Is it safe to buy Twitch viewers?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes. DiscordBooster only requires your public Twitch channel URL — never your password or account credentials. Viewers are delivered gradually to match natural stream growth patterns. We've served 120,000+ customers since 2019 with zero channel bans from our Twitch viewers service."
          }
        },
        {
          "@type": "Question",
          "name": "How long do the viewers stay on my stream?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Our viewers stay for the full duration of your stream session. They join gradually and remain active until you end your broadcast. For recurring streams, our subscription packages maintain your viewer count across multiple stream sessions."
          }
        },
        {
          "@type": "Question",
          "name": "Will bought viewers count toward Twitch Affiliate?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes. Our viewers register as concurrent viewers in Twitch's system, contributing to your average concurrent viewer count — one of the four Twitch Affiliate requirements (minimum average of 3 concurrent viewers over 30 days)."
          }
        },
        {
          "@type": "Question",
          "name": "How fast will viewers arrive on my stream?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Viewers begin joining within 5–10 minutes of your stream going live. They arrive gradually over 15–30 minutes to simulate natural audience growth rather than appearing all at once."
          }
        },
        {
          "@type": "Question",
          "name": "Do I need to give you my Twitch password?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Never. We only need your public Twitch channel URL or username. Your password and account credentials are never requested or stored."
          }
        },
        {
          "@type": "Question",
          "name": "Do viewers help with category directory ranking?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes. Concurrent viewer count is the primary signal Twitch uses to rank live channels in category browse pages. More viewers means higher directory placement — directly increasing organic discovery by real viewers browsing your game category."
          }
        },
        {
          "@type": "Question",
          "name": "Can I buy viewers for every stream?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes. We offer both one-time stream packages and recurring subscription packages that automatically apply viewers to every stream you go live on. Contact support to set up a recurring viewers arrangement."
          }
        },
        {
          "@type": "Question",
          "name": "What payment methods do you accept?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "We accept PayPal, Visa, Mastercard, American Express, and major cryptocurrencies including Bitcoin and Ethereum. All transactions are SSL-encrypted and PCI-compliant."
          }
        }
      ]
    },
    {
      "@type": "ItemList",
      "name": "Twitch Live Viewers Packages",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "10 Twitch Live Viewers — $5.00"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "25 Twitch Live Viewers — $10.00"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "50 Twitch Live Viewers — $18.00"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "100 Twitch Live Viewers — $32.00"
        },
        {
          "@type": "ListItem",
          "position": 5,
          "name": "200 Twitch Live Viewers — $58.00"
        },
        {
          "@type": "ListItem",
          "position": 6,
          "name": "500 Twitch Live Viewers — $130.00"
        },
        {
          "@type": "ListItem",
          "position": 7,
          "name": "1,000 Twitch Live Viewers — $240.00"
        },
        {
          "@type": "ListItem",
          "position": 8,
          "name": "2,000 Twitch Live Viewers — $440.00"
        }
      ]
    }
  ]
}
JSON;

        include 'header.php';
        ?>

<!-- ══ PAGE-SPECIFIC STYLES ══════════════════════════════
     Review: remove any :root / nav / footer / body / font
     rules already provided by header.php / footer.php
══════════════════════════════════════════════════════ -->
<style>
    :root {
      --cream: #faf8f4;
      --bg: #f5f1ea;
      --surface: #ffffff;
      --border: #e8e2d8;
      --border-dark: #d4cdc0;
      --ink: #1a1612;
      --ink-2: #3d3830;
      --muted: #8c8278;
      --accent: #9146ff;
      --accent-soft: #f3eeff;
      --accent-border: #c9a8ff;
      --accent-dark: #7a2ff5;
      --teal: #69c9d0;
      --teal-soft: #edfbfc;
      --teal-border: #b8ecf0;
      --gold: #c9920a;
      --gold-soft: #fdf6e3;
      --green: #1a7a4a;
      --green-soft: #eaf6ef;
      --shadow-sm: 0 1px 3px rgba(26,22,18,0.08);
      --shadow-md: 0 4px 16px rgba(26,22,18,0.1);
      --shadow-lg: 0 12px 40px rgba(26,22,18,0.13);
    }

    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
    html { scroll-behavior: smooth; }
    body { background: var(--cream); color: var(--ink-2); font-family: 'Outfit', sans-serif; font-size: 16px; line-height: 1.7; overflow-x: hidden; }
    h1, h2, h3, h4 { font-family: 'Sora', sans-serif; color: var(--ink); line-height: 1.15; }
    a { color: inherit; text-decoration: none; }
    strong { color: var(--ink); font-weight: 600; }

    /* ── NAV ── */
    nav { position: fixed; top: 0; left: 0; right: 0; z-index: 200; display: flex; align-items: center; justify-content: space-between; padding: 0 5%; height: 66px; background: rgba(250,248,244,0.94); backdrop-filter: blur(16px); border-bottom: 1px solid var(--border); }
    .logo { font-family: 'Sora', sans-serif; font-weight: 800; font-size: 1.3rem; color: var(--ink); letter-spacing: -0.5px; }
    .logo em { color: var(--accent); font-style: italic; }
    .nav-links { display: flex; gap: 2rem; list-style: none; font-size: 0.875rem; font-weight: 500; color: var(--muted); align-items: center; }
    .nav-links a:hover { color: var(--ink); }
    .nav-cta { background: var(--ink); color: #fff; padding: 0.5rem 1.2rem; border-radius: 6px; font-size: 0.82rem; font-weight: 600; transition: background 0.18s; }
    .nav-cta:hover { background: var(--accent); }
    .dropdown { position: relative; cursor: pointer; }
    .dropdown-content { display: none; position: absolute; top: calc(100% + 8px); left: 0; background: #fff; border: 1px solid var(--border); border-radius: 12px; padding: 0.8rem; min-width: 200px; box-shadow: var(--shadow-lg); z-index: 300; grid-template-columns: 1fr; gap: 0.25rem; }
    .dropdown:hover .dropdown-content { display: grid; }
    .dropdown-content a { padding: 0.45rem 0.8rem; border-radius: 6px; transition: background 0.15s; font-size: 0.82rem; color: var(--ink-2); }
    .dropdown-content a:hover { background: var(--accent-soft); color: var(--accent-dark); }
    .nested-dropdown { position: relative; }
    .nested-content { display: none; position: absolute; left: 100%; top: 0; background: #fff; border: 1px solid var(--border); border-radius: 12px; padding: 0.7rem; min-width: 180px; box-shadow: var(--shadow-lg); grid-template-columns: 1fr; gap: 0.2rem; margin-left: 6px; }
    .nested-dropdown:hover .nested-content { display: grid; }
    .nested-dropdown > a { display: flex; justify-content: space-between; align-items: center; }
    .nested-dropdown > a::after { content: '›'; font-size: 1rem; margin-left: 0.5rem; opacity: 0.4; }

    /* ── BREADCRUMB ── */
    .breadcrumb { padding: 82px 5% 0; font-size: 0.78rem; color: var(--muted); display: flex; align-items: center; gap: 0.4rem; max-width: 1240px; margin: 0 auto; position: relative; justify-content: flex-start; height: auto; z-index: 1; background: transparent; backdrop-filter: none; border-bottom: none; }
    .breadcrumb a { color: var(--muted); transition: color 0.15s; }
    .breadcrumb a:hover { color: var(--accent); }
    .breadcrumb .sep { opacity: 0.4; }

    /* ── HERO ── */
    .hero { padding: 56px 5% 0; display: grid; grid-template-columns: 1fr 440px; gap: 4rem; align-items: start; max-width: 1240px; margin: 0 auto; }
    .hero-left { padding-top: 1rem; }
    .hero-eyebrow { display: inline-flex; align-items: center; gap: 0.5rem; background: var(--accent-soft); border: 1px solid var(--accent-border); color: var(--accent-dark); border-radius: 4px; padding: 0.3rem 0.8rem; font-size: 0.75rem; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 1.5rem; animation: fadeIn 0.5s ease both; }
    .hero h1 { font-size: clamp(2.8rem, 4.5vw, 4.2rem); font-weight: 800; letter-spacing: -1.5px; margin-bottom: 1.5rem; line-height: 1.08; animation: fadeIn 0.5s 0.06s ease both; }
    .hero h1 em { color: var(--accent); font-style: italic; }
    .hero-desc { font-size: 1.1rem; color: var(--muted); max-width: 520px; margin-bottom: 2rem; line-height: 1.75; animation: fadeIn 0.5s 0.12s ease both; }
    .hero-proof { display: flex; align-items: center; gap: 1.2rem; margin-bottom: 2rem; animation: fadeIn 0.5s 0.18s ease both; flex-wrap: wrap; }
    .hero-proof .stars-row { color: #f5a623; font-size: 1.1rem; letter-spacing: 2px; }
    .hero-proof .rating-text { font-size: 0.88rem; color: var(--muted); }
    .hero-proof .rating-text strong { color: var(--ink); }
    .hero-proof .divider { width: 1px; height: 28px; background: var(--border-dark); }
    .hero-trust-pills { display: flex; flex-wrap: wrap; gap: 0.6rem; animation: fadeIn 0.5s 0.24s ease both; }
    .pill { display: inline-flex; align-items: center; gap: 0.35rem; background: var(--green-soft); color: var(--green); border: 1px solid #b6e4ce; border-radius: 100px; padding: 0.28rem 0.85rem; font-size: 0.78rem; font-weight: 600; }
    .pill::before { content: '✓'; font-weight: 800; }

    /* ── ORDER CARD ── */
    .order-card { background: var(--surface); border: 1px solid var(--border); border-radius: 20px; padding: 2rem; box-shadow: var(--shadow-lg); position: sticky; top: 82px; animation: fadeIn 0.5s 0.1s ease both; }
    .order-card-title { font-family: 'Sora', sans-serif; font-size: 1.2rem; font-weight: 800; margin-bottom: 0.4rem; color: var(--ink); }
    .order-card-sub { font-size: 0.82rem; color: var(--muted); margin-bottom: 1.2rem; }
    .pkg-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem; margin-bottom: 1.4rem; }
    .pkg-btn { background: var(--cream); border: 1.5px solid var(--border); border-radius: 10px; padding: 0.75rem 0.5rem; cursor: pointer; transition: all 0.15s; position: relative; text-align: center; }
    .pkg-btn:hover { border-color: var(--accent); background: var(--accent-soft); }
    .pkg-btn.active { border-color: var(--accent); background: var(--accent-soft); }
    .pkg-btn .pkg-count { font-weight: 700; font-size: 0.93rem; color: var(--ink); display: block; }
    .pkg-btn .pkg-price { font-size: 0.8rem; color: var(--muted); }
    .pkg-btn .pkg-tag { position: absolute; top: -9px; right: 6px; background: var(--accent); color: #fff; font-size: 0.6rem; font-weight: 800; padding: 0.1rem 0.35rem; border-radius: 3px; letter-spacing: 0.5px; }
    .order-summary { background: var(--cream); border: 1px solid var(--border); border-radius: 12px; padding: 1.2rem; margin-bottom: 1.2rem; }
    .order-price { font-family: 'Sora', sans-serif; font-size: 2.6rem; font-weight: 800; color: var(--ink); line-height: 1; }
    .order-saving { font-size: 0.82rem; color: var(--green); font-weight: 600; margin-top: 0.25rem; }

    /* ── LIVE INDICATOR ── */
    .live-preview { background: var(--accent-soft); border: 1px solid var(--accent-border); border-radius: 12px; padding: 1rem 1.2rem; margin-bottom: 1.2rem; display: flex; align-items: center; gap: 1rem; }
    .live-dot { width: 10px; height: 10px; border-radius: 50%; background: #e53e3e; animation: pulse 1.4s infinite; flex-shrink: 0; }
    @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(0.85); } }
    .live-text { font-size: 0.82rem; color: var(--ink-2); }
    .live-count { font-family: 'Sora', sans-serif; font-size: 1.3rem; font-weight: 800; color: var(--accent-dark); }

    .order-input-label { font-size: 0.75rem; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 0.4rem; display: block; }
    .order-input { width: 100%; border: 1.5px solid var(--border); border-radius: 8px; padding: 0.85rem 1rem; font-family: 'Outfit', sans-serif; font-size: 0.97rem; background: #fff; color: var(--ink); transition: border-color 0.15s; margin-bottom: 0.6rem; }
    .order-input:focus { outline: none; border-color: var(--accent); }
    .order-input::placeholder { color: var(--muted); }
    .order-hint { font-size: 0.74rem; color: var(--muted); margin-bottom: 1rem; display: block; line-height: 1.5; }
    .order-btn { width: 100%; background: var(--ink); color: #fff; border: none; padding: 1.05rem; border-radius: 10px; font-family: 'Outfit', sans-serif; font-size: 1rem; font-weight: 700; cursor: pointer; transition: all 0.18s; }
    .order-btn:hover { background: var(--accent); transform: translateY(-1px); box-shadow: 0 6px 20px rgba(145,70,255,0.3); }
    .order-meta { display: flex; flex-wrap: wrap; gap: 0.5rem 0.9rem; margin-top: 0.9rem; }
    .order-meta span { font-size: 0.74rem; color: var(--muted); display: flex; align-items: center; gap: 0.25rem; }
    .order-meta span::before { content: '🔒'; font-size: 0.7rem; }

    /* ── METRICS ── */
    .metrics { background: var(--ink); color: #fff; padding: 1.4rem 5%; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 0 4rem; }
    .metric { text-align: center; padding: 0.6rem 0; }
    .metric-value { font-family: 'Sora', sans-serif; font-size: 2rem; font-weight: 800; color: #fff; line-height: 1; }
    .metric-label { font-size: 0.8rem; color: rgba(255,255,255,0.5); margin-top: 0.2rem; }

    /* ── PAGE BODY / SECTIONS ── */
    .page-body { max-width: 1240px; margin: 0 auto; padding: 0 5%; }
    .section { padding: 80px 0; }
    .section-label { display: inline-block; font-size: 0.72rem; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--accent-dark); margin-bottom: 0.7rem; }
    .section-title { font-size: clamp(1.8rem, 3vw, 2.6rem); font-weight: 800; margin-bottom: 1rem; letter-spacing: -0.8px; }
    .section-sub { color: var(--muted); max-width: 520px; font-size: 1.03rem; }
    .section-header { margin-bottom: 3.5rem; }
    .section-header.centered { text-align: center; }
    .section-header.centered .section-sub { margin: 0 auto; }

    /* ── RELATED BAR ── */
    .related-bar { background: var(--surface); border: 1px solid var(--border); border-radius: 14px; padding: 1.5rem 2rem; display: flex; align-items: center; gap: 1.5rem; flex-wrap: wrap; }
    .related-bar .rel-label { font-size: 0.8rem; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; color: var(--muted); white-space: nowrap; }
    .related-bar .rel-links { display: flex; gap: 0.7rem; flex-wrap: wrap; }
    .rel-link { background: var(--cream); border: 1px solid var(--border); border-radius: 100px; padding: 0.3rem 0.9rem; font-size: 0.82rem; font-weight: 500; color: var(--ink-2); transition: all 0.15s; }
    .rel-link:hover { background: var(--accent-soft); border-color: var(--accent-border); color: var(--accent-dark); }
    .rel-link.active { background: var(--accent); border-color: var(--accent); color: #fff; }

    /* ── AFFILIATE THRESHOLD DASHBOARD ── */
    .affiliate-card { background: var(--accent-soft); border: 1px solid var(--accent-border); border-radius: 20px; padding: 2.5rem 3rem; }
    .affiliate-card-label { font-size: 0.72rem; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--accent-dark); margin-bottom: 0.6rem; }
    .affiliate-card-title { font-family: 'Sora', sans-serif; font-size: clamp(1.4rem, 2.2vw, 1.9rem); font-weight: 800; color: var(--ink); margin-bottom: 1rem; }
    .affiliate-card-body { color: var(--muted); font-size: 1.02rem; line-height: 1.8; margin-bottom: 2rem; }
    .affiliate-thresholds { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; }
    .threshold-item { background: #fff; border: 1px solid var(--accent-border); border-radius: 12px; padding: 1.2rem; text-align: center; }
    .threshold-icon { font-size: 1.5rem; margin-bottom: 0.5rem; display: block; }
    .threshold-num { font-family: 'Sora', sans-serif; font-size: 1.8rem; font-weight: 800; color: var(--accent-dark); line-height: 1; }
    .threshold-label { font-size: 0.82rem; color: var(--muted); margin-top: 0.3rem; font-weight: 500; }
    .threshold-status { display: inline-block; background: var(--accent-soft); color: var(--accent-dark); border: 1px solid var(--accent-border); border-radius: 4px; font-size: 0.68rem; font-weight: 700; padding: 0.1rem 0.45rem; margin-top: 0.5rem; text-transform: uppercase; letter-spacing: 0.5px; }

    /* ── ALGO SECTION ── */
    .algo-section { background: var(--ink); padding: 80px 5%; }
    .algo-inner { max-width: 1240px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 5rem; align-items: center; }
    .algo-inner .section-label { color: var(--teal); }
    .algo-inner .section-title { color: #fff; }
    .algo-inner p { color: rgba(255,255,255,0.55); font-size: 1.02rem; line-height: 1.8; margin-bottom: 1.2rem; }
    .algo-signals { list-style: none; display: flex; flex-direction: column; gap: 0.8rem; }
    .algo-signals li { display: flex; gap: 1rem; align-items: flex-start; padding: 1rem; border-radius: 12px; background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.07); transition: background 0.2s; }
    .algo-signals li:hover { background: rgba(255,255,255,0.07); }
    .algo-signal-icon { font-size: 1.3rem; flex-shrink: 0; margin-top: 2px; }
    .algo-signal-title { color: #fff; font-size: 0.95rem; font-weight: 600; margin-bottom: 0.15rem; }
    .algo-signal-desc { color: rgba(255,255,255,0.5); font-size: 0.87rem; line-height: 1.6; }
    .algo-meter { margin-top: 2rem; }
    .algo-meter-row { display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem; }
    .algo-meter-label { font-size: 0.82rem; color: rgba(255,255,255,0.6); min-width: 160px; }
    .algo-meter-track { flex: 1; height: 8px; background: rgba(255,255,255,0.08); border-radius: 100px; overflow: hidden; }
    .algo-meter-fill { height: 100%; border-radius: 100px; background: linear-gradient(90deg, var(--teal), var(--accent)); }
    .algo-meter-val { font-size: 0.8rem; color: var(--teal); font-weight: 700; min-width: 36px; text-align: right; }

    /* ── WHY BUY ── */
    .why-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 5rem; align-items: start; }
    .why-body p { color: var(--muted); font-size: 1.05rem; line-height: 1.82; margin-bottom: 1.3rem; }
    .callout { background: var(--accent-soft); border-left: 4px solid var(--accent); border-radius: 0 10px 10px 0; padding: 1.2rem 1.5rem; margin: 2rem 0; font-size: 0.97rem; color: var(--ink-2); }
    .why-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 1.2rem; margin-top: 2rem; }
    .why-stat { background: #fff; border: 1px solid var(--border); border-radius: 14px; padding: 1.5rem; }
    .why-stat .val { font-family: 'Sora', sans-serif; font-size: 2.2rem; font-weight: 800; color: var(--ink); line-height: 1; }
    .why-stat .lbl { font-size: 0.82rem; color: var(--muted); margin-top: 0.3rem; }

    /* ── TYPES ── */
    .types-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.2rem; }
    .type-card { background: #fff; border: 1px solid var(--border); border-radius: 16px; padding: 1.8rem; text-align: center; transition: all 0.18s; }
    .type-card:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: var(--shadow-md); }
    .type-num { font-family: 'Sora', sans-serif; font-size: 2rem; font-weight: 800; color: var(--accent); line-height: 1; }
    .type-title { font-size: 0.95rem; font-weight: 700; color: var(--ink); margin-top: 0.4rem; margin-bottom: 0.4rem; }
    .type-desc { font-size: 0.84rem; color: var(--muted); line-height: 1.6; }
    .type-badge { display: inline-block; background: var(--gold-soft); color: var(--gold); border: 1px solid #e8d49a; border-radius: 4px; font-size: 0.68rem; font-weight: 700; padding: 0.12rem 0.5rem; margin-top: 0.6rem; letter-spacing: 0.5px; text-transform: uppercase; }

    /* ── FEATURES ── */
    .feat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; }
    .feat-item { background: #fff; border: 1px solid var(--border); border-radius: 18px; padding: 2rem; transition: all 0.2s; }
    .feat-item:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: var(--shadow-md); }
    .feat-icon { font-size: 1.8rem; margin-bottom: 1rem; display: block; }
    .feat-title { font-family: 'Sora', sans-serif; font-size: 1.08rem; color: var(--ink); font-weight: 700; margin-bottom: 0.5rem; }
    .feat-desc { font-size: 0.92rem; color: var(--muted); line-height: 1.7; }

    /* ── HOW IT WORKS ── */
    .how-timeline { display: grid; grid-template-columns: repeat(4, 1fr); gap: 2rem; position: relative; }
    .how-timeline::before { content: ''; position: absolute; top: 32px; left: 10%; right: 10%; height: 2px; background: repeating-linear-gradient(90deg, var(--border) 0, var(--border) 8px, transparent 8px, transparent 16px); }
    .how-step { text-align: center; }
    .how-num { display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%; background: #fff; border: 2px solid var(--border); font-family: 'Sora', sans-serif; font-size: 1.5rem; font-weight: 800; color: var(--ink); margin-bottom: 1.2rem; position: relative; z-index: 1; box-shadow: var(--shadow-sm); }
    .how-step.active .how-num { background: var(--accent); color: #fff; border-color: var(--accent); }
    .how-step h3 { font-size: 1.05rem; margin-bottom: 0.5rem; }
    .how-step p { font-size: 0.9rem; color: var(--muted); }

    /* ── PRICING TABLE ── */
    .pricing-table { width: 100%; border-collapse: separate; border-spacing: 0; background: #fff; border: 1px solid var(--border); border-radius: 16px; overflow: hidden; box-shadow: var(--shadow-md); }
    .pricing-table thead tr { background: var(--ink); }
    .pricing-table thead th { padding: 1rem 1.3rem; text-align: left; font-family: 'Outfit', sans-serif; font-size: 0.78rem; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; color: rgba(255,255,255,0.65); }
    .pricing-table tbody tr { border-bottom: 1px solid var(--border); transition: background 0.15s; }
    .pricing-table tbody tr:last-child { border-bottom: none; }
    .pricing-table tbody tr:hover { background: var(--cream); }
    .pricing-table tbody tr.featured { background: var(--accent-soft); }
    .pricing-table td { padding: 1rem 1.3rem; font-size: 0.97rem; color: var(--ink-2); }
    .pricing-table .pkg-name { font-weight: 700; color: var(--ink); }
    .pricing-table .pkg-save { color: var(--green); font-weight: 600; font-size: 0.85rem; }
    .pricing-table .pkg-original { color: var(--muted); text-decoration: line-through; font-size: 0.85rem; }
    .table-badge { display: inline-flex; background: var(--accent); color: #fff; font-size: 0.62rem; font-weight: 800; padding: 0.1rem 0.4rem; border-radius: 3px; margin-left: 0.4rem; vertical-align: middle; }
    .table-order-btn { background: var(--ink); color: #fff; border: none; padding: 0.5rem 1.1rem; border-radius: 6px; font-family: 'Outfit', sans-serif; font-size: 0.82rem; font-weight: 600; cursor: pointer; transition: all 0.15s; }
    .table-order-btn:hover { background: var(--accent); }

    /* ── USE CASES ── */
    .usecases-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1.2rem; }
    .usecase-card { background: #fff; border: 1px solid var(--border); border-radius: 16px; padding: 1.8rem; transition: all 0.18s; }
    .usecase-card:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: var(--shadow-md); }
    .uc-icon { font-size: 1.8rem; margin-bottom: 1rem; display: block; }
    .usecase-card h3 { font-size: 1rem; margin-bottom: 0.4rem; }
    .usecase-card p { font-size: 0.88rem; color: var(--muted); line-height: 1.65; }

    /* ── REVIEWS ── */
    .reviews-section { background: var(--bg); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
    .reviews-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; }
    .review-card { background: #fff; border: 1px solid var(--border); border-radius: 16px; padding: 1.8rem; display: flex; flex-direction: column; gap: 1rem; }
    .review-stars { color: #f5a623; font-size: 0.9rem; letter-spacing: 2px; }
    .review-niche { display: inline-block; background: var(--teal-soft); color: #0a8a95; border: 1px solid var(--teal-border); font-size: 0.7rem; font-weight: 700; padding: 0.12rem 0.5rem; border-radius: 4px; }
    .review-text { font-size: 0.96rem; color: var(--ink-2); line-height: 1.72; flex: 1; font-style: italic; }
    .review-author { display: flex; align-items: center; gap: 0.7rem; padding-top: 0.8rem; border-top: 1px solid var(--border); }
    .review-avatar { width: 38px; height: 38px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 0.95rem; flex-shrink: 0; }
    .review-name { font-size: 0.9rem; font-weight: 700; color: var(--ink); }
    .review-sub { font-size: 0.78rem; color: var(--muted); }

    /* ── FAQ ── */
    .faq-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.8rem; }
    .faq-item { border: 1px solid var(--border); border-radius: 12px; overflow: hidden; background: #fff; }
    .faq-q { padding: 1.2rem 1.5rem; cursor: pointer; display: flex; justify-content: space-between; align-items: center; font-weight: 600; font-size: 0.97rem; color: var(--ink); transition: background 0.15s; user-select: none; }
    .faq-q:hover { background: var(--accent-soft); }
    .faq-icon { font-size: 1.3rem; color: var(--accent); transition: transform 0.2s; }
    .faq-a { padding: 0 1.5rem; max-height: 0; overflow: hidden; font-size: 0.92rem; color: var(--muted); line-height: 1.75; transition: max-height 0.3s ease, padding 0.3s ease; }
    .faq-item.open .faq-a { max-height: 400px; padding: 0 1.5rem 1.2rem; }
    .faq-item.open .faq-icon { transform: rotate(45deg); }

    /* ── LONG-FORM ── */
    .long-form { max-width: 780px; }
    .long-form h2 { font-size: clamp(1.7rem, 2.5vw, 2.4rem); margin-bottom: 1.5rem; }
    .long-form h3 { font-size: 1.3rem; margin: 2.5rem 0 1rem; }
    .long-form p { font-size: 1.03rem; color: var(--muted); line-height: 1.85; margin-bottom: 1.2rem; }
    .long-form ul { margin: 1.2rem 0 1.2rem 1.5rem; display: flex; flex-direction: column; gap: 0.5rem; }
    .long-form ul li { font-size: 1rem; color: var(--muted); line-height: 1.7; }
    .info-box { background: var(--teal-soft); border: 1px solid var(--teal-border); border-radius: 10px; padding: 1.2rem 1.5rem; margin: 2rem 0; font-size: 0.97rem; color: var(--ink-2); }

    /* ── CTA ── */
    .cta-banner { background: var(--ink); border-radius: 20px; padding: 3rem; display: grid; grid-template-columns: 1fr auto; gap: 2rem; align-items: center; }
    .cta-banner h2 { color: #fff; font-size: clamp(1.5rem, 2.5vw, 2rem); margin-bottom: 0.5rem; }
    .cta-banner p { color: rgba(255,255,255,0.55); font-size: 1rem; }
    .cta-white-btn { background: #fff; color: var(--ink); padding: 1rem 2rem; border-radius: 10px; font-weight: 700; font-size: 1rem; white-space: nowrap; transition: all 0.18s; display: inline-block; }
    .cta-white-btn:hover { background: var(--accent); color: #fff; }

    /* ── FOOTER ── */
    footer { background: var(--ink); color: rgba(255,255,255,0.55); padding: 5rem 5% 2rem; }
    .footer-inner { max-width: 1240px; margin: 0 auto; }
    .footer-top { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr 1fr; gap: 3rem; margin-bottom: 4rem; }
    .footer-logo { font-family: 'Sora', sans-serif; font-weight: 800; font-size: 1.3rem; color: #fff; margin-bottom: 1rem; }
    .footer-logo em { color: var(--accent); font-style: italic; }
    .footer-about { font-size: 0.88rem; line-height: 1.7; }
    .footer-col h5 { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 1.5px; color: rgba(255,255,255,0.35); margin-bottom: 1rem; }
    .footer-col ul { list-style: none; display: flex; flex-direction: column; gap: 0.55rem; }
    .footer-col a { font-size: 0.85rem; color: rgba(255,255,255,0.5); transition: color 0.15s; }
    .footer-col a:hover { color: #fff; }
    .footer-col a.hl { color: #c9a8ff; }
    .footer-bottom { border-top: 1px solid rgba(255,255,255,0.08); padding-top: 2rem; display: flex; justify-content: space-between; align-items: center; font-size: 0.78rem; flex-wrap: wrap; gap: 0.8rem; }

    @keyframes fadeIn { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }

    @media (max-width: 1024px) {
      .hero { grid-template-columns: 1fr; gap: 2.5rem; }
      .order-card { position: relative; top: 0; max-width: 520px; }
      .why-grid { grid-template-columns: 1fr; gap: 2.5rem; }
      .algo-inner { grid-template-columns: 1fr; gap: 2.5rem; }
      .how-timeline { grid-template-columns: 1fr 1fr; }
      .how-timeline::before { display: none; }
      .footer-top { grid-template-columns: 1fr 1fr; }
    }
    @media (max-width: 768px) {
      .feat-grid { grid-template-columns: 1fr; }
      .reviews-grid { grid-template-columns: 1fr; }
      .faq-grid { grid-template-columns: 1fr; }
      .cta-banner { grid-template-columns: 1fr; }
      .nav-links { display: none; }
    }
    @media (max-width: 480px) {
      .pkg-grid { grid-template-columns: 1fr 1fr; }
      .hero { padding: 40px 5% 0; }
      .hero h1 { font-size: 2.5rem; }
      .why-stats { grid-template-columns: 1fr 1fr; }
    }
  </style>

<!-- ══ BREADCRUMB ══ -->
<nav aria-label="Breadcrumb" class="breadcrumb">
<a href="https://discordbooster.com">Home</a>
<span aria-hidden="true" class="sep">›</span>
<a href="#">Twitch</a>
<span aria-hidden="true" class="sep">›</span>
<span aria-current="page">Buy Twitch Viewers</span>
</nav>
<!-- ══ HERO ══ -->
<div class="page-body">
<section aria-labelledby="hero-h1" class="hero">
<div class="hero-left">
<div class="hero-eyebrow">🟣 #1 Twitch Viewers Service — Real Live Viewers, Stays Full Stream, Affiliate Safe</div>
<h1 id="hero-h1">Buy Twitch <em>Live</em> Viewers<br/>&amp; Rank Higher in<br/>Every Category</h1>
<p class="hero-desc">Real concurrent Twitch viewers delivered to your live stream and maintained for its full duration. Concurrent viewer count is Twitch's #1 ranking signal — more viewers means higher directory placement, more organic discovery, faster Affiliate qualification, and the social proof that turns casual browsers into engaged channel followers.</p>
<div class="hero-proof">
<span aria-hidden="true" class="stars-row">★★★★★</span>
<div class="rating-text"><strong>4.9 / 5</strong> from 2,918 verified reviews</div>
<div aria-hidden="true" class="divider"></div>
<div class="rating-text"><strong>120,000+</strong> orders delivered</div>
</div>
<div aria-label="Key guarantees" class="hero-trust-pills" role="list">
<span class="pill" role="listitem">Stays full stream</span>
<span class="pill" role="listitem">Arrives in 5–10 min</span>
<span class="pill" role="listitem">No password needed</span>
<span class="pill" role="listitem">30-day guarantee</span>
<span class="pill" role="listitem">From $5</span>
</div>
</div>
<!-- ORDER CARD -->
<div aria-label="Order Twitch live viewers" class="order-card" id="order" role="region">
<div class="order-card-title">Boost Your Live Viewer Count</div>
<div class="order-card-sub">Viewers stay for your entire stream session</div>
<div aria-label="Viewers packages" class="pkg-grid" id="pkgGrid" role="radiogroup"></div>
<div class="order-summary">
<div aria-live="polite" class="order-price" id="orderPrice">$5.00</div>
<div aria-live="polite" class="order-saving" id="orderSaving">Satisfies Twitch Affiliate viewer requirement</div>
</div>
<!-- Live viewer preview -->
<div aria-label="Live stream viewer preview" class="live-preview">
<div aria-hidden="true" class="live-dot"></div>
<div class="live-text">
<div style="font-size:0.72rem;font-weight:700;color:var(--accent-dark);text-transform:uppercase;letter-spacing:1px;margin-bottom:0.2rem;">Your stream after delivery</div>
<div aria-live="polite" class="live-count" id="previewViewerCount">👥 10 viewers</div>
</div>
</div>
<label class="order-input-label" for="twitchChannel">Twitch Channel Username</label>
<input aria-required="true" autocomplete="off" class="order-input" id="twitchChannel" placeholder="yourchannelname" type="text"/>
<span class="order-hint">Enter your Twitch channel username. Make sure you are LIVE before viewers arrive. No password or account access required — ever.</span>
<button class="order-btn" id="orderBtn">Get Live Viewers →</button>
<div class="order-meta">
<span>Go live first</span>
<span>SSL checkout</span>
<span>Stays full stream</span>
</div>
</div>
</section>
</div>
<!-- ══ METRICS ══ -->
<div aria-label="Company statistics" class="metrics" role="list">
<div class="metric" role="listitem"><div class="metric-value">120K+</div><div class="metric-label">Happy customers</div></div>
<div class="metric" role="listitem"><div class="metric-value">4.9★</div><div class="metric-label">Average rating</div></div>
<div class="metric" role="listitem"><div class="metric-value">5–10 min</div><div class="metric-label">Delivery start</div></div>
<div class="metric" role="listitem"><div class="metric-value">Full stream</div><div class="metric-label">Viewer duration</div></div>
<div class="metric" role="listitem"><div class="metric-value">7 yrs</div><div class="metric-label">In business</div></div>
</div>
<div class="page-body">
<!-- ══ RELATED SERVICES ══ -->
<div class="section" style="padding-bottom: 0;">
<div aria-label="Twitch services" class="related-bar" role="navigation">
<span class="rel-label">Twitch Services</span>
<div class="rel-links">
<a class="rel-link" href="buy-twitch-followers">Followers</a>
<a class="rel-link active" href="buy-twitch-viewers">Live Viewers</a>
<a class="rel-link" href="#">Clip Views</a>
<a class="rel-link" href="#">Channel Points</a>
</div>
</div>
</div>
<!-- ══ WHY BUY ══ -->
<section aria-labelledby="why-heading" class="section">
<div class="why-grid">
<div>
<div aria-hidden="true" class="section-label">The #1 ranking signal</div>
<h2 class="section-title" id="why-heading">Why Concurrent Viewers Are the Most Powerful Growth Signal on Twitch</h2>
<div class="why-stats">
<div class="why-stat"><div class="val">#1</div><div class="lbl">Concurrent viewer count is Twitch's primary channel ranking signal in every category directory browse page</div></div>
<div class="why-stat"><div class="val">3 avg</div><div class="lbl">Twitch Affiliate requires an average of 3 concurrent viewers over 30 days — our starter pack satisfies this immediately</div></div>
<div class="why-stat"><div class="val">75 avg</div><div class="lbl">Twitch Partner threshold — the professional streamer tier that unlocks 70% subscription revenue share</div></div>
<div class="why-stat"><div class="val">Social Proof</div><div class="lbl">A stream with 100 viewers attracts organic viewers browsing directories far more than a stream with 3 viewers</div></div>
</div>
</div>
<div class="why-body">
<p>On Twitch, concurrent viewer count is everything. It is the primary metric that determines where your stream appears in category browse directories — the place where the vast majority of organic channel discovery happens. A stream ranking in the top 10 of a game category receives orders of magnitude more organic traffic than one buried on page 5. And what determines that ranking? <strong>Concurrent viewers.</strong></p>
<p>Beyond directory ranking, live viewer count acts as social proof for every person who sees your stream thumbnail while browsing. A stream showing "1,240 viewers" looks like a destination worth stopping at; a stream showing "3 viewers" looks like a private stream that happened to be left public. The viewer count on your thumbnail frames every potential viewer's first impression before they've seen a single frame of your content.</p>
<div class="callout">
<strong>Live viewers are fundamentally different from followers in one critical way: they show up in real time.</strong> While followers accumulate as a static number on your profile, live viewers appear as a live, fluctuating count that every directory browser sees in the moment. This immediacy makes viewer count the most impactful single metric for organic discovery — a high live viewer count is essentially a live advertisement that broadcasts "something worth watching is happening here right now" to everyone browsing the category.
        </div>
<p>Buying Twitch live viewers gives your stream the concurrent count needed to rank in category directories, satisfy Affiliate requirements, create the social proof that turns directory browsers into channel followers, and build the visible momentum that makes streaming feel like a viable career rather than a lonely exercise.</p>
</div>
</div>
</section>
<!-- ══ AFFILIATE THRESHOLD DASHBOARD ══ -->
<section aria-labelledby="affiliate-heading" class="section" style="padding-top: 0;">
<div class="affiliate-card">
<div class="affiliate-card-label">Twitch Affiliate viewer requirements</div>
<h2 class="affiliate-card-title" id="affiliate-heading">How Many Viewers You Need for Twitch Affiliate &amp; Partner</h2>
<p class="affiliate-card-body">Twitch has two official monetisation programmes with viewer count requirements. Here's exactly what each demands and how our service satisfies each threshold — so you can focus on the content, not the metrics.</p>
<div class="affiliate-thresholds">
<div class="threshold-item">
<span class="threshold-icon">🟣</span>
<div class="threshold-num">3</div>
<div class="threshold-label">Average concurrent viewers required for Twitch Affiliate (over any 30-day period)</div>
<span class="threshold-status">✓ Our 10-viewer pack satisfies this</span>
</div>
<div class="threshold-item">
<span class="threshold-icon">⏱️</span>
<div class="threshold-num">500</div>
<div class="threshold-label">Total minutes broadcast in 30 days — also required for Affiliate alongside viewer count</div>
<span class="threshold-status">Stream consistently</span>
</div>
<div class="threshold-item">
<span class="threshold-icon">🏆</span>
<div class="threshold-num">75</div>
<div class="threshold-label">Average concurrent viewers required for Twitch Partner application consideration</div>
<span class="threshold-status">Our 100-viewer pack helps</span>
</div>
<div class="threshold-item">
<span class="threshold-icon">📊</span>
<div class="threshold-num">Top 10%</div>
<div class="threshold-label">Category directory placement where organic discovery traffic increases dramatically</div>
<span class="threshold-status">Viewer count is the key</span>
</div>
</div>
</div>
</section>
<!-- ══ DELIVERY TYPES ══ -->
<section aria-labelledby="types-heading" class="section" style="padding-top: 0;">
<div class="section-header centered">
<div aria-hidden="true" class="section-label">Delivery options</div>
<h2 class="section-title" id="types-heading">Types of Twitch Viewer Packages We Offer</h2>
<p class="section-sub">Choose the viewer count and delivery style that best fits your stream, goals, and growth timeline.</p>
</div>
<div class="types-grid">
<div class="type-card">
<div class="type-num">🎯</div>
<div class="type-title">Single Session Viewers</div>
<div class="type-desc">Viewers delivered to one specific stream session and maintained for its full duration. Perfect for important streams — game launches, charity streams, collab events — where you want your peak viewer count to be especially strong.</div>
<span class="type-badge">⭐ Most Popular</span>
</div>
<div class="type-card">
<div class="type-num">🔄</div>
<div class="type-title">Recurring Stream Viewers</div>
<div class="type-desc">Viewers automatically applied to every stream you go live on for a set duration — daily, weekly, or monthly. Maintains a consistent viewer count across your entire streaming schedule without placing individual orders per session.</div>
<span class="type-badge">🤖 Set &amp; Forget</span>
</div>
<div class="type-card">
<div class="type-num">🌱</div>
<div class="type-title">Gradual Join Pattern</div>
<div class="type-desc">Viewers join over 15–30 minutes rather than all at once, replicating the natural audience growth pattern of a stream gaining organic traction. Avoids the unnatural instant spike that can look anomalous in your concurrent viewer graph.</div>
<span class="type-badge">🛡️ Most Natural</span>
</div>
<div class="type-card">
<div class="type-num">💬</div>
<div class="type-title">Viewers with Chat Activity</div>
<div class="type-desc">Viewers accompanied by natural chat messages — generic viewer-style comments that make your chat look active alongside your viewer count. Active chat is a strong social proof signal that distinguishes engaged streams from inflated count streams.</div>
<span class="type-badge">💬 Chat Included</span>
</div>
<div class="type-card">
<div class="type-num">🌍</div>
<div class="type-title">Geo-Targeted Viewers</div>
<div class="type-desc">Viewers from specific countries — US, UK, Canada, Germany, and more. Strengthens your channel's geographic audience profile for sponsors targeting specific regional markets and for Twitch's regional discovery algorithms.</div>
<span class="type-badge">🎯 Location-Targeted</span>
</div>
</div>
</section>
</div>
<!-- ══ ALGORITHM SECTION ══ -->
<section aria-labelledby="algo-heading" class="algo-section">
<div class="algo-inner">
<div>
<div aria-hidden="true" class="section-label">How Twitch ranks live streams</div>
<h2 class="section-title" id="algo-heading">How Concurrent Viewer Count Controls Your Position in Every Twitch Category</h2>
<p>Twitch's category browse algorithm ranks live streams primarily by concurrent viewer count — the live number displayed on every stream thumbnail. Higher viewer counts place streams higher in category directories, capturing the organic browser traffic that flows to the top of every category page. The relationship is direct and immediate: add more concurrent viewers and your stream moves up the directory in real time.</p>
<p>Here are the key signals in Twitch's live stream ranking system and their relative weights in 2026:</p>
<div aria-label="Twitch live stream ranking signals" class="algo-meter">
<div class="algo-meter-row">
<span class="algo-meter-label">Concurrent viewers (live)</span>
<div class="algo-meter-track"><div class="algo-meter-fill" style="width:98%"></div></div>
<span class="algo-meter-val">98%</span>
</div>
<div class="algo-meter-row">
<span class="algo-meter-label">Follower count &amp; growth</span>
<div class="algo-meter-track"><div class="algo-meter-fill" style="width:82%"></div></div>
<span class="algo-meter-val">82%</span>
</div>
<div class="algo-meter-row">
<span class="algo-meter-label">Stream language match</span>
<div class="algo-meter-track"><div class="algo-meter-fill" style="width:71%"></div></div>
<span class="algo-meter-val">71%</span>
</div>
<div class="algo-meter-row">
<span class="algo-meter-label">Chat activity rate</span>
<div class="algo-meter-track"><div class="algo-meter-fill" style="width:62%"></div></div>
<span class="algo-meter-val">62%</span>
</div>
<div class="algo-meter-row">
<span class="algo-meter-label">Stream duration &amp; consistency</span>
<div class="algo-meter-track"><div class="algo-meter-fill" style="width:54%"></div></div>
<span class="algo-meter-val">54%</span>
</div>
</div>
</div>
<div>
<ul aria-label="How live viewers drive Twitch growth" class="algo-signals">
<li>
<span aria-hidden="true" class="algo-signal-icon">🗂️</span>
<div>
<div class="algo-signal-title">Real-time directory ranking</div>
<div class="algo-signal-desc">Twitch's category browse pages re-rank streams continuously based on live viewer counts. Add 50 viewers and your position in the directory improves immediately — capturing a proportionally larger share of the organic browser traffic flowing to the top positions in your game or category.</div>
</div>
</li>
<li>
<span aria-hidden="true" class="algo-signal-icon">👁️</span>
<div>
<div class="algo-signal-title">Thumbnail social proof effect</div>
<div class="algo-signal-desc">Every stream thumbnail in a Twitch directory displays its live viewer count. Viewers browsing categories use this number as a quality proxy before clicking — a stream with 150 viewers gets dramatically more clicks than an identical stream with 4 viewers. Higher viewer counts improve click-through rate from every directory position, compounding the traffic value of each ranking point gained.</div>
</div>
</li>
<li>
<span aria-hidden="true" class="algo-signal-icon">💜</span>
<div>
<div class="algo-signal-title">Affiliate average viewer accumulation</div>
<div class="algo-signal-desc">Twitch Affiliate requires an average of 3 concurrent viewers over any 30-day window — calculated across all streams in that period. Buying viewers for consistent streams raises your rolling average, satisfying this criterion continuously and keeping you safely above the threshold for active Affiliate status.</div>
</div>
</li>
<li>
<span aria-hidden="true" class="algo-signal-icon">👥</span>
<div>
<div class="algo-signal-title">Organic viewer → follower conversion</div>
<div class="algo-signal-desc">Organic viewers who discover your stream through a higher directory placement and see a strong live viewer count are significantly more likely to follow your channel. The social proof of watching alongside many other viewers creates a "this streamer is worth following" impression that converts one-time viewers into long-term channel followers — compounding your investment beyond a single stream.</div>
</div>
</li>
<li>
<span aria-hidden="true" class="algo-signal-icon">💰</span>
<div>
<div class="algo-signal-title">Sponsor concurrent viewer evaluation</div>
<div class="algo-signal-desc">Gaming brand sponsors evaluate average concurrent viewership as the primary reach metric for Twitch channel deals. Consistent viewer counts above key thresholds (50, 100, 500 concurrent) unlock progressively higher-value sponsorship tiers. Unlike follower count — which accumulates slowly — viewer count can be boosted immediately to reach the thresholds that open commercial conversations.</div>
</div>
</li>
</ul>
</div>
</div>
</section>
<div class="page-body">
<!-- ══ FEATURES ══ -->
<section aria-labelledby="features-heading" class="section">
<div class="section-header centered">
<div aria-hidden="true" class="section-label">Why DiscordBooster</div>
<h2 class="section-title" id="features-heading">What Makes Our Twitch Viewers Different</h2>
<p class="section-sub">Every Twitch viewers package from DiscordBooster delivers for your full stream duration, arrives naturally, and never requires your account credentials.</p>
</div>
<div class="feat-grid">
<div class="feat-item">
<span class="feat-icon">⏱️</span>
<div class="feat-title">Viewers Stay for Your Full Stream</div>
<div class="feat-desc">Unlike some services that deliver viewers who drop off after a few minutes, our viewers stay active for your entire stream session. The count you see when viewers arrive is the count that remains until you end your broadcast — providing consistent directory ranking throughout your full session.</div>
</div>
<div class="feat-item">
<span class="feat-icon">🌱</span>
<div class="feat-title">Gradual Natural Join Pattern</div>
<div class="feat-desc">Viewers join over 15–30 minutes rather than all appearing simultaneously. Gradual audience growth is what organic streams look like — sudden instant spikes look artificial in your viewer graph and can attract unwanted scrutiny from Twitch's anomaly detection.</div>
</div>
<div class="feat-item">
<span class="feat-icon">🔒</span>
<div class="feat-title">Zero Password or Account Access</div>
<div class="feat-desc">We only ever need your public Twitch channel username. No Twitch credentials, OAuth tokens, Affiliate dashboard access, or streaming software integration required. Your account is completely secure throughout the entire process.</div>
</div>
<div class="feat-item">
<span class="feat-icon">📊</span>
<div class="feat-title">Counts Toward Affiliate Average</div>
<div class="feat-desc">Our viewers register as genuine concurrent viewers in Twitch's analytics — they contribute to your average concurrent viewer calculation, which is one of the four Affiliate requirements. Consistent use across streams keeps your rolling 30-day average safely above the 3-viewer threshold.</div>
</div>
<div class="feat-item">
<span class="feat-icon">🔄</span>
<div class="feat-title">Recurring Stream Subscriptions</div>
<div class="feat-desc">Need viewers on every stream without placing individual orders? Our recurring viewers packages automatically apply your chosen viewer count each time you go live — maintaining consistent directory ranking across your entire streaming schedule without any manual effort per session.</div>
</div>
<div class="feat-item">
<span class="feat-icon">⚡</span>
<div class="feat-title">Viewers Arrive in 5–10 Minutes</div>
<div class="feat-desc">After placing your order and going live, viewers begin joining within 5–10 minutes. They gradually build to your chosen count over the following 15–30 minutes — joining at the natural pace of an audience discovering and tuning into your stream organically.</div>
</div>
</div>
</section>
<!-- ══ HOW IT WORKS ══ -->
<section aria-labelledby="how-heading" class="section">
<div class="section-header centered">
<div aria-hidden="true" class="section-label">The process</div>
<h2 class="section-title" id="how-heading">How to Buy Twitch Viewers in 4 Simple Steps</h2>
</div>
<div class="how-timeline" role="list">
<div class="how-step active" role="listitem">
<div class="how-num">1</div>
<h3>Choose Your Package</h3>
<p>Select the number of concurrent viewers you need. Our 50-viewer package is most popular — enough to rank visibly in most game categories and satisfy all Affiliate viewer requirements with substantial headroom.</p>
</div>
<div class="how-step" role="listitem">
<div class="how-num">2</div>
<h3>Complete Checkout</h3>
<p>Enter your Twitch channel username and pay securely via PayPal, credit card, or cryptocurrency. All transactions are SSL-encrypted and PCI-compliant. Your account credentials are never requested.</p>
</div>
<div class="how-step" role="listitem">
<div class="how-num">3</div>
<h3>Go Live on Twitch</h3>
<p>Start your stream on Twitch as normal. Viewers will begin joining 5–10 minutes after your stream goes live. Make sure your channel is public and set to a game category for best results.</p>
</div>
<div class="how-step" role="listitem">
<div class="how-num">4</div>
<h3>Viewers Stay All Stream</h3>
<p>Your viewer count builds gradually over 15–30 minutes and remains at your chosen level for the full stream duration. Watch your directory ranking improve in real time as the viewers arrive.</p>
</div>
</div>
</section>
<!-- ══ USE CASES ══ -->
<section aria-labelledby="usecases-heading" class="section" style="padding-top: 0;">
<div class="section-header centered">
<div aria-hidden="true" class="section-label">Who benefits</div>
<h2 class="section-title" id="usecases-heading">Who Buys Twitch Viewers in 2026</h2>
<p class="section-sub">From new Affiliate hopefuls to established streamers — here's who relies on viewer boosts to grow their Twitch channel.</p>
</div>
<div class="usecases-grid">
<div class="usecase-card">
<span class="uc-icon">🎮</span>
<h3>Affiliate Hopefuls</h3>
<p>New streamers who have satisfied all Affiliate criteria except the average concurrent viewer requirement — using viewer purchases to push their 30-day average above 3 and unlock monetisation through subscriptions, bits, and ad revenue.</p>
</div>
<div class="usecase-card">
<span class="uc-icon">🏆</span>
<h3>Partner Programme Aspirants</h3>
<p>Affiliate streamers building toward the 75 average concurrent viewer threshold required for Partner consideration — using consistent viewer purchases to maintain their rolling average above the Partner floor while simultaneously growing their organic audience.</p>
</div>
<div class="usecase-card">
<span class="uc-icon">📺</span>
<h3>Special Event Streams</h3>
<p>Established streamers running charity marathons, launch events, tournament streams, or collaboration broadcasts who want their peak event viewer count to look especially impressive for participants, sponsors, and the archives.</p>
</div>
<div class="usecase-card">
<span class="uc-icon">💰</span>
<h3>Sponsorship Seekers</h3>
<p>Streamers actively seeking gaming brand sponsorships — using viewer purchases to consistently exceed the 50, 100, and 500 concurrent viewer thresholds where meaningful sponsorship conversations become viable with gaming accessory and software brands.</p>
</div>
<div class="usecase-card">
<span class="uc-icon">🎯</span>
<h3>Small Category Streamers</h3>
<p>Streamers in smaller game categories where even 20–30 viewers can place a stream in the top positions of the category directory — using modest viewer packages to dominate niche categories that drive highly engaged, game-specific organic traffic.</p>
</div>
<div class="usecase-card">
<span class="uc-icon">🏢</span>
<h3>Brand &amp; Event Channels</h3>
<p>Companies and events broadcasting product launches, gaming tournaments, or live experiences on Twitch — using viewer packages to ensure their broadcast looks well-attended from the moment it begins, maximising the perceived reach of the live event.</p>
</div>
</div>
</section>
<!-- ══ PRICING TABLE ══ -->
<section aria-labelledby="pricing-heading" class="section" style="padding-top: 0;">
<div class="section-header">
<div aria-hidden="true" class="section-label">Full pricing</div>
<h2 class="section-title" id="pricing-heading">Twitch Live Viewers — Complete Pricing Table</h2>
<p class="section-sub">All packages include viewers for your full stream duration, gradual natural join pattern, and a 30-day guarantee.</p>
</div>
<div style="overflow-x:auto;">
<table aria-label="Twitch live viewers pricing" class="pricing-table">
<thead>
<tr>
<th scope="col">Package</th>
<th scope="col">Price</th>
<th scope="col">Regular Price</th>
<th scope="col">You Save</th>
<th scope="col">Delivery Start</th>
<th scope="col">Best For</th>
<th scope="col">Order</th>
</tr>
</thead>
<tbody id="pricingTableBody"></tbody>
</table>
</div>
</section>
</div>
<!-- ══ REVIEWS ══ -->
<section aria-labelledby="reviews-heading" class="reviews-section">
<div class="page-body">
<div class="section">
<div class="section-header centered">
<div aria-hidden="true" class="section-label">Customer reviews</div>
<h2 class="section-title" id="reviews-heading">What Our Customers Say About Our Twitch Viewers Service</h2>
<p class="section-sub">2,918 verified reviews from streamers and creators who've used DiscordBooster to boost their live viewer counts.</p>
</div>
<div class="reviews-grid">
<div class="review-card">
<div><span aria-label="5 stars" class="review-stars">★★★★★</span> <span class="review-niche">Affiliate Achievement</span></div>
<p class="review-text">I'd been stuck just below the 3 average concurrent viewer requirement for Affiliate for two months. My streams were getting 1–2 real viewers but the average kept falling short. Bought the 10-viewer package for four consecutive streams and my 30-day average jumped to 4.2 concurrent viewers. Twitch sent my Affiliate invite the following week. I now have over 40 subscribers paying monthly and I'm actually earning from streaming. Completely changed my motivation to keep going.</p>
<div class="review-author">
<div aria-hidden="true" class="review-avatar" style="background:#9146ff;">JO</div>
<div>
<div class="review-name">Jamie O.</div>
<div class="review-sub">Indie Game Streamer — Twitch Affiliate</div>
</div>
</div>
</div>
<div class="review-card">
<div><span aria-label="5 stars" class="review-stars">★★★★★</span> <span class="review-niche">Category Ranking</span></div>
<p class="review-text">I stream a smaller game category that usually has 60–80 channels live at any time. Before viewers, I was consistently on page 3–4 of the directory getting almost zero organic discovery. Bought 30 viewers and suddenly I was in the top 10 of the category. My organic viewer count during those streams doubled because people browsing the category were actually seeing me. The organic followers I picked up during those sessions are still watching months later.</p>
<div class="review-author">
<div aria-hidden="true" class="review-avatar" style="background:#6b46c1;">AS</div>
<div>
<div class="review-name">Alex S.</div>
<div class="review-sub">Strategy Game Streamer</div>
</div>
</div>
</div>
<div class="review-card">
<div><span aria-label="5 stars" class="review-stars">★★★★★</span> <span class="review-niche">Sponsorship</span></div>
<p class="review-text">I've been streaming for two years and always struggled to break past 20 average concurrent viewers — not enough to interest sponsors. Bought the 100-viewer package for my weekly sponsored content streams specifically. The consistency of the viewer count over multiple sessions was what sold a keyboard brand on a 3-month sponsorship deal. They specifically cited my consistent concurrent viewership. The viewer package cost a fraction of what that deal pays monthly.</p>
<div class="review-author">
<div aria-hidden="true" class="review-avatar" style="background:#1a7a4a;">PH</div>
<div>
<div class="review-name">Pete H.</div>
<div class="review-sub">FPS Streamer — Twitch Affiliate</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<div class="page-body">
<!-- ══ FAQ ══ -->
<section aria-labelledby="faq-heading" class="section">
<div class="section-header">
<div aria-hidden="true" class="section-label">Common questions</div>
<h2 class="section-title" id="faq-heading">Frequently Asked Questions About Buying Twitch Viewers</h2>
</div>
<div class="faq-grid" role="list">
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">Is it safe to buy Twitch live viewers? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">Yes. DiscordBooster only requires your public Twitch channel username — never your password or account credentials. Viewers are delivered gradually to match organic audience join patterns, avoiding the detection flags associated with sudden viewer spikes. We've served 120,000+ customers since 2019 with zero channel bans from our Twitch viewers service.</div>
</div>
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">How long do the viewers stay on my stream? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">Our viewers stay active for your full stream session — they remain until you end your broadcast. This is the core differentiator between our service and lower-quality providers whose viewers drop off within minutes. A stream that starts at 50 viewers and maintains 50 viewers through a 4-hour session looks genuinely well-watched. A stream that spikes to 50 and drops to 2 within 20 minutes looks artificial.</div>
</div>
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">Do I need to be live before ordering? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">Yes — your stream must be live for viewers to join. Place your order and then go live (or go live and place your order within the first few minutes). Viewers will begin joining 5–10 minutes after your stream goes live. Make sure your Twitch channel is set to a game category and is publicly visible for best delivery results.</div>
</div>
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">Will the viewers count toward my Twitch Affiliate average? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">Yes. Our viewers register as concurrent viewers in Twitch's analytics system, contributing to your average concurrent viewer calculation across the 30-day Affiliate window. Consistent use across multiple streams raises your rolling average. Our 10-viewer package adds enough to satisfy the 3 average concurrent viewer Affiliate requirement if used consistently across multiple sessions.</div>
</div>
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">How many viewers do I need to rank at the top of a category? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">It depends entirely on the game category. Small categories (under 100 concurrent channels) may only need 20–50 viewers to reach the top 10. Mid-size categories need 100–500 viewers for top placement. Large popular games can require thousands. We recommend starting with our 50 or 100 viewer package for most categories and adjusting based on your category's competitive landscape.</div>
</div>
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">Can I get viewers for every stream automatically? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">Yes. Our recurring viewers subscription packages automatically apply your chosen viewer count to every stream you go live on — daily, weekly, or on whatever schedule you set. This maintains consistent viewer counts across your entire streaming calendar without placing individual orders per session. Contact our support team to configure a recurring arrangement.</div>
</div>
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">Do I need to give you my Twitch password? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">Never. We only need your public Twitch channel username. No Twitch account credentials, OAuth access, streaming software integration, or any form of account access is ever requested. If any viewers service asks for your Twitch login, avoid them — it is never required for legitimate viewer delivery.</div>
</div>
<div class="faq-item" role="listitem">
<div aria-expanded="false" class="faq-q" onclick="toggleFaq(this)" role="button" tabindex="0">What payment methods are accepted? <span aria-hidden="true" class="faq-icon">+</span></div>
<div class="faq-a">We accept PayPal, Visa, Mastercard, American Express, and major cryptocurrencies including Bitcoin and Ethereum. All payments are processed through 256-bit SSL-encrypted, PCI-compliant gateways. Card details are never stored on our servers.</div>
</div>
</div>
</section>
<!-- ══ LONG FORM SEO ══ -->
<section aria-labelledby="guide-heading" class="section">
<div class="long-form">
<h2 id="guide-heading">The Complete Guide to Buying Twitch Live Viewers in 2026</h2>
<p>Concurrent viewer count is the most consequential single metric on Twitch. Unlike followers — which accumulate as a static profile number — concurrent viewers are a live, visible, constantly-updated signal that determines your stream's position in category directories, your Affiliate and Partner programme eligibility, your appeal to sponsors, and the first impression every new potential viewer forms when they see your stream thumbnail. <strong>In 2026, buying Twitch live viewers is the most direct lever available to streamers for controlling their channel's visibility and growth trajectory.</strong></p>
<p>This guide explains how Twitch's category ranking algorithm uses live viewer count, what the key viewer thresholds unlock for streamers at each stage, and how to combine purchased viewers with genuine content quality to build a sustainable streaming career.</p>
<h3>How Twitch's Directory Algorithm Ranks Streams by Viewer Count</h3>
<p>When a Twitch viewer opens a game or category page to find something to watch, the streams they see are ranked almost entirely by concurrent viewer count. The stream with the most live viewers appears at the top; the stream with the fewest appears at the bottom. This ranking updates continuously as viewer counts change — meaning a stream that gains 50 viewers moves up the directory in real time, immediately capturing a larger share of the organic browser traffic that flows to top positions.</p>
<p>The practical implication is direct and quantifiable: a stream ranked in the top 10 of a category receives substantially more organic viewer traffic than one ranked on page 3, because the vast majority of category browsers never scroll past the first page of results. Concurrent viewer count is the only variable that controls this ranking — making it the highest-leverage metric for organic discovery on the platform.</p>
<div class="info-box">
<p><strong>The social proof cascade:</strong> The viewer count mechanism on Twitch creates a powerful self-reinforcing dynamic. More viewers improve directory ranking → higher directory ranking means more organic browsers see your stream → more browsers see a stream with a good viewer count → more browsers click into it → more organic viewers join → viewer count increases further. Purchased viewers seed this cascade by providing the initial count that triggers organic discovery. Even a modest purchased viewer base of 25–50 viewers can generate meaningful organic viewer and follower growth if your content quality retains the organic viewers who arrive from improved directory placement.</p>
</div>
<h3>Viewers vs Followers: The Twitch Growth Hierarchy</h3>
<p>Twitch followers and concurrent viewers serve complementary but distinct roles in channel growth. Followers matter most for directory ranking when you're not live — they contribute to the profile authority that influences Twitch's recommendations — and they send live notifications that remind people to tune in. Concurrent viewers matter most while you're live — they directly control your directory position and create the real-time social proof that organic browsers respond to.</p>
<p>The most effective Twitch growth strategy combines both: followers provide the baseline audience that generates early organic viewers at the start of each stream (through live notifications), while purchased concurrent viewers maintain the directory position that drives ongoing organic discovery throughout the stream. Together they create the upward momentum that makes organic channel growth feel achievable rather than Sisyphean.</p>
<ul>
<li>Go live before placing your order, or place your order and go live within a few minutes</li>
<li>Set your stream to a specific game category for best discovery results alongside your viewers</li>
<li>Gradual join patterns over 15–30 minutes look far more natural than instant viewer spikes</li>
<li>Recurring packages are more cost-effective than individual session purchases for daily streamers</li>
<li>Combine viewers with followers for the strongest combined Twitch presence — followers send the notifications that bring viewers back</li>
<li>Never share your Twitch password or account credentials with any viewers service — it is never required</li>
<li>Purchased viewers work best as a catalyst for genuine content quality — they create the discovery opportunity that good content converts into loyal followers</li>
</ul>
</div>
</section>
<!-- ══ CTA ══ -->
<section aria-labelledby="cta-heading" class="section" style="padding-top: 0;">
<div class="cta-banner">
<div>
<h2 id="cta-heading">Ready to Rank Higher and Stream to a Real Audience?</h2>
<p>Join 120,000+ streamers who trust DiscordBooster to grow their Twitch presence. Live viewers arrive within 5–10 minutes of going live.</p>
</div>
<a class="cta-white-btn" href="#order" onclick="document.getElementById('order').scrollIntoView({behavior:'smooth'}); return false;">
        Get Live Viewers →
      </a>
</div>
</section>
</div>
<!-- ══ FOOTER ══ -->

<script>
  const packages = [
    { count: 10,   label: "10",    price: 5.00,   original: 5.00,   discount: 0,  delivery: "5–10 min",  bestFor: "Affiliate avg viewer req",    wooid: "twv10"   },
    { count: 25,   label: "25",    price: 10.00,  original: 13.00,  discount: 23, delivery: "5–10 min",  bestFor: "Small category top-10 rank",  wooid: "twv25"   },
    { count: 50,   label: "50",    price: 18.00,  original: 24.00,  discount: 25, delivery: "5–15 min",  bestFor: "Solid directory visibility",   wooid: "twv50"   },
    { count: 100,  label: "100",   price: 32.00,  original: 46.00,  discount: 30, delivery: "5–15 min",  bestFor: "Partner viewer threshold",     wooid: "twv100"  },
    { count: 200,  label: "200",   price: 58.00,  original: 88.00,  discount: 34, delivery: "10–20 min", bestFor: "Mid-size category dominance",  wooid: "twv200"  },
    { count: 500,  label: "500",   price: 130.00, original: 200.00, discount: 35, delivery: "10–20 min", bestFor: "Sponsorship credibility tier",  wooid: "twv500"  },
    { count: 1000, label: "1,000", price: 240.00, original: 380.00, discount: 37, delivery: "15–25 min", bestFor: "Major category authority",      wooid: "twv1k"   },
    { count: 2000, label: "2,000", price: 440.00, original: 720.00, discount: 39, delivery: "20–35 min", bestFor: "Top-tier stream presence",      wooid: "twv2k"   }
  ];

  const previewCounts = [10, 25, 50, 100, 200, 500, 1000, 2000];

  let selected = 0;

  function renderPkgGrid() {
    const grid = document.getElementById('pkgGrid');
    grid.innerHTML = packages.map((p, i) => `
      <div class="pkg-btn ${i === selected ? 'active' : ''}"
           onclick="selectPkg(${i})"
           role="radio" aria-checked="${i === selected}"
           tabindex="0"
           aria-label="${p.label} Twitch live viewers for $${p.price.toFixed(2)}">
        ${p.discount > 0 ? `<span class="pkg-tag">${p.discount}% OFF</span>` : ''}
        <span class="pkg-count">${p.label}</span>
        <span class="pkg-price">$${p.price.toFixed(2)}</span>
      </div>
    `).join('');
    updateSummary();
  }

  function updateSummary() {
    const p = packages[selected];
    document.getElementById('orderPrice').textContent = `$${p.price.toFixed(2)}`;
    const saving = p.original - p.price;
    document.getElementById('orderSaving').textContent = saving > 0
      ? `You save $${saving.toFixed(2)} (${p.discount}% off)`
      : 'Satisfies Twitch Affiliate viewer requirement';
    // Update live preview
    const fmt = p.count >= 1000 ? (p.count / 1000).toFixed(0) + 'K' : p.count.toString();
    document.getElementById('previewViewerCount').textContent = `👥 ${fmt} viewers`;
  }

  function selectPkg(idx) {
    selected = idx;
    document.querySelectorAll('.pkg-btn').forEach((b, i) => {
      b.classList.toggle('active', i === idx);
      b.setAttribute('aria-checked', i === idx ? 'true' : 'false');
    });
    updateSummary();
  }

  function renderTable() {
    const tbody = document.getElementById('pricingTableBody');
    tbody.innerHTML = packages.map((p, i) => {
      const saving = p.original - p.price;
      const isFeatured = p.count === 50;
      return `
        <tr class="${isFeatured ? 'featured' : ''}">
          <td class="pkg-name">
            ${p.label} Live Viewers
            ${isFeatured ? '<span class="table-badge">POPULAR</span>' : ''}
          </td>
          <td><strong>$${p.price.toFixed(2)}</strong></td>
          <td class="pkg-original">$${p.original.toFixed(2)}</td>
          <td class="pkg-save">${saving > 0 ? `–$${saving.toFixed(2)} (${p.discount}%)` : '—'}</td>
          <td>${p.delivery}</td>
          <td style="font-size:0.85rem;color:var(--muted)">${p.bestFor}</td>
          <td><button class="table-order-btn" onclick="jumpToOrder(${i})" aria-label="Order ${p.label} Twitch live viewers">Order →</button></td>
        </tr>
      `;
    }).join('');
  }

  function jumpToOrder(idx) {
    selected = idx;
    renderPkgGrid();
    document.getElementById('order').scrollIntoView({ behavior: 'smooth' });
  }

  document.getElementById('orderBtn').addEventListener('click', () => {
    const username = document.getElementById('twitchChannel').value.trim().replace(/^(https?:\/\/)?(www\.)?twitch\.tv\//i, '');
    if (!username) {
      document.getElementById('twitchChannel').focus();
      document.getElementById('twitchChannel').style.borderColor = 'var(--accent)';
      return;
    }
    const p = packages[selected];
    const url = `https://order.discordbooster.com/checkout/?add-to-cart=${p.wooid}&username=${encodeURIComponent(username)}&platform=twitch&product=viewers`;
    window.location.href = url;
  });

  document.getElementById('twitchChannel').addEventListener('input', function() {
    this.style.borderColor = 'var(--border)';
  });

  function toggleFaq(el) {
    const item = el.parentElement;
    const isOpen = item.classList.contains('open');
    item.classList.toggle('open');
    el.setAttribute('aria-expanded', !isOpen);
  }

  document.addEventListener('keydown', e => {
    if ((e.key === 'Enter' || e.key === ' ') && e.target.classList.contains('pkg-btn')) {
      e.preventDefault();
      selectPkg([...document.querySelectorAll('.pkg-btn')].indexOf(e.target));
    }
    if ((e.key === 'Enter' || e.key === ' ') && e.target.classList.contains('faq-q')) {
      e.preventDefault();
      toggleFaq(e.target);
    }
  });

  renderPkgGrid();
  renderTable();
</script>

<?php include 'footer.php'; ?>
