Pilih Berdasarkan Kelas:
Pilih Berdasarkan Mata Pelajaran:
๐ Pilih Materi Pelajaran Belajar
Kelas 7
IPA
Besaran Pokok dan Besaran Turunan 2
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Slide Pembelajaran IPA - Konversi & Pengukuran Alat Ukur</title>
<!-- MathJax Library untuk Rendering Simbol Matematika/Fisika -->
<script>
MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
displayMath: [['$$', '$$'], ['\\[', '\\]']]
}
};
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<style>
:root {
--bg-gradient: linear-gradient(135deg, #0f172a 0%, #311b92 50%, #1e1b4b 100%);
--card-bg: rgba(255, 255, 255, 0.1);
--card-border: rgba(255, 255, 255, 0.25);
--primary: #38bdf8;
--accent: #f43f5e;
--yellow: #fbbf24;
--success: #10b981;
--text: #ffffff;
--text-muted: #cbd5e1;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: 'Comic Sans MS', 'Chalkboard SE', 'Segoe UI', sans-serif;
user-select: none;
}
body {
background: var(--bg-gradient);
color: var(--text);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
overflow: hidden;
}
.deck-container {
width: 92vw;
height: 82vh;
background: rgba(15, 23, 42, 0.85);
backdrop-filter: blur(20px);
border: 3px solid rgba(255, 255, 255, 0.2);
border-radius: 28px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6), inset 0 0 20px rgba(56, 189, 248, 0.2);
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
}
.slide {
display: none;
padding: 35px;
height: 100%;
flex-direction: column;
justify-content: flex-start;
overflow-y: auto;
animation: bounceIn 0.5s ease;
}
.slide.active {
display: flex;
}
@keyframes bounceIn {
0% { opacity: 0; transform: scale(0.95); }
60% { transform: scale(1.02); }
100% { opacity: 1; transform: scale(1); }
}
@keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-10px); } }
@keyframes pulse-glow { 0%, 100% { filter: drop-shadow(0 0 10px #38bdf8); } 50% { filter: drop-shadow(0 0 25px #f43f5e); } }
.float-anim { animation: float 3s ease-in-out infinite; }
.glow-anim { animation: pulse-glow 2s infinite; }
.slide-tag {
display: inline-block;
padding: 6px 16px;
background: linear-gradient(90deg, #f43f5e, #fbbf24);
color: #fff;
border-radius: 20px;
font-size: 0.9rem;
font-weight: bold;
letter-spacing: 1px;
text-transform: uppercase;
margin-bottom: 10px;
width: fit-content;
box-shadow: 0 4px 12px rgba(244, 63, 94, 0.4);
}
h1 {
font-size: 2.8rem;
background: linear-gradient(to right, #38bdf8, #f43f5e, #fbbf24);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 10px;
text-shadow: 0 4px 10px rgba(0,0,0,0.3);
}
h2 {
font-size: 2rem;
color: var(--yellow);
margin-bottom: 15px;
text-shadow: 0 2px 8px rgba(0,0,0,0.4);
}
p, li {
font-size: 1.15rem;
line-height: 1.6;
color: #f1f5f9;
}
.grid-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-top: 15px;
}
.grid-3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
margin-top: 15px;
}
.glass-card {
background: var(--card-bg);
border: 2px solid var(--card-border);
border-radius: 20px;
padding: 22px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
backdrop-filter: blur(8px);
}
.svg-box {
background: rgba(0, 0, 0, 0.35);
border-radius: 16px;
padding: 15px;
display: flex;
justify-content: center;
align-items: center;
margin: 15px 0;
border: 1px dashed var(--primary);
}
.interactive-btn {
background: linear-gradient(135deg, #f43f5e, #fbbf24);
color: white;
border: none;
padding: 12px 20px;
border-radius: 14px;
font-size: 1.05rem;
font-weight: bold;
cursor: pointer;
transition: all 0.2s ease;
margin: 6px;
box-shadow: 0 6px 18px rgba(244, 63, 94, 0.4);
}
.interactive-btn:hover {
transform: scale(1.05) translateY(-2px);
box-shadow: 0 10px 25px rgba(251, 191, 36, 0.6);
}
.opt-btn {
width: 100%;
text-align: left;
background: rgba(255,255,255,0.08);
border: 2px solid var(--card-border);
color: white;
padding: 12px 18px;
border-radius: 12px;
margin-top: 10px;
font-size: 1.05rem;
cursor: pointer;
transition: 0.2s;
font-weight: 600;
}
.opt-btn:hover {
background: rgba(56, 189, 248, 0.3);
border-color: var(--primary);
transform: translateX(6px);
}
.multi-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 15px;
}
.user-zone {
background: rgba(0,0,0,0.4);
border: 2px dashed var(--yellow);
border-radius: 16px;
padding: 15px;
}
.controls {
margin-top: 15px;
display: flex;
gap: 20px;
align-items: center;
}
.nav-control-btn {
background: linear-gradient(135deg, #38bdf8, #3b82f6);
color: white;
border: none;
padding: 12px 32px;
border-radius: 50px;
font-size: 1.1rem;
font-weight: bold;
cursor: pointer;
transition: 0.2s;
box-shadow: 0 6px 20px rgba(56, 189, 248, 0.4);
}
.nav-control-btn:hover:not(:disabled) {
transform: scale(1.05);
box-shadow: 0 8px 25px rgba(56, 189, 248, 0.7);
}
.nav-control-btn:disabled {
opacity: 0.3;
cursor: not-allowed;
box-shadow: none;
}
.slide-counter {
font-size: 1.15rem;
font-weight: bold;
color: var(--yellow);
text-shadow: 0 2px 4px rgba(0,0,0,0.5);
}
input, select {
width: 100%;
padding: 12px;
background: rgba(0,0,0,0.5);
border: 2px solid var(--primary);
border-radius: 12px;
color: white;
font-size: 1.05rem;
margin-top: 6px;
}
.tool-card {
background: rgba(0, 0, 0, 0.3);
border-radius: 16px;
padding: 15px;
text-align: center;
border: 1px solid var(--card-border);
}
</style>
</head>
<body>
<div class="deck-container">
<!-- SLIDE 1: JUDUL MODUL -->
<div class="slide active" style="text-align: center;">
<span class="slide-tag" style="margin: 0 auto 15px auto;">๐ Petualangan Sains IPA - Bagian 2</span>
<h1 class="glow-anim">KONVERSI SATUAN & ALAT UKUR</h1>
<p style="font-size: 1.3rem; color: var(--yellow); font-weight: bold;">Menguasai Konversi Satuan dan Penggunaan Alat Ukur Presisi! ๐โ๏ธโฑ๏ธ</p>
<div class="svg-box float-anim" style="border: none; background: transparent; margin: 25px 0;">
<svg width="240" height="120" viewBox="0 0 240 120">
<rect x="20" y="40" width="200" height="40" rx="8" fill="#38bdf8" opacity="0.3" stroke="#38bdf8" stroke-width="2"/>
<line x1="40" y1="40" x2="40" y2="60" stroke="#fff" stroke-width="2"/>
<line x1="60" y1="40" x2="60" y2="52" stroke="#fff" stroke-width="1.5"/>
<line x1="80" y1="40" x2="80" y2="52" stroke="#fff" stroke-width="1.5"/>
<line x1="100" y1="40" x2="100" y2="60" stroke="#fff" stroke-width="2"/>
<line x1="120" y1="40" x2="120" y2="52" stroke="#fff" stroke-width="1.5"/>
<line x1="140" y1="40" x2="140" y2="52" stroke="#fff" stroke-width="1.5"/>
<line x1="160" y1="40" x2="160" y2="60" stroke="#fff" stroke-width="2"/>
<line x1="180" y1="40" x2="180" y2="52" stroke="#fff" stroke-width="1.5"/>
<line x1="200" y1="40" x2="200" y2="60" stroke="#fff" stroke-width="2"/>
<text x="36" y="75" fill="#fbbf24" font-size="12" font-weight="bold">0</text>
<text x="96" y="75" fill="#fbbf24" font-size="12" font-weight="bold">1</text>
<text x="156" y="75" fill="#fbbf24" font-size="12" font-weight="bold">2</text>
<text x="196" y="75" fill="#fbbf24" font-size="12" font-weight="bold">cm</text>
</svg>
</div>
<p style="color: var(--primary); font-size: 1.1rem;">Tekan tombol <b>'Selanjutnya โ'</b> untuk memulai!</p>
</div>
<!-- SLIDE 2: CAPAIAN & TUJUAN PEMBELAJARAN MODUL 2 -->
<div class="slide">
<span class="slide-tag">๐ฏ Target Pembelajaran</span>
<h2>Tujuan Pembelajaran Hari Ini</h2>
<div class="glass-card">
<ul style="list-style-type: 'โก '; padding-left: 20px;">
<li style="margin-bottom: 12px;"><b>TP 3:</b> Mengonversikan satuan **panjang**, **massa**, dan **waktu** dengan tepat.</li>
<li style="margin-bottom: 12px;"><b>TP 4:</b> Mengukur besaran dengan **satuan baku** dan **tak baku** secara baik dan benar.</li>
<li style="margin-bottom: 12px;"><b>TP 5:</b> Mengukur besaran menggunakan **alat ukur yang sesuai** secara baik dan benar.</li>
</ul>
</div>
</div>
<!-- SLIDE 3: MATERI TP 3 - KONVERSI PANJANG, MASSA, WAKTU -->
<div class="slide">
<span class="slide-tag">๐ Materi TP 3</span>
<h2>Konversi Satuan (Panjang, Massa, Waktu)</h2>
<div class="grid-3">
<div class="glass-card" style="padding: 15px;">
<h3 style="color: var(--primary); text-align: center;">๐ Panjang</h3>
<p style="font-size: 0.95rem; margin-top: 8px;">Tangga Satuan: $\text{km}, \text{hm}, \text{dam}, \text{m}, \text{dm}, \text{cm}, \text{mm}$.</p>
<p style="font-size: 0.95rem; color: var(--yellow); margin-top: 5px;">โข Turun 1 tangga: $\times 10$<br>โข Naik 1 tangga: $\div 10$</p>
<p style="font-size: 0.9rem; margin-top: 8px;"><b>Contoh:</b> $1\text{ m} = 100\text{ cm}$</p>
</div>
<div class="glass-card" style="padding: 15px;">
<h3 style="color: var(--yellow); text-align: center;">โ๏ธ Massa</h3>
<p style="font-size: 0.95rem; margin-top: 8px;">Tangga Satuan: $\text{kg}, \text{hg}(\text{ons}), \text{dag}, \text{g}, \text{dg}, \text{cg}, \text{mg}$.</p>
<p style="font-size: 0.95rem; color: var(--primary); margin-top: 5px;">โข Turun 1 tangga: $\times 10$<br>โข Naik 1 tangga: $\div 10$</p>
<p style="font-size: 0.9rem; margin-top: 8px;"><b>Contoh:</b> $1\text{ kg} = 1.000\text{ g}$</p>
</div>
<div class="glass-card" style="padding: 15px;">
<h3 style="color: var(--accent); text-align: center;">โฑ๏ธ Waktu</h3>
<p style="font-size: 0.95rem; margin-top: 8px;">Sistem Konversi Waktu:</p>
<p style="font-size: 0.95rem; color: var(--yellow); margin-top: 5px;">โข $1\text{ jam} = 60\text{ menit}$<br>โข $1\text{ menit} = 60\text{ sekon}$<br>โข $1\text{ jam} = 3.600\text{ sekon}$</p>
</div>
</div>
</div>
<!-- SLIDE 4: SIMULATOR KONVERSI INTERAKTIF -->
<div class="slide">
<span class="slide-tag">๐งช Lab Interaktif</span>
<h2>Kalkulator Konversi Satuan ๐งฎ</h2>
<div class="glass-card">
<div class="grid-2">
<div>
<label style="font-weight: bold;">1. Konversi Panjang (Meter ke CM):</label>
<input type="number" id="val-m" placeholder="Masukkan meter (m)..." oninput="calcLength()">
<p id="res-cm" style="margin-top: 10px; color: var(--yellow); font-weight: bold;">Hasil: - cm</p>
</div>
<div>
<label style="font-weight: bold;">2. Konversi Massa (KG ke Gram):</label>
<input type="number" id="val-kg" placeholder="Masukkan kilogram (kg)..." oninput="calcMass()">
<p id="res-g" style="margin-top: 10px; color: var(--primary); font-weight: bold;">Hasil: - g</p>
</div>
</div>
<div style="margin-top: 20px;">
<label style="font-weight: bold;">3. Konversi Waktu (Jam ke Sekon/Detik):</label>
<input type="number" id="val-hr" placeholder="Masukkan jam..." oninput="calcTime()">
<p id="res-s" style="margin-top: 10px; color: var(--success); font-weight: bold;">Hasil: - sekon</p>
</div>
</div>
</div>
<!-- SLIDE 5: KUIS TP 3 (BERGANTIAN) -->
<div class="slide">
<span class="slide-tag">๐ฎ Game Kuis TP 3</span>
<h2>Latihan Konversi Satuan! โก</h2>
<div class="glass-card">
<h3 id="q3-num" style="color: var(--yellow);">Soal 1 dari 3</h3>
<p id="q3-text" style="font-size: 1.3rem; margin: 12px 0; font-weight: bold;"></p>
<div id="q3-opts"></div>
<p id="q3-feedback" style="font-weight: bold; margin-top: 15px; font-size: 1.2rem;"></p>
<button class="interactive-btn" id="q3-next-btn" style="display: none; margin-top: 12px;" onclick="nextQ3()">Soal Berikutnya โ</button>
</div>
</div>
<!-- SLIDE 6: MATERI TP 4 - SATUAN BAKU VS TAK BAKU -->
<div class="slide">
<span class="slide-tag">๐ Materi TP 4</span>
<h2>Satuan Baku vs Satuan Tak Baku ๐</h2>
<div class="grid-2">
<div class="glass-card">
<h3 style="color: var(--primary);">1. Satuan Baku ๐</h3>
<p>Satuan yang diakui secara internasional dan **hasil pengukurannya selalu sama** bagi siapa saja.</p>
<br>
<p style="color: var(--yellow); font-size: 1rem;"><b>Contoh:</b> Meter ($\text{m}$), Centimeter ($\text{cm}$), Kilogram ($\text{kg}$), Sekon ($\text{s}$).</p>
</div>
<div class="glass-card">
<h3 style="color: var(--accent);">2. Satuan Tak Baku ๐๏ธ</h3>
<p>Satuan yang **hasil pengukurannya berbeda-beda** tergantung ukuran anggota tubuh pengukur.</p>
<br>
<p style="color: var(--primary); font-size: 1rem;"><b>Contoh:</b> Jengkal, Depa, Hasta, Langkah kaki, Cangkir.</p>
</div>
</div>
</div>
<!-- SLIDE 7: EXPERIENCING SATUAN TAK BAKU -->
<div class="slide">
<span class="slide-tag">๐ฌ Praktik Mandiri</span>
<h2>Eksperimen Satuan Tak Baku! โ</h2>
<div class="glass-card" style="text-align: center;">
<p style="font-size: 1.2rem; color: var(--yellow); font-weight: bold;">Coba Ukur Panjang Meja/Bukumu Menggunakan Jengkal Tanganmu!</p>
<div class="svg-box float-anim" style="margin: 20px auto; width: fit-content; padding: 10px 30px;">
<span style="font-size: 3.5rem;">โ ๐ ๐</span>
</div>
<p style="font-size: 1.05rem;">Bandingkan hasil jengkalmu dengan teman sebangkumu. Apakah hasilnya sama? Mengapa bisa berbeda?</p>
<button class="interactive-btn" style="margin-top: 15px;" onclick="alert('Hasil jengkal berbeda karena ukuran tangan setiap manusia tidak sama! Makanya sains butuh Satuan Baku seperti Meter.')">๐ก Mengapa Hasilnya Beda?</button>
</div>
</div>
<!-- SLIDE 8: MATERI TP 5 - MENGGUNAKAN ALAT UKUR SEBANYAK-BANYAKNYA -->
<div class="slide">
<span class="slide-tag">๐ Materi TP 5</span>
<h2>Mengenal Alat Ukur Sesuai Fungsinya ๐ ๏ธ</h2>
<div class="grid-2">
<div class="tool-card">
<h3 style="color: var(--primary);"> Penggaris & Meteran</h3>
<p style="font-size: 0.95rem;">Mengukur panjang/tinggi benda biasa.</p>
<p style="color: var(--yellow); font-size: 0.9rem;">Ketelitian: $1\text{ mm}$ ($0,1\text{ cm}$)</p>
</div>
<div class="tool-card">
<h3 style="color: var(--yellow);"> Jangka Sorong</h3>
<p style="font-size: 0.95rem;">Mengukur diameter dalam/luar botol & kedalaman tabung.</p>
<p style="color: var(--primary); font-size: 0.9rem;">Ketelitian: $0,1\text{ mm}$ ($0,01\text{ cm}$)</p>
</div>
<div class="tool-card">
<h3 style="color: var(--accent);"> Neraca / Timbangan</h3>
<p style="font-size: 0.95rem;">Mengukur massa benda (Neraca Sama Lengan, Ohaus, Digital).</p>
</div>
<div class="tool-card">
<h3 style="color: var(--success);"> Stopwatch</h3>
<p style="font-size: 0.95rem;">Mengukur selang waktu dengan presisi tinggi.</p>
</div>
</div>
</div>
<!-- SLIDE 9: KUIS PEMBACAAN ALAT UKUR (TP 5) -->
<div class="slide">
<span class="slide-tag">๐ฏ Tantangan Detektif</span>
<h2>Membaca Hasil Alat Ukur ๐</h2>
<div class="glass-card">
<h3 id="q5-num" style="color: var(--yellow);">Soal 1 dari 3</h3>
<p id="q5-text" style="font-size: 1.2rem; margin: 10px 0; font-weight: bold;"></p>
<div id="q5-opts"></div>
<p id="q5-feedback" style="font-weight: bold; margin-top: 15px; font-size: 1.2rem;"></p>
<button class="interactive-btn" id="q5-next-btn" style="display: none; margin-top: 12px;" onclick="nextQ5()">Soal Berikutnya โ</button>
</div>
</div>
<!-- SLIDE 10: BATTLE KELOMPOK (MODUL 2) -->
<div class="slide">
<span class="slide-tag">๐ฅ Battle Kelompok</span>
<h2>Adu Cepat Alat Ukur & Konversi! โ๏ธ</h2>
<div class="multi-grid">
<div class="user-zone">
<h4 style="color: var(--primary);">๐ด Tim 1 (Panjang)</h4>
<p>$2,5\text{ m} = ...\text{ cm}$</p>
<button class="opt-btn" onclick="groupAns2(1, true)">A. $250\text{ cm}$</button>
<button class="opt-btn" onclick="groupAns2(1, false)">B. $25\text{ cm}$</button>
</div>
<div class="user-zone">
<h4 style="color: var(--yellow);">๐ก Tim 2 (Massa)</h4>
<p>$500\text{ g} = ...\text{ kg}$</p>
<button class="opt-btn" onclick="groupAns2(2, false)">A. $5\text{ kg}$</button>
<button class="opt-btn" onclick="groupAns2(2, true)">B. $0,5\text{ kg}$</button>
</div>
<div class="user-zone">
<h4 style="color: var(--success);">๐ข Tim 3 (Satuan)</h4>
<p>Satu 'Depa' termasuk satuan...?</p>
<button class="opt-btn" onclick="groupAns2(3, false)">A. Baku</button>
<button class="opt-btn" onclick="groupAns2(3, true)">B. Tak Baku</button>
</div>
<div class="user-zone">
<h4 style="color: #c084fc;">๐ฃ Tim 4 (Alat Ukur)</h4>
<p>Alat paling tepat ukur diameter dalam pipa:</p>
<button class="opt-btn" onclick="groupAns2(4, true)">A. Jangka Sorong</button>
<button class="opt-btn" onclick="groupAns2(4, false)">B. Meteran Roll</button>
</div>
</div>
<p id="group-score-display-2" style="text-align: center; margin-top: 10px; font-weight: bold; font-size: 1.3rem; color: var(--yellow);"></p>
</div>
<!-- SLIDE 11: UJIAN AKHIR EVALUASI DIRI -->
<div class="slide">
<span class="slide-tag">๐ Evaluasi Akhir</span>
<h2>Ujian Akhir (5 Soal Integrasi)</h2>
<div class="glass-card">
<h3 id="ex2-num" style="color: var(--yellow);">Soal 1 dari 5</h3>
<p id="ex2-text" style="font-size: 1.2rem; margin: 10px 0; font-weight: bold;"></p>
<div id="ex2-opts"></div>
<p id="ex2-feedback" style="font-weight: bold; margin-top: 15px; font-size: 1.2rem;"></p>
<button class="interactive-btn" id="ex2-next-btn" style="display: none; margin-top: 12px;" onclick="nextExam2()">Lanjut Soal โ</button>
</div>
</div>
<!-- SLIDE 12: IDENTITAS SISWA -->
<div class="slide">
<span class="slide-tag">โ๏ธ Data Diri</span>
<h2>Lengkapi Data Pengukuranmu</h2>
<div class="glass-card">
<p style="margin-bottom: 12px;">Isi identitas untuk menyimpan rekap hasil belajar:</p>
<label style="font-weight: bold;">Nama Lengkap Siswa:</label>
<input type="text" id="stu-name-2" placeholder="Ketik nama lengkapmu di sini...">
<label style="margin-top: 12px; display: block; font-weight: bold;">Pilih Kelas:</label>
<select id="stu-class-2">
<option value="">-- Pilih Kelas --</option>
<option value="7-A">7-A ๐</option>
<option value="7-B">7-B โก</option>
<option value="7-C">7-C ๐ฅ</option>
</select>
</div>
</div>
<!-- SLIDE 13: REFLEKSI BELAJAR -->
<div class="slide">
<span class="slide-tag">๐ Refleksi Akhir</span>
<h2>Hebat! Kamu Sudah Menyelesaikan Semua TP ๐</h2>
<div class="glass-card" style="text-align: center;">
<p style="font-size: 1.25rem; font-weight: bold; color: var(--yellow);">Bagaimana pengalamanmu mengonversi satuan & membaca alat ukur?</p>
<div style="margin: 20px 0; display: flex; justify-content: center; gap: 15px;">
<button class="interactive-btn" onclick="alert('Luar biasa! Kamu sudah paham layaknya ilmuwan sejati! ๐ฏ')">๐คฉ Sangat Paham!</button>
<button class="interactive-btn" style="background: linear-gradient(135deg, #38bdf8, #3b82f6);" onclick="alert('Bagus! Tingkatkan terus latihannya ya! ๐ช')">๐ Paham</button>
<button class="interactive-btn" style="background: linear-gradient(135deg, #94a3b8, #64748b);" onclick="alert('Tidak apa-apa, kamu bisa ulangi slide simulator konversi ya! ๐')">๐ค Masih Perlu Latihan</button>
</div>
<p style="color: var(--primary); font-size: 1.15rem; font-weight: bold;">"Ketelitian dalam mengukur adalah kunci utama penemuan ilmu fisika dan sains!" ๐ฌโจ</p>
</div>
</div>
</div>
<!-- Controls Navigasi Bawah -->
<div class="controls">
<button class="nav-control-btn" id="prevBtn" onclick="changeSlide(-1)">โฌ
๏ธ Kembali</button>
<span class="slide-counter" id="slideCounter">Slide 1 dari 13</span>
<button class="nav-control-btn" id="nextBtn" onclick="changeSlide(1)">Selanjutnya โก๏ธ</button>
</div>
<script>
let currentSlide = 0;
const slides = document.querySelectorAll('.slide');
const slideCounter = document.getElementById('slideCounter');
const prevBtn = document.getElementById('prevBtn');
const nextBtn = document.getElementById('nextBtn');
function reRenderMath() {
if (window.MathJax && window.MathJax.typesetPromise) {
window.MathJax.typesetPromise();
}
}
function updateSlide() {
slides.forEach((s, idx) => s.classList.toggle('active', idx === currentSlide));
slideCounter.textContent = `Slide ${currentSlide + 1} dari ${slides.length}`;
prevBtn.disabled = currentSlide === 0;
nextBtn.disabled = currentSlide === slides.length - 1;
reRenderMath();
}
function changeSlide(dir) {
currentSlide += dir;
if (currentSlide < 0) currentSlide = 0;
if (currentSlide >= slides.length) currentSlide = slides.length - 1;
updateSlide();
}
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowRight' && currentSlide < slides.length - 1) changeSlide(1);
if (e.key === 'ArrowLeft' && currentSlide > 0) changeSlide(-1);
});
// Interactive Conversion Logic
function calcLength() {
let v = document.getElementById('val-m').value;
document.getElementById('res-cm').innerText = v ? `Hasil: ${v * 100} cm` : "Hasil: - cm";
}
function calcMass() {
let v = document.getElementById('val-kg').value;
document.getElementById('res-g').innerText = v ? `Hasil: ${v * 1000} g` : "Hasil: - g";
}
function calcTime() {
let v = document.getElementById('val-hr').value;
document.getElementById('res-s').innerText = v ? `Hasil: ${v * 3600} sekon` : "Hasil: - sekon";
}
// Bank Soal TP 3 (Konversi)
const q3Data = [
{ q: "Panjang papan tulis adalah $2\\text{ m}$. Jika diubah ke centimeter (\\text{cm}), hasilnya adalah...", opts: ["$20\\text{ cm}$", "$200\\text{ cm}$ ๐", "$2.000\\text{ cm}$"], ans: 1 },
{ q: "Massa gula pasir $1,5\\text{ kg}$ setara dengan...", opts: ["$150\\text{ g}$", "$1.500\\text{ g}$ โ๏ธ", "$15.000\\text{ g}$"], ans: 1 },
{ q: "Lari maraton ditempuh dalam waktu $0,5\\text{ jam}$. Berapa sekon (detik) waktu tersebut?", opts: ["$1.800\\text{ sekon}$ โฑ๏ธ", "$300\\text{ sekon}$", "$3.600\\text{ sekon}$"], ans: 0 }
];
let q3Idx = 0;
function renderQ3() {
if(q3Idx >= q3Data.length) {
document.getElementById('q3-text').innerText = "๐ Sukses! Kamu hebat mengonversi satuan!";
document.getElementById('q3-opts').innerHTML = "";
document.getElementById('q3-next-btn').style.display = "none";
return;
}
let d = q3Data[q3Idx];
document.getElementById('q3-num').innerText = `Soal ${q3Idx + 1} dari ${q3Data.length}`;
document.getElementById('q3-text').innerText = d.q;
let html = "";
d.opts.forEach((o, i) => {
html += `<button class="opt-btn" onclick="checkQ3(${i})">${o}</button>`;
});
document.getElementById('q3-opts').innerHTML = html;
document.getElementById('q3-feedback').innerText = "";
document.getElementById('q3-next-btn').style.display = "none";
reRenderMath();
}
function checkQ3(i) {
if(i === q3Data[q3Idx].ans) {
document.getElementById('q3-feedback').innerText = "๐ Tepat Sekali!";
document.getElementById('q3-feedback').style.color = "var(--success)";
} else {
document.getElementById('q3-feedback').innerText = "โ Coba hitung lagi tangga konversinya!";
document.getElementById('q3-feedback').style.color = "var(--accent)";
}
document.getElementById('q3-next-btn').style.display = "inline-block";
}
function nextQ3() { q3Idx++; renderQ3(); }
// Bank Soal TP 5 (Alat Ukur)
const q5Data = [
{ q: "Alat ukur yang paling tepat untuk mengukur diameter kelereng secara sangat teliti adalah...", opts: ["Penggaris Kayu", "Jangka Sorong ๐", "Meteran Pita"], ans: 1 },
{ q: "Untuk mengukur massa batu saat praktikum IPA, alat yang digunakan adalah...", opts: ["Neraca / Timbangan โ๏ธ", "Stopwatch", "Thermometer"], ans: 0 },
{ q: "Pelari 100 meter diukur waktu tempuhnya menggunakan...", opts: ["Jam Dinding", "Stopwatch โฑ๏ธ", "Kalender"], ans: 1 }
];
let q5Idx = 0;
function renderQ5() {
if(q5Idx >= q5Data.length) {
document.getElementById('q5-text').innerText = "๐ Luar Biasa! Kamu makin paham alat ukur!";
document.getElementById('q5-opts').innerHTML = "";
document.getElementById('q5-next-btn').style.display = "none";
return;
}
let d = q5Data[q5Idx];
document.getElementById('q5-num').innerText = `Soal ${q5Idx + 1} dari ${q5Data.length}`;
document.getElementById('q5-text').innerText = d.q;
let html = "";
d.opts.forEach((o, i) => {
html += `<button class="opt-btn" onclick="checkQ5(${i})">${o}</button>`;
});
document.getElementById('q5-opts').innerHTML = html;
document.getElementById('q5-feedback').innerText = "";
document.getElementById('q5-next-btn').style.display = "none";
reRenderMath();
}
function checkQ5(i) {
if(i === q5Data[q5Idx].ans) {
document.getElementById('q5-feedback').innerText = "๐ Pintar! Alat ukur tepat!";
document.getElementById('q5-feedback').style.color = "var(--success)";
} else {
document.getElementById('q5-feedback').innerText = "โ Kurang tepat, coba cek fungsi alatnya!";
document.getElementById('q5-feedback').style.color = "var(--accent)";
}
document.getElementById('q5-next-btn').style.display = "inline-block";
}
function nextQ5() { q5Idx++; renderQ5(); }
// Multi User Score Modul 2
let groupScore2 = [false, false, false, false];
function groupAns2(user, isTrue) {
if(isTrue) groupScore2[user-1] = true;
let total = groupScore2.filter(Boolean).length;
document.getElementById('group-score-display-2').innerText = `๐ฅ Total Skor Kelompok: ${total * 25} / 100`;
}
// Ujian Akhir Modul 2
const ex2Data = [
{ q: "1. Mengubah $300\\text{ cm}$ menjadi meter menghasilkan...", opts: ["$30\\text{ m}$", "$3\\text{ m}$ ๐", "$0,3\\text{ m}$"], ans: 1 },
{ q: "2. Satuan seperti 'Depa' dan 'Jengkal' dinamakan satuan...", opts: ["Baku", "Tak Baku ๐๏ธ", "Internasional"], ans: 1 },
{ q: "3. Ketelitian skala penggaris biasa umumnya sebesar...", opts: ["$1\\text{ mm}$ ($0,1\\text{ cm}$) ๐", "$1\\text{ m}$", "$1\\text{ micro}$"], ans: 0 },
{ q: "4. Waktu $2\\text{ menit}$ setara dengan berapa sekon?", opts: ["$60\\text{ s}$", "$120\\text{ s}$ โฑ๏ธ", "$200\\text{ s}$"], ans: 1 },
{ q: "5. Mengapa hasil ukur dengan meteran selalu sama untuk semua orang?", opts: ["Karena meteran terbuat dari plastik", "Karena meteran adalah alat ukur satuan baku ๐", "Karena ukurannya berubah-ubah"], ans: 1 }
];
let ex2Idx = 0;
function renderExam2() {
if(ex2Idx >= ex2Data.length) {
document.getElementById('ex2-text').innerText = "๐ Tuntas! Seluruh soal evaluasi telah diselesaikan!";
document.getElementById('ex2-opts').innerHTML = "";
document.getElementById('ex2-next-btn').style.display = "none";
return;
}
let d = ex2Data[ex2Idx];
document.getElementById('ex2-num').innerText = `Soal ${ex2Idx + 1} dari ${ex2Data.length}`;
document.getElementById('ex2-text').innerText = d.q;
let html = "";
d.opts.forEach((o, i) => {
html += `<button class="opt-btn" onclick="checkExam2(${i})">${o}</button>`;
});
document.getElementById('ex2-opts').innerHTML = html;
document.getElementById('ex2-feedback').innerText = "";
document.getElementById('ex2-next-btn').style.display = "none";
reRenderMath();
}
function checkExam2(i) {
document.getElementById('ex2-feedback').innerText = "๐ Jawaban Tersimpan!";
document.getElementById('ex2-feedback').style.color = "var(--success)";
document.getElementById('ex2-next-btn').style.display = "inline-block";
}
function nextExam2() { ex2Idx++; renderExam2(); }
// Init Engine Modul 2
renderQ3();
renderQ5();
renderExam2();
updateSlide();
</script>
</body>
</html>
Kelas 7
IPA
Besan Pokok dan Besaran Turunan 1 : Mengidentifikasi besaran dalam kehidupan sehari-hari
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Slide Pembelajaran IPA - Besaran & Pengukuran</title>
<!-- MathJax Library untuk Rendering Simbol Matematika/Fisika Sempurna -->
<script>
MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
displayMath: [['$$', '$$'], ['\\[', '\\]']]
}
};
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<style>
:root {
--bg-gradient: linear-gradient(135deg, #0f172a 0%, #311b92 50%, #1e1b4b 100%);
--card-bg: rgba(255, 255, 255, 0.1);
--card-border: rgba(255, 255, 255, 0.25);
--primary: #38bdf8;
--accent: #f43f5e;
--yellow: #fbbf24;
--success: #10b981;
--text: #ffffff;
--text-muted: #cbd5e1;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: 'Comic Sans MS', 'Chalkboard SE', 'Segoe UI', sans-serif;
user-select: none;
}
body {
background: var(--bg-gradient);
color: var(--text);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
overflow: hidden;
}
.deck-container {
width: 92vw;
height: 82vh;
background: rgba(15, 23, 42, 0.85);
backdrop-filter: blur(20px);
border: 3px solid rgba(255, 255, 255, 0.2);
border-radius: 28px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6), inset 0 0 20px rgba(56, 189, 248, 0.2);
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
}
.slide {
display: none;
padding: 35px;
height: 100%;
flex-direction: column;
justify-content: flex-start;
overflow-y: auto;
animation: bounceIn 0.5s ease;
}
.slide.active {
display: flex;
}
@keyframes bounceIn {
0% { opacity: 0; transform: scale(0.95); }
60% { transform: scale(1.02); }
100% { opacity: 1; transform: scale(1); }
}
@keyframes spin { 100% { transform: rotate(360deg); } }
@keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-12px); } }
@keyframes pulse-glow { 0%, 100% { filter: drop-shadow(0 0 10px #38bdf8); } 50% { filter: drop-shadow(0 0 25px #f43f5e); } }
.float-anim { animation: float 3s ease-in-out infinite; }
.spin-anim { animation: spin 8s linear infinite; }
.glow-anim { animation: pulse-glow 2s infinite; }
.slide-tag {
display: inline-block;
padding: 6px 16px;
background: linear-gradient(90deg, #f43f5e, #fbbf24);
color: #fff;
border-radius: 20px;
font-size: 0.9rem;
font-weight: bold;
letter-spacing: 1px;
text-transform: uppercase;
margin-bottom: 10px;
width: fit-content;
box-shadow: 0 4px 12px rgba(244, 63, 94, 0.4);
}
h1 {
font-size: 2.8rem;
background: linear-gradient(to right, #38bdf8, #f43f5e, #fbbf24);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 10px;
text-shadow: 0 4px 10px rgba(0,0,0,0.3);
}
h2 {
font-size: 2.1rem;
color: var(--yellow);
margin-bottom: 15px;
text-shadow: 0 2px 8px rgba(0,0,0,0.4);
}
p, li {
font-size: 1.2rem;
line-height: 1.6;
color: #f1f5f9;
}
.grid-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-top: 15px;
}
.glass-card {
background: var(--card-bg);
border: 2px solid var(--card-border);
border-radius: 20px;
padding: 22px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
backdrop-filter: blur(8px);
}
.svg-box {
background: rgba(0, 0, 0, 0.35);
border-radius: 16px;
padding: 15px;
display: flex;
justify-content: center;
align-items: center;
margin: 15px 0;
border: 1px dashed var(--primary);
}
.interactive-btn {
background: linear-gradient(135deg, #f43f5e, #fbbf24);
color: white;
border: none;
padding: 14px 24px;
border-radius: 14px;
font-size: 1.1rem;
font-weight: bold;
cursor: pointer;
transition: all 0.2s ease;
margin: 6px;
box-shadow: 0 6px 18px rgba(244, 63, 94, 0.4);
}
.interactive-btn:hover {
transform: scale(1.06) translateY(-2px);
box-shadow: 0 10px 25px rgba(251, 191, 36, 0.6);
}
.opt-btn {
width: 100%;
text-align: left;
background: rgba(255,255,255,0.08);
border: 2px solid var(--card-border);
color: white;
padding: 14px 20px;
border-radius: 12px;
margin-top: 10px;
font-size: 1.1rem;
cursor: pointer;
transition: 0.2s;
font-weight: 600;
}
.opt-btn:hover {
background: rgba(56, 189, 248, 0.3);
border-color: var(--primary);
transform: translateX(6px);
}
.multi-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 15px;
}
.user-zone {
background: rgba(0,0,0,0.4);
border: 2px dashed var(--yellow);
border-radius: 16px;
padding: 15px;
}
.controls {
margin-top: 15px;
display: flex;
gap: 20px;
align-items: center;
}
.nav-control-btn {
background: linear-gradient(135deg, #38bdf8, #3b82f6);
color: white;
border: none;
padding: 12px 32px;
border-radius: 50px;
font-size: 1.1rem;
font-weight: bold;
cursor: pointer;
transition: 0.2s;
box-shadow: 0 6px 20px rgba(56, 189, 248, 0.4);
}
.nav-control-btn:hover:not(:disabled) {
transform: scale(1.05);
box-shadow: 0 8px 25px rgba(56, 189, 248, 0.7);
}
.nav-control-btn:disabled {
opacity: 0.3;
cursor: not-allowed;
box-shadow: none;
}
.slide-counter {
font-size: 1.15rem;
font-weight: bold;
color: var(--yellow);
text-shadow: 0 2px 4px rgba(0,0,0,0.5);
}
input, select {
width: 100%;
padding: 14px;
background: rgba(0,0,0,0.5);
border: 2px solid var(--primary);
border-radius: 12px;
color: white;
font-size: 1.1rem;
margin-top: 8px;
}
</style>
</head>
<body>
<div class="deck-container">
<!-- SLIDE 1: JUDUL UTAMA -->
<div class="slide active" style="text-align: center;">
<span class="slide-tag" style="margin: 0 auto 15px auto;">๐ Petualangan Sains IPA</span>
<h1 class="glow-anim">BESARAN & PENGUKURAN</h1>
<p style="font-size: 1.4rem; color: var(--yellow); font-weight: bold;">Mari Menjadi Ilmuwan Muda Yang Teliti! ๐ฌโจ</p>
<div class="svg-box float-anim" style="border: none; background: transparent; margin: 20px 0;">
<svg width="220" height="140" viewBox="0 0 220 140">
<g class="spin-anim" transform-origin="110 70">
<ellipse cx="110" cy="70" rx="60" ry="20" fill="none" stroke="#38bdf8" stroke-width="4"/>
<ellipse cx="110" cy="70" rx="20" ry="60" fill="none" stroke="#f43f5e" stroke-width="4"/>
</g>
<circle cx="110" cy="70" r="16" fill="#fbbf24"/>
<text x="103" y="75" fill="#000" font-weight="bold" font-size="14">IPA</text>
</svg>
</div>
<p style="color: var(--primary); font-size: 1.2rem;">Tekan tombol <b>'Selanjutnya โ'</b> atau Tombol Panah Kanan di Keyboard!</p>
</div>
<!-- SLIDE 2: CAPAIAN & TUJUAN PEMBELAJARAN -->
<div class="slide">
<span class="slide-tag">๐ฏ Target Hari Ini</span>
<h2>Capaian & Tujuan Pembelajaran</h2>
<div class="grid-2">
<div class="glass-card">
<h3 style="color: var(--primary); margin-bottom: 10px;">๐ Capaian Pembelajaran (CP)</h3>
<p>Kalian akan mampu melakukan pengukuran benda & makhluk hidup serta menggunakan besaran dan satuan secara tepat dan kritis!</p>
</div>
<div class="glass-card">
<h3 style="color: var(--yellow); margin-bottom: 10px;">๐ Tujuan Pembelajaran (TP)</h3>
<p><b>TP 1:</b> Mampu membedakan mana <b>Besaran Pokok</b> dan mana <b>Besaran Turunan</b> di sekitarmu.</p>
<p style="margin-top: 10px;"><b>TP 2:</b> Mampu menyebutkan hasil ukur dengan <b>Satuan Internasional (SI)</b> yang standar.</p>
</div>
</div>
</div>
<!-- SLIDE 3: PERTANYAAN PEMANTIK -->
<div class="slide">
<span class="slide-tag">๐ค Pikirkan Ini!</span>
<h2>Beli Baju Pakai Ukuran Jengkal? ๐</h2>
<div class="glass-card" style="text-align: center;">
<p style="font-size: 1.30rem; color: var(--yellow); font-weight: bold;">
"Bagaimana kalau kamu beli baju online, tapi penjualnya mengukur kain pakai JENGKAL TANGAN dia sendiri?" ๐
</p>
<div class="float-anim" style="margin: 20px 0;">
<span style="font-size: 4rem;">โ ๐ ๐</span>
</div>
<p>Apakah ukuran bajunya bakal pas di badanmu? Mengapa sains butuh **Satuan Baku Internasional (SI)**?</p>
</div>
</div>
<!-- SLIDE 4: OBSERVASI INTERAKTIF -->
<div class="slide">
<span class="slide-tag">๐ต๏ธโโ๏ธ Detektif Sains</span>
<h2>Observasi Objek Di Sekitarmu!</h2>
<p>Klik tombol di bawah untuk mendeteksi besaran pada objek berikut:</p>
<div class="svg-box" style="gap: 30px;">
<div class="float-anim" style="text-align: center;">
<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdWJnOHkya3BjcHprZnc3Ynl2bnVzOW8zcDV2OGd2MnZwNG8yZWp0byZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/BzyTuYCmvSORqs1ABM/giphy.gif" alt="Cat GIF" style="width:100px; height:100px; border-radius: 12px; object-fit: cover;">
<p style="font-size: 0.9rem; color: var(--yellow);">Kucing Lucu</p>
</div>
<div class="float-anim" style="text-align: center; animation-delay: 1s;">
<span style="font-size: 4rem;">๐ชด</span>
<p style="font-size: 0.9rem; color: var(--primary);">Tanaman Pot</p>
</div>
</div>
<div style="text-align: center;">
<button class="interactive-btn" onclick="alert('๐ฑ Tinggi Tanaman = 25 cm (Besaran Pokok Panjang)')">๐ Ukur Tinggi Tanaman</button>
<button class="interactive-btn" onclick="alert('๐ฑ Massa Kucing = 3,5 kg (Besaran Pokok Massa)')">โ๏ธ Timbang Massa Kucing</button>
<button class="interactive-btn" onclick="alert('๐ Luas Daun = 12 cmยฒ (Besaran Turunan Luas)')">๐ Hitung Luas Daun</button>
</div>
</div>
<!-- SLIDE 5: TINJAUAN KONTEKSTUAL -->
<div class="slide">
<span class="slide-tag">๐ Sains Di Dunia Nyata</span>
<h2>Pengukuran Dalam Kehidupan Sehari-hari</h2>
<div class="glass-card">
<ul style="list-style-type: '๐ '; padding-left: 20px;">
<li><b>Kesehatan & Dokter:</b> Mengukur Suhu Badan dalam Kelvin ($\text{K}$) atau Celsius ($^{\circ}\text{C}$) & Timbangan Massa Badan dalam Kilogram ($\text{kg}$).</li>
<li><b>Dunia Olahraga:</b> Mengukur Waktu Tempuh Lari dalam Sekon/Detik ($\text{s}$) menggunakan *stopwatch*.</li>
<li><b>Jual Beli Supermarket:</b> Membeli buah & beras ditimbang dengan satuan resmi Kilogram ($\text{kg}$).</li>
</ul>
</div>
</div>
<!-- SLIDE 6: MATERI TP 1 -->
<div class="slide">
<span class="slide-tag">๐ Materi TP 1</span>
<h2>Besaran Pokok vs Besaran Turunan</h2>
<div class="grid-2">
<div class="glass-card">
<h3 style="color: var(--primary);">1. Besaran Pokok ๐ฅ</h3>
<p>Besaran utama yang satuannya sudah ditetapkan secara internasional terlebih dahulu.</p>
<br>
<p style="color: var(--yellow); font-size: 1rem;">โจ <b>7 Besaran Pokok:</b> Panjang, Massa, Waktu, Suhu, Kuat Arus, Intensitas Cahaya, Jumlah Zat.</p>
</div>
<div class="glass-card">
<h3 style="color: var(--accent);">2. Besaran Turunan ๐ฅ</h3>
<p>Besaran yang merupakan gabungan/turunan dari dua atau lebih besaran pokok.</p>
<br>
<p style="color: var(--primary); font-size: 1rem;">โก <b>Contoh:</b> Luas ($\text{m}^2$), Kecepatan ($\text{m/s}$), Volume ($\text{m}^3$).</p>
</div>
</div>
</div>
<!-- SLIDE 7: KUIS TP 1 (BERGANTIAN) -->
<div class="slide">
<span class="slide-tag">๐ฎ Game Kuis TP 1</span>
<h2>Uji Pemahaman Besaran! โก</h2>
<div class="glass-card">
<h3 id="q1-num" style="color: var(--yellow);">Soal 1 dari 3</h3>
<p id="q1-text" style="font-size: 1.3rem; margin: 12px 0; font-weight: bold;"></p>
<div id="q1-opts"></div>
<p id="q1-feedback" style="font-weight: bold; margin-top: 15px; font-size: 1.2rem;"></p>
<button class="interactive-btn" id="q1-next-btn" style="display: none; margin-top: 12px;" onclick="nextQ1()">Soal Berikutnya โ</button>
</div>
</div>
<!-- SLIDE 8: MATERI TP 2 -->
<div class="slide">
<span class="slide-tag">๐ Materi TP 2</span>
<h2>Satuan Sistem Internasional (SI) ๐</h2>
<div class="glass-card">
<p>Supaya hasil ukur di Indonesia sama persis dengan di Jepang atau Amerika, ilmuwan sepakat pakai **Satuan SI**!</p>
<table border="1" style="width:100%; margin-top: 15px; border-collapse: collapse; border-color: var(--card-border); text-align: center; font-size: 1.1rem;">
<tr style="background: linear-gradient(90deg, #f43f5e, #38bdf8); color: white;">
<th>Besaran Pokok</th>
<th>Satuan SI</th>
<th>Simbol Matematika</th>
</tr>
<tr><td>Panjang ๐</td><td>Meter</td><td>$\text{m}$</td></tr>
<tr><td>Massa โ๏ธ</td><td>Kilogram</td><td>$\text{kg}$</td></tr>
<tr><td>Waktu โฑ๏ธ</td><td>Sekon (Detik)</td><td>$\text{s}$</td></tr>
<tr><td>Suhu ๐ก๏ธ</td><td>Kelvin</td><td>$\text{K}$</td></tr>
</table>
</div>
</div>
<!-- SLIDE 9: KUIS TP 2 (BERGANTIAN) -->
<div class="slide">
<span class="slide-tag">๐ฎ Game Kuis TP 2</span>
<h2>Tebak Satuan SI! ๐ฏ</h2>
<div class="glass-card">
<h3 id="q2-num" style="color: var(--yellow);">Soal 1 dari 3</h3>
<p id="q2-text" style="font-size: 1.3rem; margin: 12px 0; font-weight: bold;"></p>
<div id="q2-opts"></div>
<p id="q2-feedback" style="font-weight: bold; margin-top: 15px; font-size: 1.2rem;"></p>
<button class="interactive-btn" id="q2-next-btn" style="display: none; margin-top: 12px;" onclick="nextQ2()">Soal Berikutnya โ</button>
</div>
</div>
<!-- SLIDE 10: KUIS KELOMPOK MULTI-USER -->
<div class="slide">
<span class="slide-tag">๐ฅ Battle Kelompok</span>
<h2>Adu Cepat 4 Tim! โ๏ธ</h2>
<div class="multi-grid">
<div class="user-zone">
<h4 style="color: var(--primary);">๐ด Tim 1 (Massa)</h4>
<p>Massa kucing = $3{,}5\text{ kg}$. 'Massa' adalah besaran...?</p>
<button class="opt-btn" onclick="groupAns(1, true)">A. Pokok</button>
<button class="opt-btn" onclick="groupAns(1, false)">B. Turunan</button>
</div>
<div class="user-zone">
<h4 style="color: var(--yellow);">๐ก Tim 2 (Luas)</h4>
<p>Luas daun ($12\text{ cm}^2$) termasuk besaran...?</p>
<button class="opt-btn" onclick="groupAns(2, false)">A. Pokok</button>
<button class="opt-btn" onclick="groupAns(2, true)">B. Turunan</button>
</div>
<div class="user-zone">
<h4 style="color: var(--success);">๐ข Tim 3 (Panjang)</h4>
<p>Satuan SI resmi untuk Panjang adalah...?</p>
<button class="opt-btn" onclick="groupAns(3, true)">A. Meter ($\text{m}$)</button>
<button class="opt-btn" onclick="groupAns(3, false)">B. Centimeter ($\text{cm}$)</button>
</div>
<div class="user-zone">
<h4 style="color: #c084fc;">๐ฃ Tim 4 (Suhu)</h4>
<p>Satuan SI resmi untuk Suhu adalah...?</p>
<button class="opt-btn" onclick="groupAns(4, true)">A. Kelvin ($\text{K}$)</button>
<button class="opt-btn" onclick="groupAns(4, false)">B. Celsius ($^{\circ}\text{C}$)</button>
</div>
</div>
<p id="group-score-display" style="text-align: center; margin-top: 10px; font-weight: bold; font-size: 1.3rem; color: var(--yellow);"></p>
</div>
<!-- SLIDE 11: UJIAN AKHIR INDIVIDU -->
<div class="slide">
<span class="slide-tag">๐ Challenge Akhir</span>
<h2>Ujian Akhir Individu (5 Soal)</h2>
<div class="glass-card">
<h3 id="ex-num" style="color: var(--yellow);">Soal 1 dari 5</h3>
<p id="ex-text" style="font-size: 1.3rem; margin: 12px 0; font-weight: bold;"></p>
<div id="ex-opts"></div>
<p id="ex-feedback" style="font-weight: bold; margin-top: 15px; font-size: 1.2rem;"></p>
<button class="interactive-btn" id="ex-next-btn" style="display: none; margin-top: 12px;" onclick="nextExam()">Lanjut Soal โ</button>
</div>
</div>
<!-- SLIDE 12: IDENTITAS SISWA -->
<div class="slide">
<span class="slide-tag">โ๏ธ Data Diri</span>
<h2>Isi Identitas Dulu Yuk!</h2>
<div class="glass-card">
<p style="margin-bottom: 15px;">Lengkapi data dirimu sebelum menuju refleksi kelas:</p>
<label style="font-weight: bold;">Nama Lengkap Siswa:</label>
<input type="text" id="stu-name" placeholder="Ketik nama lengkapmu di sini...">
<label style="margin-top: 15px; display: block; font-weight: bold;">Pilih Kelas:</label>
<select id="stu-class">
<option value="">-- Pilih Kelas --</option>
<option value="7-A">7-A ๐</option>
<option value="7-B">7-B โก</option>
<option value="7-C">7-C ๐ฅ</option>
</select>
</div>
</div>
<!-- SLIDE 13: REFLEKSI BELAJAR -->
<div class="slide">
<span class="slide-tag">๐ Suasana Hati</span>
<h2>Refleksi Belajar Hari Ini</h2>
<div class="glass-card" style="text-align: center;">
<p style="font-size: 1.3rem; font-weight: bold; color: var(--yellow);">Bagaimana perasaanmu belajar IPA hari ini?</p>
<div style="margin: 20px 0; display: flex; justify-content: center; gap: 15px;">
<button class="interactive-btn" onclick="alert('Terima Kasih! Senang sekali kamu gembira hari ini! ๐๐')">๐ Senang Banget!</button>
<button class="interactive-btn" style="background: linear-gradient(135deg, #38bdf8, #3b82f6);" onclick="alert('Mantap! Semangat terus ya! ๐')">๐ Seru Aja</button>
<button class="interactive-btn" style="background: linear-gradient(135deg, #94a3b8, #64748b);" onclick="alert('Jangan menyerah! Besok kita belajar lebih seru lagi! ๐ช')">๐ Agak Bingung</button>
</div>
<p style="color: var(--primary); font-size: 1.2rem; font-weight: bold;">"Terima kasih atas partisipasi aktif kalian hari ini! Sampai jumpa di petualangan sains berikutnya!" ๐โจ</p>
</div>
</div>
</div>
<!-- Controls Navigasi Bawah -->
<div class="controls">
<button class="nav-control-btn" id="prevBtn" onclick="changeSlide(-1)">โฌ
๏ธ Kembali</button>
<span class="slide-counter" id="slideCounter">Slide 1 dari 13</span>
<button class="nav-control-btn" id="nextBtn" onclick="changeSlide(1)">Selanjutnya โก๏ธ</button>
</div>
<script>
let currentSlide = 0;
const slides = document.querySelectorAll('.slide');
const slideCounter = document.getElementById('slideCounter');
const prevBtn = document.getElementById('prevBtn');
const nextBtn = document.getElementById('nextBtn');
function reRenderMath() {
if (window.MathJax && window.MathJax.typesetPromise) {
window.MathJax.typesetPromise();
}
}
function updateSlide() {
slides.forEach((s, idx) => s.classList.toggle('active', idx === currentSlide));
slideCounter.textContent = `Slide ${currentSlide + 1} dari ${slides.length}`;
prevBtn.disabled = currentSlide === 0;
nextBtn.disabled = currentSlide === slides.length - 1;
reRenderMath();
}
function changeSlide(dir) {
currentSlide += dir;
if (currentSlide < 0) currentSlide = 0;
if (currentSlide >= slides.length) currentSlide = slides.length - 1;
updateSlide();
}
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowRight' && currentSlide < slides.length - 1) changeSlide(1);
if (e.key === 'ArrowLeft' && currentSlide > 0) changeSlide(-1);
});
// Bank Soal TP 1 (Simbol dihapus)
const q1Data = [
{ q: "Besaran yang satuannya sudah ditetapkan secara internasional terlebih dahulu adalah...", opts: ["Besaran Turunan", "Besaran Pokok", "Satuan Tak Baku"], ans: 1 },
{ q: "Manakah di bawah ini yang merupakan contoh Besaran Pokok?", opts: ["Kecepatan Lari", "Massa Kucing ($3{,}5\\text{ kg}$)", "Luas Daun"], ans: 1 },
{ q: "Luas Daun ($12\\text{ cm}^2$) dikategorikan ke dalam...", opts: ["Besaran Pokok", "Besaran Turunan", "Satuan Tradisional"], ans: 1 }
];
let q1Idx = 0;
function renderQ1() {
if(q1Idx >= q1Data.length) {
document.getElementById('q1-text').innerText = "๐ Hore! Kuis TP 1 Selesai dengan Sukses!";
document.getElementById('q1-opts').innerHTML = "";
document.getElementById('q1-next-btn').style.display = "none";
return;
}
let d = q1Data[q1Idx];
document.getElementById('q1-num').innerText = `Soal ${q1Idx + 1} dari ${q1Data.length}`;
document.getElementById('q1-text').innerText = d.q;
let html = "";
d.opts.forEach((o, i) => {
html += `<button class="opt-btn" onclick="checkQ1(${i})">${o}</button>`;
});
document.getElementById('q1-opts').innerHTML = html;
document.getElementById('q1-feedback').innerText = "";
document.getElementById('q1-next-btn').style.display = "none";
reRenderMath();
}
function checkQ1(i) {
if(i === q1Data[q1Idx].ans) {
document.getElementById('q1-feedback').innerText = "๐ Keren Sekali! Jawabanmu Tepat!";
document.getElementById('q1-feedback').style.color = "var(--success)";
} else {
document.getElementById('q1-feedback').innerText = "โ Ups! Ayo coba lagi di soal berikutnya!";
document.getElementById('q1-feedback').style.color = "var(--accent)";
}
document.getElementById('q1-next-btn').style.display = "inline-block";
}
function nextQ1() { q1Idx++; renderQ1(); }
// Bank Soal TP 2 (Simbol dihapus)
const q2Data = [
{ q: "Satuan Internasional (SI) untuk mengukur Panjang Kain adalah...", opts: ["Centimeter (\\text{cm})", "Meter (\\text{m})", "Kilometer (\\text{km})"], ans: 1 },
{ q: "Satuan SI resmi untuk mengukur Suhu adalah...", opts: ["Celsius (^{\\circ}\\text{C})", "Fahrenheit (^{\\circ}\\text{F})", "Kelvin (\\text{K})"], ans: 2 },
{ q: "Satuan SI resmi untuk Besaran Massa benda adalah...", opts: ["Gram (\\text{g})", "Kilogram (\\text{kg})", "Ton"], ans: 1 }
];
let q2Idx = 0;
function renderQ2() {
if(q2Idx >= q2Data.length) {
document.getElementById('q2-text').innerText = "๐ Luar Biasa! Kuis TP 2 Tuntas!";
document.getElementById('q2-opts').innerHTML = "";
document.getElementById('q2-next-btn').style.display = "none";
return;
}
let d = q2Data[q2Idx];
document.getElementById('q2-num').innerText = `Soal ${q2Idx + 1} dari ${q2Data.length}`;
document.getElementById('q2-text').innerText = d.q;
let html = "";
d.opts.forEach((o, i) => {
html += `<button class="opt-btn" onclick="checkQ2(${i})">${o}</button>`;
});
document.getElementById('q2-opts').innerHTML = html;
document.getElementById('q2-feedback').innerText = "";
document.getElementById('q2-next-btn').style.display = "none";
reRenderMath();
}
function checkQ2(i) {
if(i === q2Data[q2Idx].ans) {
document.getElementById('q2-feedback').innerText = "๐ Hebat! Kamu makin paham SI!";
document.getElementById('q2-feedback').style.color = "var(--success)";
} else {
document.getElementById('q2-feedback').innerText = "โ Hampir benar, yuk lanjut!";
document.getElementById('q2-feedback').style.color = "var(--accent)";
}
document.getElementById('q2-next-btn').style.display = "inline-block";
}
function nextQ2() { q2Idx++; renderQ2(); }
// Multi User Score
let groupScore = [false, false, false, false];
function groupAns(user, isTrue) {
if(isTrue) groupScore[user-1] = true;
let total = groupScore.filter(Boolean).length;
document.getElementById('group-score-display').innerText = `๐ฅ Total Skor Kelompok: ${total * 25} / 100`;
}
// Ujian Akhir (Simbol dihapus)
const exData = [
{ q: "1. Besaran yang diturunkan dari besaran pokok dinamakan...", opts: ["Besaran Pokok", "Besaran Turunan", "Besaran Utama"], ans: 1 },
{ q: "2. Suhu tubuh adik saat demam adalah $310\\text{ K}$. Suhu adalah besaran...", opts: ["Pokok", "Turunan", "Lokal"], ans: 0 },
{ q: "3. Satuan SI untuk Timbangan Massa Beras adalah...", opts: ["Gram (\\text{g})", "Kilogram (\\text{kg})", "Kuintal"], ans: 1 },
{ q: "4. Mengapa jengkal dinamakan satuan tidak baku?", opts: ["Karena berlaku internasional", "Karena ukuran tangan tiap orang beda-beda", "Karena ukurannya pasti sama"], ans: 1 },
{ q: "5. Kecepatan sepeda dinyatakan dalam $\\text{m/s}$. Kecepatan adalah besaran...", opts: ["Pokok", "Turunan", "Tradisional"], ans: 1 }
];
let exIdx = 0;
function renderExam() {
if(exIdx >= exData.length) {
document.getElementById('ex-text').innerText = "๐ Selamat! Kamu telah menyelesaikan Ujian Akhir!";
document.getElementById('ex-opts').innerHTML = "";
document.getElementById('ex-next-btn').style.display = "none";
return;
}
let d = exData[exIdx];
document.getElementById('ex-num').innerText = `Soal ${exIdx + 1} dari ${exData.length}`;
document.getElementById('ex-text').innerText = d.q;
let html = "";
d.opts.forEach((o, i) => {
html += `<button class="opt-btn" onclick="checkExam(${i})">${o}</button>`;
});
document.getElementById('ex-opts').innerHTML = html;
document.getElementById('ex-feedback').innerText = "";
document.getElementById('ex-next-btn').style.display = "none";
reRenderMath();
}
function checkExam(i) {
document.getElementById('ex-feedback').innerText = "๐ Jawabanmu Terekam!";
document.getElementById('ex-feedback').style.color = "var(--success)";
document.getElementById('ex-next-btn').style.display = "inline-block";
}
function nextExam() { exIdx++; renderExam(); }
// Init Engine
renderQ1();
renderQ2();
renderExam();
updateSlide();
</script>
</body>
</html>
Kelas 7
IPA
Sel dan Perkembangannya 1 : Struktur Sel dan Perbedaan
<!doctype html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>IPA Kelas 8: Struktur & Perbedaan Sel (TP 1 & 2) ๐งฌ</title>
<!-- Tailwind CSS & Icons -->
<script src="https://cdn.tailwindcss.com/3.4.17"></script>
<script src="https://cdn.jsdelivr.net/npm/lucide@0.263.0/dist/umd/lucide.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;600;700;800&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Plus Jakarta Sans', sans-serif;
background-color: #f0fdf4;
background-image: radial-gradient(#d1fae5 1.5px, transparent 1.5px);
background-size: 24px 24px;
}
.slide { display: none; opacity: 0; transform: scale(0.96) translateY(15px); transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); }
.slide.active { display: flex; opacity: 1; transform: scale(1) translateY(0); }
@keyframes pop {
0% { transform: scale(0.85); opacity: 0; }
100% { transform: scale(1); opacity: 1; }
}
.pop-in { animation: pop 0.35s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.nav-btn { border-bottom: 4px solid rgba(0,0,0,0.15); transition: all 0.2s; }
.nav-btn:active:not(:disabled) { transform: translateY(2px); border-bottom-width: 1px; }
</style>
</head>
<body class="min-h-screen flex flex-col text-slate-800">
<!-- Header & Progress Bar -->
<header class="bg-white/95 backdrop-blur-md px-6 py-4 border-b-4 border-emerald-200 sticky top-0 z-10 shadow-sm flex items-center gap-4">
<div class="flex-shrink-0 bg-emerald-600 p-2.5 rounded-2xl shadow-md text-white">
<i data-lucide="dna" class="w-6 h-6"></i>
</div>
<div class="flex-1">
<div class="flex justify-between items-end mb-1">
<span class="text-xs font-extrabold text-emerald-800 uppercase tracking-widest">IPA Kelas 8 - Fokus TP 1 & TP 2</span>
<span id="progress-text" class="text-xs font-black text-white bg-emerald-600 px-3 py-1 rounded-full shadow-sm">0%</span>
</div>
<div class="h-3.5 w-full bg-slate-100 rounded-full overflow-hidden border border-slate-200">
<div id="progress-bar" class="h-full bg-gradient-to-r from-teal-400 via-emerald-500 to-green-600 w-0 transition-all duration-500 ease-out"></div>
</div>
</div>
</header>
<main class="flex-1 flex flex-col overflow-y-auto overflow-x-hidden relative pb-10">
<!-- Slide 1: Cover & Tujuan Pembelajaran -->
<div class="slide active flex-col items-center justify-center text-center p-8 gap-6 h-full min-h-[75vh]">
<div class="max-w-4xl mx-auto space-y-5">
<div class="inline-block px-5 py-2 rounded-2xl bg-emerald-100 text-emerald-900 text-xs font-extrabold uppercase tracking-widest shadow-sm">
Kurikulum Merdeka โข Kelas 8
</div>
<h1 class="text-4xl md:text-6xl font-black leading-tight text-slate-900 mt-2">
Struktur Sel & Perbedaan <span class="text-transparent bg-clip-text bg-gradient-to-r from-emerald-600 to-teal-600">Sel Hewan vs Tumbuhan</span> ๐ฌ
</h1>
<div class="bg-white p-6 rounded-3xl border-2 border-emerald-200 shadow-xl text-left mt-6 max-w-2xl mx-auto">
<h3 class="font-black text-lg text-emerald-900 mb-3 flex items-center gap-2"><i data-lucide="target" class="text-emerald-600"></i> Fokus Tujuan Pembelajaran:</h3>
<ol class="space-y-3 text-sm font-bold text-slate-700 list-decimal list-inside pl-2">
<li>Peserta didik dapat <span class="text-emerald-700">menjelaskan struktur dan fungsi sel organisme</span> secara mendetail.</li>
<li>Peserta didik dapat <span class="text-emerald-700">membedakan sel hewan dengan sel tumbuhan</span> berdasarkan organel penyusunnya.</li>
</ol>
</div>
<p class="text-base font-bold text-slate-500 mt-4 animate-pulse">Siap memperdalam pengetahuan biologismu? Mari mulai! ๐</p>
</div>
</div>
<!-- Slide 2: Identitas Siswa -->
<div class="slide flex-col p-8 gap-6 max-w-lg mx-auto w-full min-h-[75vh] justify-center">
<div class="bg-white p-8 rounded-3xl border-2 border-emerald-200 shadow-xl text-center">
<span class="text-4xl block mb-2">๐ค</span>
<h2 class="text-2xl font-black text-slate-900 mb-1">Identitas Siswa</h2>
<p class="text-slate-500 text-xs mb-6">Masukkan data diri sebelum memulai eksplorasi materi.</p>
<div class="space-y-4 text-left">
<div>
<label class="block text-xs font-bold text-slate-700 uppercase mb-1">Nama Lengkap</label>
<input type="text" id="input-nama" placeholder="Contoh: Budi Santoso" class="w-full p-3 border-2 border-slate-200 rounded-xl font-bold text-sm bg-slate-50 focus:outline-emerald-500">
</div>
<div>
<label class="block text-xs font-bold text-slate-700 uppercase mb-1">Kelas / Kelompok</label>
<input type="text" id="input-kelas" placeholder="Contoh: 8B / Kelompok 3" class="w-full p-3 border-2 border-slate-200 rounded-xl font-bold text-sm bg-slate-50 focus:outline-emerald-500">
</div>
</div>
</div>
</div>
<!-- Slide 3: TP 1 (Bagian A) - Pengertian & Sejarah Sel -->
<div class="slide flex-col p-8 gap-6 max-w-5xl mx-auto w-full min-h-[75vh]">
<div class="text-center">
<span class="bg-emerald-100 text-emerald-800 text-xs font-bold px-3 py-1 rounded-full uppercase tracking-wider">Tujuan 1 (Bagian A)</span>
<h2 class="text-3xl font-black text-emerald-900 mt-2">Apa Itu Sel? (Unit Terkecil Kehidupan) ๐งซ</h2>
</div>
<div class="bg-white p-6 rounded-3xl border-2 border-emerald-200 shadow-lg space-y-4 text-sm">
<p class="text-slate-700 leading-relaxed font-medium">
Semua makhluk hidup di bumi tersusun atas sel. Kata "sel" pertama kali dicetuskan oleh <b>Robert Hooke</b> pada tahun 1665 saat mengamati sayatan gabus di bawah mikroskop sederhana.
</p>
<div class="grid md:grid-cols-2 gap-4">
<div class="bg-emerald-50 p-4 rounded-2xl border border-emerald-200 space-y-2">
<h4 class="font-black text-emerald-900 text-sm">๐งฉ Satuan Struktural</h4>
<p class="text-xs text-slate-600 leading-relaxed">Berarti sel adalah blok penyusun dasar yang membentuk seluruh tubuh makhluk hidup (baik uniseluler seperti bakteri maupun multiseluler seperti manusia).</p>
</div>
<div class="bg-teal-50 p-4 rounded-2xl border border-teal-200 space-y-2">
<h4 class="font-black text-teal-900 text-sm">โ๏ธ Satuan Fungsional</h4>
<p class="text-xs text-slate-600 leading-relaxed">Berarti seluruh proses kehidupan (metabolisme, respirasi, ekskresi, reproduksi) terjadi di dalam tingkat seluler.</p>
</div>
</div>
</div>
</div>
<!-- Slide 4: TP 1 (Bagian B) - Struktur & Fungsi Organel Sel -->
<div class="slide flex-col p-8 gap-6 max-w-5xl mx-auto w-full min-h-[75vh]">
<div class="text-center">
<span class="bg-emerald-100 text-emerald-800 text-xs font-bold px-3 py-1 rounded-full uppercase tracking-wider">Tujuan 1 (Bagian B)</span>
<h2 class="text-3xl font-black text-emerald-900 mt-2">Struktur dan Fungsi Organel Sel ๐ฌ</h2>
</div>
<div class="bg-white p-6 rounded-3xl border-2 border-emerald-200 shadow-lg space-y-4 text-sm">
<p class="text-slate-700 font-medium">Di dalam sel terdapat berbagai bagian kecil bernama <b>organel sel</b> yang memiliki tugas spesifik:</p>
<div class="grid md:grid-cols-2 gap-3">
<div class="bg-slate-50 p-3.5 rounded-xl border border-slate-200">
<h4 class="font-bold text-emerald-800 text-xs">1. Membran Sel</h4>
<p class="text-xs text-slate-600 mt-0.5">Berperan sebagai penjaga gerbang yang mengatur keluar masuknya zat ke dalam dan ke luar sel.</p>
</div>
<div class="bg-slate-50 p-3.5 rounded-xl border border-slate-200">
<h4 class="font-bold text-emerald-800 text-xs">2. Nukleus (Inti Sel)</h4>
<p class="text-xs text-slate-600 mt-0.5">Otak atau pusat pengendali seluruh aktivitas sel serta penyimpan materi genetik (DNA).</p>
</div>
<div class="bg-slate-50 p-3.5 rounded-xl border border-slate-200">
<h4 class="font-bold text-emerald-800 text-xs">3. Sitoplasma</h4>
<p class="text-xs text-slate-600 mt-0.5">Cairan agar-agar tempat organel sel berada dan tempat terjadinya reaksi kimia metabolisme.</p>
</div>
<div class="bg-slate-50 p-3.5 rounded-xl border border-slate-200">
<h4 class="font-bold text-emerald-800 text-xs">4. Mitokondria</h4>
<p class="text-xs text-slate-600 mt-0.5">Pabrik tenaga sel yang menghasilkan energi melalui proses respirasi seluler.</p>
</div>
</div>
</div>
</div>
<!-- Slide 5: TP 1 (Bagian C) - Organel Pendukung Lainnya -->
<div class="slide flex-col p-8 gap-6 max-w-5xl mx-auto w-full min-h-[75vh]">
<div class="text-center">
<span class="bg-emerald-100 text-emerald-800 text-xs font-bold px-3 py-1 rounded-full uppercase tracking-wider">Tujuan 1 (Bagian C)</span>
<h2 class="text-3xl font-black text-emerald-900 mt-2">Organel Pendukung Sel Lainnya โ๏ธ</h2>
</div>
<div class="bg-white p-6 rounded-3xl border-2 border-emerald-200 shadow-lg space-y-4 text-sm">
<div class="grid md:grid-cols-3 gap-4">
<div class="bg-teal-50 p-4 rounded-2xl border border-teal-200 space-y-1">
<h4 class="font-bold text-teal-900 text-xs">Ribosom</h4>
<p class="text-xs text-slate-600">Tempat sintesis (pembentukan) protein di dalam sel.</p>
</div>
<div class="bg-teal-50 p-4 rounded-2xl border border-teal-200 space-y-1">
<h4 class="font-bold text-teal-900 text-xs">Retikulum Endoplasma (RE)</h4>
<p class="text-xs text-slate-600">Saluran pengangkut zat di dalam sel (ada RE kasar dan halus).</p>
</div>
<div class="bg-teal-50 p-4 rounded-2xl border border-teal-200 space-y-1">
<h4 class="font-bold text-teal-900 text-xs">Badan Golgi</h4>
<p class="text-xs text-slate-600">Memproses dan mengeksport protein ke luar sel.</p>
</div>
</div>
<div class="bg-amber-50 p-4 rounded-2xl border border-amber-200">
<p class="text-xs font-bold text-amber-900">๐ก Catatan Penting Struktur Sel:</p>
<p class="text-xs text-amber-800 mt-1">Setiap organel saling bekerja sama secara harmonis ibarat sebuah pabrik industri yang terkoordinasi dengan sangat rapi.</p>
</div>
</div>
</div>
<!-- Slide 6: TP 2 (Bagian A) - Pengantar Sel Hewan & Tumbuhan -->
<div class="slide flex-col p-8 gap-6 max-w-5xl mx-auto w-full min-h-[75vh]">
<div class="text-center">
<span class="bg-teal-100 text-teal-800 text-xs font-bold px-3 py-1 rounded-full uppercase tracking-wider">Tujuan 2 (Bagian A)</span>
<h2 class="text-3xl font-black text-teal-900 mt-2">Mengenal Tipe Sel Eukariotik: Hewan & Tumbuhan ๐ฟ๐พ</h2>
</div>
<div class="bg-white p-6 rounded-3xl border-2 border-teal-200 shadow-lg space-y-4 text-sm">
<p class="text-slate-700 leading-relaxed font-medium">
Meskipun sel hewan dan sel tumbuhan sama-sama memiliki inti sel dan organel dasar (seperti mitokondria dan ribosom), keduanya memiliki perbedaan struktur yang mencolok karena perbedaan cara hidup dan kebutuhan biologis mereka.
</p>
<div class="grid md:grid-cols-2 gap-4">
<div class="bg-emerald-50 p-4 rounded-2xl border border-emerald-200">
<h4 class="font-bold text-emerald-900 text-xs mb-1">๐ฟ Mengapa Tumbuhan Butuh Struktur Kaku?</h4>
<p class="text-xs text-slate-600">Tumbuhan tidak memiliki rangka tulang seperti hewan, sehingga sel tumbuhan memerlukan dinding sel yang kokoh agar tubuhnya bisa berdiri tegak melawan gravitasi.</p>
</div>
<div class="bg-sky-50 p-4 rounded-2xl border border-sky-200">
<h4 class="font-bold text-sky-900 text-xs mb-1">๐พ Mengapa Hewan Bisa Bergerak Bebas?</h4>
<p class="text-xs text-slate-600">Sel hewan tidak memiliki dinding sel yang kaku, sehingga membran selnya lebih fleksibel dan memungkinkan sel hewan memiliki berbagai bentuk serta mudah bergerak.</p>
</div>
</div>
</div>
</div>
<!-- Slide 7: TP 2 (Bagian B) - Tabel Perbandingan Detail Sel Hewan & Tumbuhan -->
<div class="slide flex-col p-8 gap-6 max-w-5xl mx-auto w-full min-h-[75vh]">
<div class="text-center">
<span class="bg-teal-100 text-teal-800 text-xs font-bold px-3 py-1 rounded-full uppercase tracking-wider">Tujuan 2 (Bagian B)</span>
<h2 class="text-3xl font-black text-teal-900 mt-2">Tabel Perbandingan: Sel Hewan vs Sel Tumbuhan ๐</h2>
</div>
<div class="bg-white p-6 rounded-3xl border-2 border-teal-200 shadow-lg overflow-x-auto">
<table class="w-full text-left text-xs border-collapse">
<thead>
<tr class="bg-teal-600 text-white">
<th class="p-3 border">Perbedaan Organel</th>
<th class="p-3 border">Sel Tumbuhan</th>
<th class="p-3 border">Sel Hewan</th>
</tr>
</thead>
<tbody class="divide-y divide-slate-200 font-medium text-slate-700">
<tr>
<td class="p-3 font-bold bg-slate-50">Dinding Sel</td>
<td class="p-3 text-emerald-700 font-bold">Ada (Kaku dari selulosa)</td>
<td class="p-3 text-rose-600 font-bold">Tidak Ada</td>
</tr>
<tr>
<td class="p-3 font-bold bg-slate-50">Kloroplas (Plastida)</td>
<td class="p-3 text-emerald-700 font-bold">Ada (Untuk fotosintesis)</td>
<td class="p-3 text-rose-600 font-bold">Tidak Ada</td>
</tr>
<tr>
<td class="p-3 font-bold bg-slate-50">Vakuola</td>
<td class="p-3">Ada, ukuran <b>sangat besar</b></td>
<td class="p-3">Ada, ukuran kecil / tidak permanen</td>
</tr>
<tr>
<td class="p-3 font-bold bg-slate-50">Sentriol</td>
<td class="p-3 text-rose-600">Tidak ada (umumnya)</td>
<td class="p-3 text-emerald-700 font-bold">Ada (Berperan saat pembelahan sel)</td>
</tr>
<tr>
<td class="p-3 font-bold bg-slate-50">Bentuk Sel</td>
<td class="p-3">Tetap / Beraturan</td>
<td class="p-3">Berubah-ubah / Fleksibel</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Slide 8: Kuis Interaktif Kelompok (Multi-User Battle) -->
<div class="slide flex-col p-6 gap-4 max-w-7xl mx-auto w-full min-h-[85vh]">
<div class="text-center">
<span class="bg-amber-100 text-amber-800 text-xs font-bold px-3 py-1 rounded-full uppercase tracking-wider">Evaluasi Kelompok</span>
<h2 class="text-3xl md:text-5xl font-black text-transparent bg-clip-text bg-gradient-to-r from-emerald-600 to-teal-600 tracking-wide uppercase mt-1">โก BATTLE KELOMPOK MULTI-USER (TP 1 & 2) โก</h2>
<p class="text-sm font-bold text-slate-600 mt-1">3 Perwakilan Kelompok maju ke depan! Jawab 5 soal struktur & perbedaan sel secara bergantian.</p>
</div>
<div class="grid md:grid-cols-3 gap-5 flex-1 items-stretch">
<!-- KELOMPOK 1 -->
<div class="bg-white p-6 rounded-[2rem] border-4 border-emerald-400 shadow-xl flex flex-col justify-between relative overflow-hidden">
<div class="absolute top-0 left-0 w-full bg-emerald-600 text-white py-2 px-4 flex justify-between items-center font-black text-sm">
<span>๐ข Kelompok 1</span>
<span id="ifp-score-1" class="bg-emerald-800 px-3 py-0.5 rounded-full text-xs">Soal 1/5</span>
</div>
<div class="mt-8 flex-1 flex flex-col justify-center space-y-3">
<div class="bg-emerald-50 p-4 rounded-2xl border border-emerald-100 text-center">
<p id="ifp-q-1" class="text-base font-black text-slate-800 leading-snug">Memuat soal...</p>
</div>
<div id="ifp-opts-1" class="space-y-2"></div>
<div id="ifp-feedback-1" class="hidden p-2.5 rounded-xl font-bold text-xs text-center pop-in"></div>
</div>
</div>
<!-- KELOMPOK 2 -->
<div class="bg-white p-6 rounded-[2rem] border-4 border-teal-400 shadow-xl flex flex-col justify-between relative overflow-hidden">
<div class="absolute top-0 left-0 w-full bg-teal-600 text-white py-2 px-4 flex justify-between items-center font-black text-sm">
<span>๐ต Kelompok 2</span>
<span id="ifp-score-2" class="bg-teal-800 px-3 py-0.5 rounded-full text-xs">Soal 1/5</span>
</div>
<div class="mt-8 flex-1 flex flex-col justify-center space-y-3">
<div class="bg-teal-50 p-4 rounded-2xl border border-teal-100 text-center">
<p id="ifp-q-2" class="text-base font-black text-slate-800 leading-snug">Memuat soal...</p>
</div>
<div id="ifp-opts-2" class="space-y-2"></div>
<div id="ifp-feedback-2" class="hidden p-2.5 rounded-xl font-bold text-xs text-center pop-in"></div>
</div>
</div>
<!-- KELOMPOK 3 -->
<div class="bg-white p-6 rounded-[2rem] border-4 border-green-400 shadow-xl flex flex-col justify-between relative overflow-hidden">
<div class="absolute top-0 left-0 w-full bg-green-600 text-white py-2 px-4 flex justify-between items-center font-black text-sm">
<span>๐ก Kelompok 3</span>
<span id="ifp-score-3" class="bg-green-800 px-3 py-0.5 rounded-full text-xs">Soal 1/5</span>
</div>
<div class="mt-8 flex-1 flex flex-col justify-center space-y-3">
<div class="bg-green-50 p-4 rounded-2xl border border-green-100 text-center">
<p id="ifp-q-3" class="text-base font-black text-slate-800 leading-snug">Memuat soal...</p>
</div>
<div id="ifp-opts-3" class="space-y-2"></div>
<div id="ifp-feedback-3" class="hidden p-2.5 rounded-xl font-bold text-xs text-center pop-in"></div>
</div>
</div>
</div>
<!-- Modal Pemenang -->
<div id="ifp-winner-modal" class="hidden absolute inset-0 bg-slate-900/95 backdrop-blur-sm z-50 flex-col items-center justify-center text-center p-8 rounded-3xl">
<div class="text-8xl mb-4 animate-bounce">๐</div>
<h2 id="ifp-winner-text" class="text-5xl font-black text-transparent bg-clip-text bg-gradient-to-r from-yellow-300 to-emerald-400 mb-6 drop-shadow-lg">JUARA KELOMPOK!</h2>
<button onclick="resetIFPGame()" class="px-8 py-4 bg-emerald-600 hover:bg-emerald-500 text-white font-black text-xl rounded-full shadow-[0_6px_0px_#065f46] transition">
Mainkan Lagi ๐
</button>
</div>
</div>
<!-- Slide 9: Ujian Akhir Individu & Pelaporan Guru -->
<div class="slide flex-col p-8 gap-6 max-w-4xl mx-auto w-full min-h-[75vh]">
<div id="evaluasi-section" class="w-full text-center">
<h2 class="text-3xl md:text-4xl font-black text-slate-900 mb-2">๐ Ujian Mandiri (Fokus TP 1 & 2)</h2>
<p class="text-base font-bold text-slate-500 mb-6">Uji pemahaman individumu melalui 5 soal pilihan ganda berikut.</p>
<div class="bg-white p-8 rounded-[2rem] border-4 border-emerald-200 shadow-xl text-left">
<div class="flex justify-between items-center mb-6 border-b-2 border-slate-100 pb-4">
<span class="font-black text-emerald-800 bg-emerald-100 px-3 py-1 rounded-lg text-sm">Soal <span id="eval-q-num">1</span> dari 5</span>
</div>
<p id="eval-q-text" class="text-xl md:text-2xl font-bold text-slate-800 mb-6 leading-relaxed flex flex-wrap gap-2 items-center"></p>
<div id="eval-options" class="space-y-3"></div>
<div id="eval-feedback" class="hidden mt-6 p-5 rounded-xl text-lg font-bold border-l-8 pop-in"></div>
</div>
</div>
<!-- Halaman Kirim Nilai -->
<div id="lms-section" class="hidden w-full flex-col items-center justify-center text-center">
<div class="text-7xl mb-4 animate-bounce">๐ฅ</div>
<h2 class="text-4xl font-black text-emerald-900 mb-2">Ujian Selesai!</h2>
<p class="text-2xl font-extrabold text-slate-600 mb-6">Skor Mandiri: <span id="final-score-display" class="text-white text-5xl bg-gradient-to-r from-emerald-600 to-teal-600 px-6 py-2 rounded-2xl inline-block ml-2 shadow-lg transform rotate-2"></span></p>
<div class="bg-white border-4 border-emerald-300 p-8 rounded-[2rem] max-w-lg w-full shadow-xl space-y-5 text-left relative overflow-hidden">
<p class="font-bold text-slate-500 text-center mb-4">Kirim laporan nilai hasil belajarmu ke guru.</p>
<div>
<label class="block text-sm font-black text-slate-700 uppercase mb-2">Nama & Kelas</label>
<input type="text" id="input-nama-lapor" placeholder="Contoh: Budi (8A)" class="w-full p-4 border-2 border-slate-200 rounded-xl font-bold focus:outline-emerald-500 bg-slate-50 text-sm">
</div>
<div>
<label class="block text-sm font-black text-slate-700 uppercase mb-2">Tingkat Pemahaman</label>
<select id="input-baterai" class="w-full p-4 border-2 border-slate-200 rounded-xl font-bold bg-slate-50 focus:outline-emerald-500 text-sm">
<option value="100">100% - Sangat Paham!</option>
<option value="75">75% - Paham Sebagian Besar</option>
<option value="50">50% - Butuh Latihan Lagi</option>
</select>
</div>
<button onclick="kirimNilaiKeLMS()" class="w-full py-4 mt-4 bg-gradient-to-r from-emerald-600 to-teal-600 text-white text-xl font-black rounded-2xl shadow-lg hover:shadow-xl transition-all">
Kirim Laporan ke Guru ๐
</button>
</div>
</div>
</div>
<!-- Slide 10: Refleksi Perasaan Siswa -->
<div class="slide flex-col items-center justify-center p-8 gap-6 h-full min-h-[75vh]">
<div class="text-center w-full">
<h2 class="text-4xl md:text-5xl font-black text-slate-900 mb-4">Refleksi Pembelajaran ๐ญ</h2>
<p class="text-lg font-bold text-slate-600 max-w-2xl mx-auto">Bagaimana perasaanmu setelah mempelajari struktur dan perbedaan sel hari ini?</p>
</div>
<div class="grid grid-cols-3 gap-6 mt-6 w-full max-w-3xl">
<button onclick="pilihRefleksi(this)" class="refleksi-btn bg-white border-4 border-slate-200 p-6 rounded-3xl shadow-sm hover:-translate-y-2 hover:border-green-400 transition-all text-center cursor-pointer">
<div class="text-5xl mb-2">๐</div>
<h3 class="font-black text-lg text-slate-700">Senang & Paham</h3>
</button>
<button onclick="pilihRefleksi(this)" class="refleksi-btn bg-white border-4 border-slate-200 p-6 rounded-3xl shadow-sm hover:-translate-y-2 hover:border-yellow-400 transition-all text-center cursor-pointer">
<div class="text-5xl mb-2">๐ค</div>
<h3 class="font-black text-lg text-slate-700">Cukup Mengerti</h3>
</button>
<button onclick="pilihRefleksi(this)" class="refleksi-btn bg-white border-4 border-slate-200 p-6 rounded-3xl shadow-sm hover:-translate-y-2 hover:border-red-400 transition-all text-center cursor-pointer">
<div class="text-5xl mb-2">๐คฏ</div>
<h3 class="font-black text-lg text-slate-700">Perlu Bimbingan</h3>
</button>
</div>
<div class="w-full max-w-3xl mt-6 bg-white p-6 rounded-3xl border-2 border-slate-200 shadow-sm">
<label class="block font-black text-slate-700 mb-2 text-sm">Tuliskan kesan atau bagian paling menarik hari ini:</label>
<textarea id="refleksi-teks" class="w-full p-4 rounded-xl bg-emerald-50 border-2 border-emerald-200 focus:border-emerald-500 outline-none font-medium text-sm" rows="3" placeholder="Tuliskan di sini..."></textarea>
</div>
</div>
</main>
<!-- Bottom Navigation -->
<footer class="bg-white px-6 py-5 border-t-4 border-slate-200 sticky bottom-0 z-20">
<nav class="flex items-center justify-between max-w-5xl mx-auto" aria-label="Slide navigation">
<button type="button" id="prev-btn" class="nav-btn flex items-center gap-2 px-6 py-3 rounded-2xl bg-slate-200 text-slate-700 font-black text-base disabled:opacity-40 disabled:pointer-events-none hover:bg-slate-300">
<i data-lucide="chevron-left" class="w-5 h-5"></i> <span class="hidden md:inline">Sebelumnya</span>
</button>
<button type="button" id="next-btn" class="nav-btn flex items-center gap-2 px-8 py-3 rounded-2xl bg-emerald-600 text-white font-black text-base disabled:opacity-40 disabled:pointer-events-none hover:bg-emerald-700 shadow-[0_4px_0px_#047857]">
<span class="hidden md:inline">Selanjutnya</span> <i data-lucide="rocket" class="w-5 h-5"></i>
</button>
</nav>
</footer>
<script>
lucide.createIcons();
const slides = document.querySelectorAll('.slide');
let current = 0;
const prevBtn = document.getElementById('prev-btn');
const nextBtn = document.getElementById('next-btn');
const progressBar = document.getElementById('progress-bar');
const progressText = document.getElementById('progress-text');
function showSlide(i) {
slides[current].classList.remove('active');
current = i;
slides[current].classList.add('active');
const elementsToAnimate = slides[current].querySelectorAll('h2, .pop-in');
elementsToAnimate.forEach(el => {
el.classList.remove('pop-in');
void el.offsetWidth;
el.classList.add('pop-in');
});
prevBtn.disabled = current === 0;
if (current === slides.length - 1) {
nextBtn.disabled = true;
nextBtn.classList.add('hidden');
} else {
nextBtn.disabled = false;
nextBtn.classList.remove('hidden');
}
// Sinkronisasi nama siswa ke form akhir
if (current === 9) {
let n = document.getElementById('input-nama').value;
let k = document.getElementById('input-kelas').value;
if(n) document.getElementById('input-nama-lapor').value = n + (k ? " (" + k + ")" : "");
}
const progress = (current / (slides.length - 1)) * 100;
progressBar.style.width = `${progress}%`;
progressText.textContent = `${Math.round(progress)}%`;
window.scrollTo({ top: 0, behavior: 'smooth' });
}
prevBtn.addEventListener('click', () => { if (current > 0) showSlide(current - 1); });
nextBtn.addEventListener('click', () => { if (current < slides.length - 1) showSlide(current + 1); });
// ==========================================
// MULTI-USER KELOMPOK GAME (3 Kelompok, @5 Soal)
// ==========================================
let ifpProgress = { 1: 0, 2: 0, 3: 0 };
const TOTAL_IFP_QUESTIONS = 5;
const multiUserBank = [
{ q: "Pusat pengendali seluruh aktivitas sel dan pembawa materi genetik adalah...", opts: ["Nukleus", "Mitokondria", "Membran Sel"], ans: 0 },
{ q: "Organel sel yang berfungsi menghasilkan energi melalui respirasi sel adalah...", opts: ["Mitokondria", "Ribosom", "Vakuola"], ans: 0 },
{ q: "Manakah struktur yang hanya dijumpai pada sel tumbuhan?", opts: ["Dinding sel & Kloroplas", "Lisosom & Sentriol", "Membran sel"], ans: 0 },
{ q: "Bagian sel yang berfungsi mengatur keluar masuknya zat adalah...", opts: ["Membran sel", "Nukleus", "Sitoplasma"], ans: 0 },
{ q: "Organel yang berperan dalam pembentukan protein adalah...", opts: ["Ribosom", "Mitokondria", "Badan Golgi"], ans: 0 },
{ q: "Manakah ciri khas yang hanya dimiliki oleh sel hewan?", opts: ["Memiliki sentriol", "Memiliki dinding sel", "Memiliki kloroplas"], ans: 0 }
];
function initIFPQuestion(group) {
document.getElementById(`ifp-feedback-${group}`).classList.add('hidden');
if(ifpProgress[group] >= TOTAL_IFP_QUESTIONS) {
document.getElementById(`ifp-q-${group}`).innerHTML = `๐ SELESAI!<br>Kelompok ${group} menuntaskan 5 soal!`;
document.getElementById(`ifp-opts-${group}`).innerHTML = "";
checkWinnerIFP(group);
return;
}
document.getElementById(`ifp-score-${group}`).innerText = `Soal ${ifpProgress[group] + 1}/5`;
let randQ = multiUserBank[Math.floor(Math.random() * multiUserBank.length)];
document.getElementById(`ifp-q-${group}`).innerHTML = randQ.q;
let optsContainer = document.getElementById(`ifp-opts-${group}`);
optsContainer.innerHTML = "";
randQ.opts.forEach((opt, idx) => {
let btn = document.createElement('button');
btn.className = "w-full text-left p-2.5 bg-slate-100 hover:bg-slate-200 text-slate-800 font-black rounded-xl text-xs border border-slate-200 transition cursor-pointer";
btn.innerHTML = opt;
btn.onclick = () => checkIFPAnswer(group, idx, randQ.ans, btn);
optsContainer.appendChild(btn);
});
}
let winnerDeclared = false;
function checkIFPAnswer(group, selected, correctIdx, btn) {
let optsContainer = document.getElementById(`ifp-opts-${group}`);
let btns = optsContainer.querySelectorAll('button');
btns.forEach(b => b.disabled = true);
let fb = document.getElementById(`ifp-feedback-${group}`);
fb.classList.remove('hidden');
if(selected === correctIdx) {
btn.className = "w-full text-left p-2.5 bg-green-500 text-white font-black rounded-xl text-xs border border-green-700";
fb.className = "mt-2 p-2 rounded-xl font-bold text-xs bg-green-100 text-green-800 pop-in block";
fb.innerHTML = "โ
Benar! Lanjut...";
ifpProgress[group]++;
setTimeout(() => { initIFPQuestion(group); }, 800);
} else {
btn.className = "w-full text-left p-2.5 bg-rose-500 text-white font-black rounded-xl text-xs border border-rose-700";
btns[correctIdx].className = "w-full text-left p-2.5 bg-green-500 text-white font-black rounded-xl text-xs border border-green-700";
fb.className = "mt-2 p-2 rounded-xl font-bold text-xs bg-rose-100 text-rose-800 pop-in block";
fb.innerHTML = "โ Salah!";
setTimeout(() => { initIFPQuestion(group); }, 1200);
}
}
function checkWinnerIFP(group) {
if(!winnerDeclared) {
winnerDeclared = true;
setTimeout(() => {
document.getElementById('ifp-winner-text').innerText = `KELOMPOK ${group} JUARA PERTAMA! ๐`;
document.getElementById('ifp-winner-modal').classList.remove('hidden');
document.getElementById('ifp-winner-modal').classList.add('flex');
}, 300);
}
}
function resetIFPGame() {
ifpProgress = { 1: 0, 2: 0, 3: 0 };
winnerDeclared = false;
document.getElementById('ifp-winner-modal').classList.add('hidden');
document.getElementById('ifp-winner-modal').classList.remove('flex');
for(let i=1; i<=3; i++) { initIFPQuestion(i); }
}
for(let i=1; i<=3; i++) { initIFPQuestion(i); }
// Refleksi
function pilihRefleksi(btn) {
const btns = document.querySelectorAll('.refleksi-btn');
btns.forEach(b => {
b.classList.remove('border-green-400', 'border-yellow-400', 'border-red-400', 'bg-slate-100');
b.classList.add('border-slate-200');
});
btn.classList.remove('border-slate-200');
if(btn.innerText.includes('Senang')) btn.classList.add('border-green-400', 'bg-green-50');
else if(btn.innerText.includes('Cukup')) btn.classList.add('border-yellow-400', 'bg-yellow-50');
else btn.classList.add('border-red-400', 'bg-red-50');
}
// Latihan Mandiri Individu (Ujian Akhir TP 1 & 2)
const evaluasiBank = [
{
q: "Bagian sel yang berfungsi sebagai pengendali seluruh aktivitas sel dan pembawa informasi genetik (DNA) adalah...",
options: ["Nukleus", "Mitokondria", "Membran sel", "Ribosom"],
a: 0,
exp: "Nukleus atau inti sel bertindak sebagai pusat pengendali sel."
},
{
q: "Organel sel yang berfungsi sebagai tempat pembentukan energi (respirasi sel) adalah...",
options: ["Mitokondria", "Badan Golgi", "Vakuola", "Sitoplasma"],
a: 0,
exp: "Mitokondria dikenal sebagai pabrik energi sel."
},
{
q: "Manakah di bawah ini yang merupakan organel yang HANYA terdapat pada sel tumbuhan?",
options: ["Dinding sel dan kloroplas", "Mitokondria dan nukleus", "Membran sel dan ribosom", "Retikulum endoplasma"],
a: 0,
exp: "Dinding sel dan kloroplas merupakan ciri khas eksklusif pada sel tumbuhan."
},
{
q: "Mengapa sel tumbuhan memiliki bentuk yang kaku dan teratur?",
options: ["Karena memiliki dinding sel dari selulosa", "Karena tidak memiliki inti sel", "Karena vakuolanya sangat kecil", "Karena dikelilingi oleh lisosom"],
a: 0,
exp: "Dinding sel yang keras memberikan bentuk kaku pada sel tumbuhan."
},
{
q: "Fungsi utama dari kloroplas pada sel tumbuhan adalah...",
options: ["Tempat berlangsungnya fotosintesis", "Penyimpan cadangan air", "Pemberi energi gerak", "Pengatur keluar masuk zat"],
a: 0,
exp: "Kloroplas mengandung zat hijau daun (klorofil) untuk fotosintesis."
}
];
let evalIndex = 0;
let evalSkor = 0;
function loadEvaluasi() {
if(evalIndex >= evaluasiBank.length) {
document.getElementById('evaluasi-section').classList.add('hidden');
document.getElementById('lms-section').classList.remove('hidden');
document.getElementById('lms-section').classList.add('flex');
document.getElementById('final-score-display').innerText = evalSkor;
return;
}
document.getElementById('eval-feedback').classList.add('hidden');
const current = evaluasiBank[evalIndex];
document.getElementById('eval-q-num').innerText = evalIndex + 1;
document.getElementById('eval-q-text').innerHTML = current.q;
const optsContainer = document.getElementById('eval-options');
optsContainer.innerHTML = "";
current.options.forEach((opt, idx) => {
const btn = document.createElement('button');
btn.className = "w-full text-left p-4 bg-slate-50 border-2 border-slate-200 rounded-xl font-bold text-slate-700 text-base hover:bg-emerald-50 hover:border-emerald-300 transition flex items-center cursor-pointer";
btn.innerHTML = opt;
btn.onclick = () => checkEvaluasi(idx, current.a, btn, current.exp);
optsContainer.appendChild(btn);
});
}
function checkEvaluasi(selected, correct, btn, explanation) {
const btns = document.getElementById('eval-options').querySelectorAll('button');
btns.forEach(b => b.disabled = true);
const fb = document.getElementById('eval-feedback');
fb.classList.remove('hidden');
if(selected === correct) {
btn.classList.replace('bg-slate-50', 'bg-green-500');
btn.classList.replace('text-slate-700', 'text-white');
fb.className = "mt-6 p-5 rounded-xl text-base font-bold border-l-8 border-green-500 bg-green-100 text-green-800 pop-in block";
fb.innerHTML = `๐ <b>BENAR!</b><br>${explanation}`;
evalSkor += 20;
} else {
btn.classList.replace('bg-slate-50', 'bg-red-500');
btn.classList.replace('text-slate-700', 'text-white');
btns[correct].classList.replace('bg-slate-50', 'bg-green-500');
btns[correct].classList.replace('text-slate-700', 'text-white');
fb.className = "mt-6 p-5 rounded-xl text-base font-bold border-l-8 border-red-500 bg-red-100 text-red-800 pop-in block";
fb.innerHTML = `โ <b>SALAH.</b><br>${explanation}`;
}
setTimeout(() => {
evalIndex++;
loadEvaluasi();
}, 3500);
}
loadEvaluasi();
function kirimNilaiKeLMS() {
const nama = document.getElementById('input-nama-lapor').value.trim();
if(!nama) {
alert("Silakan masukkan nama & kelas terlebih dahulu!");
return;
}
const baterai = document.getElementById('input-baterai').value;
const refleksi = document.getElementById('refleksi-teks').value || "Selesai belajar!";
alert(`Laporan Berhasil Terkirim ke Guru! ๐\n\nNama: ${nama}\nSkor Ujian: ${evalSkor}\nPemahaman: ${baterai}%\nCatatan: ${refleksi}`);
}
</script>
</body>
</html>
Kelas 8
IPA
Sistem Pencernaan Manusia
<!doctype html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Analisis Kedokteran: Sistem Pencernaan Manusia</title>
<script src="https://cdn.tailwindcss.com/3.4.17"></script>
<script src="https://cdn.jsdelivr.net/npm/lucide@0.263.0/dist/umd/lucide.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&family=Playfair+Display:wght@700;800&display=swap" rel="stylesheet">
<style>
body { font-family: 'Plus Jakarta Sans', sans-serif; background-color: #f8fafc; }
.heading-font { font-family: 'Playfair Display', serif; }
.slide { display: none; }
.slide.active { display: flex; }
.match-card { transition: all 0.2s ease; cursor: pointer; }
.match-card.selected { transform: translateY(-2px); box-shadow: 0 0 0 3px #10b981; border-color: #10b981; }
.match-card.matched { opacity: 0.6; pointer-events: none; background: #ecfdf5 !important; border-color: #a7f3d0 !important; }
.nav-btn:disabled { opacity: 0.3; pointer-events: none; }
.sticky-note { animation: popIn 0.35s cubic-bezier(0.34, 1.56, 0.64, 1); }
@keyframes popIn { from { transform: scale(0.9) translateY(10px); opacity: 0; } to { transform: scale(1) translateY(0); opacity: 1; } }
</style>
</head>
<body class="w-full min-h-screen flex flex-col pb-12 text-slate-800">
<!-- Modern Minimalist Top Navigation -->
<nav class="fixed top-0 left-0 right-0 z-50 flex items-center justify-between px-6 py-4 bg-white/80 backdrop-blur-md border-b border-slate-200/80 shadow-sm">
<button class="nav-btn px-4 py-2 border border-slate-300 rounded-xl text-xs font-bold text-slate-700 bg-white hover:bg-slate-50 shadow-sm transition flex items-center gap-1" id="prev-btn" disabled>
<i data-lucide="arrow-left" style="width:14px;height:14px"></i> Kembali
</button>
<span class="text-xs font-bold tracking-widest text-slate-500 uppercase bg-slate-100 px-3 py-1.5 rounded-full" id="slide-counter">1 / 10</span>
<button class="nav-btn px-4 py-2 border border-slate-300 rounded-xl text-xs font-bold text-white bg-indigo-600 hover:bg-indigo-700 shadow-sm transition flex items-center gap-1" id="next-btn">
Lanjut <i data-lucide="arrow-right" style="width:14px;height:14px"></i>
</button>
</nav>
<main class="flex-1 pt-24 pb-6 px-4 w-full max-w-4xl mx-auto">
<!-- SLIDE 1: Welcome Screen (Realistis/Akademik Style) -->
<section class="slide active flex-col items-center justify-center text-center gap-6 min-h-[65vh]" data-slide="1">
<div class="px-4 py-1.5 bg-emerald-50 text-emerald-700 border border-emerald-200 rounded-full text-xs font-bold uppercase tracking-wider">
Modul Sains & Anatomi โข Kelas VIII
</div>
<h1 class="heading-font text-4xl md:text-6xl font-black text-slate-900 leading-tight">Bioreaktor Tubuh:<br><span class="text-emerald-600">Fisiologi Sistem Pencernaan</span></h1>
<p class="text-base md:text-lg max-w-2xl text-slate-500 font-medium leading-relaxed">Analisis komprehensif transformasi makromolekul nutrisi secara mekanis dan kimiawi di dalam saluran gastrointestinal manusia.</p>
<button id="start-btn" class="mt-4 px-8 py-3.5 bg-slate-900 text-white rounded-xl text-sm font-bold shadow-lg hover:bg-slate-800 transition transform hover:-translate-y-0.5 flex items-center gap-2">
Buka Modul Eksplorasi <i data-lucide="play" style="width:16px;height:16px"></i>
</button>
</section>
<!-- SLIDE 2: CP & TP Terintegrasi -->
<section class="slide flex-col gap-4 min-h-[65vh]" data-slide="2">
<h2 class="heading-font text-2xl font-bold text-slate-900 border-b border-slate-200 pb-2 flex items-center gap-2">
<i data-lucide="file-text" class="text-indigo-600"></i> Capaian & Target Kompetensi
</h2>
<div class="bg-white border border-slate-200 p-5 rounded-2xl shadow-sm space-y-3">
<h3 class="text-xs font-bold text-slate-400 uppercase tracking-widest">Capaian Pembelajaran (Kurikulum Nasional)</h3>
<p class="text-slate-700 text-sm leading-relaxed font-medium">
Peserta didik mampu mengidentifikasi serta menganalisis keterkaitan antara struktur organ saluran gastrointestinal dengan fungsinya dalam proses pemecahan zat makanan, serta memahami biokimia enzim pencernaan.
</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-3 mt-2">
<div class="bg-white border border-slate-200 p-4 rounded-xl shadow-sm">
<span class="text-xs font-bold text-emerald-600 uppercase">Indikator 01</span>
<p class="text-xs text-slate-600 font-semibold mt-1">Memetakan anatomi organ pencernaan utama dan kelenjar aksesori.</p>
</div>
<div class="bg-white border border-slate-200 p-4 rounded-xl shadow-sm">
<span class="text-xs font-bold text-emerald-600 uppercase">Indikator 02</span>
<p class="text-xs text-slate-600 font-semibold mt-1">Membedakan hidrolisis zat makanan secara mekanis dan enzimatik.</p>
</div>
<div class="bg-white border border-slate-200 p-4 rounded-xl shadow-sm">
<span class="text-xs font-bold text-emerald-600 uppercase">Indikator 03</span>
<p class="text-xs text-slate-600 font-semibold mt-1">Mendiagnosis gangguan biokimia (maag, konstipasi, dll) pada organ.</p>
</div>
</div>
</section>
<!-- SLIDE 3: Video Stimulus (Local Server Source) -->
<section class="slide flex-col gap-5 min-h-[65vh]" data-slide="3">
<h2 class="heading-font text-2xl font-bold text-slate-900 flex items-center gap-2"><i data-lucide="video" class="text-rose-600"></i> Video Stimulus: Proses Transportasi Makanan</h2>
<div class="w-full aspect-video bg-slate-950 rounded-2xl overflow-hidden shadow-inner border border-slate-800">
<!-- Menggunakan HTML5 native video player untuk memutar video dari local server intranet sekolah -->
<video width="100%" height="100%" controls class="w-full h-full object-contain">
<source src="http://192.168.1.100//filesharing///////////////////elearning/media/2026/0000183.C__Users_soumena_AppData_Local_edu.ruang.murid_decrypted_9272b5ef9510c946_b8f68198-714e-404f-8aec-38957fffaf6c.mp4" type="video/mp4">
Browser Anda tidak mendukung pemutar video lokal server. Silakan hubungi proktor/teknisi IT.
</video>
</div>
<div class="bg-slate-900 text-white p-5 rounded-2xl shadow-md">
<h4 class="text-xs font-bold uppercase tracking-wider text-amber-400 mb-1 flex items-center gap-1"><i data-lucide="help-circle" style="width:14px;height:14px"></i> Studi Kasus Klinis</h4>
<p class="text-slate-300 text-xs leading-relaxed mb-3">Berdasarkan visualisasi video tersebut, analisislah bagaimana mekanisme bolus makanan terdorong ke lambung meskipun tubuh dalam posisi terbalik/gravitasi nol?</p>
<textarea id="checkpoint-answer" class="w-full p-3 bg-slate-800 border border-slate-700 text-slate-100 rounded-xl resize-none h-20 text-xs focus:ring-2 focus:ring-emerald-500 focus:outline-none" placeholder="Tuliskan analisis ilmiah Anda..."></textarea>
<button class="mt-2 px-4 py-2 bg-emerald-600 text-white text-xs font-bold rounded-lg hover:bg-emerald-500 transition shadow" onclick="document.getElementById('checkpoint-feedback').classList.remove('hidden')">Kirim Analisis</button>
<p id="checkpoint-feedback" class="hidden mt-2 text-emerald-400 font-semibold text-xs flex items-center gap-1">โ
Tepat! Gerakan tersebut adalah peristaltik esofagus yang dipicu kontraksi otot sirkular dan longitudinal secara ritmis.</p>
</div>
</section>
<!-- SLIDE 4: Kedalaman Materi 1 (Ingesti & Pencernaan Atas) -->
<section class="slide flex-col gap-4 min-h-[65vh]" data-slide="4">
<h2 class="heading-font text-2xl font-bold text-slate-900 border-b border-slate-200 pb-1 flex items-center gap-2"><i data-lucide="book-open" class="text-emerald-600"></i> Fisiologi Organ Atas: Mulut hingga Lambung</h2>
<div class="space-y-3 text-sm text-slate-600 leading-relaxed">
<div class="bg-white border border-slate-200 p-4 rounded-xl shadow-sm">
<h3 class="font-bold text-slate-800 text-base mb-1 flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-emerald-500"></span> 1. Rongga Mulut (Cavum Oris)</h3>
<p class="text-xs text-slate-500 mb-2">Terjadi perpaduan pencernaan mekanis (oleh gigi dan lidah) serta kimiawi.</p>
<ul class="list-disc pl-5 space-y-1 text-xs">
<li><b>Gigi (Dentes):</b> Memotong (insisivus), merobek (caninus), dan mengunyah (molar) makanan menjadi bolus kecil.</li>
<li><b>Kelenjar Ludah (Saliva):</b> Menghasilkan enzim <b>Amilase (Ptialin)</b> yang menghidrolisis amilum menjadi disakarida (maltosa) pada pH ideal $\approx 6.8$.</li>
</ul>
</div>
<div class="bg-white border border-slate-200 p-4 rounded-xl shadow-sm">
<h3 class="font-bold text-slate-800 text-base mb-1 flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-emerald-500"></span> 2. Lambung (Ventriculus)</h3>
<p class="text-xs text-slate-500 mb-2">Kantong otot kontraktil yang menghasilkan getah lambung bersifat sangat asam (pH 1.5 - 2.5).</p>
<ul class="list-disc pl-5 space-y-1 text-xs">
<li><b>Asam Klorida (HCl):</b> Membunuh patogen mikroskopis dan mengaktifkan pepsinogen menjadi pepsin.</li>
<li><b>Enzim Pepsin:</b> Memecah makromolekul rantai protein kompleks menjadi gugus peptida (pepton).</li>
<li><b>Enzim Renin:</b> Mengkoagulasikan kasein (protein susu) dari cairan susu mamalia.</li>
</ul>
</div>
</div>
</section>
<!-- SLIDE 5: Kedalaman Materi 2 (Intestinum & Kelenjar Aksesori) -->
<section class="slide flex-col gap-4 min-h-[65vh]" data-slide="5">
<h2 class="heading-font text-2xl font-bold text-slate-900 border-b border-slate-200 pb-1 flex items-center gap-2"><i data-lucide="layers" class="text-emerald-600"></i> Absorpsi & Peran Organ Aksesori Kelenjar</h2>
<div class="space-y-3 text-sm text-slate-600 leading-relaxed">
<div class="bg-white border border-slate-200 p-4 rounded-xl shadow-sm">
<h3 class="font-bold text-slate-800 text-sm mb-1">Usus Halus (Intestinum Tenue)</h3>
<p class="text-xs text-slate-500 mb-1">Terbagi atas Duodenum (12 jari), Jejunum (kosong), dan Ileum (penyerapan). Struktur dinding Ileum dipenuhi vili (jonjot usus) untuk memperluas area penyerapan sari makanan.</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-3 text-xs">
<div class="bg-amber-50/50 border border-amber-200 p-4 rounded-xl">
<h4 class="font-bold text-amber-800 mb-1">Pankreas (Kelenjar Eksokrin)</h4>
<p class="text-slate-600 leading-relaxed mb-2">Mensekresikan natrium bikarbonat untuk menetralkan asam kimus lambung serta enzim penting:</p>
<ul class="list-disc pl-4 space-y-1 text-slate-700">
<li><b>Tripsin:</b> Memecah pepton menjadi asam amino dasar.</li>
<li><b>Lipase Pankreas:</b> Memecah emulsi lemak menjadi asam lemak dan gliserol.</li>
</ul>
</div>
<div class="bg-emerald-50/50 border border-emerald-200 p-4 rounded-xl">
<h4 class="font-bold text-emerald-800 mb-1">Hati & Kantung Empedu</h4>
<p class="text-slate-600 leading-relaxed">Hati memproduksi cairan <b>Empedu (Bile)</b> yang disimpan di kantung empedu. Cairan ini tidak mengandung enzim, melainkan garam empedu yang berfungsi **mengemulsikan lemak** secara mekanis agar bisa dihidrolisis zat lipase.</p>
</div>
</div>
</div>
</section>
<!-- SLIDE 6: Game Variasi 1 - Pilihan Ganda Teknis -->
<section class="slide flex-col gap-6 min-h-[65vh]" data-slide="6">
<h2 class="heading-font text-2xl font-bold text-slate-900 text-center">๐ฎ Kompetensi 1: Uji Biokimia Enzim</h2>
<div class="bg-white border border-slate-200 p-6 rounded-2xl shadow-sm max-w-2xl mx-auto w-full">
<p class="font-bold text-base text-slate-800 mb-4 text-center">Pasien klinis mengalami malabsorpsi lemak akibat gangguan sekresi getah alkali. Kerusakan pada organ manakah yang paling mungkin memicu penurunan hidrolisis emulsi lemak tersebut?</p>
<div class="flex flex-col gap-3" id="pg-area">
<button class="w-full py-3.5 px-4 bg-slate-50 border border-slate-200 rounded-xl font-medium text-xs text-slate-700 text-left hover:bg-slate-100 transition" onclick="cekPG(this, false)">A. Glandula Parotis (Kelenjar Ludah)</button>
<button class="w-full py-3.5 px-4 bg-slate-50 border border-slate-200 rounded-xl font-medium text-xs text-slate-700 text-left hover:bg-slate-100 transition" onclick="cekPG(this, true)">B. Pankreas (Penurunan Sekresi Lipase & Bikarbonat)</button>
<button class="w-full py-3.5 px-4 bg-slate-50 border border-slate-200 rounded-xl font-medium text-xs text-slate-700 text-left hover:bg-slate-100 transition" onclick="cekPG(this, false)">C. Dinding Dalam Mukosa Lambung</button>
</div>
<p id="pg-feedback" class="hidden mt-4 font-bold text-center text-xs"></p>
</div>
</section>
<!-- SLIDE 7: Game Variasi 2 - Mencocokkan Pasangan Dinamis -->
<section class="slide flex-col gap-4 min-h-[65vh]" data-slide="7">
<h2 data-template-id="match-title" class="heading-font text-2xl font-bold text-center text-slate-900"></h2>
<p class="text-center text-xs text-slate-500">Pasangkan nama organ/zat pencernaan di sebelah kiri dengan fungsi fisiologis spesifiknya di kanan secara tepat.</p>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3" id="match-board"></div>
<p id="match-feedback" class="text-center font-bold text-xs hidden mt-4"></p>
</section>
<!-- SLIDE 8: Game Variasi 3 - Pilihan Ganda Kompleks -->
<section class="slide flex-col gap-4 min-h-[65vh]" data-slide="8">
<h2 class="heading-font text-2xl font-bold text-slate-900 text-center">๐ฎ Kompetensi 3: Pilihan Ganda Kompleks</h2>
<div class="bg-white border border-slate-200 p-6 rounded-2xl shadow-sm max-w-2xl mx-auto w-full space-y-4">
<p class="font-bold text-sm text-slate-800 text-center bg-slate-50 p-3 rounded-xl border">Manakah pernyataan di bawah ini yang paling TEPAT menjelaskan proses penyerapan dan metabolisme zat makanan di Intestinum Tenue? (Pilih dua atau lebih jawaban benar!)</p>
<div class="space-y-3">
<label class="flex items-start gap-3 p-3 border border-slate-200 rounded-xl bg-slate-50 cursor-pointer hover:bg-slate-100 transition">
<input type="checkbox" name="pk" value="A" class="mt-1 w-4 h-4 accent-emerald-600">
<span class="text-xs font-semibold text-slate-700">A. Glukosa dan asam amino diserap jonjot vili usus halus lalu dibawa langsung masuk pembuluh darah kapiler menuju hati.</span>
</label>
<label class="flex items-start gap-3 p-3 border border-slate-200 rounded-xl bg-slate-50 cursor-pointer hover:bg-slate-100 transition">
<input type="checkbox" name="pk" value="B" class="mt-1 w-4 h-4 accent-emerald-600">
<span class="text-xs font-semibold text-slate-700">B. Getah usus tidak memerlukan sinyal kimia/hormon kolesistokinin dalam proses absorbsi molekul pati.</span>
</label>
<label class="flex items-start gap-3 p-3 border border-slate-200 rounded-xl bg-slate-50 cursor-pointer hover:bg-slate-100 transition">
<input type="checkbox" name="pk" value="C" class="mt-1 w-4 h-4 accent-emerald-600">
<span class="text-xs font-semibold text-slate-700">C. Asam lemak dan gliserol diabsorbsi masuk ke dalam pembuluh kil (pembuluh limfa/getah bening) di tengah vili sebelum masuk sirkulasi darah besar.</span>
</label>
</div>
<button onclick="cekKompleks()" class="w-full py-3 bg-slate-900 text-white font-bold text-xs rounded-xl hover:bg-slate-800 transition shadow">Kunci Analisis Pilihan ๐</button>
<div id="pk-feedback" class="hidden p-3 rounded-xl text-center font-bold text-xs"></div>
</div>
</section>
<!-- SLIDE 9: Papan Refleksi Saintifik -->
<section class="slide flex-col gap-6 min-h-[65vh]" data-slide="9">
<h2 class="heading-font text-2xl font-bold text-center text-slate-900">๐ Jurnal Refleksi Fisiologi</h2>
<p class="text-center text-xs text-slate-500">Tuliskan kesimpulan kritis ilmiah mengenai perbedaan mendasar peran pencernaan kimiawi lambung versus usus dua belas jari!</p>
<div class="flex gap-2">
<input type="text" id="sticky-input" class="flex-1 p-3 border border-slate-300 rounded-xl text-xs focus:outline-emerald-500 bg-white" placeholder="Ketik simpulan analitismu di sini...">
<button class="px-5 py-2 bg-emerald-600 text-white rounded-xl font-bold text-xs hover:bg-emerald-700 shadow transition" onclick="addSticky()">Sematkan</button>
</div>
<div id="sticky-board" class="grid grid-cols-2 sm:grid-cols-3 gap-3 min-h-[100px] bg-slate-100 p-4 rounded-2xl border-2 border-dashed border-slate-200 shadow-inner"></div>
</section>
<!-- SLIDE 10: Umpan Balik LMS -->
<section class="slide flex-col gap-6 items-center justify-center min-h-[65vh]" data-slide="10">
<h2 class="heading-font text-2xl font-bold text-center text-slate-900">๐ Umpan Balik Kualitas Modul</h2>
<p class="text-center text-xs text-slate-500 max-w-md">Berikan masukan objektif Anda terkait kualitas rancangan presentasi, penyajian teks materi biokimia, serta fungsi simulasi interaktif game di atas.</p>
<textarea id="feedback-text" class="w-full max-w-lg p-4 border border-slate-300 rounded-xl h-24 text-xs focus:ring-2 focus:ring-indigo-500 focus:outline-none bg-white" placeholder="Tulis catatan umpan balik di sini..."></textarea>
<button class="px-6 py-3 bg-indigo-600 text-white rounded-xl font-bold text-xs hover:bg-indigo-700 transition shadow" onclick="submitFeedback()">Kirim Umpan Balik</button>
<p id="feedback-thanks" class="hidden text-emerald-600 font-bold text-sm animate-pulse">Umpan balik saintifik Anda berhasil disimpan dalam basis data kelas! ๐</p>
</section>
</main>
<script>
// DATA KONTEN OTOMATIS AWAL
document.addEventListener("DOMContentLoaded", () => {
document.querySelector('[data-template-id="welcome-title"]').innerHTML = "Bioreaktor Tubuh:<br><span class='text-emerald-600'>Fisiologi Pencernaan</span>";
document.querySelector('[data-template-id="welcome-subtitle"]').textContent = "Analisis Konversi Makromolekul Nutrisi Berbasis Saluran Gastrointestinal Manusia.";
document.querySelector('[data-template-id="start-btn"]').innerHTML = "Buka Modul Eksplorasi <i class='inline-block ml-1' data-lucide='play' style='width:14px;height:14px'></i>";
lucide.createIcons();
});
// Logika Inti Manajemen Navigasi Slide
let current = 1;
const total = 10;
const prevBtn = document.getElementById('prev-btn');
const nextBtn = document.getElementById('next-btn');
const counter = document.getElementById('slide-counter');
function showSlide(n) {
document.querySelectorAll('.slide').forEach(s => s.classList.remove('active'));
document.querySelector(`[data-slide="${n}"]`).classList.add('active');
counter.textContent = `${n} / ${total}`;
prevBtn.disabled = n === 1;
nextBtn.disabled = n === total;
window.scrollTo({ top: 0, behavior: 'smooth' });
}
prevBtn.addEventListener('click', () => { if (current > 1) showSlide(--current); });
nextBtn.addEventListener('click', () => { if (current < total) showSlide(++current); });
document.getElementById('start-btn').addEventListener('click', () => showSlide(++current));
// Game 1: Pilihan Ganda (PG) Fisiologi
function cekPG(btn, isCorrect) {
const fb = document.getElementById('pg-feedback');
fb.classList.remove('hidden');
document.querySelectorAll('#pg-area button').forEach(b => b.style.pointerEvents = 'none');
if (isCorrect) {
btn.className = "w-full py-3.5 px-4 bg-emerald-50 border-2 border-emerald-500 rounded-xl font-bold text-xs text-left text-emerald-700 shadow-sm";
fb.textContent = "๐ ANALISIS BENAR! Pankreas mensekresikan enzim lipase untuk memecah lemak serta ion bikarbonat pencegah asidosis.";
fb.className = "mt-4 font-bold text-center text-xs text-emerald-700 bg-emerald-50 p-2.5 rounded-xl border border-emerald-200 animate-bounce";
} else {
btn.className = "w-full py-3.5 px-4 bg-rose-50 border-2 border-rose-500 rounded-xl font-bold text-xs text-left text-rose-700 shadow-sm";
fb.textContent = "โ Analisis Kurang Tepat! Organ yang mensekresikan penetral kimus dan lipase utama adalah Kelenjar Pankreas.";
fb.className = "mt-4 font-bold text-center text-xs text-rose-600 bg-rose-50 p-2.5 rounded-xl border border-rose-200";
}
}
// Game 2: Mencocokkan Pasangan Unik/Acak Per Perangkat Siswa
let matchPairs = [];
let selected = null;
let matchCount = 0;
let gameRound = 1;
const bankSoalMatch = [
{ text: "HCl Lambung", category: "Mengaktifkan pepsinogen & bunuh kuman" },
{ text: "Cairan Empedu", category: "Mengemulsikan lemak secara mekanis" },
{ text: "Enzim Ptialin", category: "Menghidrolisis amilum menjadi maltosa" },
{ text: "Vili Usus Halus", category: "Memperluas permukaan absorbsi nutrisi" },
{ text: "Kolon (Usus Besar)", category: "Reabsorbsi air & pembusukan feses" }
];
function generateMatchPairs() {
let kocok = [...bankSoalMatch].sort(() => Math.random() - 0.5);
let dataPilihan = kocok.slice(0, 3);
const newPairs = [];
dataPilihan.forEach((item, idx) => {
const leftId = String.fromCharCode(97 + idx);
const rightId = String.fromCharCode(65 + idx);
newPairs.push(
{ id: leftId, text: item.text, match: rightId },
{ id: rightId, text: item.category, match: leftId }
);
});
return newPairs;
}
function initMatch() {
matchPairs = generateMatchPairs();
const board = document.getElementById('match-board');
board.innerHTML = '';
matchCount = 0;
selected = null;
const shuffled = matchPairs.sort(() => Math.random() - 0.5);
shuffled.forEach(p => {
const card = document.createElement('button');
card.className = 'match-card p-4 bg-white border border-slate-200 rounded-xl font-semibold text-xs text-center shadow-sm hover:border-emerald-400 text-slate-700';
card.textContent = p.text;
card.dataset.id = p.id;
card.dataset.match = p.match;
card.addEventListener('click', () => selectCard(card));
board.appendChild(card);
});
document.querySelector('[data-template-id="match-title"]').textContent = `๐ฎ Kompetensi 2: Hubungan Fungsi Organ (Ronde ${gameRound})`;
}
function selectCard(card) {
if (card.classList.contains('matched')) return;
if (selected && selected === card) { selected.classList.remove('selected'); selected = null; return; }
if (!selected) { card.classList.add('selected'); selected = card; return; }
if (selected.dataset.match === card.dataset.id) {
selected.classList.remove('selected');
selected.classList.add('matched');
card.classList.add('matched');
matchCount++;
if (matchCount === 3) {
const fb = document.getElementById('match-feedback');
fb.textContent = `๐ Luar biasa! Ronde ${gameRound} terlewati. Memetakan kombinasi fungsional baru...`;
fb.className = 'text-center font-bold text-xs text-emerald-700 bg-emerald-50 p-2 rounded-xl mt-4 border border-emerald-200';
fb.classList.remove('hidden');
setTimeout(() => {
gameRound++;
document.getElementById('match-feedback').classList.add('hidden');
initMatch();
}, 2200);
}
} else {
selected.classList.remove('selected');
card.classList.add('selected');
}
selected = card.classList.contains('matched') ? null : card;
}
initMatch();
// Game 3: Pilihan Ganda Kompleks (PK)
function cekKompleks() {
const checkboxes = document.querySelectorAll('input[name="pk"]');
const fb = document.getElementById('pk-feedback');
fb.classList.remove('hidden');
let dipilih = [];
checkboxes.forEach(cb => { if (cb.checked) dipilih.push(cb.value); });
// Jawaban benar adalah A dan C (B salah karena getah usus diatur hormon sekretin dan kolesistokinin)
const benar = dipilih.includes('A') && dipilih.includes('C') && !dipilih.includes('B') && dipilih.length === 2;
if (benar) {
fb.textContent = "โ
VALID! Glukosa/asam amino masuk ke kapiler darah menuju hati, sementara asam lemak melewati pembuluh limfa lakteal di dalam vili.";
fb.className = "p-3 rounded-xl text-center font-bold text-xs text-emerald-700 bg-emerald-50 mt-4 border border-emerald-200 shadow-sm";
} else {
fb.textContent = "โ Analisis Meloset! Kunci jawaban valid mencakup kombinasi opsi A dan C. Pelajari kembali rute mikro-transportasi limfa.";
fb.className = "p-3 rounded-xl text-center font-bold text-xs text-rose-600 bg-rose-50 mt-4 border border-rose-200 shadow-sm";
}
}
// Papan Interaktif Catatan Refleksi Mading
const colors = ['bg-amber-100','bg-emerald-100','bg-sky-100','bg-indigo-100'];
function addSticky() {
const input = document.getElementById('sticky-input');
if (!input.value.trim()) return;
const note = document.createElement('div');
note.className = `sticky-note p-4 rounded-xl shadow-sm text-xs font-bold text-slate-700 border border-slate-200/40 ${colors[Math.floor(Math.random()*colors.length)]}`;
note.textContent = input.value.trim();
document.getElementById('sticky-board').appendChild(note);
input.value = '';
}
// Submit Form Masukan
function submitFeedback() {
const text = document.getElementById('feedback-text').value.trim();
if (text) {
document.getElementById('feedback-thanks').classList.remove('hidden');
document.getElementById('feedback-text').value = '';
}
}
</script>
</body>
</html>
Kelas 8
IPA
Reproduksi
<!doctype html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Eksplorasi Sistem Reproduksi Manusia</title>
<script src="https://cdn.tailwindcss.com/3.4.17"></script>
<script src="https://cdn.jsdelivr.net/npm/lucide@0.263.0/dist/umd/lucide.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Fraunces:wght@700;900&display=swap" rel="stylesheet">
<style>
body { font-family: 'DM Sans', sans-serif; background-color: #fcfbf9; }
.heading-font { font-family: 'Fraunces', serif; }
.slide { display: none; }
.slide.active { display: flex; }
.match-card { transition: all 0.2s; cursor: pointer; }
.match-card.selected { transform: scale(1.03); box-shadow: 0 0 0 3px #ec4899; }
.match-card.matched { opacity: 0.5; pointer-events: none; background: #d1fae5 !important; border-color: #34d399 !important; }
.nav-btn:disabled { opacity: 0.3; pointer-events: none; }
.sticky-note { animation: popIn 0.3s ease; }
@keyframes popIn { from { transform: scale(0.9); opacity: 0; } to { transform: scale(1); opacity: 1; } }
</style>
</head>
<body class="w-full min-h-screen flex flex-col pb-12">
<!-- Navigation Bar -->
<nav class="fixed top-0 left-0 right-0 z-50 flex items-center justify-between px-4 py-3 bg-white/90 backdrop-blur shadow-sm">
<button class="nav-btn p-2 text-sm font-bold text-rose-600 hover:bg-gray-100 rounded-lg" id="prev-btn" disabled>Kembali</button>
<span class="text-sm font-medium text-gray-600" id="slide-counter">1 / 10</span>
<button class="nav-btn p-2 text-sm font-bold text-rose-600 hover:bg-gray-100 rounded-lg" id="next-btn">Lanjut</button>
</nav>
<main class="flex-1 pt-20 pb-4 px-4 w-full max-w-3xl mx-auto">
<!-- SLIDE 1: Welcome -->
<section class="slide active flex-col items-center justify-center text-center gap-6 min-h-[70vh]" data-slide="1">
<img data-template-id="hero-img" class="w-full max-w-md h-48 object-cover rounded-2xl shadow-lg" loading="lazy">
<h1 data-template-id="welcome-title" class="heading-font text-3xl md:text-5xl font-bold mt-4 text-slate-800"></h1>
<p data-template-id="welcome-subtitle" class="text-lg md:text-xl mt-2 opacity-80 text-slate-600"></p>
<button data-template-id="start-btn" class="mt-6 px-8 py-3 bg-rose-500 text-white rounded-full text-lg font-bold shadow-lg hover:scale-105 transition-transform" id="start-btn"></button>
</section>
<!-- SLIDE 2: CP & TP -->
<section class="slide flex-col gap-4 min-h-[70vh]" data-slide="2">
<h2 class="heading-font text-2xl font-bold text-slate-800 border-b pb-2">๐ฏ Capaian & Tujuan Pembelajaran</h2>
<div class="bg-rose-50 border-l-4 border-rose-500 p-4 rounded-r-xl">
<h3 class="font-bold text-rose-900 text-sm uppercase tracking-wider mb-1">Capaian Pembelajaran (CP)</h3>
<p class="text-rose-950 text-sm leading-relaxed">Siswa dapat mendeskripsikan struktur dan fungsi sistem reproduksi manusia, memahami gangguan/penyakit yang berhubungan, serta pentingnya menjaga kesehatan diri sebagai perwujudan profil pelajar pancasila.</p>
</div>
<div class="bg-white border p-5 rounded-xl shadow-sm space-y-3">
<h3 class="font-bold text-slate-800 text-sm uppercase tracking-wider">Tujuan Pembelajaran (TP)</h3>
<ul class="list-disc pl-5 text-sm text-slate-600 space-y-2">
<li>Mengidentifikasi organ reproduksi pria dan wanita beserta fungsinya dengan tepat.</li>
<li>Menjelaskan tahapan siklus menstruasi pada wanita dan proses fertilisasi.</li>
<li>Menganalisis berbagai upaya preventif dalam menjaga kesehatan organ reproduksi.</li>
</ul>
</div>
</section>
<!-- SLIDE 3: Video Stimulus -->
<section class="slide flex-col gap-6 min-h-[70vh]" data-slide="3">
<h2 class="heading-font text-2xl font-bold text-slate-800">๐ฌ Video Stimulus Pembelajaran</h2>
<div class="w-full aspect-video bg-gray-900 rounded-xl overflow-hidden shadow">
<iframe width="100%" height="100%" src="https://www.youtube.com/embed/g6j3F7GZ474" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<div class="bg-amber-50 border-l-4 border-amber-400 p-4 rounded-r-xl">
<p class="font-bold text-amber-800 mb-1">๐ก Pertanyaan Pemantik</p>
<p class="text-amber-900 text-sm mb-2">Mengapa makhluk hidup perlu bereproduksi dan bagaimana jadinya jika sistem organ tersebut mengalami kerusakan fatal?</p>
<textarea id="checkpoint-answer" class="w-full p-3 border border-amber-200 rounded-lg resize-none h-20 text-sm focus:ring-2 focus:ring-amber-400 focus:outline-none" placeholder="Tuliskan gagasan awalmu di sini..."></textarea>
<button class="mt-2 px-4 py-2 bg-amber-500 text-white text-xs font-bold rounded-lg hover:bg-amber-600 transition" onclick="document.getElementById('checkpoint-feedback').classList.remove('hidden')">Kirim Argumen</button>
<p id="checkpoint-feedback" class="hidden mt-2 text-green-700 font-medium text-xs">โ
Bagus! Pemikiran yang kritis. Reproduksi menjamin kelangsungan spesies dari kepunahan.</p>
</div>
</section>
<!-- SLIDE 4: Ringkasan Materi 1 (Pria) -->
<section class="slide flex-col gap-4 min-h-[70vh]" data-slide="4">
<h2 class="heading-font text-2xl font-bold text-slate-800 border-b pb-1">๐ Materi 1: Organ Reproduksi Pria</h2>
<p class="text-sm text-slate-600 leading-relaxed">Sistem reproduksi pria bertugas memproduksi, memelihara, dan menyalurkan sperma (sel kelamin jantan).</p>
<div class="grid grid-cols-1 md:grid-cols-2 gap-3 text-sm">
<div class="bg-blue-50/70 p-4 border border-blue-200 rounded-xl">
<h4 class="font-bold text-blue-800 mb-1">Organ Eksternal (Luar)</h4>
<ul class="list-disc pl-4 space-y-1 text-slate-700">
<li><b>Penis:</b> Alat kopulasi untuk menyalurkan sperma ke saluran kelamin wanita.</li>
<li><b>Skrotum:</b> Kantong pembungkus testis yang menjaga suhu sperma agar tetap ideal ($\pm 2^\circ\text{C}$ di bawah suhu tubuh).</li>
</ul>
</div>
<div class="bg-indigo-50/70 p-4 border border-indigo-200 rounded-xl">
<h4 class="font-bold text-indigo-800 mb-1">Organ Internal (Dalam)</h4>
<ul class="list-disc pl-4 space-y-1 text-slate-700">
<li><b>Testis:</b> Tempat produksi sel sperma dan hormon testosteron.</li>
<li><b>Epididimis:</b> Tempat penyimpanan sperma sementara hingga matang.</li>
<li><b>Vas Deferens:</b> Saluran panjang penghubung epididimis ke uretra.</li>
</ul>
</div>
</div>
</section>
<!-- SLIDE 5: Ringkasan Materi 2 (Wanita) -->
<section class="slide flex-col gap-4 min-h-[70vh]" data-slide="5">
<h2 class="heading-font text-2xl font-bold text-slate-800 border-b pb-1">๐ Materi 2: Organ Wanita & Siklus</h2>
<p class="text-sm text-slate-600 leading-relaxed">Sistem reproduksi wanita berfungsi memproduksi sel telur (ovum), sebagai tempat fertilisasi, dan memelihara janin.</p>
<div class="grid grid-cols-1 md:grid-cols-2 gap-3 text-sm">
<div class="bg-pink-50/70 p-4 border border-pink-200 rounded-xl">
<h4 class="font-bold text-pink-800 mb-1">Struktur Utama</h4>
<ul class="list-disc pl-4 space-y-1 text-slate-700">
<li><b>Ovarium:</b> Kelenjar utama penghasil sel telur (ovum) dan hormon estrogen/progesteron.</li>
<li><b>Tuba Fallopi (Oviduk):</b> Saluran tempat terjadinya pembuahan (fertilisasi).</li>
<li><b>Uterus (Rahim):</b> Tempat menempel dan berkembangnya janin selama kehamilan.</li>
</ul>
</div>
<div class="bg-rose-50/70 p-4 border border-rose-200 rounded-xl">
<h4 class="font-bold text-rose-800 mb-1">Siklus Menstruasi</h4>
<p class="text-slate-700 leading-relaxed text-xs">Apabila ovum tidak dibuahi sperma, korpus luteum berhenti memproduksi estrogen & progesteron. Penurunan drastis hormon ini memicu dinding rahim (endometrium) meluruh bersama darah.</p>
</div>
</div>
</section>
<!-- SLIDE 6: Game Variasi 1 - Pilihan Ganda -->
<section class="slide flex-col gap-6 min-h-[70vh]" data-slide="6">
<h2 class="heading-font text-2xl font-bold text-slate-800 text-center">๐ฎ Game 1: Pilihan Ganda (Asah Konsep)</h2>
<div class="bg-white border p-5 rounded-2xl shadow-sm">
<p class="font-bold text-lg text-slate-800 mb-4 text-center">Dimanakah tempat pematangan sperma sementara pada organ reproduksi pria?</p>
<div class="flex flex-col gap-3" id="pg-area">
<button class="w-full py-3 px-4 bg-slate-50 border rounded-xl font-medium text-left hover:bg-slate-100 transition" onclick="cekPG(this, false)">A. Testis</button>
<button class="w-full py-3 px-4 bg-slate-50 border rounded-xl font-medium text-left hover:bg-slate-100 transition" onclick="cekPG(this, true)">B. Epididimis</button>
<button class="w-full py-3 px-4 bg-slate-50 border rounded-xl font-medium text-left hover:bg-slate-100 transition" onclick="cekPG(this, false)">C. Vas Deferens</button>
</div>
<p id="pg-feedback" class="hidden mt-4 font-bold text-center text-sm"></p>
</div>
</section>
<!-- SLIDE 7: Game Variasi 2 - Mencocokkan (Acak) -->
<section class="slide flex-col gap-4 min-h-[70vh]" data-slide="7">
<h2 data-template-id="match-title" class="heading-font text-2xl font-bold text-center text-slate-800"></h2>
<p class="text-center text-sm text-gray-600">Jodohkan nama organ dengan fungsinya yang benar secara acak!</p>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3" id="match-board"></div>
<p id="match-feedback" class="text-center font-bold text-sm hidden mt-4"></p>
</section>
<!-- SLIDE 8: Game Variasi 3 - Pilihan Ganda Kompleks -->
<section class="slide flex-col gap-4 min-h-[70vh]" data-slide="8">
<h2 class="heading-font text-2xl font-bold text-slate-800 text-center">๐ฎ Game 3: Pilihan Ganda Kompleks</h2>
<div class="bg-white border p-5 rounded-2xl shadow-sm space-y-4">
<p class="font-bold text-base text-slate-800 text-center bg-amber-50 p-2 rounded-lg border border-amber-200">Manakah dari pernyataan berikut yang BENAR mengenai fungsi hormonal dan organ wanita? (Pilih LEBIH DARI 1 jawaban!)</p>
<div class="space-y-3">
<label class="flex items-start gap-3 p-3 border rounded-xl bg-slate-50 cursor-pointer hover:bg-slate-100">
<input type="checkbox" name="pk" value="A" class="mt-1 w-4 h-4 accent-rose-500">
<span class="text-sm font-medium text-slate-700">A. Tuba Fallopi merupakan jalur utama bertemunya ovum dan sel sperma (Fertilisasi).</span>
</label>
<label class="flex items-start gap-3 p-3 border rounded-xl bg-slate-50 cursor-pointer hover:bg-slate-100">
<input type="checkbox" name="pk" value="B" class="mt-1 w-4 h-4 accent-rose-500">
<span class="text-sm font-medium text-slate-700">B. Estrogen berfungsi memicu peluruhan dinding rahim saat fase menstruasi.</span>
</label>
<label class="flex items-start gap-3 p-3 border rounded-xl bg-slate-50 cursor-pointer hover:bg-slate-100">
<input type="checkbox" name="pk" value="C" class="mt-1 w-4 h-4 accent-rose-500">
<span class="text-sm font-medium text-slate-700">C. Rahim (Uterus) memiliki lapisan endometrium untuk tempat implantasi janin.</span>
</label>
</div>
<button onclick="cekKompleks()" class="w-full py-3 bg-rose-600 text-white font-bold rounded-xl hover:bg-rose-700 transition shadow">Kunci Jawaban Siswa ๐</button>
<div id="pk-feedback" class="hidden p-3 rounded-lg text-center font-bold text-sm"></div>
</div>
</section>
<!-- SLIDE 9: Mading Refleksi -->
<section class="slide flex-col gap-6 min-h-[70vh]" data-slide="9">
<h2 class="heading-font text-2xl font-bold text-center text-slate-800">๐ Kotak Refleksi Siswa</h2>
<p class="text-center text-sm text-gray-600">Tempelkan catatan tentang satu pemahaman penting yang kamu peroleh hari ini!</p>
<div class="flex gap-2">
<input type="text" id="sticky-input" class="flex-1 p-3 border rounded-lg text-sm focus:outline-rose-500 bg-white" placeholder="Ketik refleksimu...">
<button class="px-5 py-2 bg-rose-500 text-white rounded-lg font-bold text-sm hover:bg-rose-600 shadow" onclick="addSticky()">Tempel</button>
</div>
<div id="sticky-board" class="grid grid-cols-2 sm:grid-cols-3 gap-3 min-h-[100px] bg-slate-100 p-4 rounded-xl border border-dashed"></div>
</section>
<!-- SLIDE 10: Umpan Balik / Masukan -->
<section class="slide flex-col gap-6 items-center justify-center min-h-[70vh]" data-slide="10">
<h2 class="heading-font text-2xl font-bold text-center text-slate-800">๐ Suara & Masukan Siswa</h2>
<p class="text-center text-sm text-gray-600 max-w-md">Apakah pembelajaran materi sistem reproduksi hari ini menarik? Berikan saran atau kritik membangun untuk gurumu.</p>
<textarea id="feedback-text" class="w-full max-w-lg p-4 border-2 border-dashed border-rose-300 rounded-xl h-24 text-sm focus:ring-2 focus:ring-rose-400 focus:outline-none bg-white" placeholder="Tulis masukan di sini..."></textarea>
<button class="px-6 py-3 bg-rose-500 text-white rounded-lg font-bold text-sm hover:bg-rose-600 transition shadow" onclick="submitFeedback()">Kirim Umpan Balik</button>
<p id="feedback-thanks" class="hidden text-green-600 font-bold text-base">Terima kasih banyak, masukannya telah terekam! ๐</p>
</section>
</main>
<script>
// DATA KONTEN OTOMATIS AWAL
document.addEventListener("DOMContentLoaded", () => {
document.querySelector('[data-template-id="hero-img"]').src = "https://images.unsplash.com/photo-1576086213369-97a306d36557?w=600&q=80";
document.querySelector('[data-template-id="welcome-title"]').textContent = "Eksplorasi Sistem Reproduksi";
document.querySelector('[data-template-id="welcome-subtitle"]').textContent = "Memahami Struktur Organ Kehidupan dan Pentingnya Menjaga Kesehatan Diri";
document.querySelector('[data-template-id="start-btn"]').textContent = "Mulai Belajar Interaktif! ๐";
});
// Navigasi Antar Halaman Slide
let current = 1;
const total = 10;
const prevBtn = document.getElementById('prev-btn');
const nextBtn = document.getElementById('next-btn');
const counter = document.getElementById('slide-counter');
function showSlide(n) {
document.querySelectorAll('.slide').forEach(s => s.classList.remove('active'));
document.querySelector(`[data-slide="${n}"]`).classList.add('active');
counter.textContent = `${n} / ${total}`;
prevBtn.disabled = n === 1;
nextBtn.disabled = n === total;
window.scrollTo({ top: 0, behavior: 'smooth' });
}
prevBtn.addEventListener('click', () => { if (current > 1) showSlide(--current); });
nextBtn.addEventListener('click', () => { if (current < total) showSlide(++current); });
document.getElementById('start-btn').addEventListener('click', () => showSlide(++current));
// Game 1: Pilihan Ganda (PG)
function cekPG(btn, isCorrect) {
const fb = document.getElementById('pg-feedback');
fb.classList.remove('hidden');
document.querySelectorAll('#pg-area button').forEach(b => b.style.pointerEvents = 'none');
if (isCorrect) {
btn.className = "w-full py-3 px-4 bg-green-100 border-2 border-green-500 rounded-xl font-bold text-left text-green-700";
fb.textContent = "๐ LUAR BIASA BENAR! Epididimis berfungsi menyimpan sperma hingga matang.";
fb.className = "mt-4 font-bold text-center text-sm text-green-600 bg-green-50 p-2 rounded-lg";
} else {
btn.className = "w-full py-3 px-4 bg-red-100 border-2 border-red-500 rounded-xl font-bold text-left text-red-700";
fb.textContent = "โ Masih Salah! Tempat pematangan sperma adalah Epididimis. Testis memproduksi, Vas Deferens menyalurkan.";
fb.className = "mt-4 font-bold text-center text-sm text-red-600 bg-red-50 p-2 rounded-lg";
}
}
// Game 2: Mencocokkan Pasangan Unik/Acak Per Siswa
let matchPairs = [];
let selected = null;
let matchCount = 0;
let gameRound = 1;
const bankSoalMatch = [
{ text: "Testis", category: "Produksi sperma & testosteron" },
{ text: "Ovarium", category: "Penghasil ovum & estrogen" },
{ text: "Tuba Fallopi", category: "Tempat terjadinya fertilisasi" },
{ text: "Rahim (Uterus)", category: "Tempat berkembangnya janin" },
{ text: "Skrotum", category: "Mengatur suhu organ testis" }
];
function generateMatchPairs() {
let kocok = [...bankSoalMatch].sort(() => Math.random() - 0.5);
let dataPilihan = kocok.slice(0, 3);
const newPairs = [];
dataPilihan.forEach((item, idx) => {
const leftId = String.fromCharCode(97 + idx);
const rightId = String.fromCharCode(65 + idx);
newPairs.push(
{ id: leftId, text: item.text, match: rightId },
{ id: rightId, text: item.category, match: leftId }
);
});
return newPairs;
}
function initMatch() {
matchPairs = generateMatchPairs();
const board = document.getElementById('match-board');
board.innerHTML = '';
matchCount = 0;
selected = null;
const shuffled = matchPairs.sort(() => Math.random() - 0.5);
shuffled.forEach(p => {
const card = document.createElement('button');
card.className = 'match-card p-3 bg-white border-2 border-gray-200 rounded-xl font-bold text-xs text-center shadow-sm hover:border-rose-400';
card.textContent = p.text;
card.dataset.id = p.id;
card.dataset.match = p.match;
card.addEventListener('click', () => selectCard(card));
board.appendChild(card);
});
document.querySelector('[data-template-id="match-title"]').textContent = `๐ฎ Game 2: Jodohkan Organ (Ronde ${gameRound})`;
}
function selectCard(card) {
if (card.classList.contains('matched')) return;
if (selected && selected === card) { selected.classList.remove('selected'); selected = null; return; }
if (!selected) { card.classList.add('selected'); selected = card; return; }
if (selected.dataset.match === card.dataset.id) {
selected.classList.remove('selected');
selected.classList.add('matched');
card.classList.add('matched');
matchCount++;
if (matchCount === 3) {
const fb = document.getElementById('match-feedback');
fb.textContent = `๐ Sempurna! Ronde ${gameRound} Selesai. Memuat tantangan organ berikutnya...`;
fb.className = 'text-center font-bold text-sm text-green-700 bg-green-50 p-2 rounded-lg mt-4';
fb.classList.remove('hidden');
setTimeout(() => {
gameRound++;
document.getElementById('match-feedback').classList.add('hidden');
initMatch();
}, 2500);
}
} else {
selected.classList.remove('selected');
card.classList.add('selected');
}
selected = card.classList.contains('matched') ? null : card;
}
initMatch();
// Game 3: Pilihan Ganda Kompleks
function cekKompleks() {
const checkboxes = document.querySelectorAll('input[name="pk"]');
const fb = document.getElementById('pk-feedback');
fb.classList.remove('hidden');
let dipilih = [];
checkboxes.forEach(cb => { if (cb.checked) dipilih.push(cb.value); });
// Jawaban benar adalah A dan C (B salah karena peluruhan dipicu PENURUNAN hormon)
const benar = dipilih.includes('A') && dipilih.includes('C') && !dipilihanTerbanyak(dipilih, 'B') && dipilih.length === 2;
function dipilihanTerbanyak(arr, val) { return arr.indexOf(val) !== -1; }
if (benar) {
fb.textContent = "โ
TEPAT SEKALI! Pernyataan A dan C adalah fakta ilmiah yang benar. Pernyataan B salah karena menstruasi terjadi akibat penurunan drastis hormon estrogen & progesteron.";
fb.className = "p-3 rounded-lg text-center font-bold text-xs text-green-700 bg-green-50 mt-4 border border-green-200";
} else {
fb.textContent = "โ Jawabanmu Kurang Tepat! Kunci jawaban yang benar adalah A dan C. Coba analisis lagi teori peluruhan dinding endometrium.";
fb.className = "p-3 rounded-lg text-center font-bold text-xs text-red-600 bg-red-50 mt-4 border border-red-200";
}
}
// Papan Sticky Notes Refleksi
const colors = ['bg-yellow-100','bg-pink-100','bg-blue-100','bg-green-100'];
function addSticky() {
const input = document.getElementById('sticky-input');
if (!input.value.trim()) return;
const note = document.createElement('div');
note.className = `sticky-note p-3 rounded-xl shadow-sm text-xs font-bold text-slate-800 border ${colors[Math.floor(Math.random()*colors.length)]}`;
note.textContent = input.value.trim();
document.getElementById('sticky-board').appendChild(note);
input.value = '';
}
// Fitur Submit Umpan Balik Guru
function submitFeedback() {
const text = document.getElementById('feedback-text').value.trim();
if (text) {
document.getElementById('feedback-thanks').classList.remove('hidden');
document.getElementById('feedback-text').value = '';
}
}
</script>
</body>
</html>
๐ Papan Nilai & Aktivitas Kelas
| Nama Siswa | Materi Pelajaran | Hasil Skor | Tingkat Paham | Hambatan Belajar | Strategi Tindakan |
|---|---|---|---|---|---|
| Belum ada nilai siswa yang masuk. | |||||