<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Training vs. Inference — AI Super Simplified</title>
<style>
  * { box-sizing: border-box; margin: 0; padding: 0; }
  body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    background: #0c0e16;
    color: #e8eaf0;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 24px 16px;
  }
  h1 {
    font-size: clamp(1.2rem, 3vw, 1.6rem);
    font-weight: 700;
    text-align: center;
    margin-bottom: 8px;
    color: #ffffff;
  }
  .subtitle {
    font-size: 0.9rem;
    color: #8a9bb0;
    text-align: center;
    margin-bottom: 32px;
    max-width: 520px;
  }
  .cards {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    width: 100%;
    max-width: 680px;
    margin-bottom: 28px;
  }
  @media (max-width: 520px) {
    .cards { grid-template-columns: 1fr; }
  }
  .card {
    background: #131723;
    border: 1px solid #232940;
    border-radius: 12px;
    padding: 24px 20px;
    cursor: pointer;
    transition: border-color 0.2s, transform 0.15s;
    position: relative;
    overflow: hidden;
  }
  .card:hover { border-color: #3a5080; transform: translateY(-2px); }
  .card.active.training { border-color: #f59e0b; background: #1a1608; }
  .card.active.inference { border-color: #3b82f6; background: #081325; }
  .card-icon { font-size: 2rem; margin-bottom: 12px; }
  .card-title {
    font-size: 1rem;
    font-weight: 700;
    margin-bottom: 8px;
  }
  .training .card-title { color: #f59e0b; }
  .inference .card-title { color: #60a5fa; }
  .card-desc {
    font-size: 0.82rem;
    color: #8a9bb0;
    line-height: 1.5;
  }
  .card-badge {
    display: inline-block;
    margin-top: 10px;
    padding: 3px 10px;
    border-radius: 20px;
    font-size: 0.72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
  }
  .training .card-badge { background: #f59e0b20; color: #f59e0b; }
  .inference .card-badge { background: #3b82f620; color: #60a5fa; }

  .detail-box {
    width: 100%;
    max-width: 680px;
    background: #131723;
    border: 1px solid #232940;
    border-radius: 12px;
    padding: 24px;
    min-height: 180px;
    transition: opacity 0.25s;
  }
  .detail-box h2 {
    font-size: 1rem;
    font-weight: 700;
    margin-bottom: 16px;
    padding-bottom: 10px;
    border-bottom: 1px solid #232940;
  }
  .detail-box.training h2 { color: #f59e0b; }
  .detail-box.inference h2 { color: #60a5fa; }
  .detail-box.neutral h2 { color: #8a9bb0; }

  .stat-row {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 8px;
    margin-bottom: 10px;
    font-size: 0.84rem;
  }
  .stat-label { color: #8a9bb0; flex: 0 0 auto; }
  .stat-value { color: #e8eaf0; text-align: right; flex: 1; }
  .stat-value.highlight-t { color: #f59e0b; font-weight: 600; }
  .stat-value.highlight-i { color: #60a5fa; font-weight: 600; }

  .jalapeno-pill {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #0a2010;
    border: 1px solid #1a6030;
    border-radius: 8px;
    padding: 10px 14px;
    margin-top: 14px;
    font-size: 0.82rem;
    color: #6ee7b7;
  }
  .jalapeno-pill .emoji { font-size: 1.1rem; }

  .hint {
    font-size: 0.78rem;
    color: #4a5568;
    text-align: center;
    margin-top: 18px;
  }
</style>
</head>
<body>
  <h1>Training vs. Inference</h1>
  <p class="subtitle">Tap a card to see what each phase means — and where Jalapeño fits in.</p>

  <div class="cards">
    <div class="card training" id="card-training" onclick="show('training')">
      <div class="card-icon">🏋️</div>
      <div class="card-title">Training</div>
      <p class="card-desc">Building the model from scratch. Happens once (or rarely). Consumes enormous GPU compute over weeks or months.</p>
      <span class="card-badge">Build phase</span>
    </div>
    <div class="card inference" id="card-inference" onclick="show('inference')">
      <div class="card-icon">⚡</div>
      <div class="card-title">Inference</div>
      <p class="card-desc">Running the finished model on your questions. Happens billions of times per day. This is what Jalapeño handles.</p>
      <span class="card-badge">Run phase</span>
    </div>
  </div>

  <div class="detail-box neutral" id="detail-box">
    <h2>Select a phase above to explore it</h2>
    <p style="color:#8a9bb0;font-size:0.84rem;line-height:1.6;">
      AI models have two completely separate compute phases: training (building the brain) and inference (using it). OpenAI's Jalapeño chip is purpose-built for inference — the part that talks to you. Pre-training still runs on Nvidia GPUs.
    </p>
  </div>

  <p class="hint">Tap either card to see details</p>

  <script>
    const data = {
      training: {
        title: '🏋️ Training — Building the Brain',
        cls: 'training',
        rows: [
          ['What it does', 'Adjusts billions of parameters using massive datasets'],
          ['Hardware', 'Tens of thousands of Nvidia H100/H200 GPUs — OpenAI still uses these'],
          ['Frequency', 'Once per major model version (GPT-4, GPT-5…)'],
          ['Duration', 'Weeks to months of continuous compute'],
          ['Cost', 'Hundreds of millions of dollars per run', 'highlight-t'],
          ['Output', 'Frozen model weights — the "brain"'],
          ['Jalapeño role', 'None — Jalapeño is not used for training', 'highlight-t'],
        ],
        pill: null
      },
      inference: {
        title: '⚡ Inference — Running the Brain',
        cls: 'inference',
        rows: [
          ['What it does', 'Generates a response for your prompt, in real time'],
          ['Hardware', 'Custom ASICs like Jalapeño (or Nvidia GPUs as fallback)'],
          ['Frequency', 'Billions of times per day across all users'],
          ['Latency target', 'Under 1 second per response token'],
          ['Cost driver', 'Main ongoing compute expense — every answer costs money', 'highlight-i'],
          ['Scale', '~gigawatt-scale power draw at OpenAI's 2026 deployment target'],
          ['Jalapeño role', 'Designed specifically for this phase', 'highlight-i'],
        ],
        pill: '🌶️ Jalapeño is an inference chip — it runs your queries, not the training.'
      }
    };

    function show(phase) {
      const d = data[phase];
      document.getElementById('card-training').classList.remove('active');
      document.getElementById('card-inference').classList.remove('active');
      document.getElementById('card-' + phase).classList.add('active');

      const box = document.getElementById('detail-box');
      box.className = 'detail-box ' + d.cls;
      box.style.opacity = '0';

      let html = '<h2>' + d.title + '</h2>';
      d.rows.forEach(([label, value, cls]) => {
        html += '<div class="stat-row"><span class="stat-label">' + label + '</span><span class="stat-value ' + (cls || '') + '">' + value + '</span></div>';
      });
      if (d.pill) {
        html += '<div class="jalapeno-pill"><span class="emoji">🌶️</span><span>' + d.pill.replace('🌶️ ', '') + '</span></div>';
      }
      box.innerHTML = html;

      requestAnimationFrame(() => {
        box.style.transition = 'opacity 0.25s';
        box.style.opacity = '1';
      });
    }
  </script>
</body>
</html>