← back to Model Arena

data/artifacts/0a0a9e11af9d/qwen3-14b.html

380 lines

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Cinematic Scrollytelling: Journey to the Future</title>
  <style>
    :root {
      --primary: #0066cc;
      --secondary: #f0f0f0;
      --text: #333;
      --accent: #ff6600;
      --bg: #fff;
      --transition-speed: 0.3s;
    }

    * {
      box-sizing: border-box;
    }

    body {
      margin: 0;
      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
      background-color: var(--bg);
      color: var(--text);
      overflow-x: hidden;
      scroll-behavior: smooth;
    }

    header {
      position: fixed;
      top: 0;
      width: 100%;
      background-color: var(--bg);
      z-index: 1000;
      padding: 10px 20px;
      display: flex;
      justify-content: space-between;
      align-items: center;
      box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    }

    header h1 {
      margin: 0;
      font-size: 1.5rem;
      color: var(--primary);
    }

    nav {
      display: flex;
      gap: 15px;
    }

    nav a {
      text-decoration: none;
      color: var(--primary);
      font-weight: bold;
      transition: color var(--transition-speed);
    }

    nav a:hover,
    nav a:focus {
      color: var(--accent);
    }

    main {
      padding-top: 80px;
      padding-bottom: 100px;
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      gap: 60px;
    }

    section {
      padding: 40px 20px;
      max-width: 1000px;
      margin: 0 auto;
      position: relative;
    }

    section::after {
      content: '';
      position: absolute;
      bottom: -20px;
      left: 50%;
      transform: translateX(-50%);
      width: 100px;
      height: 4px;
      background-color: var(--primary);
      opacity: 0.6;
      transition: opacity var(--transition-speed);
    }

    section.active::after {
      opacity: 1;
    }

    h2 {
      margin-top: 0;
      font-size: 2rem;
      color: var(--primary);
      margin-bottom: 10px;
    }

    p {
      font-size: 1rem;
      line-height: 1.6;
    }

    .chapter-nav {
      position: fixed;
      bottom: 20px;
      left: 50%;
      transform: translateX(-50%);
      display: flex;
      gap: 20px;
      background-color: var(--bg);
      padding: 10px 20px;
      border-radius: 10px;
      box-shadow: 0 2px 8px rgba(0,0,0,0.1);
      z-index: 999;
    }

    .chapter-nav button {
      background: none;
      border: 2px solid var(--primary);
      color: var(--primary);
      padding: 8px 12px;
      border-radius: 5px;
      cursor: pointer;
      transition: background var(--transition-speed), color var(--transition-speed);
      font-size: 0.9rem;
    }

    .chapter-nav button:hover,
    .chapter-nav button:focus {
      background-color: var(--primary);
      color: var(--bg);
    }

    .chapter-nav button:active {
      transform: scale(0.98);
    }

    .interactive {
      margin-top: 30px;
      display: flex;
      justify-content: center;
      align-items: center;
      flex-wrap: wrap;
      gap: 20px;
    }

    .interactive button {
      background-color: var(--accent);
      color: var(--bg);
      padding: 12px 24px;
      border: none;
      border-radius: 5px;
      font-size: 1rem;
      cursor: pointer;
      transition: background var(--transition-speed);
    }

    .interactive button:hover {
      background-color: #e65c00;
    }

    .empty-state {
      color: #888;
      font-style: italic;
    }

    .error-state {
      color: red;
      font-weight: bold;
    }

    .completed-state {
      color: green;
      font-weight: bold;
    }

    @media (max-width: 768px) {
      header h1 {
        font-size: 1.2rem;
      }

      nav a {
        font-size: 0.9rem;
      }

      .chapter-nav {
        flex-direction: column;
        gap: 10px;
      }

      .chapter-nav button {
        width: 100%;
      }

      .interactive button {
        font-size: 0.9rem;
        padding: 10px 16px;
      }
    }

    @media (prefers-reduced-motion: no-preference) {
      section::after {
        animation: slideIn 0.5s ease-out forwards;
      }

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

    .focus-ring {
      outline: 2px solid var(--accent);
      outline-offset: 2px;
    }
  </style>
</head>
<body>
  <header>
    <h1>Journey to the Future</h1>
    <nav>
      <a href="#chapter1">Chapter 1</a>
      <a href="#chapter2">Chapter 2</a>
      <a href="#chapter3">Chapter 3</a>
      <a href="#chapter4">Chapter 4</a>
    </nav>
  </header>

  <main>
    <section id="chapter1" class="active">
      <h2>Chapter 1: The Vision</h2>
      <p>Imagine a world where technology and humanity thrive in perfect harmony. This journey explores how we can build that future, step by step.</p>
      <div class="interactive">
        <button id="startJourney" class="focus-ring">Start Your Journey</button>
      </div>
    </section>

    <section id="chapter2">
      <h2>Chapter 2: The Challenge</h2>
      <p>Every great vision begins with understanding the obstacles. From climate change to inequality, we face complex global challenges that require innovation and collaboration.</p>
      <div class="interactive">
        <button id="selectChallenge" class="focus-ring">Select a Challenge</button>
      </div>
    </section>

    <section id="chapter3">
      <h2>Chapter 3: The Solution</h2>
      <p>Technology is not the end goal, but a tool. We're exploring solutions that are sustainable, inclusive, and scalable. Every action matters.</p>
      <div class="interactive">
        <button id="chooseSolution" class="focus-ring">Choose a Solution</button>
      </div>
    </section>

    <section id="chapter4">
      <h2>Chapter 4: The Outcome</h2>
      <p>Together, we can shape the future. This journey has shown you the path, and now it's time to act. Every small step leads to a better world.</p>
      <div class="interactive">
        <button id="completeJourney" class="focus-ring">Complete Your Journey</button>
      </div>
    </section>
  </main>

  <div class="chapter-nav">
    <button id="nav1" class="focus-ring">Chapter 1</button>
    <button id="nav2" class="focus-ring">Chapter 2</button>
    <button id="nav3" class="focus-ring">Chapter 3</button>
    <button id="nav4" class="focus-ring">Chapter 4</button>
  </div>

  <script>
    const sections = document.querySelectorAll('section');
    const navButtons = document.querySelectorAll('.chapter-nav button');
    const chapterLinks = document.querySelectorAll('nav a');
    const startBtn = document.getElementById('startJourney');
    const selectBtn = document.getElementById('selectChallenge');
    const chooseBtn = document.getElementById('chooseSolution');
    const completeBtn = document.getElementById('completeJourney');

    let currentChapter = 1;

    function scrollToChapter(chapter) {
      sections.forEach((section, index) => {
        if (index + 1 === chapter) {
          section.classList.add('active');
          window.scrollTo({
            top: section.offsetTop - 80,
            behavior: 'smooth'
          });
        } else {
          section.classList.remove('active');
        }
      });
    }

    function updateNavButtons() {
      navButtons.forEach((btn, index) => {
        if (index + 1 === currentChapter) {
          btn.classList.add('active');
        } else {
          btn.classList.remove('active');
        }
      });
    }

    function handleButtonPress(btn, chapterNum, text, state) {
      if (btn.textContent === text) {
        if (state === 'empty') {
          btn.textContent = 'No selection made';
          btn.classList.add('empty-state');
        } else if (state === 'error') {
          btn.textContent = 'Invalid selection';
          btn.classList.add('error-state');
        } else if (state === 'completed') {
          btn.textContent = 'Action completed';
          btn.classList.add('completed-state');
        }
        setTimeout(() => {
          btn.textContent = text;
          btn.classList.remove('empty-state', 'error-state', 'completed-state');
        }, 2000);
      }
    }

    function setupNavigation() {
      chapterLinks.forEach(link => {
        link.addEventListener('click', (e) => {
          e.preventDefault();
          const chapter = parseInt(link.getAttribute('href').replace('#', ''));
          currentChapter = chapter;
          scrollToChapter(chapter);
          updateNavButtons();
        });
      });

      navButtons.forEach((btn, index) => {
        btn.addEventListener('click', () => {
          currentChapter = index + 1;
          scrollToChapter(currentChapter);
          updateNavButtons();
        });
      });
    }

    function setupInteractions() {
      startBtn.addEventListener('click', () => {
        handleButtonPress(startBtn, 'Start Your Journey', 'Start Your Journey', 'empty');
      });

      selectBtn.addEventListener('click', () => {
        handleButtonPress(selectBtn, 'Select a Challenge', 'Select a Challenge', 'empty');
      });

      chooseBtn.addEventListener('click', () => {
        handleButtonPress(chooseBtn, 'Choose a Solution', 'Choose a Solution', 'empty');
      });

      completeBtn.addEventListener('click', () => {
        handleButtonPress(completeBtn, 'Complete Your Journey', 'Complete Your Journey', 'completed');
      });
    }

    setupNavigation();
    setupInteractions();
  </script>
</body>
</html>