Minggu, 24 Mei 2026

 <!DOCTYPE html>

<html lang="id">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>🚀 EduQuest — Kolaborasi di Dunia Maya</title>

<link href="https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Nunito:wght@400;600;700;800;900&display=swap" rel="stylesheet">

<style>

  :root {

    --yellow: #FFD93D;

    --orange: #FF6B35;

    --pink: #FF6BA8;

    --purple: #7C3AED;

    --purple-light: #A78BFA;

    --blue: #3B82F6;

    --blue-light: #93C5FD;

    --green: #22C55E;

    --green-light: #86EFAC;

    --red: #EF4444;

    --red-light: #FCA5A5;

    --bg: #FFF9F0;

    --card: #FFFFFF;

    --text: #1E1B4B;

    --text-light: #6B7280;

    --shadow: 0 8px 32px rgba(124,58,237,0.13);

    --radius: 24px;

    --radius-sm: 14px;

  }


  * { box-sizing: border-box; margin: 0; padding: 0; }


  body {

    font-family: 'Nunito', sans-serif;

    background: var(--bg);

    min-height: 100vh;

    overflow-x: hidden;

    position: relative;

  }


  /* ===== BACKGROUND DECO ===== */

  .bg-deco {

    position: fixed; inset: 0; pointer-events: none; z-index: 0; overflow: hidden;

  }

  .bubble {

    position: absolute; border-radius: 50%; opacity: 0.13;

    animation: floatBubble linear infinite;

  }

  @keyframes floatBubble {

    0% { transform: translateY(110vh) scale(0.7); opacity: 0; }

    10% { opacity: 0.13; }

    90% { opacity: 0.13; }

    100% { transform: translateY(-20vh) scale(1.1); opacity: 0; }

  }


  /* ===== SCREENS ===== */

  .screen {

    display: none; min-height: 100vh; position: relative; z-index: 1;

    padding: 24px 16px; max-width: 700px; margin: 0 auto;

    flex-direction: column; align-items: center;

  }

  .screen.active { display: flex; }


  /* ===== HEADER ===== */

  .app-header {

    width: 100%; display: flex; align-items: center; justify-content: space-between;

    margin-bottom: 10px;

  }

  .app-logo {

    font-family: 'Baloo 2', cursive; font-weight: 800; font-size: 26px;

    background: linear-gradient(135deg, var(--purple), var(--pink));

    -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;

    letter-spacing: -0.5px;

  }

  .back-btn {

    background: white; border: 3px solid var(--purple-light); color: var(--purple);

    font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 15px;

    border-radius: 50px; padding: 8px 18px; cursor: pointer;

    transition: all 0.18s; box-shadow: 0 3px 10px rgba(124,58,237,0.13);

  }

  .back-btn:hover { background: var(--purple); color: white; transform: translateY(-2px); }


  /* ===== TOPIC SCREEN ===== */

  .topic-hero { text-align: center; margin: 10px 0 24px; }

  .topic-hero .wave-emoji { font-size: 72px; display: block; animation: bounce 1.5s ease-in-out infinite; }

  @keyframes bounce {

    0%,100% { transform: translateY(0); }

    50% { transform: translateY(-14px); }

  }

  .topic-hero h1 {

    font-family: 'Baloo 2', cursive; font-weight: 800; font-size: 34px;

    color: var(--text); line-height: 1.15; margin: 8px 0 6px;

  }

  .topic-hero p { font-size: 17px; color: var(--text-light); font-weight: 600; }


  .topic-grid { display: grid; grid-template-columns: 1fr; gap: 16px; width: 100%; }

  .topic-card {

    background: var(--card); border-radius: var(--radius); padding: 24px 20px;

    box-shadow: var(--shadow); border: 3px solid transparent;

    cursor: pointer; transition: all 0.22s; position: relative; overflow: hidden;

    display: flex; align-items: center; gap: 18px;

    animation: slideInUp 0.5s ease both;

  }

  .topic-card::before {

    content: ''; position: absolute; inset: 0; opacity: 0; transition: opacity 0.22s;

    background: linear-gradient(135deg, rgba(124,58,237,0.07), rgba(255,107,168,0.07));

  }

  .topic-card:hover { transform: translateY(-5px) scale(1.02); border-color: var(--purple-light); box-shadow: 0 16px 40px rgba(124,58,237,0.18); }

  .topic-card:hover::before { opacity: 1; }

  .topic-card:active { transform: scale(0.98); }

  .topic-icon { font-size: 58px; flex-shrink: 0; line-height: 1; }

  .topic-info h3 { font-family: 'Baloo 2', cursive; font-weight: 800; font-size: 22px; color: var(--text); margin-bottom: 4px; }

  .topic-info p { font-size: 15px; color: var(--text-light); font-weight: 600; line-height: 1.4; }

  .topic-badge {

    position: absolute; top: 14px; right: 14px; background: var(--yellow);

    color: var(--text); font-weight: 800; font-size: 12px; border-radius: 50px;

    padding: 4px 12px; border: 2px solid rgba(0,0,0,0.07);

  }

  @keyframes slideInUp {

    from { opacity: 0; transform: translateY(30px); }

    to { opacity: 1; transform: translateY(0); }

  }


  /* ===== GAME SCREEN ===== */

  .game-topbar {

    width: 100%; background: white; border-radius: var(--radius); padding: 14px 20px;

    box-shadow: var(--shadow); display: flex; align-items: center; gap: 12px;

    margin-bottom: 16px; flex-wrap: wrap;

  }

  .score-pill {

    background: linear-gradient(135deg, var(--yellow), var(--orange));

    color: white; font-weight: 800; font-size: 18px; border-radius: 50px;

    padding: 6px 18px; display: flex; align-items: center; gap: 6px;

    box-shadow: 0 3px 10px rgba(255,107,53,0.3); flex-shrink: 0;

  }

  .progress-wrap { flex: 1; min-width: 120px; }

  .progress-label { font-weight: 800; font-size: 14px; color: var(--text-light); margin-bottom: 5px; }

  .progress-bar-bg {

    background: #EDE9FE; border-radius: 50px; height: 12px; overflow: hidden;

  }

  .progress-bar-fill {

    background: linear-gradient(90deg, var(--purple-light), var(--purple));

    height: 100%; border-radius: 50px; transition: width 0.5s cubic-bezier(.34,1.56,.64,1);

  }


  .learning-goal {

    width: 100%; background: linear-gradient(135deg, #EDE9FE, #FCE7F3);

    border-radius: var(--radius-sm); padding: 13px 18px; margin-bottom: 16px;

    border-left: 5px solid var(--purple);

  }

  .learning-goal .lbl { font-size: 12px; font-weight: 800; color: var(--purple); letter-spacing: 1px; text-transform: uppercase; margin-bottom: 3px; }

  .learning-goal p { font-size: 15px; font-weight: 700; color: var(--text); line-height: 1.4; }


  .question-card {

    width: 100%; background: var(--card); border-radius: var(--radius); padding: 28px 22px 22px;

    box-shadow: var(--shadow); border: 3px solid #EDE9FE; margin-bottom: 16px;

    animation: slideInCard 0.42s cubic-bezier(.34,1.56,.64,1) both;

  }

  @keyframes slideInCard {

    from { opacity: 0; transform: translateY(40px) scale(0.95); }

    to { opacity: 1; transform: translateY(0) scale(1); }

  }

  .q-emoji {

    font-size: 80px; display: block; text-align: center; margin-bottom: 16px;

    animation: qBounce 2s ease-in-out infinite;

  }

  @keyframes qBounce {

    0%,100% { transform: translateY(0) rotate(-3deg); }

    50% { transform: translateY(-10px) rotate(3deg); }

  }

  .q-text {

    font-family: 'Baloo 2', cursive; font-weight: 700; font-size: 22px;

    color: var(--text); text-align: center; line-height: 1.4;

  }


  .answers-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; width: 100%; }

  .ans-btn {

    background: white; border: 3px solid #EDE9FE; border-radius: var(--radius-sm);

    padding: 16px 12px; cursor: pointer; transition: all 0.18s;

    font-family: 'Nunito', sans-serif; font-weight: 700; font-size: 17px;

    color: var(--text); display: flex; flex-direction: column; align-items: center; gap: 8px;

    text-align: center; line-height: 1.3; box-shadow: 0 3px 12px rgba(0,0,0,0.06);

    min-height: 90px; justify-content: center;

  }

  .ans-btn .a-emoji { font-size: 32px; }

  .ans-btn:hover:not(:disabled) {

    border-color: var(--purple-light); background: #FAF5FF;

    transform: translateY(-3px) scale(1.03); box-shadow: 0 8px 20px rgba(124,58,237,0.15);

  }

  .ans-btn:active:not(:disabled) { transform: scale(0.97); }

  .ans-btn:disabled { cursor: not-allowed; }

  .ans-btn.correct {

    background: #DCFCE7; border-color: var(--green); color: #15803D;

    animation: popIn 0.4s cubic-bezier(.34,1.56,.64,1);

  }

  .ans-btn.wrong {

    background: #FEE2E2; border-color: var(--red); color: #B91C1C;

    animation: shake 0.5s ease;

  }

  .ans-btn.reveal {

    background: #DCFCE7; border-color: var(--green); color: #15803D;

    animation: pulseReveal 0.6s ease;

  }

  @keyframes popIn {

    0% { transform: scale(0.9); }

    60% { transform: scale(1.08); }

    100% { transform: scale(1); }

  }

  @keyframes shake {

    0%,100% { transform: translateX(0); }

    20% { transform: translateX(-8px) rotate(-1deg); }

    40% { transform: translateX(8px) rotate(1deg); }

    60% { transform: translateX(-5px); }

    80% { transform: translateX(5px); }

  }

  @keyframes pulseReveal {

    0% { transform: scale(1); }

    50% { transform: scale(1.05); box-shadow: 0 0 20px rgba(34,197,94,0.4); }

    100% { transform: scale(1); }

  }


  .teacher-bar {

    width: 100%; display: flex; align-items: center; gap: 10px;

    background: linear-gradient(135deg, var(--purple), var(--blue));

    border-radius: var(--radius-sm); padding: 10px 16px; margin-bottom: 16px;

    color: white;

  }

  .teacher-avatar { font-size: 32px; }

  .teacher-info .t-name { font-weight: 800; font-size: 16px; }

  .teacher-info .t-title { font-size: 13px; opacity: 0.85; }


  /* ===== OVERLAY ===== */

  .overlay {

    position: fixed; inset: 0; background: rgba(30,27,75,0.55); z-index: 100;

    display: none; align-items: center; justify-content: center; padding: 20px;

    backdrop-filter: blur(3px);

  }

  .overlay.active { display: flex; }

  .feedback-card {

    background: white; border-radius: var(--radius); padding: 36px 28px;

    max-width: 380px; width: 100%; text-align: center;

    box-shadow: 0 30px 80px rgba(0,0,0,0.2);

    animation: popIn 0.45s cubic-bezier(.34,1.56,.64,1);

  }

  .feedback-emoji { font-size: 80px; display: block; margin-bottom: 10px; animation: bounce 1s ease-in-out infinite; }

  .feedback-title {

    font-family: 'Baloo 2', cursive; font-weight: 800; font-size: 30px; margin-bottom: 8px;

  }

  .feedback-title.correct { color: var(--green); }

  .feedback-title.wrong { color: var(--red); }

  .feedback-msg { font-size: 17px; font-weight: 600; color: var(--text-light); margin-bottom: 6px; line-height: 1.4; }

  .correct-ans-info {

    background: #DCFCE7; border-radius: var(--radius-sm); padding: 12px 16px; margin: 12px 0;

    font-weight: 700; font-size: 16px; color: #15803D; display: none;

  }

  .feedback-next {

    background: linear-gradient(135deg, var(--purple), var(--blue));

    color: white; border: none; border-radius: 50px; padding: 14px 36px;

    font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 20px;

    cursor: pointer; margin-top: 16px; box-shadow: 0 6px 20px rgba(124,58,237,0.35);

    transition: all 0.18s; width: 100%;

  }

  .feedback-next:hover { transform: translateY(-3px); box-shadow: 0 10px 28px rgba(124,58,237,0.45); }

  .feedback-next:active { transform: scale(0.97); }


  /* ===== CONFETTI ===== */

  .confetti-container { position: fixed; inset: 0; pointer-events: none; z-index: 200; overflow: hidden; }

  .confetti-piece {

    position: absolute; top: -20px; width: 10px; height: 10px; border-radius: 2px;

    animation: confettiFall linear forwards;

    opacity: 0;

  }

  @keyframes confettiFall {

    0% { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; }

    80% { opacity: 1; }

    100% { transform: translateY(110vh) rotate(720deg) scale(0.5); opacity: 0; }

  }


  /* ===== RESULT SCREEN ===== */

  .result-hero { text-align: center; margin: 10px 0 20px; }

  .result-trophy { font-size: 100px; display: block; animation: bounce 1.5s ease-in-out infinite; }

  .result-title {

    font-family: 'Baloo 2', cursive; font-weight: 800; font-size: 36px;

    background: linear-gradient(135deg, var(--orange), var(--pink));

    -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;

    margin: 8px 0 4px;

  }

  .result-subtitle { font-size: 18px; color: var(--text-light); font-weight: 700; }


  .stars-row { display: flex; gap: 12px; justify-content: center; margin: 18px 0; }

  .star-icon { font-size: 52px; filter: grayscale(1) opacity(0.3); transition: all 0.4s; }

  .star-icon.lit { filter: none; animation: starPop 0.5s cubic-bezier(.34,1.56,.64,1) both; }

  @keyframes starPop {

    0% { transform: scale(0) rotate(-30deg); }

    70% { transform: scale(1.2) rotate(5deg); }

    100% { transform: scale(1) rotate(0); }

  }


  .score-card {

    background: linear-gradient(135deg, var(--purple), var(--blue));

    border-radius: var(--radius); padding: 24px; text-align: center;

    color: white; width: 100%; margin-bottom: 16px;

    box-shadow: 0 10px 30px rgba(124,58,237,0.3);

  }

  .score-big { font-family: 'Baloo 2', cursive; font-weight: 800; font-size: 64px; line-height: 1; }

  .score-label { font-size: 18px; font-weight: 700; opacity: 0.85; margin-top: 4px; }


  .motive-card {

    background: white; border-radius: var(--radius); padding: 20px 22px;

    border: 3px solid var(--yellow); width: 100%; margin-bottom: 20px;

    box-shadow: var(--shadow); text-align: center;

    font-size: 18px; font-weight: 700; color: var(--text); line-height: 1.5;

  }


  .result-btns { display: flex; gap: 12px; width: 100%; flex-wrap: wrap; }

  .btn-primary {

    flex: 1; min-width: 140px; background: linear-gradient(135deg, var(--purple), var(--blue));

    color: white; border: none; border-radius: 50px; padding: 16px 24px;

    font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 18px;

    cursor: pointer; box-shadow: 0 6px 20px rgba(124,58,237,0.3);

    transition: all 0.18s; text-align: center;

  }

  .btn-primary:hover { transform: translateY(-3px); box-shadow: 0 10px 28px rgba(124,58,237,0.4); }

  .btn-primary:active { transform: scale(0.97); }

  .btn-secondary {

    flex: 1; min-width: 140px; background: white;

    color: var(--purple); border: 3px solid var(--purple-light); border-radius: 50px; padding: 14px 24px;

    font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 18px;

    cursor: pointer; box-shadow: var(--shadow); transition: all 0.18s; text-align: center;

  }

  .btn-secondary:hover { background: var(--purple); color: white; transform: translateY(-3px); }


  /* ===== RESPONSIVE ===== */

  @media (max-width: 480px) {

    .topic-hero h1 { font-size: 26px; }

    .q-text { font-size: 19px; }

    .ans-btn { font-size: 15px; min-height: 80px; padding: 12px 8px; }

    .ans-btn .a-emoji { font-size: 26px; }

    .score-big { font-size: 52px; }

    .result-title { font-size: 28px; }

  }

  @media (max-width: 360px) {

    .answers-grid { grid-template-columns: 1fr; }

  }

</style>

</head>

<body>


<!-- Background decorations -->

<div class="bg-deco" id="bgDeco"></div>

<div class="confetti-container" id="confettiContainer"></div>


<!-- ===== SCREEN: TOPIC ===== -->

<div class="screen active" id="screenTopic">

  <div class="app-header">

    <div class="app-logo">🚀 EduQuest</div>

  </div>

  <div class="topic-hero">

    <span class="wave-emoji">🌐</span>

    <h1>Pilih Topik Belajar</h1>

    <p>Ayo uji pengetahuanmu! Pilih topik di bawah ini 👇</p>

  </div>

  <div class="topic-grid">

    <div class="topic-card" onclick="startTopic('kolaborasi')" style="animation-delay:0.1s">

      <span class="topic-icon">🤝</span>

      <div class="topic-info">

        <h3>Kolaborasi di Dunia Maya</h3>

        <p>Pelajari cara kerja sama tim secara online dengan efektif dan aman</p>

      </div>

      <span class="topic-badge">10 Soal</span>

    </div>

    <div class="topic-card" style="opacity:0.55; cursor:not-allowed; pointer-events:none; animation-delay:0.2s">

      <span class="topic-icon">🛡️</span>

      <div class="topic-info">

        <h3>Keamanan Digital</h3>

        <p>Segera hadir — lindungi dirimu di dunia digital</p>

      </div>

      <span class="topic-badge">Segera</span>

    </div>

    <div class="topic-card" style="opacity:0.55; cursor:not-allowed; pointer-events:none; animation-delay:0.3s">

      <span class="topic-icon">📱</span>

      <div class="topic-info">

        <h3>Media Sosial Sehat</h3>

        <p>Segera hadir — bijak bermedia sosial</p>

      </div>

      <span class="topic-badge">Segera</span>

    </div>

    <div class="topic-card" style="opacity:0.55; cursor:not-allowed; pointer-events:none; animation-delay:0.4s">

      <span class="topic-icon">💡</span>

      <div class="topic-info">

        <h3>Kreativitas Digital</h3>

        <p>Segera hadir — ekspresikan kreativitasmu secara digital</p>

      </div>

      <span class="topic-badge">Segera</span>

    </div>

  </div>

</div>


<!-- ===== SCREEN: GAME ===== -->

<div class="screen" id="screenGame">

  <div class="app-header">

    <div class="app-logo">🚀 EduQuest</div>

    <button class="back-btn" onclick="goHome()">🏠 Menu</button>

  </div>


  <div class="teacher-bar">

    <span class="teacher-avatar">👨‍🏫</span>

    <div class="teacher-info">

      <div class="t-name">Pak Purwanto</div>

      <div class="t-title">Guru Informatika & TIK</div>

    </div>

  </div>


  <div class="game-topbar">

    <div class="score-pill">⭐ <span id="scoreDisplay">0</span></div>

    <div class="progress-wrap">

      <div class="progress-label">Soal <span id="qNum">1</span> dari <span id="qTotal">6</span></div>

      <div class="progress-bar-bg">

        <div class="progress-bar-fill" id="progressFill" style="width:0%"></div>

      </div>

    </div>

  </div>


  <div class="learning-goal">

    <div class="lbl">🎯 Tujuan Pembelajaran</div>

    <p id="learningGoalText">Memahami prinsip kolaborasi efektif di dunia maya</p>

  </div>


  <div class="question-card" id="questionCard">

    <span class="q-emoji" id="qEmoji">🤔</span>

    <div class="q-text" id="qText">Memuat soal...</div>

  </div>


  <div class="answers-grid" id="answersGrid"></div>

</div>


<!-- ===== SCREEN: RESULT ===== -->

<div class="screen" id="screenResult">

  <div class="app-header">

    <div class="app-logo">🚀 EduQuest</div>

  </div>

  <div class="result-hero">

    <span class="result-trophy" id="resultTrophy">🏆</span>

    <h1 class="result-title" id="resultTitle">Luar Biasa!</h1>

    <p class="result-subtitle" id="resultSubtitle">Kamu berhasil menyelesaikan kuis!</p>

  </div>

  <div class="stars-row" id="starsRow">

    <span class="star-icon" id="star1">⭐</span>

    <span class="star-icon" id="star2">⭐</span>

    <span class="star-icon" id="star3">⭐</span>

  </div>

  <div class="score-card">

    <div class="score-big" id="finalScore">0</div>

    <div class="score-label">Poin dari <span id="maxScore">600</span></div>

  </div>

  <div class="motive-card" id="motive">Terus semangat belajar! 🌟</div>

  <div class="result-btns">

    <button class="btn-primary" onclick="retryGame()">🔁 Ulangi Kuis</button>

    <button class="btn-secondary" onclick="goHome()">🏠 Menu Utama</button>

  </div>

</div>


<!-- ===== FEEDBACK OVERLAY ===== -->

<div class="overlay" id="feedbackOverlay">

  <div class="feedback-card">

    <span class="feedback-emoji" id="fbEmoji">🎉</span>

    <div class="feedback-title" id="fbTitle">Benar!</div>

    <div class="feedback-msg" id="fbMsg">Hebat sekali!</div>

    <div class="correct-ans-info" id="correctAnsInfo"></div>

    <button class="feedback-next" id="feedbackNextBtn" onclick="nextQuestion()">Lanjut ➡️</button>

  </div>

</div>


<script>

// ===== DATA SOAL =====

const topicData = {

  kolaborasi: {

    title: "Kolaborasi di Dunia Maya",

    goal: "Memahami prinsip, etika, dan alat kolaborasi online yang efektif & bertanggung jawab",

    questions: [

      {

        emoji: "💬",

        text: "Apa yang dimaksud dengan kolaborasi di dunia maya?",

        answers: [

          { emoji: "🤝", text: "Bekerja sama secara online menggunakan teknologi digital", correct: true },

          { emoji: "🎮", text: "Bermain game online bersama teman", correct: false },

          { emoji: "📺", text: "Menonton video streaming bersama-sama", correct: false },

          { emoji: "🛒", text: "Berbelanja online secara bersamaan", correct: false }

        ]

      },

      {

        emoji: "📋",

        text: "Platform mana yang paling tepat untuk mengerjakan dokumen bersama secara real-time?",

        answers: [

          { emoji: "📝", text: "Google Docs", correct: true },

          { emoji: "📧", text: "Email biasa", correct: false },

          { emoji: "🖨️", text: "Mesin fotokopi", correct: false },

          { emoji: "📰", text: "Koran digital", correct: false }

        ]

      },

      {

        emoji: "🗣️",

        text: "Ketika berdiskusi online, sikap yang paling tepat adalah...",

        answers: [

          { emoji: "😤", text: "Memotong pembicaraan orang lain karena ingin cepat selesai", correct: false },

          { emoji: "👂", text: "Mendengarkan pendapat orang lain dan merespons dengan sopan", correct: true },

          { emoji: "😴", text: "Diam saja dan tidak ikut berpartisipasi", correct: false },

          { emoji: "😠", text: "Meledek pendapat teman yang berbeda", correct: false }

        ]

      },

      {

        emoji: "📅",

        text: "Dalam proyek kelompok online, apa yang harus disepakati terlebih dahulu?",

        answers: [

          { emoji: "🎲", text: "Siapa yang paling pintar di kelompok", correct: false },

          { emoji: "🎯", text: "Pembagian tugas, tenggat waktu, dan alat komunikasi", correct: true },

          { emoji: "🏆", text: "Siapa yang akan mendapat nilai terbaik", correct: false },

          { emoji: "🎨", text: "Warna favorit masing-masing anggota", correct: false }

        ]

      },

      {

        emoji: "🔒",

        text: "Mengapa penting menjaga kerahasiaan data proyek kelompok secara online?",

        answers: [

          { emoji: "🤫", text: "Agar tidak dicuri atau disalahgunakan pihak lain", correct: true },

          { emoji: "😎", text: "Supaya terlihat eksklusif di media sosial", correct: false },

          { emoji: "💸", text: "Supaya bisa dijual ke teman lain", correct: false },

          { emoji: "😴", text: "Tidak penting, data boleh dibagikan ke siapa saja", correct: false }

        ]

      },

      {

        emoji: "⏰",

        text: "Apa arti 'netiquette' dalam konteks kolaborasi online?",

        answers: [

          { emoji: "🌐", text: "Nama salah satu aplikasi chatting", correct: false },

          { emoji: "📡", text: "Jenis koneksi internet berkecepatan tinggi", correct: false },

          { emoji: "🤝", text: "Etika dan tata krama dalam berkomunikasi di internet", correct: true },

          { emoji: "🎮", text: "Teknik bermain game online", correct: false }

        ]

      },

      {

        emoji: "📩",

        text: "Saat mengirim pesan di grup kerja online, sebaiknya kamu...",

        answers: [

          { emoji: "✅", text: "Menulis pesan yang jelas, singkat, dan relevan dengan topik", correct: true },

          { emoji: "📢", text: "Mengirim pesan sebanyak-banyaknya agar dilihat", correct: false },

          { emoji: "🤷", text: "Menggunakan huruf kapital semua agar terlihat tegas", correct: false },

          { emoji: "😜", text: "Hanya mengirim emoji tanpa penjelasan", correct: false }

        ]

      },

      {

        emoji: "🤔",

        text: "Apa keuntungan utama kolaborasi online dibanding pertemuan tatap muka?",

        answers: [

          { emoji: "🏖️", text: "Bisa santai di pantai sambil kerja", correct: false },

          { emoji: "🌍", text: "Bisa bekerja sama dengan orang dari mana saja tanpa batasan jarak", correct: true },

          { emoji: "💤", text: "Bisa tidur sambil mengerjakan tugas", correct: false },

          { emoji: "🎉", text: "Selalu lebih menyenangkan dari kerja biasa", correct: false }

        ]

      },

      {

        emoji: "⚠️",

        text: "Apa yang harus dilakukan jika ada anggota kelompok yang tidak aktif dalam proyek online?",

        answers: [

          { emoji: "🗑️", text: "Langsung dikeluarkan dari kelompok tanpa diskusi", correct: false },

          { emoji: "😤", text: "Memposting keluhan di media sosial", correct: false },

          { emoji: "💬", text: "Menghubungi secara pribadi dengan sopan untuk menanyakan kendalanya", correct: true },

          { emoji: "🏃", text: "Mengabaikannya dan mengerjakan semua sendiri", correct: false }

        ]

      },

      {

        emoji: "🌟",

        text: "Apa manfaat memberikan umpan balik (feedback) yang konstruktif dalam tim online?",

        answers: [

          { emoji: "😢", text: "Membuat anggota tim merasa buruk tentang dirinya", correct: false },

          { emoji: "🚀", text: "Membantu tim memperbaiki pekerjaan dan berkembang bersama", correct: true },

          { emoji: "😴", text: "Tidak ada manfaatnya, lebih baik diam saja", correct: false },

          { emoji: "🤐", text: "Hanya cocok untuk guru, bukan untuk sesama siswa", correct: false }

        ]

      }

    ]

  }

};


// ===== STATE =====

let currentTopic = null;

let currentQuestions = [];

let currentQIndex = 0;

let score = 0;

let answered = false;

const QUESTIONS_PER_SESSION = 6;

const POINTS_PER_CORRECT = 100;


// ===== UTILS =====

function shuffle(arr) {

  const a = [...arr];

  for (let i = a.length - 1; i > 0; i--) {

    const j = Math.floor(Math.random() * (i + 1));

    [a[i], a[j]] = [a[j], a[i]];

  }

  return a;

}


function showScreen(id) {

  document.querySelectorAll('.screen').forEach(s => s.classList.remove('active'));

  document.getElementById(id).classList.add('active');

  window.scrollTo(0, 0);

}


// ===== BUBBLES BG =====

function initBubbles() {

  const container = document.getElementById('bgDeco');

  container.innerHTML = '';

  const colors = ['#FFD93D','#FF6B35','#FF6BA8','#7C3AED','#3B82F6','#22C55E'];

  for (let i = 0; i < 14; i++) {

    const b = document.createElement('div');

    b.className = 'bubble';

    const size = 40 + Math.random() * 120;

    b.style.cssText = `

      width:${size}px; height:${size}px;

      background:${colors[Math.floor(Math.random()*colors.length)]};

      left:${Math.random()*100}%;

      animation-duration:${8+Math.random()*14}s;

      animation-delay:${Math.random()*10}s;

    `;

    container.appendChild(b);

  }

}


// ===== CONFETTI =====

function launchConfetti(count = 60) {

  const container = document.getElementById('confettiContainer');

  const colors = ['#FFD93D','#FF6B35','#FF6BA8','#7C3AED','#3B82F6','#22C55E','#F472B6','#34D399'];

  for (let i = 0; i < count; i++) {

    const p = document.createElement('div');

    p.className = 'confetti-piece';

    const size = 8 + Math.random() * 10;

    p.style.cssText = `

      left:${Math.random()*100}%;

      width:${size}px; height:${size}px;

      background:${colors[Math.floor(Math.random()*colors.length)]};

      border-radius:${Math.random()>0.5?'50%':'2px'};

      animation-duration:${1.5+Math.random()*2}s;

      animation-delay:${Math.random()*0.6}s;

    `;

    container.appendChild(p);

    setTimeout(() => p.remove(), 4000);

  }

}


// ===== GAME FLOW =====

function startTopic(topicId) {

  currentTopic = topicId;

  score = 0;

  currentQIndex = 0;

  answered = false;


  const topic = topicData[topicId];

  const shuffled = shuffle(topic.questions);

  currentQuestions = shuffled.slice(0, QUESTIONS_PER_SESSION).map(q => ({

    ...q,

    answers: shuffle(q.answers)

  }));


  document.getElementById('learningGoalText').textContent = topic.goal;

  document.getElementById('qTotal').textContent = QUESTIONS_PER_SESSION;

  document.getElementById('scoreDisplay').textContent = '0';


  showScreen('screenGame');

  renderQuestion();

}


function renderQuestion() {

  answered = false;

  const q = currentQuestions[currentQIndex];

  const total = currentQuestions.length;


  document.getElementById('qNum').textContent = currentQIndex + 1;

  document.getElementById('progressFill').style.width = ((currentQIndex / total) * 100) + '%';

  document.getElementById('qEmoji').textContent = q.emoji;

  document.getElementById('qText').textContent = q.text;


  const grid = document.getElementById('answersGrid');

  grid.innerHTML = '';

  q.answers.forEach((ans, i) => {

    const btn = document.createElement('button');

    btn.className = 'ans-btn';

    btn.innerHTML = `<span class="a-emoji">${ans.emoji}</span><span>${ans.text}</span>`;

    btn.style.animationDelay = (i * 0.07) + 's';

    btn.onclick = () => handleAnswer(ans, btn);

    grid.appendChild(btn);

  });


  // Re-trigger slide animation

  const card = document.getElementById('questionCard');

  card.style.animation = 'none';

  card.offsetHeight;

  card.style.animation = '';

}


function handleAnswer(ans, btn) {

  if (answered) return;

  answered = true;


  const allBtns = document.querySelectorAll('.ans-btn');

  allBtns.forEach(b => b.disabled = true);


  if (ans.correct) {

    btn.classList.add('correct');

    score += POINTS_PER_CORRECT;

    document.getElementById('scoreDisplay').textContent = score;

    launchConfetti(50);

    showFeedback(true, ans);

  } else {

    btn.classList.add('wrong');

    // highlight correct

    const q = currentQuestions[currentQIndex];

    allBtns.forEach((b, i) => {

      if (q.answers[i].correct) b.classList.add('reveal');

    });

    showFeedback(false, ans);

  }

}


const correctMessages = [

  "Keren banget! Kamu benar! 🎉",

  "Wah, jago sekali! Jawaban tepat! 💪",

  "Mantap jiwa! Benar sekali! 🔥",

  "Luar biasa! Kamu memang pintar! ⚡",

  "Yes! Itu jawaban yang tepat! 🚀"

];

const wrongMessages = [

  "Hampir benar! Jangan menyerah ya! 💪",

  "Tenang, masih banyak soal lagi! Semangat! 🌈",

  "Salah sedikit, tapi kamu pasti bisa! 🤗",

  "Yuk belajar lagi, kamu pasti bisa lebih baik! 📚",

  "Jangan sedih! Ini kesempatan belajar! ✨"

];


function showFeedback(isCorrect, ans) {

  const overlay = document.getElementById('feedbackOverlay');

  const fbEmoji = document.getElementById('fbEmoji');

  const fbTitle = document.getElementById('fbTitle');

  const fbMsg = document.getElementById('fbMsg');

  const correctInfo = document.getElementById('correctAnsInfo');


  if (isCorrect) {

    fbEmoji.textContent = ['🎉','🏆','⭐','🥳','🎊'][Math.floor(Math.random()*5)];

    fbTitle.textContent = 'Benar! ✅';

    fbTitle.className = 'feedback-title correct';

    fbMsg.textContent = correctMessages[Math.floor(Math.random()*correctMessages.length)];

    correctInfo.style.display = 'none';

  } else {

    fbEmoji.textContent = ['😅','💡','🤔','📖','🧐'][Math.floor(Math.random()*5)];

    fbTitle.textContent = 'Hampir Benar! ❌';

    fbTitle.className = 'feedback-title wrong';

    fbMsg.textContent = wrongMessages[Math.floor(Math.random()*wrongMessages.length)];

    const q = currentQuestions[currentQIndex];

    const correctAns = q.answers.find(a => a.correct);

    correctInfo.style.display = 'block';

    correctInfo.textContent = `✅ Jawaban benar: ${correctAns.emoji} ${correctAns.text}`;

  }


  overlay.classList.add('active');

}


function nextQuestion() {

  document.getElementById('feedbackOverlay').classList.remove('active');

  currentQIndex++;


  if (currentQIndex >= currentQuestions.length) {

    showResult();

  } else {

    renderQuestion();

  }

}


function showResult() {

  const total = currentQuestions.length;

  const maxScore = total * POINTS_PER_CORRECT;

  const pct = score / maxScore;


  let trophy, title, subtitle, motive, stars;

  if (pct >= 0.9) {

    trophy = '🏆'; title = 'Luar Biasa!'; subtitle = 'Kamu adalah bintang kelas!';

    motive = '⭐ Nilai sempurna! Kamu benar-benar menguasai materi ini. Terus pertahankan dan bantu teman-temanmu!';

    stars = 3;

  } else if (pct >= 0.6) {

    trophy = '🥈'; title = 'Bagus Sekali!'; subtitle = 'Pengetahuanmu sudah baik!';

    motive = '💪 Kerja keras! Kamu hampir sempurna. Pelajari lagi bagian yang belum dikuasai dan kamu pasti bisa lebih baik!';

    stars = 2;

  } else {

    trophy = '📚'; title = 'Terus Belajar!'; subtitle = 'Masih ada yang perlu dipelajari!';

    motive = '🌈 Jangan menyerah! Setiap orang belajar dengan kecepatan berbeda. Coba lagi dan kamu pasti bisa lebih baik!';

    stars = 1;

  }


  document.getElementById('resultTrophy').textContent = trophy;

  document.getElementById('resultTitle').textContent = title;

  document.getElementById('resultSubtitle').textContent = subtitle;

  document.getElementById('finalScore').textContent = score;

  document.getElementById('maxScore').textContent = maxScore;

  document.getElementById('motive').textContent = motive;


  // Stars animation

  ['star1','star2','star3'].forEach((id, i) => {

    const el = document.getElementById(id);

    el.classList.remove('lit');

    if (i < stars) {

      setTimeout(() => el.classList.add('lit'), 400 + i * 250);

    }

  });


  if (stars >= 2) launchConfetti(80);


  showScreen('screenResult');

}


function retryGame() {

  if (currentTopic) startTopic(currentTopic);

}


function goHome() {

  document.getElementById('feedbackOverlay').classList.remove('active');

  showScreen('screenTopic');

}


// ===== INIT =====

initBubbles();

</script>

</body>

</html>


Minggu, 26 April 2026

ASTS TAHUN 2025-2026

ASTS 

Program pengolah Kata (microsof word)

 

Materi 2

Program pengolah kata (Microsoft.Word)

 A. Mengenal tampilan awal microsoft word

          1.        Cara membuka Microsoft Word

a.      Melalui Desktop :  Klik dua kali ikon Word

b.      Melalui Start Menu: Klik Start > All Apps/Programs > Cari folder Microsoft Office atau ikon Word.

          2.         Mengenal tampilan Microsoft Word

 

 

 

NO

Nama

Fungsi

1

Title Bar

Terletak di tengah atas, menampilkan nama dokumen yang sedang aktif

2

Quick Access Toolbar

Kumpulan tombol cepat di sudut kiri atas untuk fungsi sering digunakan seperti Save, Undo, dan Redo.

3

Ribbon / tab Menu

Baris menu di atas (Home, Insert, Layout, dll.) yang berisi grup perintah (font, paragraph, styles) untuk memformat dokumen

5

Workspace

Area putih utama tempat menulis dan mengedit tek

6

Ruler

Penggaris di bagian atas dan kiri untuk mengatur margin dan tabulasi.

7

Scroll bar

Bilah di sisi kanan untuk menggeser dokumen ke atas atau bawah

8

Status bar

Baris di bagian bawah yang menampilkan informasi jumlah halaman, jumlah kata, dan pengecekan tata bahasa

 

          3.        Mengenal menu dan fungsi Menu dan ikon pada Microsoft Word

 • Tab Home:

o Font (jenis huruf, ukuran, warna)

Nama

Perintah dengan keybord

fungsi

font

Ctrl  + shift + F

Menentukan jenis huruf

Font size

Ctrl + shift + P

Menentukan ukuran huruf

Font color

 

Memberikan warna pada huruf

 

o Paragraph (rata kiri, tengah, kanan, spasi)

 

 

 

 

 

 

 

 

 

 

 

Nama

Perintah dengan keybord

fungsi

Align left

Ctrl + F

Teks rata kiri

center

Ctrl + E

Teks rata tengah

Align right

Ctrl + R

Tkes rata kanan

spacing

 

Mengatur jarak spasi

 

o Bold, Italic, Underline

 

nama

Perintah dengan keybord

fungsi

bold

Ctrl + B

Teks menjadi tebal

italic

Ctrl + I

Teks menjadi miring

Underline

Ctrl + U

Teks di sertai garis bawah

 

• Tab Insert:

 

nama

fungsi

pictures

Menyisipkan gambar

table

Menyisipkan tabel

shapes

Menyisipkan simbol

• Tab Layout:

 

·       Margins: Mengatur batas teks atas ( Top ) , bawah (Botton ), kiri (left ), dan kanan (right) kertas.

·       Orientation: Mengubah posisi kertas menjadi Portrait (tegak) atau Landscape (datar).

 

• Tab File:

 o Membuat dokumen baru

Membuat dokumen baru di Microsoft Word dapat dilakukan dengan cepat melalui menu File > New > Blank Document ( Ctrl+N.)

o Menyimpan dokumen

Menyimpan dokumen baru di Microsoft Word/Office dilakukan dengan klik menu File > Simpan Sebagai (Save As), pilih lokasi penyimpanan (folder), beri nama file, dan klik Simpan (Save)

o Membuka dokumen

Dokumen dapat dibuka dengan beberapa cara: klik ganda file di File Explorer, gunakan opsi "Open" di aplikasi (Word, Excel), atau gunakan pintasan Ctrl+O.

 

 

B.. Membuat berbagai produk menggunakan Microsoft.Word

 Pembuatan dokumen sederhana Pembuatan undangan sederhana

1.      Pengertian undangan

Undangan adalah surat atau pesan (cetak/digital) yang berisi ajakan atau permintaan kepada pihak lain untuk menghadiri suatu acara, pertemuan, atau kegiatan pada waktu dan tempat yang telah ditentukan.

2.      Tujuan membuat undangan

Tujuan utama undangan adalah memohon kehadiran seseorang atau pihak tertentu dalam suatu acara, pertemuan, atau kegiatan pada waktu dan tempat yang telah ditentukan.

3.      Jenis undangan

a.      Undangan Resmi: Dikeluarkan oleh instansi/organisasi, menggunakan bahasa baku, serta memiliki kop surat, nomor surat, dan stempel.

Contoh: Undangan rapat perusahaan, undangan dinas, undangan seminar.

b.      Undangan Setengah Resmi: Undangan yang ditujukan untuk acara profesional/komunitas namun bahasanya tidak se-formal undangan resmi.

Contoh: Undangan rapat RT, rapat RW, rapat kepanitiaan.

c.       Undangan Tidak Resmi (Pribadi): Undangan yang dibuat individu untuk acara personal, bahasa lebih santai dan kekeluargaan.

Contoh: Undangan pernikahan, ulang tahun, aqiqah, syukuran

4.      Bagian- bagian undangan

Berikut adalah rincian bagian-bagian surat undangan resmi:

a.      Kepala Surat (Kop Surat): Memuat nama instansi, alamat lengkap, logo, nomor telepon, dan email.

b.      Tanggal Surat: Waktu pembuatan surat, biasanya diletakkan di kanan atas.

c.       Nomor Surat: Nomor urut pengeluaran surat untuk kearsipan.

d.      Lampiran: Keterangan berkas tambahan, jika ada.

e.      Perihal/Hal: Garis besar tujuan surat (contoh: Undangan Rapat).

f.        Alamat Tujuan: Identitas penerima surat.

g.       Salam Pembuka: Sapaan formal, seperti "Dengan hormat,".

h.      Isi Surat: Berisi hari, tanggal, waktu, tempat, dan agenda acara.

i.        Salam Penutup: Penutup surat seperti "Hormat kami,".

j.        Nama dan Tanda Tangan: Tanda tangan pengirim, nama jelas, dan jabatan.

k.       Stempel: Cap resmi lembaga untuk keabsahan.

l.        Tembusan: Pihak lain yang mendapatkan salinan surat (jika perlu).

m.     

5. Membuat undangan (mengetik teks undangan, mengatur font, mengatur tata letak undangan, menyisipkan hiasan, menyimpan dokumen, mencetak undangan)

 <!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <meta name="viewport...