<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-9000860041661554971</atom:id><lastBuildDate>Thu, 24 Sep 2026 13:01:41 +0000</lastBuildDate><category>herbal</category><category>download</category><category>ebook</category><category>islami</category><category>Forex</category><category>Marketiva</category><category>converter</category><category>Cinta</category><category>El-shirazy</category><category>Habiburahman</category><category>Investasi Menurut Hukum Islam</category><category>Kang Abik</category><category>Novel</category><category>Online</category><category>Trading</category><category>VALUTA</category><category>doa</category><category>#pemimpinmerdekabelajar #refleksimerdekabelajar</category><category>18 Cara Merawat Komputer/Laptop Agar Tetap Awet Dan Tidak Rusak</category><category>ASING</category><category>Apa</category><category>Ayat</category><category>BATASAN RIBA DALAM SYARIAH</category><category>Bank konvensional vs Bank Syariah</category><category>Basic</category><category>Batasan Mengambil Keuntungan dalam Islam</category><category>Bertasbih</category><category>Bertasbih II</category><category>CARI</category><category>COMMODITIES</category><category>Cara</category><category>Cara Daftar Google Adsense Indonesia untuk menghasilkan uang dari internet</category><category>Cara Download Video Di YouTube Tanpa Software</category><category>Cara Investasi yang benar dan aman</category><category>Cara Memasang Iklan Adsense di Tengah Posting Secara Otomatis</category><category>Cara Memperbaiki Harddisk Tidak Terbaca Komputer</category><category>Cara Mendapatkan Uang dari Internet  seo</category><category>Cara Mendapatkan Uang dari Internet Bagi Anda yang Suka Bermain Game</category><category>Cara Mendapatkan Uang dari Internet Jika Anda Memahami Teknik SEO</category><category>Cara Mendapatkan Uang dari Internet Jika Anda Memiliki Modal Memadai</category><category>Cara Mendapatkan Uang dari Internet Jika Anda Punya Waktu Memadai</category><category>Cara Mendapatkan Uang dari Internet dengan Membuat Program/Software</category><category>Cara Mendapatkan Uang dari Internet dengan Toko Online</category><category>Cara Meningkatkan lalu lintas Pengunjung Blog / Website Dengan Cepat</category><category>Cara Mudah Membuat Akun PayPal Tanpa Kartu Kredit</category><category>Cara atasi Bluetooth Laptop tidak bekerja</category><category>Cara mengetahui spesifikasi komputer di linux</category><category>Cara mudah Download Video Di YouTube</category><category>DI INTERNET</category><category>DOWNLOAD SOAL-SOAL LATIHAN PRAKTEK EXCEL</category><category>Deposit</category><category>Deposito Syariah</category><category>Download ebook islami bagian 5</category><category>Download internet download accelator IrfanView</category><category>Dunia</category><category>Edensor</category><category>FUND</category><category>Forex dalam hukum Islam</category><category>HOBI YANG MENGHASILKAN UANG</category><category>Hukum Investasi  Menurut Syariat Islam</category><category>Hukum Tansaksi Valas dan Spekulasi Kurs Mata Uang</category><category>INDEXES</category><category>INVESTASI SYARIAH MENGUNTUNGKAN DUNIA DAN AKHIRAT</category><category>Instrumen Pasar Modal Syariah</category><category>Investasi dalam pandangan islam (syariah)</category><category>Jenis Investasi Berdasarkan Syariah</category><category>Join</category><category>Jual Beli dalam Syariah</category><category>KAMUS ISTILAH FOREX</category><category>Kenapa Kamu Harus Punya PayPal</category><category>Kumpulan Perintah Linux di Terminal Lengkap</category><category>MARKETIVA AGEA MUDAHNYA BERTRANSAKSI FOREX</category><category>MATA UANG</category><category>MENGENAL SAHAM (1)</category><category>MENGENAL SAHAM (2)</category><category>MENGUMPULKAM MODAL</category><category>MENYIAPKAN DANA HAJI</category><category>MONEY GAME</category><category>Materi</category><category>Membuat blog jadi 3 kolom</category><category>Mengetahui Kapasitas Memory</category><category>Menghasilkan Uang dari Internet dengan ClixSense</category><category>Menghasilkan Uang dari Internet dengan WHAFF!</category><category>Modul penyelesain masalah akuntansi dengan excel</category><category>Musik Klasik Bagi Bayi 1</category><category>Musik Klasik Bagi Bayi 2</category><category>Musik Klasik Bagi Bayi 3</category><category>Nama</category><category>Novel Ayat-Ayat Cinta</category><category>PELATIHAN PEMANFAATAN TIK DAN LITERASASI DIGITAL DI SMK N 8 SOLO KERJASAMA PUSTEKOM KEMDIKBUD DAN KOGTIK</category><category>PRODUK SIMPANAN DI BANK</category><category>Pasar Modal Syariah</category><category>Penyebab Blue Screen Windows dan Solusi Cara Mengatasinya</category><category>Processor</category><category>REKSA DANA (1)</category><category>REKSA DANA (2)</category><category>Resiko dalam Investasi</category><category>SAW</category><category>SENI BACA ALQURAN</category><category>SIKLUS FINANSIAL ANDA</category><category>STRATEGI FOREX</category><category>Secara</category><category>Singkat</category><category>Soal</category><category>Spekulasi di Pasar Modal</category><category>Strategy</category><category>TEMPAT</category><category>Tantangan Investasi Syariah di Pasar Modal</category><category>Tata Cara Jual Beli dalam Islam</category><category>Tinjauan Syariat Terhadap Jual-Beli Kredit</category><category>Tips Jitu Trading</category><category>Tips Memperbaiki Komputer Yang Macet Hang</category><category>Tradding</category><category>Transaksi</category><category>Tutorial</category><category>Tutorial Cara</category><category>UANG</category><category>Witdrawl</category><category>ahmed</category><category>aisyah</category><category>akm</category><category>alam</category><category>alquran</category><category>andrea</category><category>andrea hirata</category><category>ansav</category><category>antivirus</category><category>aqiqah</category><category>audio</category><category>avi</category><category>bagian</category><category>bepergian</category><category>berhijab</category><category>berjilbab</category><category>dan</category><category>dan Hardisk pada PC</category><category>dan Hardisk pada PC Mengetahui Kapasitas Memory</category><category>dan Referensi Jawaban</category><category>deedat</category><category>dogma</category><category>download converter</category><category>download lagu Letto - Lethologica (2009)</category><category>download laskar pelangi karya andrea hirata</category><category>download modul praktek SPSS</category><category>download setup alqur'an in word</category><category>download soal-soal pilihan Ganda TKJ (teknik Jaringan dan Komputer)</category><category>engkau</category><category>fiqih</category><category>flv</category><category>hamil</category><category>hirata</category><category>ilmu</category><category>iman</category><category>injil</category><category>islam</category><category>jual beli kredit dalam islam</category><category>karpov</category><category>karya andrea hirata</category><category>keajaiban</category><category>kristen</category><category>kristus</category><category>laskar pelangi 3</category><category>laut</category><category>lintas</category><category>maryamah</category><category>matematika</category><category>mati</category><category>menghalangi</category><category>menghasilkan uang dari internet dengan ProBux</category><category>misteri</category><category>mpeg</category><category>muallaf</category><category>muhammmad</category><category>nabawiyah</category><category>naskah</category><category>nusantar</category><category>orientasi</category><category>pcmav</category><category>pemuda</category><category>pendeta</category><category>penduduk</category><category>perdebatan</category><category>perjalanan</category><category>quran</category><category>rahasia</category><category>sang pemimpi</category><category>sedang</category><category>sejarah</category><category>semesta</category><category>sirah</category><category>smadav</category><category>surga</category><category>swaramuslim</category><category>tawakal</category><category>wanita</category><category>wav</category><category>wma</category><title>INVESTASI DEMI HIDUP YANG LEBIH BAIK</title><description>"Berbuat BAIK adalah investasi"-
"Kesehatan adalah investasi"-
"Ilmu adalah investasi"--

"BerInvestasilah yang bisa Menjamin Kebahagian Kehidupan Dunia Akhirat"</description><link>http://kitab-investasi.blogspot.com/</link><managingEditor>noreply@blogger.com (Unknown)</managingEditor><generator>Blogger</generator><openSearch:totalResults>755</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><language>en-us</language><itunes:explicit>yes</itunes:explicit><copyright>Bussines for you</copyright><itunes:keywords>reksadana,saham,forex,Bank,Tabungan,Forex,Pulsa,Elektronik,HP,Bisnis,Bussine</itunes:keywords><itunes:summary>Islamic canon law investment for calm old age, happy, Very Rich, Barokah if died entered heaven Reksadana , Saham, Bank, Tabungan, Forex, Pulsa Elektronik</itunes:summary><itunes:subtitle>Investasi syariah</itunes:subtitle><itunes:category text="Business"><itunes:category text="Investing"/></itunes:category><itunes:author>abang_cool</itunes:author><itunes:owner><itunes:email>nof_rizal07@yahoo.co.id</itunes:email><itunes:name>abang_cool</itunes:name></itunes:owner><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-8866540713710335007</guid><pubDate>Wed, 23 Sep 2026 06:03:35 +0000</pubDate><atom:updated>2026-09-23T13:03:35.896+07:00</atom:updated><title>Membandingkan Isi Teks Ceramah dengan Teks Lain</title><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&amp;family=Source+Sans+3:wght@400;500;600;700&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;display=swap');
.epb{
  --blueprint:#0F2A3D;
  --blueprint-deep:#0A1E2C;
  --panel:#4A2E12;
  --paper:#F3F0E6;
  --ink:#132029;
  --amber:#F5A623;
  --amber-deep:#C97F12;
  --mint:#6EC6CA;
  --line:rgba(234,242,245,0.16);
  --off-white:#EAF2F5;
  --muted:#9FB4C2;
}
.epb *{box-sizing:border-box;}
.epb{scroll-behavior:smooth; background:#0A1F2E;}
.epb{
  margin:0;
  position:relative;
  overflow:hidden;
  background:var(--blueprint);
  color:var(--off-white);
  font-family:'Source Sans 3',sans-serif;
  line-height:1.65;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 34px 34px;
}
.epb h1, .epb h2, .epb h3, .epb h4{font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.02em; margin:0 0 0.5em;}
.epb .mono{font-family:'IBM Plex Mono',monospace;}
.epb a{color:var(--amber);}
.epb .crop{position:absolute; width:22px; height:22px; z-index:5; opacity:.55; pointer-events:none;}
.epb .crop::before, .epb .crop::after{content:"";position:absolute;background:var(--mint);}
.epb .crop::before{width:100%;height:1px;top:50%;left:0;}
.epb .crop::after{width:1px;height:100%;left:50%;top:0;}
.epb .crop.tl{top:14px;left:14px;}
.epb .crop.tr{top:14px;right:14px;}
.epb .crop.bl{bottom:14px;left:14px;}
.epb .crop.br{bottom:14px;right:14px;}
.epb header.cover{
  position:relative;
  padding:40px 24px 36px;
  border-bottom:1px solid var(--line);
  overflow:hidden;
}
.epb .doc-code{font-family:'IBM Plex Mono',monospace; color:var(--amber); letter-spacing:0.15em; font-size:0.78rem; text-transform:uppercase; margin-bottom:18px; display:flex; gap:10px; align-items:center;}
.epb .doc-code::before{content:"◆"; color:var(--amber);}
.epb .cover h1{font-size:clamp(1.6rem,7vw,2.5rem); color:var(--off-white); max-width:16ch; line-height:1.05;}
.epb .cover .subtitle{color:var(--muted); font-size:1.05rem; max-width:60ch; margin-top:14px;}
.epb .meta-strip{
  margin-top:38px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border-top:1px dashed var(--line); border-bottom:1px dashed var(--line);
}
.epb .meta-strip div{padding:14px 16px; border-right:1px dashed var(--line);}
.epb .meta-strip div:last-child{border-right:none;}
.epb .meta-strip .k{font-family:'IBM Plex Mono',monospace; font-size:0.68rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.1em;}
.epb .meta-strip .v{font-size:0.98rem; color:var(--off-white); margin-top:4px; font-weight:600;}
.epb .stamp{
  position:absolute; top:40px; right:20px; width:104px; height:104px;
  border:2.5px solid var(--amber); border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  transform:rotate(-11deg);
  color:var(--amber); font-family:'IBM Plex Mono',monospace;
  text-align:center; font-size:0.62rem; letter-spacing:0.08em; text-transform:uppercase;
  opacity:0.9;
}
.epb .stamp .ring{position:absolute; inset:8px; border:1px dashed var(--amber); border-radius:50%;}
.epb .stamp b{display:block; font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:0.06em; margin-top:4px;}

@media (max-width:760px){.epb .stamp{display:none;}
.epb }


.epb main{max-width:920px; margin:0 auto; padding:0 20px 60px;}
.epb .section{padding-top:64px;}
.epb .eyebrow{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase; margin-bottom:10px; display:flex; align-items:center; gap:10px;}
.epb .eyebrow::after{content:""; flex:1; height:1px; background:var(--line);}
.epb h2.section-title{font-size:1.7rem; color:var(--off-white);}
.epb p{color:#DDE7EC;}
.epb .lead{color:var(--muted); font-size:1.02rem; max-width:72ch;}
.epb .panel{
  background:var(--panel); border:1px solid var(--line); border-radius:2px;
  padding:26px 28px; margin:22px 0;
}
.epb .panel.tp{border-left:4px solid var(--mint);}
.epb .panel.warn{border-left:4px solid var(--amber);}
.epb .tp-box{display:grid; gap:14px; margin-top:18px;}
.epb .tp-item{display:flex; gap:14px; align-items:flex-start;}
.epb .tp-item .idx{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; min-width:34px;}
.epb .flow{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:20px;}
.epb .flow .step{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px; position:relative;}
.epb .flow .step .tag{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;}
.epb .flow .step h4{font-size:1rem; margin-top:8px; color:var(--off-white);}
.epb .flow .step .time{position:absolute; top:16px; right:16px; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; color:var(--amber);}
.epb .grid-3{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-top:16px;}
.epb .card{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px;}
.epb .card h4{color:var(--amber); font-size:0.95rem;}
.epb .criteria{display:grid; gap:16px; margin-top:20px;}
.epb .crit{
  background:var(--blueprint-deep); border:1px solid var(--line);
  display:grid; grid-template-columns:64px 1fr; gap:0;
}
.epb .crit .num{
  background:var(--amber); color:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace;
  font-weight:700; display:flex; align-items:center; justify-content:center; font-size:1.05rem;
}
.epb .crit .body{padding:18px 20px;}
.epb .crit h4{color:var(--off-white); font-size:1.02rem; margin-bottom:6px;}
.epb .crit .q{margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); font-family:'IBM Plex Mono',monospace; font-size:0.86rem; color:var(--amber);}
.epb .timeline{margin-top:24px; position:relative; padding-left:34px;}
.epb .timeline::before{content:""; position:absolute; left:11px; top:6px; bottom:6px; width:2px; background:var(--line);}
.epb .tl-item{position:relative; padding-bottom:26px;}
.epb .tl-item:last-child{padding-bottom:0;}
.epb .tl-item::before{content:""; position:absolute; left:-34px; top:2px; width:22px; height:22px; border-radius:50%; background:var(--blueprint); border:2px solid var(--amber);}
.epb .tl-item h4{color:var(--off-white); font-size:1rem; margin-bottom:4px;}
.epb .doc-sample{
  background:var(--paper); color:var(--ink); border-radius:2px; padding:0; margin-top:22px;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .doc-sample .doc-head{background:var(--ink); color:var(--paper); padding:12px 22px; font-family:'IBM Plex Mono',monospace; font-size:0.75rem; letter-spacing:0.1em; text-transform:uppercase; display:flex; justify-content:space-between;}
.epb .doc-sample .doc-body{padding:26px 28px 30px;}
.epb .doc-sample h3{font-family:'Oswald',sans-serif; color:var(--ink); font-size:1.25rem; text-transform:none; letter-spacing:0;}
.epb .doc-sample ol{padding-left:22px;}
.epb .doc-sample li{margin-bottom:9px;}
.epb .flag{
  display:inline-block; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; font-weight:600;
  background:#D94E2A; color:#fff; padding:1px 7px; border-radius:2px; margin-left:6px; vertical-align:middle;
}
.epb .doc-sample .note-margin{margin-top:6px; font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:#8A3A1F; padding-left:8px; border-left:2px solid #D94E2A;}
.epb .legend{display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:16px;}
.epb .legend span{font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:var(--muted); display:flex; align-items:center; gap:8px;}
.epb .legend .dot{width:10px; height:10px; border-radius:50%; display:inline-block;}
.epb table{width:100%; border-collapse:collapse; margin-top:18px; font-size:0.94rem;}
.epb th, .epb td{border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top;}
.epb th{background:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace; font-size:0.75rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--amber);}
.epb .summary-box{
  border:1px solid var(--amber); background:linear-gradient(180deg, rgba(245,166,35,0.08), transparent);
  padding:24px 26px; margin-top:24px;
}
.epb .summary-box ul{margin:10px 0 0; padding-left:20px;}
.epb .summary-box li{margin-bottom:8px;}
.epb .task-header{
  background:var(--amber); color:var(--blueprint-deep); padding:22px 26px; margin-top:20px;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
}
.epb .task-header h2{color:var(--blueprint-deep); font-size:1.4rem; margin:0;}
.epb .task-header .badge{font-family:'IBM Plex Mono',monospace; font-size:0.8rem; background:var(--blueprint-deep); color:var(--amber); padding:6px 12px; border-radius:2px;}
.epb .steps-num{counter-reset:step; margin-top:18px; list-style:none; padding:0;}
.epb .steps-num li{counter-increment:step; position:relative; padding-left:44px; margin-bottom:16px;}
.epb .steps-num li::before{content:counter(step,decimal-leading-zero); position:absolute; left:0; top:0; font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; font-size:0.95rem; border:1px solid var(--amber); width:30px; height:26px; display:flex; align-items:center; justify-content:center;}
.epb .rubric-scale{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px;}
.epb .rubric-scale div{background:var(--blueprint-deep); border:1px solid var(--line); padding:12px; text-align:center;}
.epb .rubric-scale .n{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:1.3rem; font-weight:700;}
.epb .rubric-scale .l{font-size:0.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:0.05em;}
.epb .notebook{
  background:repeating-linear-gradient(var(--paper), var(--paper) 33px, #D8D3C2 34px);
  color:var(--ink); border-radius:2px; padding:28px 30px; margin-top:20px; position:relative;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .notebook::before{content:""; position:absolute; left:46px; top:0; bottom:0; width:1.5px; background:#C0453A; opacity:0.5;}
.epb .notebook .content{padding-left:24px;}
.epb .notebook h3{color:var(--ink); font-family:'Oswald',sans-serif; letter-spacing:0.02em; margin-bottom:10px;}
.epb .notebook ul{padding-left:20px;}
.epb footer{border-top:1px solid var(--line); padding:24px 20px 40px; color:var(--muted); font-size:0.86rem;}
.epb footer .doc-code{margin-bottom:10px;}
.epb .divider-dash{border:none; border-top:1px dashed var(--line); margin:44px 0 0;}
.epb::selection{background:var(--amber); color:var(--blueprint-deep);}

&lt;/style&gt;
&lt;div class="epb"&gt;
&lt;div class="crop tl"&gt;&lt;/div&gt;&lt;div class="crop tr"&gt;&lt;/div&gt;&lt;div class="crop bl"&gt;&lt;/div&gt;&lt;div class="crop br"&gt;&lt;/div&gt;

&lt;header class="cover"&gt;
  &lt;div class="stamp"&gt;&lt;div class="ring"&gt;&lt;/div&gt;&lt;span&gt;Modul Ajar&lt;b&gt;Terverifikasi&lt;/b&gt;Fase F&lt;/span&gt;&lt;/div&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/CERAMAH-BANDING — 3 JP · 1 Pertemuan&lt;/div&gt;
  &lt;h1&gt;Membandingkan Isi Teks Ceramah dengan Teks Lain&lt;/h1&gt;
  &lt;p class="subtitle"&gt;Materi Bahasa Indonesia Kelas XI SMK/MAK — melatih murid membandingkan isi teks ceramah dengan teks artikel opini serta menemukan kelebihan dan kekurangan masing-masing.&lt;/p&gt;

  &lt;div class="meta-strip"&gt;
    &lt;div&gt;&lt;div class="k"&gt;Mata Pelajaran&lt;/div&gt;&lt;div class="v"&gt;Bahasa Indonesia&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK/MAK — Kelas XI&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Elemen&lt;/div&gt;&lt;div class="v"&gt;Membaca &amp;amp; Memirsa&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;3 JP (3 × 45 menit)&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;!-- ============ TUJUAN PEMBELAJARAN ============ --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="eyebrow"&gt;01 — Identitas Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Capaian &amp;amp; Tujuan Pembelajaran&lt;/h2&gt;

    &lt;div class="panel tp"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Capaian Pembelajaran (Elemen Membaca–Memirsa)&lt;/div&gt;
      &lt;p&gt;Murid mampu mengevaluasi informasi dari berbagai jenis teks, termasuk teks ceramah, serta membandingkannya dengan teks lain untuk menemukan persamaan, perbedaan, kelebihan, dan kekurangan masing-masing secara kritis.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="panel"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Tujuan Pembelajaran&lt;/div&gt;
      &lt;p style="font-size:1.05rem; color:var(--off-white); font-weight:600;"&gt;Murid mampu membandingkan isi teks ceramah dengan teks lainnya serta menemukan kelebihan dan kekurangan masing-masing.&lt;/p&gt;

      &lt;div class="tp-box"&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.1&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan struktur dan ciri kebahasaan teks ceramah.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.2&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan struktur dan ciri kebahasaan teks artikel opini sebagai teks pembanding.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.3&lt;/span&gt;&lt;p&gt;Murid dapat menemukan persamaan dan perbedaan antara teks ceramah dan teks artikel opini.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.4&lt;/span&gt;&lt;p&gt;Murid dapat menemukan kelebihan dan kekurangan teks ceramah maupun teks artikel opini berdasarkan bukti dari kedua teks.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="eyebrow" style="margin-top:26px; margin-bottom:6px;"&gt;8 Profil Lulusan yang Dikembangkan&lt;/div&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penalaran Kritis&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menganalisis kelebihan dan kekurangan dua jenis teks berdasarkan bukti tekstual.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kemandirian&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyelesaikan reviu dan simpulan perbandingan secara mandiri.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kolaborasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Bekerja sama dalam kelompok saat membandingkan dua teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Komunikasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyampaikan hasil perbandingan teks secara jelas dan runtut.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI A: TEKS CERAMAH ============ --&gt;
  &lt;section class="section" id="materi-a"&gt;
    &lt;div class="eyebrow"&gt;02 — Materi Inti A&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengenal Teks Ceramah&lt;/h2&gt;
    &lt;p class="lead"&gt;Teks ceramah dipelajari kembali sebagai salah satu teks yang akan dibandingkan pada pertemuan ini.&lt;/p&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Teks ceramah&lt;/b&gt; adalah teks berisi pidato seseorang di hadapan pendengar, bertujuan memberi nasihat, wejangan, atau pengetahuan tentang suatu hal, biasanya bertema moral, agama, atau sosial, dan disampaikan secara lisan.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Struktur&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Pembukaan (salam &amp;amp; sapaan) → isi (paparan gagasan) → penutup (simpulan &amp;amp; salam).&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kata Ganti &amp;amp; Sapaan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;"Kita", "kami", serta sapaan seperti "hadirin", "saudara-saudara".&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Ciri Kebahasaan Lain&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kalimat persuasif, konjungsi kausalitas (karena, oleh karena itu), kalimat ajakan ("mari", "marilah").&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI B: ARTIKEL OPINI ============ --&gt;
  &lt;section class="section" id="materi-b"&gt;
    &lt;div class="eyebrow"&gt;03 — Materi Inti B&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengenal Teks Artikel Opini sebagai Teks Pembanding&lt;/h2&gt;
    &lt;p class="lead"&gt;Teks artikel opini dipilih sebagai teks pembanding karena sama-sama bersifat persuasif, namun disampaikan melalui tulisan.&lt;/p&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Teks artikel opini&lt;/b&gt; adalah teks tulisan yang berisi pandangan atau pendapat penulis terhadap suatu isu, didukung fakta dan data, bertujuan meyakinkan pembaca terhadap sudut pandang tertentu.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Struktur&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Pengantar/tesis (isu diangkat) → argumentasi (alasan &amp;amp; bukti) → penegasan ulang/simpulan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Sifat Penulisan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Lebih objektif, jarang memakai sapaan langsung, didukung data/fakta.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Ciri Kebahasaan Lain&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kalimat argumentatif, konjungsi kausalitas &amp;amp; pertentangan, rujukan pendapat ahli/data.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI C: PERSAMAAN ============ --&gt;
  &lt;section class="section" id="materi-c"&gt;
    &lt;div class="eyebrow"&gt;04 — Materi Inti C&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Persamaan Teks Ceramah dan Artikel Opini&lt;/h2&gt;

    &lt;div class="criteria"&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;1&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Sama-Sama Bersifat Persuasif&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Keduanya berusaha memengaruhi atau meyakinkan pembaca/pendengar terhadap suatu pandangan.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;2&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Menyajikan Argumen Berdasarkan Fakta&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Keduanya mendukung gagasan dengan alasan, contoh, atau data agar lebih meyakinkan.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;3&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Memiliki Struktur Pembuka-Isi-Penutup&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Keduanya tersusun dari bagian pembuka, pemaparan gagasan, dan penutup/simpulan.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;4&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Membahas Suatu Isu secara Mendalam&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Keduanya mengangkat satu topik tertentu dan membahasnya secara terfokus.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI D: PERBEDAAN ============ --&gt;
  &lt;section class="section" id="materi-d"&gt;
    &lt;div class="eyebrow"&gt;05 — Materi Inti D&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Perbedaan Teks Ceramah dan Artikel Opini&lt;/h2&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Aspek&lt;/th&gt;&lt;th&gt;Teks Ceramah&lt;/th&gt;&lt;th&gt;Teks Artikel Opini&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Media&lt;/td&gt;&lt;td&gt;Disampaikan secara lisan&lt;/td&gt;&lt;td&gt;Disampaikan secara tulisan&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Sifat Interaksi&lt;/td&gt;&lt;td&gt;Interaktif, ada kontak langsung dengan pendengar&lt;/td&gt;&lt;td&gt;Satu arah, dibaca sendiri oleh pembaca&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kata Ganti/Sapaan&lt;/td&gt;&lt;td&gt;Sering memakai "kita/kami" dan sapaan "hadirin"&lt;/td&gt;&lt;td&gt;Lebih objektif, jarang memakai sapaan langsung&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Tema Umum&lt;/td&gt;&lt;td&gt;Sering bertema moral, agama, atau sosial&lt;/td&gt;&lt;td&gt;Lintas tema: politik, ekonomi, sosial, dan lainnya&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Cara Penyampaian&lt;/td&gt;&lt;td&gt;Intonasi, ekspresi, dan bahasa tubuh&lt;/td&gt;&lt;td&gt;Pilihan kata dan struktur kalimat tertulis&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI E: KELEBIHAN &amp; KEKURANGAN ============ --&gt;
  &lt;section class="section" id="materi-e"&gt;
    &lt;div class="eyebrow"&gt;06 — Materi Inti E&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kelebihan dan Kekurangan Masing-Masing Teks&lt;/h2&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Jenis Teks&lt;/th&gt;&lt;th&gt;Kelebihan&lt;/th&gt;&lt;th&gt;Kekurangan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Teks Ceramah&lt;/td&gt;&lt;td&gt;Dapat menyentuh emosi pendengar secara langsung melalui intonasi dan ekspresi; ada interaksi langsung (tanya jawab)&lt;/td&gt;&lt;td&gt;Sulit diulang kecuali direkam; pesan mudah terlupakan jika tidak dicatat&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Teks Artikel Opini&lt;/td&gt;&lt;td&gt;Dapat dibaca ulang kapan saja; dapat disebarluaskan lebih luas dan cepat melalui media cetak/daring&lt;/td&gt;&lt;td&gt;Tidak ada interaksi langsung dengan pembaca; kurang menyentuh emosi secara langsung&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI F: LANGKAH MEMBANDINGKAN ============ --&gt;
  &lt;section class="section" id="materi-f"&gt;
    &lt;div class="eyebrow"&gt;07 — Materi Inti F&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Langkah-Langkah Membandingkan Isi Dua Teks&lt;/h2&gt;

    &lt;div class="timeline"&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;01 · Membaca Kedua Teks&lt;/h4&gt;&lt;p&gt;Baca teks ceramah dan artikel opini secara menyeluruh untuk memahami isi masing-masing.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;02 · Mengidentifikasi Topik/Isu&lt;/h4&gt;&lt;p&gt;Tentukan isu atau topik yang dibahas pada masing-masing teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;03 · Membandingkan Struktur &amp;amp; Cara Penyampaian&lt;/h4&gt;&lt;p&gt;Bandingkan bagian-bagian pembangun teks serta gaya penyampaian argumennya.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;04 · Menganalisis Kelebihan &amp;amp; Kekurangan&lt;/h4&gt;&lt;p&gt;Tentukan sisi unggul dan sisi lemah masing-masing teks berdasarkan bukti dari teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;05 · Menyusun Simpulan Perbandingan&lt;/h4&gt;&lt;p&gt;Tuliskan simpulan perbandingan secara ringkas dan berdasarkan bukti dari kedua teks.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ PEMODELAN ============ --&gt;
  &lt;section class="section" id="contoh"&gt;
    &lt;div class="eyebrow"&gt;08 — Pemodelan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Contoh Penerapan: Membandingkan Dua Teks&lt;/h2&gt;
    &lt;p class="lead"&gt;Guru membacakan dan membahas bersama sepasang teks berikut sebagai model penerapan sebelum murid mengerjakan tugas kelompok.&lt;/p&gt;

    &lt;div class="doc-sample"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Ceramah Contoh&lt;/span&gt;&lt;span&gt;Dokumen-01&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Pentingnya Menjaga Lingkungan&lt;/h3&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;Assalamu'alaikum warahmatullahi wabarakatuh. Hadirin yang berbahagia, pada kesempatan ini marilah kita bersama-sama merenungkan pentingnya menjaga lingkungan. Kita sering melihat sampah berserakan di sekitar kita. Oleh karena itu, mari kita mulai membiasakan diri membuang sampah pada tempatnya. Dengan menjaga lingkungan, kita turut menjaga kesehatan diri dan generasi mendatang. Demikian yang dapat saya sampaikan, semoga bermanfaat. Wassalamu'alaikum warahmatullahi wabarakatuh.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="doc-sample" style="margin-top:22px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Artikel Opini Contoh&lt;/span&gt;&lt;span&gt;Dokumen-02&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Pentingnya Menjaga Lingkungan bagi Generasi Mendatang&lt;/h3&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;Masalah sampah masih menjadi persoalan serius di berbagai daerah. Berdasarkan data Kementerian Lingkungan Hidup, volume sampah nasional terus meningkat setiap tahun. Kondisi ini menunjukkan bahwa kesadaran masyarakat dalam mengelola sampah masih rendah. Oleh sebab itu, diperlukan edukasi berkelanjutan mengenai pengelolaan sampah sejak dini agar generasi mendatang dapat hidup di lingkungan yang lebih bersih dan sehat.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="panel" style="margin-top:22px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Simpulan model perbandingan:&lt;/b&gt; Kedua teks membahas isu yang sama, yaitu menjaga lingkungan. Teks ceramah menggunakan sapaan religius dan kalimat ajakan langsung ("mari kita..."), sedangkan artikel opini menggunakan data resmi sebagai penguat argumen dengan bahasa yang lebih formal dan objektif. Kelebihan ceramah terletak pada kedekatan emosional melalui sapaan langsung, sementara kelebihan artikel opini terletak pada kekuatan argumen berbasis data yang dapat diverifikasi.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN ============ --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="eyebrow"&gt;09 — Ringkasan Materi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Poin-Poin Penting&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;ul&gt;
        &lt;li&gt;Teks ceramah disampaikan secara lisan dan interaktif, sedangkan artikel opini disampaikan secara tulisan dan satu arah.&lt;/li&gt;
        &lt;li&gt;Persamaan keduanya: bersifat persuasif, menyajikan argumen berdasarkan fakta, dan memiliki struktur pembuka-isi-penutup.&lt;/li&gt;
        &lt;li&gt;Kelebihan ceramah adalah kedekatan emosional langsung; kekurangannya sulit diulang. Kelebihan artikel opini adalah dapat dibaca ulang dan disebarluaskan luas; kekurangannya tidak ada interaksi langsung.&lt;/li&gt;
        &lt;li&gt;Membandingkan dilakukan bertahap: membaca kedua teks → mengidentifikasi topik → membandingkan struktur → menganalisis kelebihan-kekurangan → menyusun simpulan.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS KELOMPOK ============ --&gt;
  &lt;section class="section" id="tugas-kelompok"&gt;
    &lt;div class="eyebrow"&gt;10 — Lembar Kerja&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Kelompok: Membandingkan Teks Ceramah dan Artikel Opini&lt;/h2&gt;
      &lt;span class="badge"&gt;Durasi ± 60 menit&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Tujuan tugas:&lt;/b&gt; Murid secara berkelompok membandingkan sepasang teks bertema sama berikut, lalu menemukan persamaan, perbedaan, kelebihan, dan kekurangan masing-masing.&lt;/p&gt;

    &lt;div class="doc-sample" style="margin-top:20px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Ceramah untuk Dibandingkan&lt;/span&gt;&lt;span&gt;Dokumen-03&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Pentingnya Membaca Buku&lt;/h3&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;Assalamu'alaikum warahmatullahi wabarakatuh. Bapak/Ibu dan saudara sekalian yang saya hormati, pada hari ini izinkan saya menyampaikan sedikit renungan tentang pentingnya membaca buku. Di era digital ini, banyak dari kita lebih memilih menghabiskan waktu dengan gawai dibandingkan membaca buku. Padahal, buku adalah jendela ilmu yang dapat membuka wawasan kita seluas-luasnya. Oleh karena itu, marilah kita mulai membiasakan diri membaca buku minimal beberapa menit setiap hari. Dengan membiasakan membaca, kita akan menjadi pribadi yang lebih bijaksana dalam bertindak. Demikian yang dapat saya sampaikan. Wassalamu'alaikum warahmatullahi wabarakatuh.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="doc-sample" style="margin-top:20px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Artikel Opini untuk Dibandingkan&lt;/span&gt;&lt;span&gt;Dokumen-04&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Minat Baca Rendah, Tantangan Generasi Digital&lt;/h3&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;Data dari sebuah survei literasi menunjukkan bahwa minat baca masyarakat Indonesia masih tergolong rendah dibandingkan negara lain. Fenomena ini erat kaitannya dengan maraknya penggunaan gawai untuk hiburan singkat seperti media sosial. Akibatnya, kemampuan berpikir kritis dan mendalam masyarakat berpotensi menurun. Oleh sebab itu, diperlukan upaya bersama, mulai dari keluarga hingga sekolah, untuk membangun kembali kebiasaan membaca buku sejak usia dini.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Petunjuk Pengerjaan&lt;/h4&gt;
    &lt;ol class="steps-num"&gt;
      &lt;li&gt;&lt;b&gt;Bentuk kelompok&lt;/b&gt; beranggotakan 4–5 orang sesuai pembagian dari guru.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Baca kedua teks&lt;/b&gt; di atas secara bersama-sama dalam kelompok.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Identifikasi persamaan dan perbedaan&lt;/b&gt; kedua teks berdasarkan struktur, kata ganti/sapaan, dan cara penyampaian.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Isi Tabel Kelebihan dan Kekurangan&lt;/b&gt; di bawah ini untuk masing-masing teks.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Presentasikan hasil&lt;/b&gt; di depan kelas selama maksimal 5 menit per kelompok, dilanjutkan tanya jawab singkat.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Format Tabel Kelebihan dan Kekurangan&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Jenis Teks&lt;/th&gt;&lt;th&gt;Kelebihan&lt;/th&gt;&lt;th&gt;Kekurangan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Teks Ceramah&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Teks Artikel Opini&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Rubrik Penilaian Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:26%;"&gt;Aspek Penilaian&lt;/th&gt;&lt;th&gt;Skor 4 (Sangat Baik)&lt;/th&gt;&lt;th&gt;Skor 3 (Baik)&lt;/th&gt;&lt;th&gt;Skor 2 (Cukup)&lt;/th&gt;&lt;th&gt;Skor 1 (Kurang)&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan identifikasi persamaan &amp;amp; perbedaan&lt;/td&gt;&lt;td&gt;Seluruh aspek teridentifikasi tepat dengan bukti jelas&lt;/td&gt;&lt;td&gt;Sebagian besar tepat&lt;/td&gt;&lt;td&gt;Identifikasi dangkal&lt;/td&gt;&lt;td&gt;Tidak sesuai&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan analisis kelebihan &amp;amp; kekurangan&lt;/td&gt;&lt;td&gt;Analisis tepat dan didukung bukti dari teks&lt;/td&gt;&lt;td&gt;Sebagian besar tepat&lt;/td&gt;&lt;td&gt;Analisis kurang didukung bukti&lt;/td&gt;&lt;td&gt;Tidak tepat&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kerja sama kelompok&lt;/td&gt;&lt;td&gt;Seluruh anggota aktif berkontribusi&lt;/td&gt;&lt;td&gt;Sebagian besar anggota aktif&lt;/td&gt;&lt;td&gt;Hanya sebagian kecil anggota aktif&lt;/td&gt;&lt;td&gt;Didominasi satu orang&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Presentasi&lt;/td&gt;&lt;td&gt;Jelas, percaya diri, menjawab pertanyaan dengan baik&lt;/td&gt;&lt;td&gt;Jelas namun kurang percaya diri&lt;/td&gt;&lt;td&gt;Kurang jelas/terbata-bata&lt;/td&gt;&lt;td&gt;Tidak dapat menjelaskan hasil&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS INDIVIDU: KUIS 25 PERTANYAAN ============ --&gt;
  &lt;section class="section" id="tugas-individu"&gt;
    &lt;div class="eyebrow"&gt;11 — Penutup Pembelajaran&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Individu: Menjawab 25 Pertanyaan tentang Materi&lt;/h2&gt;
      &lt;span class="badge"&gt;Dikerjakan Mandiri · Otomatis Bernilai&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Petunjuk:&lt;/b&gt; Isi No. Absen dan Nama, lalu jawab 25 pertanyaan pilihan ganda (5 opsi) berikut berdasarkan materi yang telah dipelajari hari ini — terdiri atas 10 soal mudah, 10 soal sedang, dan 5 soal sulit. Skor akan muncul otomatis setelah menekan tombol "Kirim Jawaban", dan hasilnya akan tercatat otomatis.&lt;/p&gt;

    &lt;div class="panel" style="margin-top:20px;"&gt;
      &lt;div style="display:grid; grid-template-columns:1fr 2fr; gap:14px; margin-bottom:22px;"&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;No. Absen&lt;/label&gt;
          &lt;input id="cq-absen" type="text" inputmode="numeric" placeholder="Contoh: 12" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;Nama Lengkap&lt;/label&gt;
          &lt;input id="cq-nama" type="text" placeholder="Tulis nama lengkap" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;1. Teks yang berisi pidato bertujuan memberi nasihat atau wejangan kepada pendengar disebut teks...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq0" value="0" style="margin-right:8px;"&gt;A. Artikel&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq0" value="1" style="margin-right:8px;"&gt;B. Ceramah&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq0" value="2" style="margin-right:8px;"&gt;C. Prosedur&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq0" value="3" style="margin-right:8px;"&gt;D. Eksplanasi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq0" value="4" style="margin-right:8px;"&gt;E. Anekdot&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;2. Bagian struktur teks ceramah yang berisi salam dan sapaan disebut...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq1" value="0" style="margin-right:8px;"&gt;A. Isi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq1" value="1" style="margin-right:8px;"&gt;B. Penutup&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq1" value="2" style="margin-right:8px;"&gt;C. Pembukaan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq1" value="3" style="margin-right:8px;"&gt;D. Simpulan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq1" value="4" style="margin-right:8px;"&gt;E. Argumen&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;3. Kata ganti yang sering digunakan dalam teks ceramah untuk menyapa pendengar adalah...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq2" value="0" style="margin-right:8px;"&gt;A. Saya&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq2" value="1" style="margin-right:8px;"&gt;B. Kalian&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq2" value="2" style="margin-right:8px;"&gt;C. Hadirin&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq2" value="3" style="margin-right:8px;"&gt;D. Mereka&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq2" value="4" style="margin-right:8px;"&gt;E. Dia&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;4. Teks tulisan yang berisi pendapat penulis terhadap suatu isu disebut teks...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq3" value="0" style="margin-right:8px;"&gt;A. Ceramah&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq3" value="1" style="margin-right:8px;"&gt;B. Artikel opini&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq3" value="2" style="margin-right:8px;"&gt;C. Prosedur&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq3" value="3" style="margin-right:8px;"&gt;D. Deskripsi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq3" value="4" style="margin-right:8px;"&gt;E. Anekdot&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;5. Bagian struktur artikel opini yang berisi isu yang diangkat disebut...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq4" value="0" style="margin-right:8px;"&gt;A. Argumentasi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq4" value="1" style="margin-right:8px;"&gt;B. Pengantar/tesis&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq4" value="2" style="margin-right:8px;"&gt;C. Penutup&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq4" value="3" style="margin-right:8px;"&gt;D. Interpretasi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq4" value="4" style="margin-right:8px;"&gt;E. Orientasi&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;6. Manakah media penyampaian teks ceramah?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq5" value="0" style="margin-right:8px;"&gt;A. Tulisan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq5" value="1" style="margin-right:8px;"&gt;B. Lisan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq5" value="2" style="margin-right:8px;"&gt;C. Gambar&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq5" value="3" style="margin-right:8px;"&gt;D. Video tanpa suara&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq5" value="4" style="margin-right:8px;"&gt;E. Simbol&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;7. Manakah media penyampaian teks artikel opini?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq6" value="0" style="margin-right:8px;"&gt;A. Lisan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq6" value="1" style="margin-right:8px;"&gt;B. Tulisan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq6" value="2" style="margin-right:8px;"&gt;C. Gerakan tubuh&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq6" value="3" style="margin-right:8px;"&gt;D. Suara tanpa kata&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq6" value="4" style="margin-right:8px;"&gt;E. Simbol&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;8. Kalimat “Marilah kita menjaga lingkungan bersama-sama” termasuk kalimat...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq7" value="0" style="margin-right:8px;"&gt;A. Deklaratif&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq7" value="1" style="margin-right:8px;"&gt;B. Interogatif&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq7" value="2" style="margin-right:8px;"&gt;C. Persuasif&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq7" value="3" style="margin-right:8px;"&gt;D. Naratif&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq7" value="4" style="margin-right:8px;"&gt;E. Deskriptif&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;9. Konjungsi yang menunjukkan sebab-akibat disebut konjungsi...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq8" value="0" style="margin-right:8px;"&gt;A. Temporal&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq8" value="1" style="margin-right:8px;"&gt;B. Kausalitas&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq8" value="2" style="margin-right:8px;"&gt;C. Pertentangan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq8" value="3" style="margin-right:8px;"&gt;D. Pilihan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq8" value="4" style="margin-right:8px;"&gt;E. Penjumlahan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#6EC6CA !important; border:1px solid #6EC6CA; padding:2px 8px; margin-bottom:6px;"&gt;Mudah&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;10. Apa tujuan utama dari kedua teks ceramah dan artikel opini?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq9" value="0" style="margin-right:8px;"&gt;A. Menghibur pembaca&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq9" value="1" style="margin-right:8px;"&gt;B. Memengaruhi/meyakinkan pembaca atau pendengar&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq9" value="2" style="margin-right:8px;"&gt;C. Menceritakan pengalaman pribadi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq9" value="3" style="margin-right:8px;"&gt;D. Menjelaskan langkah kerja&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq9" value="4" style="margin-right:8px;"&gt;E. Menjual produk&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;11. Manakah persamaan antara teks ceramah dan artikel opini?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq10" value="0" style="margin-right:8px;"&gt;A. Keduanya bersifat naratif&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq10" value="1" style="margin-right:8px;"&gt;B. Keduanya bersifat persuasif dan menyajikan argumen&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq10" value="2" style="margin-right:8px;"&gt;C. Keduanya tidak memiliki struktur&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq10" value="3" style="margin-right:8px;"&gt;D. Keduanya tidak menggunakan konjungsi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq10" value="4" style="margin-right:8px;"&gt;E. Keduanya tidak membahas isu tertentu&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;12. Perbedaan utama cara penyampaian pesan antara ceramah dan artikel opini adalah...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq11" value="0" style="margin-right:8px;"&gt;A. Ceramah menggunakan intonasi dan ekspresi, artikel opini menggunakan pilihan kata tertulis&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq11" value="1" style="margin-right:8px;"&gt;B. Keduanya sama-sama menggunakan gambar&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq11" value="2" style="margin-right:8px;"&gt;C. Ceramah tidak memiliki pesan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq11" value="3" style="margin-right:8px;"&gt;D. Artikel opini disampaikan secara lisan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq11" value="4" style="margin-right:8px;"&gt;E. Keduanya tidak memiliki tujuan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;13. Salah satu kelebihan teks ceramah dibandingkan artikel opini adalah...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq12" value="0" style="margin-right:8px;"&gt;A. Dapat dibaca ulang kapan saja&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq12" value="1" style="margin-right:8px;"&gt;B. Dapat menyentuh emosi pendengar secara langsung&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq12" value="2" style="margin-right:8px;"&gt;C. Lebih mudah disebarluaskan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq12" value="3" style="margin-right:8px;"&gt;D. Lebih objektif&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq12" value="4" style="margin-right:8px;"&gt;E. Tidak memerlukan persiapan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;14. Salah satu kekurangan teks ceramah dibandingkan artikel opini adalah...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq13" value="0" style="margin-right:8px;"&gt;A. Sulit diulang kecuali direkam&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq13" value="1" style="margin-right:8px;"&gt;B. Tidak dapat menyentuh emosi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq13" value="2" style="margin-right:8px;"&gt;C. Tidak memiliki struktur&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq13" value="3" style="margin-right:8px;"&gt;D. Tidak bisa disampaikan di depan umum&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq13" value="4" style="margin-right:8px;"&gt;E. Tidak memiliki tujuan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;15. Salah satu kelebihan artikel opini dibandingkan ceramah adalah...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq14" value="0" style="margin-right:8px;"&gt;A. Lebih menyentuh emosi secara langsung&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq14" value="1" style="margin-right:8px;"&gt;B. Dapat dibaca ulang dan disebarluaskan lebih luas&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq14" value="2" style="margin-right:8px;"&gt;C. Selalu lebih pendek&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq14" value="3" style="margin-right:8px;"&gt;D. Tidak memerlukan data&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq14" value="4" style="margin-right:8px;"&gt;E. Tidak memiliki penulis&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;16. Mengapa teks ceramah sering menggunakan kata ganti “kita” atau “kami”?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq15" value="0" style="margin-right:8px;"&gt;A. Untuk membangun kedekatan dengan pendengar&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq15" value="1" style="margin-right:8px;"&gt;B. Karena aturan tata bahasa baku&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq15" value="2" style="margin-right:8px;"&gt;C. Agar teks lebih panjang&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq15" value="3" style="margin-right:8px;"&gt;D. Untuk menghindari kesalahan tata bahasa&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq15" value="4" style="margin-right:8px;"&gt;E. Tidak ada alasan khusus&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;17. Artikel opini cenderung lebih objektif dibanding ceramah karena...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq16" value="0" style="margin-right:8px;"&gt;A. Menggunakan data dan fakta sebagai penguat argumen&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq16" value="1" style="margin-right:8px;"&gt;B. Tidak memiliki penulis&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq16" value="2" style="margin-right:8px;"&gt;C. Tidak membahas isu apa pun&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq16" value="3" style="margin-right:8px;"&gt;D. Selalu ditulis oleh banyak orang&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq16" value="4" style="margin-right:8px;"&gt;E. Tidak memiliki struktur&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;18. Langkah pertama dalam membandingkan isi dua teks adalah...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq17" value="0" style="margin-right:8px;"&gt;A. Menyusun simpulan langsung&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq17" value="1" style="margin-right:8px;"&gt;B. Membaca kedua teks secara menyeluruh&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq17" value="2" style="margin-right:8px;"&gt;C. Menilai kelebihan tanpa membaca&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq17" value="3" style="margin-right:8px;"&gt;D. Menghapus salah satu teks&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq17" value="4" style="margin-right:8px;"&gt;E. Menyajikan secara lisan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;19. Konjungsi “oleh karena itu” dalam teks ceramah maupun artikel opini umumnya berfungsi untuk...&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq18" value="0" style="margin-right:8px;"&gt;A. Menandai urutan waktu&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq18" value="1" style="margin-right:8px;"&gt;B. Menyimpulkan atau menegaskan alasan sebelumnya&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq18" value="2" style="margin-right:8px;"&gt;C. Menyatakan pertentangan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq18" value="3" style="margin-right:8px;"&gt;D. Menyatakan pilihan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq18" value="4" style="margin-right:8px;"&gt;E. Menambahkan informasi tanpa kaitan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#F5A623 !important; border:1px solid #F5A623; padding:2px 8px; margin-bottom:6px;"&gt;Sedang&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;20. Manakah pernyataan yang tepat tentang struktur kedua teks?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq19" value="0" style="margin-right:8px;"&gt;A. Ceramah tidak memiliki struktur&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq19" value="1" style="margin-right:8px;"&gt;B. Keduanya sama-sama memiliki bagian pembuka, isi, dan penutup meski istilahnya berbeda&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq19" value="2" style="margin-right:8px;"&gt;C. Artikel opini tidak memiliki penutup&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq19" value="3" style="margin-right:8px;"&gt;D. Keduanya identik tanpa perbedaan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq19" value="4" style="margin-right:8px;"&gt;E. Ceramah tidak memiliki bagian isi&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#D94E2A !important; border:1px solid #D94E2A; padding:2px 8px; margin-bottom:6px;"&gt;Sulit&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;21. Sebuah ceramah dan artikel opini membahas isu yang sama, yaitu pentingnya menabung. Manakah simpulan yang paling tepat menggambarkan perbedaan pendekatan keduanya?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq20" value="0" style="margin-right:8px;"&gt;A. Ceramah cenderung mengandalkan kedekatan emosional dan ajakan langsung, sedangkan artikel opini mengandalkan data dan argumentasi tertulis&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq20" value="1" style="margin-right:8px;"&gt;B. Keduanya menggunakan pendekatan yang sama persis&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq20" value="2" style="margin-right:8px;"&gt;C. Ceramah tidak memiliki pendekatan persuasif&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq20" value="3" style="margin-right:8px;"&gt;D. Artikel opini tidak membahas data&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq20" value="4" style="margin-right:8px;"&gt;E. Keduanya tidak dapat dibandingkan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#D94E2A !important; border:1px solid #D94E2A; padding:2px 8px; margin-bottom:6px;"&gt;Sulit&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;22. Jika sebuah artikel opini ingin dijadikan bahan ceramah, penyesuaian apa yang paling penting dilakukan?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq21" value="0" style="margin-right:8px;"&gt;A. Menambahkan sapaan, kata ganti “kita”, dan kalimat ajakan langsung yang sesuai penyampaian lisan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq21" value="1" style="margin-right:8px;"&gt;B. Menghapus seluruh data pendukung&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq21" value="2" style="margin-right:8px;"&gt;C. Mengubahnya menjadi teks prosedur&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq21" value="3" style="margin-right:8px;"&gt;D. Menghapus argumen utama&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq21" value="4" style="margin-right:8px;"&gt;E. Tidak perlu penyesuaian apa pun&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#D94E2A !important; border:1px solid #D94E2A; padding:2px 8px; margin-bottom:6px;"&gt;Sulit&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;23. Manakah kondisi yang paling menunjukkan kekurangan teks ceramah dibandingkan artikel opini dalam konteks penyebaran informasi jangka panjang?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq22" value="0" style="margin-right:8px;"&gt;A. Ceramah dapat langsung direkam otomatis&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq22" value="1" style="margin-right:8px;"&gt;B. Pesan ceramah berisiko hilang/terlupakan jika tidak didokumentasikan, sementara artikel opini tetap tersimpan sebagai teks&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq22" value="2" style="margin-right:8px;"&gt;C. Ceramah selalu lebih singkat&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq22" value="3" style="margin-right:8px;"&gt;D. Artikel opini tidak dapat disimpan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq22" value="4" style="margin-right:8px;"&gt;E. Keduanya sama-sama tidak dapat didokumentasikan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#D94E2A !important; border:1px solid #D94E2A; padding:2px 8px; margin-bottom:6px;"&gt;Sulit&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;24. Seorang penceramah menyampaikan argumen tanpa didukung data, sementara sebuah artikel opini pada topik yang sama menyertakan data resmi. Berdasarkan hal tersebut, manakah kelemahan yang paling menonjol dari ceramah tersebut?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq23" value="0" style="margin-right:8px;"&gt;A. Kurangnya penguat argumen berupa fakta/data yang dapat diverifikasi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq23" value="1" style="margin-right:8px;"&gt;B. Ceramah tersebut terlalu panjang&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq23" value="2" style="margin-right:8px;"&gt;C. Ceramah tersebut tidak memiliki penutup&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq23" value="3" style="margin-right:8px;"&gt;D. Ceramah tersebut tidak memiliki pembukaan&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq23" value="4" style="margin-right:8px;"&gt;E. Ceramah tersebut tidak disampaikan secara lisan&lt;/label&gt;
      &lt;/div&gt;
      &lt;div style="margin-bottom:20px; padding-bottom:16px; border-bottom:1px dashed rgba(234,242,245,0.16);"&gt;
        &lt;span class="mono" style="display:inline-block; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:#D94E2A !important; border:1px solid #D94E2A; padding:2px 8px; margin-bottom:6px;"&gt;Sulit&lt;/span&gt;
        &lt;p style="color:#EAF2F5 !important; font-weight:600; margin:6px 0 8px;"&gt;25. Manakah simpulan paling tepat tentang kapan sebaiknya menggunakan teks ceramah dibandingkan artikel opini untuk menyampaikan suatu pesan?&lt;/p&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq24" value="0" style="margin-right:8px;"&gt;A. Ceramah lebih tepat digunakan ketika ingin membangun kedekatan emosional secara langsung dengan audiens dalam suatu forum tertentu&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq24" value="1" style="margin-right:8px;"&gt;B. Artikel opini selalu lebih baik dalam segala situasi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq24" value="2" style="margin-right:8px;"&gt;C. Ceramah tidak pernah digunakan untuk pesan penting&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq24" value="3" style="margin-right:8px;"&gt;D. Keduanya tidak memiliki perbedaan fungsi&lt;/label&gt;
        &lt;label style="display:block; color:#DDE7EC !important; font-size:0.92rem; margin:4px 0; cursor:pointer;"&gt;&lt;input type="radio" name="cq24" value="4" style="margin-right:8px;"&gt;E. Artikel opini tidak dapat memengaruhi pembaca&lt;/label&gt;
      &lt;/div&gt;

      &lt;div style="margin-top:24px; display:flex; align-items:center; gap:16px; flex-wrap:wrap;"&gt;
        &lt;button id="cq-submit" type="button" style="background:var(--amber); color:var(--blueprint-deep); border:none; padding:12px 26px; font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.05em; font-weight:600; border-radius:2px; cursor:pointer; font-size:0.95rem;"&gt;Kirim Jawaban&lt;/button&gt;
        &lt;span id="cq-status" class="mono" style="font-size:0.85rem; color:var(--muted);"&gt;&lt;/span&gt;
      &lt;/div&gt;

      &lt;div id="cq-result" style="display:none; margin-top:20px; padding:18px 20px; border:1px solid var(--amber); background:rgba(245,166,35,0.08);"&gt;
        &lt;p style="margin:0; font-size:1.05rem;"&gt;Skor kamu: &lt;b id="cq-score" style="color:var(--amber); font-size:1.3rem;"&gt;&lt;/b&gt; / 100&lt;/p&gt;
        &lt;p id="cq-detail" style="margin:8px 0 0; font-size:0.9rem; color:var(--muted);"&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/CERAMAH-BANDING — Fokus Tujuan Pembelajaran, Materi Inti, Tugas Kelompok &amp;amp; Tugas Individu, 1× pertemuan (3 JP)&lt;/div&gt;
  &lt;p style="margin:0;"&gt;Referensi: Kurikulum Merdeka — Capaian Pembelajaran Bahasa Indonesia Fase F (Elemen Membaca dan Memirsa); Buku Teks Bahasa Indonesia Kelas XI SMK/MAK Kemendikbudristek.&lt;/p&gt;
&lt;/footer&gt;

&lt;script&gt;
(function(){
  var CQ_ENDPOINT = "https://script.google.com/macros/s/AKfycbzM7t2qgAENzxQJXzSYJYL28R6nb3TxJVELLL3CopyEXb51t_gRtrkPOxTpI5mq6VCEKw/exec";
  var CQ_MATERI = "Membandingkan Isi Teks Ceramah dengan Teks Lain";
  var correctAnswers = [1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0];

  document.getElementById("cq-submit").addEventListener("click", function(){
    var absen = document.getElementById("cq-absen").value.trim();
    var nama = document.getElementById("cq-nama").value.trim();
    var statusEl = document.getElementById("cq-status");

    if(!absen || !nama){
      statusEl.textContent = "Isi No. Absen dan Nama terlebih dahulu.";
      statusEl.style.setProperty("color", "#F5A623", "important");
      return;
    }

    var belumDijawab = [];
    var benar = 0;
    correctAnswers.forEach(function(correct, idx){
      var checked = document.querySelector('input[name="cq' + idx + '"]:checked');
      if(!checked){
        belumDijawab.push(idx+1);
      } else if(parseInt(checked.value,10) === correct){
        benar++;
      }
    });

    if(belumDijawab.length &gt; 0){
      statusEl.textContent = "Masih ada " + belumDijawab.length + " soal yang belum dijawab (nomor " + belumDijawab.slice(0,5).join(", ") + (belumDijawab.length&gt;5? ", ...":"") + ").";
      statusEl.style.setProperty("color", "#F5A623", "important");
      return;
    }

    var skor = benar * 4;
    document.getElementById("cq-score").textContent = skor;
    document.getElementById("cq-detail").textContent = "Menjawab benar " + benar + " dari 25 pertanyaan.";
    document.getElementById("cq-result").style.display = "block";
    statusEl.textContent = "Mengirim hasil...";
    statusEl.style.setProperty("color", "#9FB4C2", "important");

    var payload = new URLSearchParams();
    payload.append("noAbsen", absen);
    payload.append("nama", nama);
    payload.append("skor", skor);
    payload.append("materi", CQ_MATERI);
    payload.append("waktu", new Date().toISOString());

    fetch(CQ_ENDPOINT, {
      method: "POST",
      mode: "no-cors",
      headers: {"Content-Type":"application/x-www-form-urlencoded"},
      body: payload.toString()
    }).then(function(){
      statusEl.textContent = "Hasil berhasil dikirim ke guru.";
      statusEl.style.setProperty("color", "#6EC6CA", "important");
    }).catch(function(){
      statusEl.textContent = "Skor tercatat di halaman ini, namun pengiriman gagal. Tunjukkan skor ini ke guru.";
      statusEl.style.setProperty("color", "#F5A623", "important");
    });
  });
})();
&lt;/script&gt;
&lt;/div&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/membandingkan-isi-teks-ceramah-dengan.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-8515984388765739015</guid><pubDate>Fri, 18 Sep 2026 06:32:06 +0000</pubDate><atom:updated>2026-09-18T13:32:06.488+07:00</atom:updated><title>SERTIFIKAT KOMBEL</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Generator Sertifikat&lt;/title&gt;

&lt;link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&amp;display=swap" rel="stylesheet"&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"&gt;&lt;/script&gt;

&lt;style&gt;

body{
    font-family:Arial,sans-serif;
    background:#eef2f7;
    padding:20px;
    max-width:700px;
    margin:auto;
}

.card{
    background:white;
    padding:24px;
    border-radius:20px;
    box-shadow:0 10px 20px rgba(0,0,0,.1);
}

h2{
    text-align:center;
    color:#1e4668;
}

.confirm-box{
    background:#f0f6ff;
    border-left:5px solid #2c7da0;
    padding:16px;
    border-radius:16px;
    margin-bottom:20px;
    text-align:center;
}

.confirm-box p{
    margin-top:0;
    font-weight:bold;
    color:#1e4668;
}

.confirm-buttons{
    display:flex;
    gap:10px;
    margin-top:10px;
}

.confirm-buttons button{
    flex:1;
}

.yes-btn{
    background:#1f8a4c;
}

.yes-btn:hover{
    background:#166638;
}

.no-btn{
    background:#c0392b;
}

.no-btn:hover{
    background:#962d22;
}

input,select,button{
    width:100%;
    padding:12px;
    margin-top:10px;
    border-radius:12px;
    border:1px solid #ccc;
    font-size:16px;
}

button{
    background:#2c7da0;
    color:white;
    border:none;
    cursor:pointer;
    font-weight:bold;
}

button:hover{
    background:#1f5e7a;
}

button:disabled{
    background:#94a3b8;
    cursor:not-allowed;
}

input:disabled,
select:disabled{
    background:#f1f5f9;
}

#preview{
    width:100%;
    border-radius:12px;
    margin-top:10px;
}

.loading{
    display:none;
    margin-top:15px;
    color:#1e4668;
    font-weight:bold;
    text-align:center;
}

.status{
    margin-top:12px;
    font-weight:bold;
}

.success{
    color:#1f8a4c;
}

.error{
    color:#c0392b;
}

&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="card"&gt;

&lt;h2&gt;&#128220; Generator Sertifikat&lt;/h2&gt;

&lt;!-- ================= KONFIRMASI ================= --&gt;

&lt;div class="confirm-box"&gt;

&lt;p&gt;&#128269; Apakah Anda mengikuti pelatihan?&lt;/p&gt;

&lt;div class="confirm-buttons"&gt;

&lt;button class="yes-btn" onclick="confirmIkut()"&gt;
✅ YA, IKUT
&lt;/button&gt;

&lt;button class="no-btn" onclick="confirmTidakIkut()"&gt;
❌ TIDAK
&lt;/button&gt;

&lt;/div&gt;

&lt;div id="statusKonfirmasi" class="status"&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ================= FORM ================= --&gt;

&lt;label&gt;Nama Lengkap&lt;/label&gt;

&lt;input
type="text"
id="nama"
placeholder="Contoh: Ahmad Fauzi"
disabled&gt;

&lt;label&gt;Peran&lt;/label&gt;

&lt;select id="peran" disabled&gt;
    &lt;option&gt;Peserta&lt;/option&gt;
    &lt;option&gt;Narasumber&lt;/option&gt;
&lt;/select&gt;

&lt;img
id="preview"
src="https://lh3.googleusercontent.com/d/1L7TuHgvpP30JNm5lwNSrqSLsTPDxdDbH"
alt="Template"&gt;

&lt;button
id="downloadBtn"
onclick="generatePDF()"
disabled&gt;

⬇️ UNDUH PDF

&lt;/button&gt;

&lt;div class="loading" id="loading"&gt;
Memproses PDF...
&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

// ================= TEMPLATE (DIUBAH) =================

const FILE_ID =
'1L7TuHgvpP30JNm5lwNSrqSLsTPDxdDbH';  // &lt;-- ID baru

const TEMPLATE_URL =
`https://lh3.googleusercontent.com/d/${FILE_ID}`;

// ================= UTIL =================

function showLoading(show){

    document.getElementById('loading').style.display =
        show ? 'block' : 'none';

}

function getRomanMonth(monthIndex){

    const romawi = [
        "I","II","III","IV","V","VI",
        "VII","VIII","IX","X","XI","XII"
    ];

    return romawi[monthIndex];

}

function capitalizeEachWord(text){

    return text
        .toLowerCase()
        .replace(/\b\w/g,c=&gt;c.toUpperCase());

}

// ================= KONFIRMASI =================

function confirmIkut(){

    document.getElementById('nama').disabled = false;

    document.getElementById('peran').disabled = false;

    document.getElementById('downloadBtn').disabled = false;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="success"&gt;✅ Konfirmasi diterima. Anda dapat mengunduh sertifikat.&lt;/span&gt;';

}

function confirmTidakIkut(){

    document.getElementById('nama').disabled = true;

    document.getElementById('peran').disabled = true;

    document.getElementById('downloadBtn').disabled = true;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="error"&gt;❌ Anda tidak dapat mengunduh sertifikat.&lt;/span&gt;';

}

// ================= LOAD IMAGE =================

function loadImage(url){

    return new Promise((resolve,reject)=&gt;{

        const img = new Image();

        img.crossOrigin = "anonymous";

        img.onload = ()=&gt;resolve(img);

        img.onerror = ()=&gt;{

            reject(
                new Error(
                    'Template Google Drive gagal dimuat'
                )
            );

        };

        img.src = url + '?t=' + Date.now();

    });

}

// ================= NOMOR =================

async function generateNomor(){

    const now = new Date();

    const bulan =
        getRomanMonth(now.getMonth());

    const tahun =
        now.getFullYear();

    const nomor =
        Math.floor(Math.random()*900)+100;

    return `${nomor}/K/${bulan}/${tahun}`;

}

// ================= PDF =================

async function generatePDF(){

    const namaInput =
        document.getElementById('nama');

    const peranSelect =
        document.getElementById('peran');

    let nama =
        namaInput.value.trim();

    const peran =
        peranSelect.value;

    if(!nama){

        alert('Nama wajib diisi');

        return;

    }

    nama =
        capitalizeEachWord(nama);

    showLoading(true);

    try{

        await document.fonts.ready;

        const img =
            await loadImage(TEMPLATE_URL);

        const canvas =
            document.createElement('canvas');

        canvas.width = img.width;
        canvas.height = img.height;

        const ctx =
            canvas.getContext('2d');

        ctx.drawImage(
            img,
            0,
            0,
            canvas.width,
            canvas.height
        );

        // ================= POSISI =================

        const nomorY =
            canvas.height * 0.235;

        const namaY =
            canvas.height * 0.3990;

        const peranY =
            canvas.height * 0.5420;

        // ================= STYLE =================

        ctx.textAlign = 'center';

        ctx.textBaseline = 'middle';

        ctx.fillStyle = '#000';

        // nomor
        const nomorSertifikat =
            await generateNomor();

        ctx.font =
            `bold ${canvas.width*0.0125}px Montserrat`;

        ctx.fillText(
            nomorSertifikat,
            canvas.width/2,
            nomorY
        );

        // nama auto shrink
        let fontSize =
            canvas.width * 0.031;

        ctx.font =
            `700 ${fontSize}px Montserrat`;

        let textWidth =
            ctx.measureText(nama).width;

        const maxWidth =
            canvas.width - 180;

        while(
            textWidth &gt; maxWidth &amp;&amp;
            fontSize &gt; 20
        ){

            fontSize -= 2;

            ctx.font =
                `700 ${fontSize}px Montserrat`;

            textWidth =
                ctx.measureText(nama).width;

        }

        ctx.fillText(
            nama,
            canvas.width/2,
            namaY
        );

        // peran
        ctx.font =
            `bold ${canvas.width*0.024}px Montserrat`;

        ctx.fillText(
            peran,
            canvas.width/2,
            peranY
        );

        // ================= PDF =================

        const imageData =
            canvas.toDataURL(
                'image/jpeg',
                1.0
            );

        const { jsPDF } =
            window.jspdf;

        const pdf =
            new jsPDF({

                orientation:
                    canvas.width &gt; canvas.height
                    ? 'landscape'
                    : 'portrait',

                unit:'px',

                format:[
                    canvas.width,
                    canvas.height
                ]

            });

        pdf.addImage(
            imageData,
            'JPEG',
            0,
            0,
            canvas.width,
            canvas.height
        );

        const safeName =
            nama.replace(/[^a-z0-9]/gi,'_');

        pdf.save(
            `Sertifikat_${safeName}.pdf`
        );

    }catch(error){

        console.error(error);

        alert(
            '❌ Gagal membuat PDF\n\n' +
            error.message +
            '\n\nPastikan file Google Drive bersifat PUBLIC.'
        );

    }finally{

        showLoading(false);

    }

}

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/sertifikat-kombel_01887761678.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://lh3.googleusercontent.com/d/1L7TuHgvpP30JNm5lwNSrqSLsTPDxdDbH=s72-c" width="72"/><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-1627330734637838139</guid><pubDate>Thu, 17 Sep 2026 03:15:22 +0000</pubDate><atom:updated>2026-09-17T10:25:44.751+07:00</atom:updated><title>Integrasi Dokumen dan Otomasi Pengolah Kata</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Integrasi Dokumen dan Otomasi Pengolah Kata - Informatika Kelas X&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&amp;family=IBM+Plex+Sans:wght@400;500;600;700&amp;family=Tinos:ital,wght@0,400;0,700;1,400&amp;display=swap" rel="stylesheet"&gt;
&lt;style&gt;
  :root{
    --word: #185ABD;
    --word-dark: #103F86;
    --ribbon: #F1F5FA;
    --paper: #FFFFFF;
    --ink: #1F2430;
    --ink-soft: #57606F;
    --line: #DDE1E6;
    --amber: #C08A1E;
    --green: #1E7A46;
    --red: #C43E2E;
    --radius: 6px;
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{ font-family:'IBM Plex Sans', sans-serif; background:#FFFFFF; color: var(--ink); line-height:1.6; }
  .mono{font-family:'IBM Plex Mono', monospace;}

  .page-shell{
    max-width: 1140px; margin: 16px auto; background:#FFFFFF; border-radius:14px;
    box-shadow: 0 8px 32px rgba(20,30,50,0.12), 0 1px 3px rgba(20,30,50,0.08); border: 1px solid var(--line);
  }

  /* ===== Hero ===== */
  .ribbon-hero{ background: var(--ribbon); border-bottom: 3px solid var(--word); border-radius:14px 14px 0 0; overflow:hidden; }
  .ribbon-strip{ display:flex; gap:6px; padding: 10px 5% 0; flex-wrap:wrap; }
  .ribbon-tab{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; padding:6px 12px; background:#FFFFFF; border:1px solid var(--line); border-bottom:none; border-radius:4px 4px 0 0; color: var(--ink-soft); }
  .ribbon-tab.active{ color: var(--word); font-weight:700; border-color: var(--word); }
  .hero-body{ padding: 28px 5% 40px; background:#FFFFFF; }
  .eyebrow{ font-family:'IBM Plex Mono', monospace; font-size:0.76rem; letter-spacing:0.14em; text-transform:uppercase; color: var(--word); display:flex; align-items:center; gap:10px; margin-bottom:18px; }
  .eyebrow::before{ content:""; width:10px; height:10px; border:1.5px solid var(--word); border-radius:2px; display:inline-block; }
  h1.title{ font-family:'IBM Plex Mono', monospace; font-weight:700; font-size: clamp(1.7rem, 4vw, 2.7rem); line-height:1.18; color: var(--word-dark); max-width:24ch; }
  .hero-sub{ margin-top:16px; max-width: 70ch; font-size:1.02rem; color: var(--ink-soft); }
  .meta-strip{ margin-top:30px; display:grid; grid-template-columns: repeat(auto-fit,minmax(160px,1fr)); gap:1px; background: var(--line); border:1px solid var(--line); }
  .meta-cell{ background: var(--ribbon); padding:12px 14px; }
  .meta-cell .k{ font-family:'IBM Plex Mono', monospace; font-size:0.64rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--word); }
  .meta-cell .v{ margin-top:5px; font-size:0.9rem; font-weight:600; color: var(--ink); }

  /* ===== Content ===== */
  main{ background: var(--paper); }
  .section{ padding: 36px 5%; border-bottom:1px solid #ECEFF3; }
  .section:last-of-type{border-bottom:none;}
  .section-tag{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.14em; text-transform:uppercase; color: var(--ink-soft); display:flex; align-items:center; gap:10px; margin-bottom:10px; }
  .section-tag .num{ color:#fff; background: linear-gradient(135deg, var(--word), var(--word-dark)); padding:3px 8px; border-radius:3px; font-weight:600; }
  h2.section-title{ font-family:'IBM Plex Mono', monospace; font-size: clamp(1.25rem, 2.2vw, 1.7rem); font-weight:700; color: var(--word-dark); margin-bottom: 18px; }
  h3.sub-title{ font-family:'IBM Plex Mono', monospace; font-size:1.02rem; font-weight:600; color: var(--word-dark); margin: 22px 0 10px; display:flex; align-items:center; gap:10px; }
  h3.sub-title::before{ content:""; width:8px;height:8px; background: var(--amber); display:inline-block; border-radius:1px; }
  p{ color:#33414F; max-width: 78ch; margin-bottom: 12px;}
  strong{color:var(--word-dark);}
  ul, ol{ margin: 6px 0 16px 1.3em; max-width: 78ch;}
  li{margin-bottom:7px; color:#33414F;}

  .callout{ border-left: 3px solid var(--word); background:#EBF2FB; padding: 14px 18px; border-radius: 0 6px 6px 0; margin: 16px 0; max-width: 78ch; }
  .callout .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--word-dark); font-weight:700; margin-bottom:6px; }
  .callout.warn{ border-left-color: var(--red); background:#FBEAE7; }
  .callout.warn .lbl{ color:#9B3324; }
  .callout.ok{ border-left-color: var(--green); background:#EAF6EF; }
  .callout.ok .lbl{ color:#0F5C30; }

  .card-grid{ display:grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 14px; margin: 16px 0 6px; }
  .card{ background: #FFFFFF; border: 1.5px solid var(--line); border-radius: var(--radius); padding: 16px 18px; box-shadow: 0 2px 8px rgba(20,30,50,0.05); }
  .card .tag{ font-family:'IBM Plex Mono', monospace; font-size:0.64rem; letter-spacing:0.1em; text-transform:uppercase; color:#fff; background: var(--word); padding:3px 8px; border-radius:3px; display:inline-block; margin-bottom:10px; }
  .card h4{ font-family:'IBM Plex Mono', monospace; font-size:0.94rem; margin-bottom:6px; color:var(--word-dark); }
  .card p{font-size:0.87rem; margin-bottom:0;}

  .table-scroll{ overflow-x:auto; margin:16px 0; }
  table.compare{ width:100%; border-collapse:collapse; font-size:0.88rem; min-width:480px; }
  table.compare th, table.compare td{ border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top; }
  table.compare th{ background: var(--word); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.compare tr:nth-child(even) td{ background: var(--ribbon); }

  .summary-box{ background: var(--word-dark); color: #fff; border-radius: 8px; padding: 22px 24px; margin-top: 8px; }
  .summary-box h4{ font-family:'IBM Plex Mono', monospace; color:#FCE29A; font-size:0.82rem; letter-spacing:0.08em; text-transform:uppercase; margin-bottom:12px; }
  .summary-box ul{ margin:0 0 0 1.1em; max-width:none; }
  .summary-box li{ color:#E6ECF7; margin-bottom:7px; }

  /* ===== Evaluasi ===== */
  #evaluasi{ background: linear-gradient(180deg, #EEF4FF 0%, #FFFFFF 55%); border-top:3px solid var(--word); }

  .submit-panel{ background: var(--ribbon); border:1px solid var(--line); border-radius:10px; padding:22px 20px; margin-bottom:22px; }
  .student-info{ display:grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap:14px; margin-top:12px; }
  .field label{ display:block; font-family:'IBM Plex Mono', monospace; font-size:0.66rem; letter-spacing:0.06em; text-transform:uppercase; color: var(--word-dark); margin-bottom:6px; font-weight:700; }
  .field input, .field select{ width:100%; padding:9px 11px; border-radius:5px; border:1px solid var(--line); background:#FFFFFF; color: var(--ink); font-family:'IBM Plex Sans', sans-serif; font-size:0.9rem; }
  .field select{cursor:pointer;}
  .field input:focus, .field select:focus{ outline:2px solid var(--word); }

  .primary-btn{
    font-family:'IBM Plex Mono', monospace; font-weight:700; font-size:0.88rem; padding:13px 24px; border-radius:8px; border:none; cursor:pointer;
    background: linear-gradient(135deg, var(--word), var(--word-dark)); color:#fff; box-shadow: 0 4px 14px rgba(16,63,134,0.3);
    transition: transform .15s, box-shadow .15s; margin-top:6px;
  }
  .primary-btn:hover{ transform: translateY(-2px); box-shadow: 0 6px 18px rgba(16,63,134,0.4); }
  .primary-btn.ghost{ background:#fff; color:var(--word-dark); border:1.5px solid var(--word); box-shadow:none; }
  .primary-btn.ghost:hover{ background:#EEF4FF; }
  .primary-btn:disabled{ opacity:0.55; cursor:not-allowed; transform:none; }
  #evalMsg, #praktikMsg{ font-family:'IBM Plex Mono', monospace; font-size:0.8rem; color:#8A6A1E; margin-left:10px; }

  .stage-head{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin:26px 0 12px; }
  .stage-badge{ font-family:'IBM Plex Mono', monospace; font-size:0.66rem; letter-spacing:0.08em; text-transform:uppercase; color:#fff; background: var(--word-dark); padding:5px 12px; border-radius:20px; font-weight:700; }
  .stage-head h3{ font-family:'IBM Plex Mono', monospace; font-size:1.05rem; color: var(--word-dark); }

  .attempt-strip{ display:flex; gap:10px; flex-wrap:wrap; margin:14px 0; }
  .attempt-pill{
    font-family:'IBM Plex Mono', monospace; font-size:0.74rem; font-weight:600; padding:9px 16px; border-radius:20px;
    border:1.5px solid var(--line); background:#fff; color: var(--ink-soft); box-shadow: 0 1px 4px rgba(20,30,50,0.06);
  }
  .attempt-pill.pass{ border-color: var(--green); background:#DFF6E7; color:#0F5C30; }
  .attempt-pill.fail{ border-color: var(--red); background:#FBDEDA; color:#8A2A1C; }
  .attempt-pill.current{ box-shadow: 0 0 0 3px rgba(24,90,189,0.2); background:#EEF4FF; border-color:var(--word); color:var(--word-dark); }

  .game-panel{ background:#FFFFFF; border:1px solid var(--line); border-radius:10px; padding:22px; box-shadow: 0 2px 10px rgba(20,30,50,0.05); }
  .game-progress{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--ink-soft); margin-bottom:14px; display:flex; justify-content:space-between; flex-wrap:wrap; gap:8px; }
  .q-instruksi{ font-family:'IBM Plex Mono', monospace; font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--word); font-weight:700; margin-bottom:8px; }
  .q-text{ font-size:1.05rem; font-weight:600; color: var(--ink); margin-bottom:18px; min-height:52px; }
  .drop-zone{
    border:3px dashed #9DBFE8; border-radius:10px; min-height:88px; display:flex; align-items:center; justify-content:center;
    background:#FAFCFF; color:#8A99AC; font-family:'IBM Plex Mono', monospace; font-size:0.82rem; margin-bottom:18px; transition: all .2s; padding:10px; text-align:center;
  }
  .drop-zone.drag-over{ background:#E2EDFB; border-color: var(--word); }
  .drop-zone.correct{ background:#E4F6EB; border-color: var(--green); border-style:solid; color:#0F5C30; font-weight:700; }
  .drop-zone.wrong{ background:#FBE7E4; border-color: var(--red); border-style:solid; color:#8A2A1C; font-weight:700; }
  .opt-pool{ display:flex; flex-wrap:wrap; gap:9px; justify-content:center; background:var(--ribbon); border:1px solid var(--line); border-radius:10px; padding:14px; }
  .opt-chip{
    font-family:'IBM Plex Mono', monospace; font-size:0.8rem; background: linear-gradient(135deg, var(--word), var(--word-dark)); color:#fff;
    padding:9px 15px; border-radius:7px; cursor:grab; box-shadow:0 2px 6px rgba(24,90,189,0.28); border:none;
  }
  .opt-chip:hover{ filter:brightness(1.1); }
  .opt-chip.dragging{ opacity:0.5; }

  /* ===== Editor dokumen F4 ===== */
  .doc-toolbar{
    position: sticky; top:10px; z-index:20; background:#FFFFFF; border:1.5px solid var(--word);
    border-radius:8px; padding:10px 12px; display:flex; flex-wrap:wrap; gap:6px; align-items:center;
    box-shadow: 0 6px 20px rgba(20,90,189,0.18); margin-bottom:16px;
  }
  .doc-toolbar button{ font-family:'IBM Plex Sans', sans-serif; font-size:0.83rem; background:#F3F5F8; border:1px solid var(--line); border-radius:4px; padding:6px 10px; cursor:pointer; color: var(--ink); }
  .doc-toolbar button:hover{ background:#E4EAF2; }
  .doc-toolbar button.b{font-weight:700;} .doc-toolbar button.i{font-style:italic;} .doc-toolbar button.u{text-decoration:underline;}
  .doc-toolbar select{ font-family:'IBM Plex Sans', sans-serif; font-size:0.8rem; padding:6px 8px; border-radius:4px; border:1px solid var(--line); background:#F3F5F8; }
  .doc-toolbar .sep{ width:1px; height:22px; background:var(--line); margin:0 4px; }
  .doc-toolbar .hint{ font-family:'IBM Plex Mono', monospace; font-size:0.68rem; color: var(--ink-soft); margin-left:auto; }

  .doc-stage{ background:#E7EBF0; border:1px solid var(--line); border-radius:10px; padding:18px; overflow-x:auto; }
  .f4-page{
    width: 215mm; min-height: 330mm; padding: 3cm 3cm 3cm 4cm;
    margin: 0 auto 22px; background:#fff; box-shadow: 0 4px 16px rgba(0,0,0,0.14);
    font-family:'Tinos','Times New Roman', serif; font-size: 12pt; line-height: 1.5; outline:none; position:relative;
  }
  .f4-page::after{
    content: attr(data-pagelabel); position:absolute; top:8px; right:14px;
    font-family:'IBM Plex Mono', monospace; font-size:8pt; color:#B6BDC6; letter-spacing:0.08em;
  }
  .f4-page:focus{ box-shadow: 0 0 0 3px rgba(24,90,189,0.25), 0 4px 16px rgba(0,0,0,0.14); }
  .placeholder-note{ color:#9AA3AE; font-style:italic; }
  .doc-meta{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--ink-soft); margin-top:10px; display:flex; justify-content:space-between; flex-wrap:wrap; gap:10px; }
  .doc-meta .flag{ color: var(--red); font-weight:700; display:none; }
  .doc-meta .flag.show{ display:inline; }

  .checklist{ background:#fff; border:1px solid var(--line); border-radius:8px; padding:16px 18px; margin-top:14px; }
  .checklist h5{ font-family:'IBM Plex Mono', monospace; font-size:0.8rem; color:var(--word-dark); margin-bottom:10px; }
  .checklist ul{ margin:0 0 0 1.1em; }
  .checklist li{ font-size:0.86rem; margin-bottom:5px; }

  /* ===== Lampiran contoh laporan (proteksi salin) ===== */
  .lampiran-wrap{ background:#FBF9F2; border:1.5px solid var(--amber); border-radius:10px; padding:18px 20px; margin:18px 0; }
  .lampiran-head{ display:flex; justify-content:space-between; align-items:flex-start; gap:12px; flex-wrap:wrap; margin-bottom:8px; }
  .lampiran-eyebrow{ font-family:'IBM Plex Mono', monospace; font-size:0.64rem; letter-spacing:0.1em; text-transform:uppercase; color:#8A6A1E; font-weight:700; }
  .lampiran-head h4{ font-family:'IBM Plex Mono', monospace; font-size:1rem; color:#6B5210; margin-top:4px; }
  .lock-badge{ font-family:'IBM Plex Mono', monospace; font-size:0.64rem; letter-spacing:0.06em; text-transform:uppercase; background:#8A5A0A; color:#fff; padding:5px 11px; border-radius:20px; font-weight:700; white-space:nowrap; }
  .lampiran-note{ font-size:0.86rem; color:#5E5238; max-width:none; margin-bottom:14px; }
  .lampiran-list{ display:flex; flex-direction:column; gap:8px; }
  .lampiran-item{ background:#fff; border:1px solid #E2D9BE; border-radius:7px; overflow:hidden; }
  .lampiran-toggle{
    width:100%; text-align:left; background:#FFFDF6; border:none; cursor:pointer; padding:11px 15px;
    font-family:'IBM Plex Mono', monospace; font-size:0.85rem; color:#6B5210; font-weight:600;
    display:flex; justify-content:space-between; align-items:center; gap:10px;
  }
  .lampiran-toggle:hover{ background:#FBF3DF; }
  .lampiran-toggle .chev{ font-size:0.75rem; color:#A88A3E; }
  .lampiran-body{
    display:none; padding:14px 16px; border-top:1px dashed #E2D9BE; background:#fff;
    font-family:'Tinos','Times New Roman', serif; font-size:0.95rem; color:#332C1E; white-space:pre-wrap; line-height:1.55;
    user-select:none; -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none;
    max-height:420px; overflow-y:auto;
  }
  .lampiran-body.open{ display:block; }

  .result-panel{ display:none; margin-top:18px; background:#FFFFFF; border:1.5px solid var(--green); border-radius:8px; padding:20px 22px; }
  .result-panel .score{ font-family:'IBM Plex Mono', monospace; font-size:2.2rem; font-weight:700; color: var(--green); }
  .result-panel .score-lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--ink-soft); }
  .result-panel p{ color:#33414F; font-size:0.87rem; margin-top:8px; }

  .closing-task{ background:#FFF6E6; border:1.5px solid var(--amber); border-radius:8px; padding:18px 20px; margin-bottom:14px; }
  .closing-task .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; color:#8A5A0A; font-weight:700; margin-bottom:8px; }

  footer{ background: var(--ribbon); color: var(--ink-soft); text-align:center; padding: 22px 5% 30px; font-family:'IBM Plex Mono', monospace; font-size:0.72rem; border-top:1px solid var(--line); border-radius:0 0 14px 14px; }

  /* ===== Area Cetak PDF F4 ===== */
  .print-area{ display:none; }
  .pd-kop{ text-align:center; border-bottom:3px double #000; padding-bottom:10px; margin-bottom:16px; }
  .pd-kop h1{ font-size:15pt; margin-bottom:4px; }
  .pd-kop p{ font-size:9.5pt; margin:0; max-width:none; }
  .pd-meta-table{ width:100%; border-collapse:collapse; margin-bottom:14px; font-size:10pt; }
  .pd-meta-table td{ padding:3px 6px; vertical-align:top; }
  .pd-meta-table td.lbl{ width:118px; font-weight:600; }
  .pd-section-title{ font-size:11pt; font-weight:700; margin:16px 0 8px; border-bottom:1.5px solid #000; padding-bottom:3px; }
  .pd-score-table{ width:100%; border-collapse:collapse; font-size:10pt; margin-bottom:10px; }
  .pd-score-table th, .pd-score-table td{ border:1px solid #000; padding:5px 8px; text-align:left; }
  .pd-score-table th{ background:#EEE; }
  .pd-answer-item{ border:1px solid #999; border-radius:3px; padding:8px 10px; margin-bottom:8px; page-break-inside: avoid; }
  .pd-answer-item .pd-anum{ font-size:9pt; font-weight:700; color:#222; }
  .pd-answer-item .pd-atext{ font-size:10pt; white-space:pre-wrap; margin-top:4px; font-family:'Tinos','Times New Roman', serif; }
  .pd-verdict{ display:inline-block; font-size:8pt; font-weight:700; padding:1px 7px; border-radius:3px; margin-left:8px; border:1px solid #000; }
  .pd-verdict.ok{ background:#E4F5E9; }
  .pd-verdict.no{ background:#FBE4E1; }
  .pd-eval-table{ width:100%; border-collapse:collapse; font-size:9pt; margin-bottom:14px; }
  .pd-eval-table th, .pd-eval-table td{ border:1px solid #999; padding:5px 7px; text-align:left; vertical-align:top; }
  .pd-eval-table th{ background:#EEE; font-size:8.5pt; }
  .pd-signature{ display:flex; justify-content:space-between; margin-top:36px; font-size:10pt; page-break-inside:avoid; }
  .pd-signature div{ text-align:center; width:45%; }
  .pd-signature .line{ margin-top:50px; border-top:1px solid #000; padding-top:4px; }
  .pd-footnote{ font-size:8.5pt; color:#444; margin-top:18px; text-align:center; }

  @media print{
    html, body{ height:auto !important; }
    body *{ visibility:hidden; }
    .print-area, .print-area *{ visibility:visible; }
    .print-area{
      display:block !important; visibility:visible; position:absolute; left:0; top:0; width:100%;
      color:#000; font-family:'IBM Plex Sans', sans-serif; background:#fff; z-index:99999;
    }
    @page{ size: 215mm 330mm; margin: 15mm; }
  }

  @media (max-width:700px){ .hero-body{padding:22px 5% 32px;} .section{padding:26px 5%;} .f4-page{ padding:2cm 1.5cm; } }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="page-shell"&gt;
&lt;div class="ribbon-hero"&gt;
  &lt;div class="ribbon-strip"&gt;
    &lt;div class="ribbon-tab active"&gt;Beranda&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Sisipkan&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Tata Letak&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Referensi&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Surat&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Tinjau&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="hero-body"&gt;
    &lt;div class="eyebrow"&gt;Informatika - Fase E - Kelas X SMK&lt;/div&gt;
    &lt;h1 class="title"&gt;Integrasi Dokumen dan Otomasi Pengolah Kata&lt;/h1&gt;
    &lt;p class="hero-sub"&gt;Materi ini membahas cara menggabungkan berbagai objek (tabel, gambar, bagan, grafik) ke dalam satu dokumen, memanfaatkan template dan formulir, serta menerapkan fitur otomatis pengolah kata untuk menyusun dokumen panjang secara efisien. Studi kasusnya: Laporan Praktik Kerja Lapangan (PKL) sesuai pedoman SMK Negeri 1 Tuntang Tahun 2025/2026.&lt;/p&gt;
    &lt;div class="meta-strip"&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Elemen CP&lt;/div&gt;&lt;div class="v"&gt;Integrasi &amp;amp; Otomasi Dokumen&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK Kelas X&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;1 Pertemuan - 4 JP (180 menit)&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Produk&lt;/div&gt;&lt;div class="v"&gt;Draf Laporan PKL (F4)&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;main&gt;

  &lt;!-- ===================== TUJUAN ===================== --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;00&lt;/span&gt; Capaian &amp;amp; Tujuan Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Ke Mana Materi Ini Menuju&lt;/h2&gt;
    &lt;h3 class="sub-title"&gt;Tujuan Pembelajaran&lt;/h3&gt;
    &lt;p&gt;Murid mampu membuat laporan kerja lapangan yang mengintegrasikan berbagai objek, menggunakan template, formulir, serta fitur otomatis untuk meningkatkan efisiensi pembuatan dokumen.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Indikator Ketercapaian&lt;/h3&gt;
    &lt;ol&gt;
      &lt;li&gt;Menjelaskan konsep integrasi objek (tabel, gambar, bagan, grafik) dalam satu dokumen.&lt;/li&gt;
      &lt;li&gt;Menerapkan template dan style untuk menjaga konsistensi format dokumen panjang.&lt;/li&gt;
      &lt;li&gt;Membuat formulir/isian terstruktur (biodata, jurnal kegiatan, lembar konsultasi) dengan tabel.&lt;/li&gt;
      &lt;li&gt;Menggunakan fitur otomatis: daftar isi otomatis, penomoran halaman bertingkat, caption, sitasi, dan mail merge.&lt;/li&gt;
      &lt;li&gt;Menerapkan tata tulis dan sistematika Laporan PKL pada dokumen nyata.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 class="sub-title"&gt;Rincian Kegiatan (4 JP x 45 menit)&lt;/h3&gt;
    &lt;div class="table-scroll"&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Tahap&lt;/th&gt;&lt;th&gt;Kegiatan&lt;/th&gt;&lt;th&gt;Waktu&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pendahuluan&lt;/td&gt;&lt;td&gt;Apersepsi ("Bagaimana laporan 20 halaman bisa rapi tanpa mengetik ulang daftar isi berkali-kali?"), penyampaian tujuan&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti - Eksplorasi Konsep&lt;/td&gt;&lt;td&gt;Penjelasan integrasi objek, template, formulir, dan fitur otomatis pengolah kata&lt;/td&gt;&lt;td&gt;55 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti - Evaluasi Tahap 1&lt;/td&gt;&lt;td&gt;Kuis drag &amp;amp; drop Master Penyusun Laporan PKL (KKM 75, maksimal 3 percobaan)&lt;/td&gt;&lt;td&gt;35 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti - Evaluasi Tahap 2&lt;/td&gt;&lt;td&gt;Latihan praktik mengetik dan memformat dokumen Laporan PKL pada lembar F4 digital&lt;/td&gt;&lt;td&gt;60 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penutup&lt;/td&gt;&lt;td&gt;Unduh bukti PDF F4, catat nilai evaluasi dan tulis resume di buku catatan&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== A. INTEGRASI OBJEK ===================== --&gt;
  &lt;section class="section" id="integrasi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;01&lt;/span&gt; Menggabungkan Objek&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Integrasi Objek dalam Dokumen&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Integrasi dokumen&lt;/strong&gt; adalah proses menggabungkan berbagai jenis objek ke dalam satu dokumen utuh, sehingga informasi tersaji lengkap: teks untuk penjelasan, tabel untuk data, gambar untuk bukti, dan bagan untuk struktur. Dalam Laporan PKL, keempatnya dipakai sekaligus.&lt;/p&gt;

    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Data&lt;/span&gt;&lt;h4&gt;Tabel&lt;/h4&gt;&lt;p&gt;Menyusun data baris-kolom. Dipakai untuk analisis SWOT, jurnal kegiatan harian, dan lembar konsultasi.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Bukti&lt;/span&gt;&lt;h4&gt;Gambar / Foto&lt;/h4&gt;&lt;p&gt;Dokumentasi kegiatan dan denah lokasi. Atur &lt;em&gt;text wrapping&lt;/em&gt; agar teks mengalir rapi di sekitarnya.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Struktur&lt;/span&gt;&lt;h4&gt;SmartArt / Shapes&lt;/h4&gt;&lt;p&gt;Menggambarkan struktur organisasi tempat PKL secara visual dan mudah diperbarui.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Angka&lt;/span&gt;&lt;h4&gt;Grafik / Chart&lt;/h4&gt;&lt;p&gt;Menyajikan data kuantitatif (mis. jumlah produksi per minggu) dari tabel menjadi visual.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Keterangan&lt;/span&gt;&lt;h4&gt;Caption&lt;/h4&gt;&lt;p&gt;Penomoran otomatis objek, mis. "Gambar 2.1" dan "Tabel 2.2", yang menyesuaikan urutan bab.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Rujukan Silang&lt;/span&gt;&lt;h4&gt;Cross-Reference&lt;/h4&gt;&lt;p&gt;Merujuk objek dari teks ("lihat Tabel 2.2") yang nomornya ikut berubah bila urutan bergeser.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Praktik Baik&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Setiap gambar dan tabel dalam Laporan PKL wajib diberi &lt;strong&gt;caption bernomor bab&lt;/strong&gt; (Gambar 2.1 berarti gambar pertama pada BAB II) dan dirujuk di dalam teks. Caption yang dibuat lewat fitur otomatis akan memudahkan pembuatan Daftar Gambar dan Daftar Tabel.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== B. TEMPLATE &amp; STYLE ===================== --&gt;
  &lt;section class="section" id="template"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;02&lt;/span&gt; Konsistensi Format&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Template, Style, dan Section&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Template&lt;/strong&gt; adalah dokumen cetakan awal yang sudah memuat pengaturan margin, jenis huruf, style, dan struktur bab. Dengan template, seluruh murid menghasilkan laporan dengan format seragam tanpa mengatur ulang satu per satu.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Tata Tulis Laporan PKL (Wajib)&lt;/h3&gt;
    &lt;div class="table-scroll"&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Unsur&lt;/th&gt;&lt;th&gt;Ketentuan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ukuran kertas&lt;/td&gt;&lt;td&gt;F4 (215 mm x 330 mm), berat 70 gsm&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Jenis dan ukuran huruf&lt;/td&gt;&lt;td&gt;Times New Roman, 12 pt&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Margin&lt;/td&gt;&lt;td&gt;Kiri 4 cm; atas, kanan, dan bawah masing-masing 3 cm&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Spasi isi laporan&lt;/td&gt;&lt;td&gt;1,5 spasi&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Spasi khusus&lt;/td&gt;&lt;td&gt;Kata pengantar, daftar isi, kutipan langsung, dan daftar pustaka: 1 spasi (single)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Nomor halaman bagian awal&lt;/td&gt;&lt;td&gt;Angka romawi kecil (i, ii, iii), halaman judul tidak ditampilkan&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Nomor halaman bagian utama&lt;/td&gt;&lt;td&gt;Angka arab (1, 2, 3)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Letak nomor halaman&lt;/td&gt;&lt;td&gt;Kanan atas (header); khusus halaman berjudul BAB: tengah bawah (footer)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Jumlah halaman&lt;/td&gt;&lt;td&gt;Tidak kurang dari 20 halaman&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class="callout ok"&gt;
      &lt;div class="lbl"&gt;Kunci Otomasi&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Perbedaan format nomor halaman (romawi lalu arab) dan perbedaan posisinya (kanan atas lalu tengah bawah) hanya mungkin dilakukan otomatis dengan &lt;strong&gt;Section Break&lt;/strong&gt;. Tanpa section break, seluruh dokumen terpaksa memakai satu format nomor halaman yang sama.&lt;/p&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Hierarki Penomoran Sub Bab&lt;/h3&gt;
    &lt;p&gt;Pedoman menetapkan urutan tingkatan penomoran sebagai berikut, dan dilarang menggunakan simbol gambar seperti panah atau bintang:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;BAB&lt;/strong&gt; ditulis dengan angka romawi: BAB I&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Sub BAB&lt;/strong&gt; dengan huruf kapital: A. Latar Belakang&lt;/li&gt;
      &lt;li&gt;Tingkat berikutnya berurutan: 1. lalu 1.1 lalu a. lalu 1) lalu a)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;!-- ===================== C. FORMULIR ===================== --&gt;
  &lt;section class="section" id="formulir"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;03&lt;/span&gt; Isian Terstruktur&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Formulir dan Dokumen Isian&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Formulir&lt;/strong&gt; adalah dokumen dengan bagian isian yang sudah ditentukan letaknya, sehingga pengisi hanya perlu melengkapi data. Dalam Laporan PKL, terdapat tiga formulir penting yang seluruhnya paling efisien dibuat dengan &lt;strong&gt;tabel&lt;/strong&gt; (bukan dengan spasi atau titik-titik manual yang mudah bergeser).&lt;/p&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Identitas&lt;/span&gt;&lt;h4&gt;Biodata Peserta Didik&lt;/h4&gt;&lt;p&gt;Berisi nama, NIS, kelas, program keahlian, dan pas foto 3x4. Dirapikan dengan tabel tanpa garis.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Harian&lt;/span&gt;&lt;h4&gt;Jurnal Kegiatan PKL&lt;/h4&gt;&lt;p&gt;Tabel berisi kolom No., Hari/Tanggal, Unit Kerja/Pekerjaan, dan Catatan pembimbing dunia kerja.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Bimbingan&lt;/span&gt;&lt;h4&gt;Lembar Konsultasi&lt;/h4&gt;&lt;p&gt;Tabel bukti bimbingan dengan guru pembimbing, minimal 8 kali konsultasi.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Tips Teknis&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Agar titik dua pada formulir biodata sejajar sempurna, gunakan tabel 2 kolom lalu sembunyikan garisnya (&lt;em&gt;No Border&lt;/em&gt;) - jauh lebih rapi dan stabil dibanding menekan spasi atau tab berulang kali.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== D. FITUR OTOMATIS ===================== --&gt;
  &lt;section class="section" id="otomasi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;04&lt;/span&gt; Efisiensi Kerja&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Fitur Otomasi Pengolah Kata&lt;/h2&gt;
    &lt;div class="table-scroll"&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Fitur&lt;/th&gt;&lt;th&gt;Fungsi dalam Laporan PKL&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Heading Style&lt;/td&gt;&lt;td&gt;Menandai judul BAB dan sub bab agar dikenali fitur otomatis lain; fondasi seluruh otomasi.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Table of Contents&lt;/td&gt;&lt;td&gt;Membuat Daftar Isi otomatis lengkap dengan nomor halaman; cukup klik Update Table bila ada perubahan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Page Number + Section Break&lt;/td&gt;&lt;td&gt;Penomoran halaman otomatis dengan format dan posisi berbeda antar bagian.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Insert Caption&lt;/td&gt;&lt;td&gt;Memberi nomor otomatis pada gambar dan tabel, sekaligus bahan Daftar Gambar/Tabel.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Citation &amp;amp; Bibliography&lt;/td&gt;&lt;td&gt;Menyimpan sumber kutipan dan menghasilkan Daftar Pustaka otomatis, terurut abjad.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Mail Merge&lt;/td&gt;&lt;td&gt;Membuat surat pengantar PKL massal dari satu template dan satu daftar data murid.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;SmartArt&lt;/td&gt;&lt;td&gt;Membuat bagan struktur organisasi tempat PKL secara cepat dan mudah diedit.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Find &amp;amp; Replace&lt;/td&gt;&lt;td&gt;Mengganti istilah yang salah di seluruh dokumen sekaligus, mis. nama perusahaan.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Aturan Penulisan Sitasi&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Satu penulis&lt;/strong&gt;: Bowlby (1973) di awal kalimat, atau (Guiffrida, 2006) di akhir kalimat.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Dua penulis&lt;/strong&gt;: gunakan kata "dan" di awal kalimat (Nagy dan Herman, 1987), gunakan simbol "&amp;amp;" di dalam kurung (Sills &amp;amp; Song, 2002).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Tiga penulis atau lebih&lt;/strong&gt;: cukup nama penulis pertama diikuti "dkk." (West, dkk., 1993).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Daftar Pustaka&lt;/strong&gt;: diurutkan abjad A-Z, spasi tunggal, nama jurnal dan judul buku dicetak miring.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;!-- ===================== E. SISTEMATIKA ===================== --&gt;
  &lt;section class="section" id="sistematika"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;05&lt;/span&gt; Struktur Laporan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Sistematika Laporan PKL&lt;/h2&gt;
    &lt;div class="table-scroll"&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Kelompok&lt;/th&gt;&lt;th&gt;Isi&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Bagian Awal&lt;/td&gt;&lt;td&gt;Halaman judul, biodata, lembar pengesahan, lembar persetujuan, kata pengantar, daftar isi, daftar gambar, daftar tabel&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;BAB I Pendahuluan&lt;/td&gt;&lt;td&gt;Latar belakang, tujuan, manfaat, tempat dan waktu PKL&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;BAB II Tinjauan Umum&lt;/td&gt;&lt;td&gt;Sejarah umum, visi misi dan slogan, kegiatan umum, tugas dan fungsi, analisis usaha (SWOT, 5W+1H)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;BAB III Pelaksanaan PKL&lt;/td&gt;&lt;td&gt;Bidang kerja, pelaksanaan kerja, kendala yang dihadapi, cara mengatasi kendala&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;BAB IV Penutup&lt;/td&gt;&lt;td&gt;Kesimpulan dan saran&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Bagian Akhir&lt;/td&gt;&lt;td&gt;Daftar pustaka, lembar konsultasi, jadwal dinas, dokumentasi kegiatan&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== RANGKUMAN ===================== --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;06&lt;/span&gt; Penguatan Konsep&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Materi&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;h4&gt;Poin-Poin Kunci&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Integrasi dokumen menggabungkan teks, tabel, gambar, bagan, dan grafik menjadi satu dokumen utuh.&lt;/li&gt;
        &lt;li&gt;Template dan style menjaga konsistensi format di seluruh dokumen panjang.&lt;/li&gt;
        &lt;li&gt;Laporan PKL memakai kertas F4, Times New Roman 12 pt, margin kiri 4 cm dan sisi lain 3 cm, spasi 1,5.&lt;/li&gt;
        &lt;li&gt;Section break memungkinkan format nomor halaman romawi lalu arab dalam satu dokumen.&lt;/li&gt;
        &lt;li&gt;Formulir (biodata, jurnal, lembar konsultasi) paling rapi dibuat menggunakan tabel.&lt;/li&gt;
        &lt;li&gt;Daftar isi, caption, sitasi, dan daftar pustaka dapat dibuat otomatis dari Heading dan data sumber.&lt;/li&gt;
        &lt;li&gt;Mail merge membuat banyak surat serupa dari satu template dan satu sumber data.&lt;/li&gt;
        &lt;li&gt;Sistematika laporan: bagian awal, BAB I sampai BAB IV, lalu bagian akhir.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== EVALUASI ===================== --&gt;
  &lt;section class="section" id="evaluasi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;07&lt;/span&gt; Tugas Pribadi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Evaluasi: Master Penyusun Laporan PKL&lt;/h2&gt;
    &lt;p&gt;Evaluasi ini terdiri atas &lt;strong&gt;dua tahap&lt;/strong&gt; yang saling melengkapi: &lt;strong&gt;Tahap 1&lt;/strong&gt; menguji pemahaman aturan lewat kuis drag &amp;amp; drop, dan &lt;strong&gt;Tahap 2&lt;/strong&gt; menguji keterampilan lewat latihan praktik mengetik dan memformat dokumen Laporan PKL langsung di lembar F4 digital. Nilai akhir digabung 50:50 dari kedua tahap.&lt;/p&gt;

    &lt;div class="submit-panel"&gt;
      &lt;h3 class="sub-title" style="margin-top:0;"&gt;Identitas Peserta&lt;/h3&gt;
      &lt;p style="font-size:0.86rem; margin-bottom:0;"&gt;Isi identitas terlebih dahulu agar nilai dapat tercatat dengan benar.&lt;/p&gt;
      &lt;div class="student-info"&gt;
        &lt;div class="field"&gt;&lt;label for="noAbsen"&gt;No. Absen&lt;/label&gt;&lt;input type="number" id="noAbsen" min="1" placeholder="mis. 12"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="nama"&gt;Nama Lengkap&lt;/label&gt;&lt;input type="text" id="nama" placeholder="Nama sesuai absensi"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="kelas"&gt;Kelas&lt;/label&gt;
          &lt;select id="kelas"&gt;
            &lt;option value=""&gt;-- Pilih Kelas --&lt;/option&gt;
            &lt;option value="X TB1"&gt;X TB1&lt;/option&gt;
            &lt;option value="X TB2"&gt;X TB2&lt;/option&gt;
            &lt;option value="X TO1"&gt;X TO1&lt;/option&gt;
            &lt;option value="X TO2"&gt;X TO2&lt;/option&gt;
            &lt;option value="X TJKT1"&gt;X TJKT1&lt;/option&gt;
            &lt;option value="X TJKT2"&gt;X TJKT2&lt;/option&gt;
          &lt;/select&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- TAHAP 1 --&gt;
    &lt;div class="stage-head"&gt;
      &lt;span class="stage-badge"&gt;Tahap 1 - Bobot 50%&lt;/span&gt;
      &lt;h3&gt;Kuis Drag &amp;amp; Drop: Aturan Penyusunan Laporan&lt;/h3&gt;
    &lt;/div&gt;
    &lt;p&gt;Tarik jawaban yang tepat ke kotak dokumen sesuai instruksi pembimbing.&lt;/p&gt;

    &lt;div class="callout warn"&gt;
      &lt;div class="lbl"&gt;Aturan Bermain&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Jika jawaban salah, soal langsung lanjut ke soal berikutnya dan tidak mendapat nilai&lt;/strong&gt; - tidak ada kesempatan mengulang soal yang sama. Nilai dikirim bila mencapai &lt;strong&gt;KKM = 75&lt;/strong&gt;. Bila belum, tersedia &lt;strong&gt;3 kali kesempatan&lt;/strong&gt;; setelah 3 kali, &lt;strong&gt;nilai tertinggi&lt;/strong&gt; dari ketiga percobaan yang dipakai.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="attempt-strip" id="attemptStrip"&gt;&lt;/div&gt;

    &lt;div class="game-panel" id="gamePanel"&gt;
      &lt;button id="btnMulaiEvaluasi" class="primary-btn"&gt;Mulai Kuis Tahap 1&lt;/button&gt;
      &lt;span id="evalMsg"&gt;&lt;/span&gt;
    &lt;/div&gt;

    &lt;!-- TAHAP 2 --&gt;
    &lt;div class="stage-head"&gt;
      &lt;span class="stage-badge"&gt;Tahap 2 - Bobot 50%&lt;/span&gt;
      &lt;h3&gt;Latihan Praktik: Mengetik &amp;amp; Memformat Dokumen F4&lt;/h3&gt;
    &lt;/div&gt;
    &lt;p&gt;Lembar di bawah ini adalah &lt;strong&gt;area ketik langsung&lt;/strong&gt; seukuran kertas F4 dengan margin sesuai pedoman (kiri 4 cm, sisi lain 3 cm). Ganti seluruh teks dalam tanda kurung siku dengan tulisan kalian sendiri, lalu rapikan menggunakan toolbar. Area ini &lt;strong&gt;menolak aksi tempel (paste)&lt;/strong&gt;.&lt;/p&gt;

    &lt;div class="checklist"&gt;
      &lt;h5&gt;Daftar Periksa yang Dinilai&lt;/h5&gt;
      &lt;ul&gt;
        &lt;li&gt;Mengganti seluruh bagian bertanda kurung siku pada Cover, Lembar Pengesahan, dan BAB I.&lt;/li&gt;
        &lt;li&gt;Mengetik Latar Belakang, Tujuan, dan Manfaat PKL dengan kalimat sendiri (minimal 200 karakter tiap bagian).&lt;/li&gt;
        &lt;li&gt;Menerapkan format: judul rata tengah dan tebal, isi paragraf rata kiri-kanan (Justify).&lt;/li&gt;
        &lt;li&gt;Tidak melakukan salin-tempel dari sumber mana pun.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;!-- ===== LAMPIRAN CONTOH LAPORAN PKL (PANDUAN, TIDAK BISA DISALIN) ===== --&gt;
    &lt;div class="lampiran-wrap"&gt;
      &lt;div class="lampiran-head"&gt;
        &lt;div&gt;
          &lt;div class="lampiran-eyebrow"&gt;Panduan Praktik&lt;/div&gt;
          &lt;h4&gt;Lampiran: Contoh Laporan Praktik Kerja Lapangan (PKL) Tahun 2025/2026&lt;/h4&gt;
        &lt;/div&gt;
        &lt;span class="lock-badge"&gt;Tidak dapat disalin - wajib diketik&lt;/span&gt;
      &lt;/div&gt;
      &lt;p class="lampiran-note"&gt;Berikut contoh laporan resmi dari Buku Pedoman PKL SMK Negeri 1 Tuntang sebagai acuan kalian mengetik. Klik judul bagian untuk membuka isinya. Teks di dalamnya &lt;strong&gt;sengaja diproteksi&lt;/strong&gt; sehingga tidak dapat diblok, disalin, atau di-klik kanan - silakan baca lalu ketik ulang di lembar dokumen di bawah.&lt;/p&gt;

      &lt;div class="lampiran-list" id="lampiranList"&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="doc-toolbar" id="docToolbar"&gt;
      &lt;button class="b" data-cmd="bold" title="Tebal"&gt;B&lt;/button&gt;
      &lt;button class="i" data-cmd="italic" title="Miring"&gt;I&lt;/button&gt;
      &lt;button class="u" data-cmd="underline" title="Garis Bawah"&gt;U&lt;/button&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;button data-cmd="justifyLeft" title="Rata Kiri"&gt;Kiri&lt;/button&gt;
      &lt;button data-cmd="justifyCenter" title="Rata Tengah"&gt;Tengah&lt;/button&gt;
      &lt;button data-cmd="justifyRight" title="Rata Kanan"&gt;Kanan&lt;/button&gt;
      &lt;button data-cmd="justifyFull" title="Rata Kiri-Kanan"&gt;Rata&lt;/button&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;button data-cmd="insertUnorderedList" title="Daftar Butir"&gt;List Bullet&lt;/button&gt;
      &lt;button data-cmd="insertOrderedList" title="Daftar Nomor"&gt;List Nomor&lt;/button&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;select id="fontSizeSelect" title="Ukuran Huruf"&gt;
        &lt;option value="3" selected&gt;12 pt (Isi)&lt;/option&gt;
        &lt;option value="4"&gt;14 pt (Sub Judul)&lt;/option&gt;
        &lt;option value="5"&gt;16 pt (Judul BAB)&lt;/option&gt;
      &lt;/select&gt;
      &lt;select id="fontFamilySelect" title="Jenis Huruf"&gt;
        &lt;option value="Times New Roman"&gt;Times New Roman&lt;/option&gt;
        &lt;option value="Arial"&gt;Arial&lt;/option&gt;
      &lt;/select&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;button id="btnTambahHalaman" title="Tambah Halaman Kosong"&gt;+ Halaman&lt;/button&gt;
      &lt;span class="hint"&gt;Klik di lembar dokumen dulu, lalu gunakan tombol ini&lt;/span&gt;
    &lt;/div&gt;

    &lt;div class="doc-stage" id="docStage"&gt;

      &lt;div class="f4-page" contenteditable="true" data-pagelabel="Halaman 1 - Cover" id="page1" style="text-align:center;"&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;div style="font-size:16pt; font-weight:bold;"&gt;
          LAPORAN PRAKTIK KERJA LAPANGAN (PKL)&lt;br&gt;
          TAHUN PELAJARAN 2025/2026&lt;br&gt;&lt;br&gt;
          DI [Ketik Nama Perusahaan Tempat PKL]
        &lt;/div&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;div&gt;&lt;i&gt;Diajukan sebagai salah satu syarat untuk mengikuti&lt;br&gt;Ujian Kompetensi Keahlian&lt;/i&gt;&lt;/div&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;div style="border:1px solid black; width:3cm; height:4cm; margin:0 auto; display:flex; align-items:center; justify-content:center; font-style:italic; color:gray;"&gt;Foto 3x4&lt;/div&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;div style="font-weight:bold; font-size:14pt;"&gt;
          Disusun Oleh:&lt;br&gt;&lt;br&gt;
          NAMA: [Ketik Nama Anda]&lt;br&gt;
          NIS: [Ketik NIS Anda]&lt;br&gt;
          KELAS: [Ketik Kelas Anda]
        &lt;/div&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;div style="font-weight:bold; font-size:16pt;"&gt;
          PEMERINTAH PROVINSI JAWA TENGAH&lt;br&gt;
          DINAS PENDIDIKAN DAN KEBUDAYAAN&lt;br&gt;
          SMK NEGERI 1 TUNTANG&lt;br&gt;
          2025
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="f4-page" contenteditable="true" data-pagelabel="Halaman 2 - Lembar Pengesahan" id="page2"&gt;
        &lt;div style="text-align:center; font-weight:bold; font-size:14pt;"&gt;LEMBAR PENGESAHAN&lt;/div&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;div style="text-align:justify;"&gt;
          Laporan Praktik Kerja Lapangan (PKL) yang disusun oleh:&lt;br&gt;&lt;br&gt;
          Nama&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: [Ketik Nama Anda]&lt;br&gt;
          NIS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: [Ketik NIS Anda]&lt;br&gt;
          Program Keahlian&amp;nbsp;&amp;nbsp;: [Ketik Program Keahlian Anda]&lt;br&gt;
          Tempat PKL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: [Ketik Nama Perusahaan Tempat PKL]&lt;br&gt;&lt;br&gt;
          Telah diperiksa, disetujui, dan disahkan pada tanggal: [Ketik Tanggal Pengesahan]
        &lt;/div&gt;
        &lt;br&gt;&lt;br&gt;&lt;br&gt;
        &lt;div style="display:flex; justify-content:space-between; text-align:center;"&gt;
          &lt;div style="width:45%;"&gt;
            Pembimbing Industri,&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
            &lt;b&gt;&lt;u&gt;[Ketik Nama Pembimbing Industri]&lt;/u&gt;&lt;/b&gt;
          &lt;/div&gt;
          &lt;div style="width:45%;"&gt;
            Guru Pembimbing Sekolah,&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
            &lt;b&gt;&lt;u&gt;[Ketik Nama Guru Pembimbing]&lt;/u&gt;&lt;/b&gt;&lt;br&gt;
            NIP. .....................................
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;div style="text-align:center;"&gt;
          Mengetahui,&lt;br&gt;
          Kepala SMK Negeri 1 Tuntang&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
          &lt;b&gt;&lt;u&gt;Nanang Nurdiyanto, S.Pd, M.Eng&lt;/u&gt;&lt;/b&gt;&lt;br&gt;
          NIP. 19770402 200501 1 010
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="f4-page" contenteditable="true" data-pagelabel="Halaman 3 - BAB I Pendahuluan" id="page3"&gt;
        &lt;div style="text-align:center; font-weight:bold; font-size:14pt;"&gt;BAB I&lt;br&gt;PENDAHULUAN&lt;/div&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;b&gt;A. Latar Belakang&lt;/b&gt;
        &lt;div style="text-align:justify; text-indent:1.25cm;" class="placeholder-note"&gt;
          [Blok dan hapus teks ini, lalu ketik latar belakang pelaksanaan PKL dengan kalimat sendiri, minimal 200 karakter. Gunakan format Rata (Justify) dan awal paragraf menjorok ke dalam.]
        &lt;/div&gt;
        &lt;br&gt;
        &lt;b&gt;B. Tujuan Praktik Kerja Lapangan&lt;/b&gt;
        &lt;div style="text-align:justify; text-indent:1.25cm;" class="placeholder-note"&gt;
          [Blok dan hapus teks ini, lalu ketik tujuan dilaksanakannya PKL bagi peserta didik, minimal 200 karakter.]
        &lt;/div&gt;
        &lt;br&gt;
        &lt;b&gt;C. Manfaat Praktik Kerja Lapangan&lt;/b&gt;
        &lt;div style="text-align:justify; text-indent:1.25cm;" class="placeholder-note"&gt;
          [Blok dan hapus teks ini, lalu ketik manfaat PKL bagi peserta didik, sekolah, dan dunia kerja, minimal 200 karakter.]
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="doc-meta"&gt;
      &lt;span id="docCharCount"&gt;0 karakter diketik&lt;/span&gt;
      &lt;span class="flag" id="docPasteFlag"&gt;&lt;/span&gt;
    &lt;/div&gt;

    &lt;button id="btnHitungPraktik" class="primary-btn"&gt;Periksa &amp;amp; Hitung Nilai Latihan Praktik&lt;/button&gt;
    &lt;span id="praktikMsg"&gt;&lt;/span&gt;

    &lt;div class="result-panel" id="praktikResultPanel"&gt;
      &lt;div class="score-lbl"&gt;Nilai Latihan Praktik (bobot 50%)&lt;/div&gt;
      &lt;div class="score" id="praktikScoreValue"&gt;0&lt;/div&gt;
      &lt;p id="praktikResultDetail"&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;!-- HASIL AKHIR --&gt;
    &lt;div class="result-panel" id="finalResultPanel"&gt;
      &lt;div class="score-lbl" id="finalResultLabel"&gt;Nilai Akhir Evaluasi&lt;/div&gt;
      &lt;div class="score" id="finalScoreValue"&gt;0&lt;/div&gt;
      &lt;p id="finalResultDetail"&gt;&lt;/p&gt;
      &lt;button id="btnCobaLagi" class="primary-btn" style="display:none;"&gt;Coba Lagi Kuis Tahap 1&lt;/button&gt;
      &lt;button id="btnUnduhPDF" class="primary-btn ghost" style="display:none;"&gt;Unduh Bukti Mengerjakan (PDF F4)&lt;/button&gt;
      &lt;p id="pdfHint" style="display:none; font-size:0.8rem; color:var(--ink-soft); margin-top:8px;"&gt;Setelah diunduh, cetak pada kertas F4 dan serahkan kepada guru sebagai bukti pengerjaan.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== PENUTUP ===================== --&gt;
  &lt;section class="section" id="penutup"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;08&lt;/span&gt; Penutup Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tugas Individu di Buku Catatan&lt;/h2&gt;
    &lt;div class="closing-task"&gt;
      &lt;div class="lbl"&gt;1. Catat Nilai Evaluasi&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Salin &lt;strong&gt;Nilai Akhir Evaluasi&lt;/strong&gt; yang muncul di layar ke buku catatan pada kolom &lt;strong&gt;"Nilai Evaluasi"&lt;/strong&gt; (buat tabel: Tanggal | Materi | Nilai Evaluasi).&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="closing-task"&gt;
      &lt;div class="lbl"&gt;2. Tulis Resume Materi&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Buat &lt;strong&gt;resume materi "Integrasi Dokumen dan Otomasi Pengolah Kata"&lt;/strong&gt; dengan bahasa sendiri, mencakup: integrasi objek, template dan style, formulir, fitur otomatis, serta sistematika dan tata tulis Laporan PKL.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  INFORMATIKA - INTEGRASI DOKUMEN DAN OTOMASI PENGOLAH KATA - FASE E KELAS X SMK
&lt;/footer&gt;
&lt;/div&gt;

&lt;div class="print-area" id="printArea"&gt;&lt;/div&gt;

&lt;script&gt;
  var GAS_ENDPOINT = "https://script.google.com/macros/s/AKfycbwKp7DrBTALJMlw8crjK7RgXIO8LVcU4yVEd9WJNs_vgSXkVxfw7fwkGbOT2IBNOjg3uQ/exec";
  var JUDUL_MATERI = "Integrasi Dokumen dan Otomasi Pengolah Kata";
  var KKM = 75;
  var MAX_ATTEMPTS = 3;
  var EVAL_SOAL_COUNT = 12;

  // ============================================================
  // TAHAP 1: KUIS DRAG &amp; DROP
  // ============================================================
  var allOptions = [
    { id:"opt_f4", text:"Kertas F4" },
    { id:"opt_a4", text:"Kertas A4" },
    { id:"opt_margin_kiri", text:"4 cm (Margin Kiri)" },
    { id:"opt_margin_lain", text:"3 cm (Atas, Kanan, Bawah)" },
    { id:"opt_tnr", text:"Times New Roman" },
    { id:"opt_arial", text:"Arial" },
    { id:"opt_size_12", text:"Ukuran 12 pt" },
    { id:"opt_size_14", text:"Ukuran 14 pt" },
    { id:"opt_spasi_1_5", text:"1,5 Spasi" },
    { id:"opt_spasi_1", text:"1 Spasi (Single)" },
    { id:"opt_bag_awal", text:"Bagian Awal" },
    { id:"opt_bag_utama", text:"Bagian Utama" },
    { id:"opt_bag_akhir", text:"Bagian Akhir" },
    { id:"opt_biodata", text:"Biodata Peserta Didik" },
    { id:"opt_pengesahan", text:"Lembar Pengesahan" },
    { id:"opt_toc", text:"Table of Contents" },
    { id:"opt_page_num", text:"Page Number" },
    { id:"opt_header_kanan", text:"Kanan Atas (Header)" },
    { id:"opt_footer_tengah", text:"Tengah Bawah (Footer)" },
    { id:"opt_romawi", text:"Angka Romawi Kecil (i, ii)" },
    { id:"opt_arab", text:"Angka Arab (1, 2, 3)" },
    { id:"opt_citation", text:"Citation / Bibliography" },
    { id:"opt_table", text:"Insert Table" },
    { id:"opt_mailmerge", text:"Mail Merge" },
    { id:"opt_smartart", text:"SmartArt / Shapes" },
    { id:"opt_picture", text:"Insert Picture" },
    { id:"opt_caption", text:"Insert Caption" },
    { id:"opt_section", text:"Section Break" },
    { id:"opt_bab_1", text:"BAB I Pendahuluan" },
    { id:"opt_bab_2", text:"BAB II Tinjauan Umum" },
    { id:"opt_bab_3", text:"BAB III Pelaksanaan PKL" },
    { id:"opt_bab_4", text:"BAB IV Penutup" },
    { id:"opt_jurnal", text:"Jurnal Kegiatan PKL" },
    { id:"opt_konsultasi", text:"Lembar Konsultasi" },
    { id:"opt_abjad", text:"Urut Abjad (A-Z)" },
    { id:"opt_kata_dan", text:"Kata 'dan'" },
    { id:"opt_simbol_dan", text:"Simbol '&amp;'" },
    { id:"opt_dkk", text:"Singkatan 'dkk.'" },
    { id:"opt_italic", text:"Cetak Miring (Italic)" },
    { id:"opt_heading", text:"Heading Style" }
  ];

  var questions = [
    { q:"Ukuran standar kertas yang diwajibkan untuk mencetak Laporan PKL adalah...", correctId:"opt_f4" },
    { q:"Agar teks tidak tertutup saat laporan dijilid, batas kertas sebelah kiri (Margin Kiri) diatur sebesar...", correctId:"opt_margin_kiri" },
    { q:"Berapa ukuran Margin Atas, Kanan, dan Bawah yang benar sesuai pedoman?", correctId:"opt_margin_lain" },
    { q:"Jenis huruf (Font) standar yang diwajibkan untuk seluruh teks laporan adalah...", correctId:"opt_tnr" },
    { q:"Untuk teks paragraf biasa, ukuran huruf yang digunakan adalah...", correctId:"opt_size_12" },
    { q:"Berapa jarak antar baris (Line Spacing) untuk bagian isi utama laporan?", correctId:"opt_spasi_1_5" },
    { q:"Khusus pengetikan Daftar Pustaka dan Kata Pengantar, jarak antar barisnya harus...", correctId:"opt_spasi_1" },
    { q:"Halaman Judul, Kata Pengantar, dan Daftar Isi termasuk kelompok...", correctId:"opt_bag_awal" },
    { q:"BAB I hingga BAB IV yang merupakan inti laporan disebut sebagai...", correctId:"opt_bag_utama" },
    { q:"Daftar Pustaka dan Lampiran-lampiran diletakkan pada...", correctId:"opt_bag_akhir" },
    { q:"Halaman setelah cover yang wajib dilengkapi pas foto 3x4 disebut...", correctId:"opt_biodata" },
    { q:"Lembar berisi tanda tangan pembimbing dan Kepala Sekolah sebagai bukti laporan sah adalah...", correctId:"opt_pengesahan" },
    { q:"Fitur otomatis agar judul BAB dan nomor halamannya terupdate tanpa mengetik manual adalah...", correctId:"opt_toc" },
    { q:"Fitur untuk memberikan nomor pada setiap lembar dokumen secara otomatis adalah...", correctId:"opt_page_num" },
    { q:"Untuk halaman isi biasa (bukan awal BAB), nomor halaman diletakkan di...", correctId:"opt_header_kanan" },
    { q:"Khusus halaman yang memuat Judul BAB baru, nomor halamannya diletakkan di...", correctId:"opt_footer_tengah" },
    { q:"Format nomor halaman untuk Bagian Awal (Kata Pengantar, Daftar Isi) menggunakan...", correctId:"opt_romawi" },
    { q:"Format nomor halaman untuk Bagian Utama (BAB I dst) menggunakan...", correctId:"opt_arab" },
    { q:"Fitur yang memungkinkan format nomor halaman berbeda antar bagian dalam satu dokumen adalah...", correctId:"opt_section" },
    { q:"Fitur otomatis untuk mengelola sumber kutipan dan membuat Daftar Pustaka instan adalah...", correctId:"opt_citation" },
    { q:"Untuk membuat layout formulir Biodata yang rapi dan sejajar, fitur paling efisien adalah...", correctId:"opt_table" },
    { q:"Jika panitia ingin membuat Surat Tugas massal dengan data dari Excel, fitur yang tepat adalah...", correctId:"opt_mailmerge" },
    { q:"Fitur yang cocok untuk membuat visualisasi Struktur Organisasi tempat PKL adalah...", correctId:"opt_smartart" },
    { q:"Untuk menambahkan bukti foto kegiatan di bagian lampiran, digunakan fitur...", correctId:"opt_picture" },
    { q:"Fitur untuk memberi keterangan bernomor otomatis pada gambar (Gambar 2.1) dan tabel adalah...", correctId:"opt_caption" },
    { q:"Fondasi seluruh otomasi dokumen, yang menandai judul bab agar dikenali fitur lain, adalah...", correctId:"opt_heading" },
    { q:"Latar Belakang, Tujuan, dan Manfaat PKL diketik pada bagian...", correctId:"opt_bab_1" },
    { q:"Sejarah Perusahaan, Visi Misi, dan Analisis SWOT dijabarkan pada...", correctId:"opt_bab_2" },
    { q:"Bagian berisi rincian pekerjaan dan kendala yang dihadapi ada di...", correctId:"opt_bab_3" },
    { q:"Kesimpulan hasil PKL dan Saran untuk sekolah/industri ditulis pada...", correctId:"opt_bab_4" },
    { q:"Dokumen lampiran berupa tabel yang wajib diisi setiap hari saat praktik di industri adalah...", correctId:"opt_jurnal" },
    { q:"Tabel lampiran yang membuktikan telah rutin bimbingan dengan guru pembimbing adalah...", correctId:"opt_konsultasi" },
    { q:"Urutan penulisan sumber dalam Daftar Pustaka disusun berdasarkan...", correctId:"opt_abjad" },
    { q:"Mengutip 2 penulis di awal kalimat: 'Nagy ... Herman (1987)'. Kata sambungnya adalah...", correctId:"opt_kata_dan" },
    { q:"Mengutip 2 penulis di dalam kurung: '(Sills ... Song, 2002)'. Simbol sambungnya adalah...", correctId:"opt_simbol_dan" },
    { q:"Jika sumber ditulis 3 orang atau lebih, setelah nama penulis pertama diikuti singkatan...", correctId:"opt_dkk" },
    { q:"Dalam Daftar Pustaka, pemformatan huruf untuk Judul Buku atau Nama Jurnal harus...", correctId:"opt_italic" }
  ];

  function shuffleArray(array){
    var a = array.slice();
    for (var i = a.length - 1; i &gt; 0; i--){
      var j = Math.floor(Math.random() * (i + 1));
      var t = a[i]; a[i] = a[j]; a[j] = t;
    }
    return a;
  }

  function getIdentitas(){
    return {
      noAbsen: document.getElementById('noAbsen').value.trim(),
      nama: document.getElementById('nama').value.trim(),
      kelas: document.getElementById('kelas').value.trim()
    };
  }

  var evalAttemptScores = [];
  var evalAttemptLogs = [];
  var currentLog = [];
  var evalFinalAttemptIndex = null;
  var evalFinalScore = null;
  var praktikScore = null;
  var combinedFinalScore = null;
  var currentSet = [];
  var qIndex = 0;
  var correctCount = 0;
  var draggedChip = null;

  function renderAttemptStrip(){
    var strip = document.getElementById('attemptStrip');
    strip.innerHTML = '';
    for (var i = 0; i &lt; MAX_ATTEMPTS; i++){
      var pill = document.createElement('div');
      pill.className = 'attempt-pill';
      if (i &lt; evalAttemptScores.length){
        pill.className += (evalAttemptScores[i] &gt;= KKM ? ' pass' : ' fail');
        pill.textContent = 'Percobaan ' + (i+1) + ': ' + evalAttemptScores[i];
      } else if (i === evalAttemptScores.length){
        pill.className += ' current';
        pill.textContent = 'Percobaan ' + (i+1) + ': belum dimulai';
      } else {
        pill.textContent = 'Percobaan ' + (i+1) + ': -';
      }
      strip.appendChild(pill);
    }
  }
  renderAttemptStrip();

  document.getElementById('btnMulaiEvaluasi').addEventListener('click', function(){
    var id = getIdentitas();
    if (!id.noAbsen || !id.nama || !id.kelas){
      document.getElementById('evalMsg').textContent = 'Lengkapi identitas terlebih dahulu.';
      return;
    }
    document.getElementById('evalMsg').textContent = '';
    startEvalAttempt();
  });
  document.getElementById('btnCobaLagi').addEventListener('click', function(){
    document.getElementById('finalResultPanel').style.display = 'none';
    startEvalAttempt();
  });

  function startEvalAttempt(){
    qIndex = 0; correctCount = 0; currentLog = [];
    currentSet = shuffleArray(questions).slice(0, EVAL_SOAL_COUNT);
    document.getElementById('finalResultPanel').style.display = 'none';
    renderQuestion();
  }

  function renderQuestion(){
    var panel = document.getElementById('gamePanel');
    if (qIndex &gt;= currentSet.length){ finishEvalAttempt(); return; }

    var q = currentSet[qIndex];
    panel.innerHTML =
      '&lt;div class="game-progress"&gt;&lt;span&gt;Soal ' + (qIndex+1) + ' / ' + EVAL_SOAL_COUNT + '&lt;/span&gt;&lt;span&gt;Benar: ' + correctCount + '&lt;/span&gt;&lt;/div&gt;' +
      '&lt;div class="q-instruksi"&gt;Instruksi Pembimbing&lt;/div&gt;' +
      '&lt;div class="q-text"&gt;' + q.q + '&lt;/div&gt;' +
      '&lt;div class="drop-zone" id="dropZone"&gt;Tarik (drag) jawaban ke sini, atau klik salah satu pilihan&lt;/div&gt;' +
      '&lt;div class="opt-pool" id="optPool"&gt;&lt;/div&gt;';

    var dropZone = document.getElementById('dropZone');
    var optPool = document.getElementById('optPool');

    var correctOpt = null;
    for (var i = 0; i &lt; allOptions.length; i++){ if (allOptions[i].id === q.correctId) correctOpt = allOptions[i]; }
    var distractors = shuffleArray(allOptions.filter(function(o){ return o.id !== q.correctId; })).slice(0, 3);
    var choices = shuffleArray([correctOpt].concat(distractors));

    choices.forEach(function(opt){
      var chip = document.createElement('div');
      chip.className = 'opt-chip';
      chip.draggable = true;
      chip.dataset.id = opt.id;
      chip.textContent = opt.text;
      chip.addEventListener('dragstart', function(){ draggedChip = chip; chip.classList.add('dragging'); });
      chip.addEventListener('dragend', function(){ chip.classList.remove('dragging'); });
      chip.addEventListener('click', function(){ handleAnswer(opt, q, dropZone); });
      optPool.appendChild(chip);
    });

    dropZone.addEventListener('dragover', function(e){ e.preventDefault(); dropZone.classList.add('drag-over'); });
    dropZone.addEventListener('dragleave', function(){ dropZone.classList.remove('drag-over'); });
    dropZone.addEventListener('drop', function(e){
      e.preventDefault();
      dropZone.classList.remove('drag-over');
      if (!draggedChip) return;
      var pickedId = draggedChip.dataset.id;
      var picked = null;
      for (var i = 0; i &lt; allOptions.length; i++){ if (allOptions[i].id === pickedId) picked = allOptions[i]; }
      draggedChip = null;
      handleAnswer(picked, q, dropZone);
    });
  }

  function handleAnswer(picked, q, dropZone){
    if (dropZone.dataset.answered === '1') return;
    dropZone.dataset.answered = '1';

    var correctOpt = null;
    for (var i = 0; i &lt; allOptions.length; i++){ if (allOptions[i].id === q.correctId) correctOpt = allOptions[i]; }
    var isCorrect = picked.id === q.correctId;

    currentLog.push({ q: q.q, userAns: picked.text, correctAns: correctOpt.text, isCorrect: isCorrect });

    if (isCorrect){
      correctCount++;
      dropZone.className = 'drop-zone correct';
      dropZone.textContent = '[BENAR] ' + correctOpt.text;
    } else {
      dropZone.className = 'drop-zone wrong';
      dropZone.textContent = '[SALAH] Jawabanmu: ' + picked.text + '. Yang benar: ' + correctOpt.text;
    }

    setTimeout(function(){ qIndex++; renderQuestion(); }, 1400);
  }

  function finishEvalAttempt(){
    var attemptScore = Math.round((correctCount / EVAL_SOAL_COUNT) * 100);
    evalAttemptScores.push(attemptScore);
    evalAttemptLogs.push(currentLog.slice());
    renderAttemptStrip();

    document.getElementById('gamePanel').innerHTML =
      '&lt;p style="text-align:center; margin:0;"&gt;Percobaan ke-' + evalAttemptScores.length + ' selesai. Benar ' + correctCount + ' dari ' + EVAL_SOAL_COUNT + ' soal. Skor Tahap 1: &lt;strong&gt;' + attemptScore + '&lt;/strong&gt; (KKM = ' + KKM + ')&lt;/p&gt;';

    var panel = document.getElementById('finalResultPanel');
    var label = document.getElementById('finalResultLabel');
    var scoreEl = document.getElementById('finalScoreValue');
    var detailEl = document.getElementById('finalResultDetail');
    var btnCoba = document.getElementById('btnCobaLagi');

    if (attemptScore &gt;= KKM){
      evalFinalScore = attemptScore;
      evalFinalAttemptIndex = evalAttemptScores.length - 1;
      label.textContent = 'Nilai Tahap 1 (Tercapai KKM)';
      scoreEl.textContent = evalFinalScore;
      detailEl.textContent = 'KKM tercapai pada percobaan ke-' + evalAttemptScores.length + '. Lanjutkan ke Tahap 2: Latihan Praktik.';
      btnCoba.style.display = 'none';
      panel.style.display = 'block';
      tryFinalize();
    } else if (evalAttemptScores.length &lt; MAX_ATTEMPTS){
      label.textContent = 'Belum Mencapai KKM';
      scoreEl.textContent = attemptScore;
      detailEl.textContent = 'Skor ' + attemptScore + ' belum mencapai KKM (' + KKM + '). Sisa kesempatan: ' + (MAX_ATTEMPTS - evalAttemptScores.length) + ' kali.';
      btnCoba.style.display = 'inline-block';
      panel.style.display = 'block';
    } else {
      evalFinalScore = Math.max.apply(null, evalAttemptScores);
      evalFinalAttemptIndex = evalAttemptScores.indexOf(evalFinalScore);
      label.textContent = 'Nilai Tahap 1 (Tertinggi dari 3 Percobaan)';
      scoreEl.textContent = evalFinalScore;
      detailEl.textContent = 'Sudah 3 kali percobaan. Nilai tertinggi (' + evalFinalScore + ') yang digunakan. Lanjutkan ke Tahap 2: Latihan Praktik.';
      btnCoba.style.display = 'none';
      panel.style.display = 'block';
      tryFinalize();
    }
  }

  // ============================================================
  // LAMPIRAN CONTOH LAPORAN PKL (panduan, diproteksi dari penyalinan)
  // ============================================================
  var LAMPIRAN = [
    { judul: "1. Halaman Judul (Cover)",
      isi: "LAPORAN\nPRAKTIK KERJA LAPANGAN\nDI PT UNGARAN SARI GARMEN KABUPATEN SEMARANG\n26 NOVEMBER 2025 - 13 MARET 2026\n\n(Logo sekolah, lebar 6 cm x tinggi 6 cm)\n\nDISUSUN OLEH : RIZWAN NADIF AL-HAKIM\n(NIS)\n\nPROGRAM KEAHLIAN TATA BUSANA\nSMK NEGERI 1 TUNTANG\n2025\n\nCatatan format: seluruh teks judul berukuran 14 pt, dicetak tebal, dan rata tengah." },

    { judul: "2. Biodata Peserta Didik",
      isi: "BIODATA PESERTA DIDIK\n\nNama                  : ------------\nNIS                   : -----------\nKelas                 : XII\nProgram Keahlian      : TATA BUSANA\n\n(Kotak PHOTO 3x4 diletakkan di sisi kanan)\n\nNomor halaman: ii\n\nCatatan format: agar titik dua sejajar sempurna, bagian ini dibuat dengan tabel 2 kolom tanpa garis (No Border)." },

    { judul: "3. Lembar Pengesahan",
      isi: "LEMBAR PENGESAHAN\n\nRIZWAN NADIF AL-HAKIM\n(NIS: 1874/215.067)\n\nDipertahankan di depan Tim Penguji PKL\nProgram Keahlian Tata Busana\nSMK Negeri 1 Tuntang\n\nTim Penguji\n\n............................ (Tanggal Pengesahan) (Tanda Tangan)\n(Pembimbing Sekolah)\n\n............................ (Tanggal Pengesahan) (Tanda Tangan)\n(Penguji)\n\nMengetahui,\nKepala SMKN 1 TUNTANG\n\n\nNanang Nurdiyanto, S.Pd, M.Eng\nNIP. 19770402 200501 1 010\n\nNomor halaman: iii" },

    { judul: "4. Lembar Persetujuan",
      isi: "LEMBAR PERSETUJUAN\n\nRIZWAN NADIF AL-HAKIM\n(NIS: 1874/215.067)\n\nLaporan ini ditulis untuk memenuhi sebagian persyaratan\ndalam mengikuti sidang PKL\nProgram Keahlian Tata Busana\n\nMenyetujui untuk diajukan pada ujian PKL:\n\nPembimbing DUDI                    Pembimbing Sekolah\n\n\n.............................      .............................\nNIP..                              NIP..\n\nMengetahui\nKetua Program Keahlian\n\n\n------------------------------------\nNIP.\n\nKepala SMKN 1 TUNTANG\n\n\nNanang Nurdiyanto, S.Pd, M.Eng\nNIP. 19770402 200501 1 010\n\nNomor halaman: iv" },

    { judul: "5. Kata Pengantar",
      isi: "KATA PENGANTAR\n\nPuji dan syukur penyusun panjatkan kepada Allah SWT, karena atas segala rahmat, berkah dan karunia-Nya sehingga penyusun dapat menyelesaikan Laporan Praktik Kerja Lapangan yang bertempat di Laboratorium Kesehatan Daerah Kabupaten Semarang Program Keahlian Teknik Laboratorium Medik. Penyusun menyadari sepenuhnya bahwa selesainya laporan ini berkat bantuan dari berbagai pihak. Pada kesempatan kali ini penyusun ingin menyampaikan terimakasih kepada:\n\n1. ............................ selaku Kepala SMK Negeri 1 Tuntang Kabupaten Semarang\n2. ............................ selaku Wakil Kepala Sekolah Bidang Humas SMK Negeri 1 Tuntang\n3. ............................ selaku Kepala Program Keahlian Tata Busana\n4. Bapak/Ibu ......................, selaku pembimbing Praktik Kerja Lapangan dari SMK Negeri 1 Tuntang\n5. ...........\n6. ...........\n7. Dst. (optional)\n\nPenyusun menyadari masih banyak kekurangan dalam penyusunan Laporan Praktik Kerja Lapangan ini, walaupun demikian semoga laporan ini dapat bermanfaat bagi para pembaca.\n\nKabupaten Semarang, 13 Maret 2026\nPenyusun\n\nNomor halaman: v\nCatatan format: kata pengantar diketik dengan spasi tunggal (single), bukan 1,5." },

    { judul: "6. Daftar Isi",
      isi: "DAFTAR ISI\n\nHalaman Judul ........................................................ i\nHalaman Biodata ..................................................... ii\nHalaman Pengesahan .................................................. iii\nHalaman Persetujuan ................................................. iv\nKata Pengantar ...................................................... v\nDaftar Isi .......................................................... vi\nDaftar Gambar ....................................................... vii\nDaftar Tabel ........................................................ viii\n\nBAB I PENDAHULUAN\nA. Latar Belakang PKL\nB. Tujuan PKL\nC. Manfaat PKL\nD. Tempat dan Waktu PKL\n\nBAB II TINJAUAN UMUM TEMPAT PKL\nA. Sejarah Umum\nB. Visi, Misi, dan Slogan\nC. Kegiatan Umum\nD. Tugas dan Fungsi\nE. Analisis Usaha\n\nBAB III PELAKSANAAN PKL\nA. Bidang Kerja\nB. Pelaksanaan Kerja\nC. Kendala yang Dihadapi\nD. Cara Mengatasi Masalah\n\nBAB IV PENUTUP\nA. Kesimpulan\nB. Saran\n\nDAFTAR PUSTAKA\nLAMPIRAN\n1. Lembar Konsultasi\n2. Jadwal Dinas/Jaga/Shift\n3. Dokumentasi Kegiatan\n\nNomor halaman: vi\nCatatan format: dibuat otomatis melalui References &gt; Table of Contents, bukan diketik manual." },

    { judul: "7. BAB I - Pendahuluan",
      isi: "BAB I\nPENDAHULUAN\n\nA. Latar Belakang Praktik Kerja Lapangan (PKL)\n    SMK Negeri 1 Tuntang Kabupaten Semarang merupakan salah satu Sekolah Menengah Kejuruan (SMK) yang berada di Kabupaten Semarang. dst\n\nB. Tujuan Praktik Kerja Lapangan (PKL)\n    Tujuan adanya PKL ini antara lain sebagai berikut;\n\nC. Manfaat Praktik Kerja Lapangan (PKL)\n    1. Manfaat Bagi Peserta Didik\n       a. Meningkatnya kompetensi keahlian yang telah diperoleh di sekolah.\n    2. Manfaat Bagi Sekolah\n       a. Terjalinnya hubungan kerja sama yang saling menguntungkan antara sekolah\n    3. Manfaat Bagi Dunia Kerja\n       a. Adanya masukan yang positif dan konstruktif dari SMK/MAK untuk perkembangan dunia kerja.\n\nD. Tempat dan Waktu Praktik Kerja Lapangan (PKL)\n    1. Tempat Praktik Kerja Lapangan (PKL)\n       Praktik Kerja Lapangan (PKL) ini dilaksanakan di ................ (Alamat lengkap disertai Kode Pos)\n    2. Waktu Praktik Kerja Lapangan (PKL)\n       Waktu Praktik Kerja Lapangan (PKL) dilaksanakan pada tanggal 26 November 2025 sampai dengan tanggal 13 Maret 2026, dengan jadwal kegiatan terlampir." },

    { judul: "8. BAB II - Tinjauan Umum Tempat PKL",
      isi: "BAB II\nTINJAUAN UMUM TEMPAT PKL\n\nA. Sejarah Umum\n    PT. Ungaran Sari Garmen berdiri sejak ..... dengan dst\n\n    Gambar 2.1 letak PT. Ungaran Sari Garmen Kabupaten Semarang\n    (googlemaps)\n\n    PT. Ungaran Sari Garmen Kabupaten Semarang merupakan .....dst.\n\nB. Visi, Misi dan Slogan\n    Adapun Visi dan Misi didirikannya PT. Ungaran Sari Garmen Kabupaten Semarang adalah sebagai berikut:\n    ..................................dst\n\nC. Kegiatan Umum\n    Tata Busana adalah sebuah program keahlian yang mempelajari dasar-dasar kemampuan dst ................ PT. Ungaran Sari Garmen Kabupaten Semarang seperti ............... dst.\n\nD. Tugas dan Fungsi\n    PT. Ungaran Sari Garmen memiliki tugas dan fungsi ............... dst.\n\nE. Analisis Usaha\n    Analisis usaha adalah proses evaluasi yang dilakukan terhadap suatu bisnis\n\n    1. Analisis SWOT\n       Analisis SWOT adalah teknik yang digunakan untuk mengidentifikasi\n\n       Tabel 2.2 Tabel Analisis SWOT PT. Ungaran Sari Garmen Kabupaten Semarang\n\n       Strength (Kekuatan)    | Weakness (Kelemahan)\n       1. PT. Ungaran Sari    | 1. Kurangnya dalam fasilitas\n          Garmen ...          |    persediaan alat ... dst\n\n       Opportunity (Peluang)  | Threat (Ancaman)\n       1. Peningkatan alat    | 1. Akan ada timbulnya persaingan\n          yang sesuai ...dst  |    dengan ... dst\n\n    2. Analisis Solusi\n       Strategi SO | Strategi WO\n       Strategi ST | Strategi WT\n\n    3. Analisis 5W + 1H\n       Analisis 5W+1H adalah sebuah metode yang digunakan untuk merinci dan memahami suatu peristiwa, situasi, atau masalah dengan cara mengajukan serangkaian pertanyaan yang mencakup lima unsur utama (What, Who, When, Where, Why) ditambah satu unsur tambahan (How)." },

    { judul: "9. BAB III - Pelaksanaan PKL",
      isi: "BAB III\nPELAKSANAAN PKL\n\nA. Bidang Kerja\n    Lokasi Praktikan melaksanakan Praktik Kerja Lapangan (PKL) yaitu di ....................... Praktikan ditempatkan di ........................., yang sifat pekerjaannya berfokus untuk ...............................dst.\n\nB. Pelaksanaan Kerja\n    Selama pelaksanaan Praktik Kerja Lapangan (PKL) Praktikan dibimbing adalah sebagai berikut:\n    ........\n\n    Catatan:\n    Uraian praktikum dikerjakan sesuai dengan tempat PKL.\n    Jabarkan kegiatan setiap poin kompetensi di atas bila dilaksanakan.\n\nC. Kendala yang Dihadapi\n    Dalam menyelesaikan tugas yang diberikan selama Praktik Kerja, yang menjadi kendala saat menyelesaikan tugas meliputi:\n    1. dst\n\nD. Cara Mengatasi Masalah\n    Berikut ini cara yang dilakukan Praktikan dalam mengatasi kendala untuk menyelesaikan tugas yang diberikan, yaitu:\n    1. dst" },

    { judul: "10. BAB IV - Penutup",
      isi: "BAB IV\nPENUTUP\n\nA. Kesimpulan\n    Dari penjelasan diatas kesimpulannya adalah :\n    1. dst\n\nB. Saran\n    Berikut ini adalah saran yang bisa Praktikan berikan dalam pelaksanaan Praktik Kerja Lapangan, yaitu:\n    ...... dst" },

    { judul: "11. Daftar Pustaka",
      isi: "DAFTAR PUSTAKA\n\nBillett, S. (2011). Vocational education: Purposes, traditions and prospects. Springer.\n\nCreswell, J. W. &amp; Poth, C. N. (2018). Qualitative inquiry &amp; research design (4th ed.). SAGE Publication.\n\nKemendikbud. (2014). Garis-garis besar program pembinaan SMK. Direktorat PSMK Kementerian Pendidikan dan Kebudayaan.\n\nKusumam, A., Mukhidin, M., &amp; Hasan, B. (2016). Pengembangan bahan ajar mata pelajaran dasar dan pengukuran listrik untuk sekolah menengah kejuruan. Jurnal Pendidikan Teknologi dan Kejuruan, 23(1), 28-39. http://doi.org/10.21831/jptk.v23i1.9352\n\nWahjusaputri, S., Marlina, E., &amp; Latifah, S. (2020). Developing the teaching factory learning media in a public vocational high school. Jurnal Pendidikan Vokasi, 10 (1), 69-79.\n\nCatatan format: ditulis spasi tunggal, jarak dua spasi antar sumber, diurutkan abjad A-Z, nama jurnal dan judul buku dicetak miring." },

    { judul: "12. Lampiran - Jurnal Kegiatan PKL",
      isi: "JURNAL KEGIATAN PKL\n\nNama Peserta Didik            : Fulan\nDunia Kerja Tempat PKL        : Apotek Seger Waras\nNama Instruktur               : Nama Pembimbing DUDI\nNama Guru Pembimbing          : Febrina/Amalia/Amil\n\nNo. | Hari/Tanggal            | Unit Kerja/Pekerjaan                  | Catatan dan Paraf Dunia Kerja\n1.  | Selasa / 2 Januari 2023 | Membersihkan ruangan                  |\n    |                         | Membaca SOP layanan klien             |\n    |                         | Bertemu dengan Kliyen                 |\n    |                         | Merancang pembuatan video             |\n    |                         | Membuat Skrip                         |\n    |                         | Dst..........                         |\n2.  | Rabu / 3 Januari 2023   | Membersihkan ruangan                  |\n    |                         | Membaca SOP layanan klien             |\n    |                         | Mempersiapkan shooting                |\n    |                         | Dst..........                         |\n\nJurnal kegiatan disusun oleh peserta didik sebagai dokumen pekerjaan yang dilaksanakan.\nCatatan diberikan oleh pembimbing dunia kerja pada setiap kegiatan atau waktu tertentu." },

    { judul: "13. Lampiran - Catatan Kegiatan PKL",
      isi: "CATATAN KEGIATAN PKL\n\nNama Peserta Didik            : Fulan\nDunia Kerja Tempat PKL        : PT. Ungaran Sari Garmen\nNama Instruktur               : Nama Pembimbing DUDI\nNama Guru Pembimbing          : Na'ilir/ Win Rizki/Bagus/Nila Rukmi\n\nA. Nama Pekerjaan\n   Pencatatan Skrip\n\nB. Perencanaan Kegiatan\n   (Jadwal Kegiatan/dokumen perencanaan)\n   Tanggal disepakati pada tanggal 25 Desember 2024\n   Persiapan alat dan bahan\n   Alat :\n   1. Kamera\n   2. Dst...\n   Bahan :\n   1. Kertas HVS\n   2. Dst...\n\nC. Pelaksanaan Kegiatan/Hasil\n   (Uraian proses kerja dan foto hasil)\n   1. Prosedur pencatatan skrip\n      a. Mengikuti prosedur Kesehatan, Keselamatan, dan Keamanan di Tempat Kerja\n      b. Menjaga continuity saat syuting\n      c. Dst.....\n   2. Hasil\n      Hasil pembuatan skrip dapat dilihat pada lampiran.\n\n   (Foto hasil dan Dokumentasi)\n\nD. Catatan Instruktur\n   (Catatan Instruktur)\n\n                                            Tanda Tangan Instruktur\n\n                                            (...........................)" },

    { judul: "14. Lampiran - Lembar Konsultasi Laporan",
      isi: "LEMBAR KONSULTASI LAPORAN\n\nNO. | TANGGAL    | MATERI YANG DIKONSULTASIKAN DAN URAIAN PEMBIMBING          | NAMA DAN TTD PEMBIMBING\n1.  | 23-12-2024 | Pengajuan topik/masalah: editor tidak mampu melakukan      |\n    |            | pengeditan menggunakan aplikasi yang belum diajarkan      |\n    |            | di sekolah ........                                       |\n2.  | .......... | ........................................................  |\n\nCatatan : Konsultasi dilakukan minimal sebanyak 8 kali." },

    { judul: "15. Format Margin dan Tata Tulis",
      isi: "FORMAT PENGGUNAAN MARGIN\n\nMenggunakan kertas ukuran F4 dengan batas pengetikan:\n- 4 cm dari sisi kiri kertas\n- 3 cm dari sisi kanan kertas\n- 3 cm dari sisi atas kertas\n- 3 cm dari sisi bawah kertas\n\nTATA TULIS:\n- Kertas F4 berat 70 gsm\n- Jenis huruf Times New Roman ukuran 12 pt\n- Isi laporan diketik dengan spasi 1,5\n- Kata pengantar, daftar isi, kutipan langsung, dan daftar pustaka: spasi single\n- Jumlah halaman tidak kurang dari 20 halaman\n\nPENULISAN BAB DAN SUB BAB:\n1. Penulisan Judul BAB dengan romawi, seperti BAB I\n2. Penulisan Sub BAB dengan huruf Abjad Kapital, seperti A. Latar Belakang\n3. Penulisan keterangan anak Sub BAB dengan tangga urutan sebagai berikut:\n   A. Latar Belakang\n   1. Sejarah\n   1.1 Bila Sejarah ada sub-sub lainnya dapat dilanjutkan dengan 1.1, 1.2, dst\n   a. Bila hanya penyebutan dapat menggunakan abjad kecil, a, b, c, d, dst.\n   1) Bila di dalam abjad kecil diperlukan keterangan lagi maka menggunakan simbol 1), 2), 3), dst.\n   a) Bila masih diperlukan keterangan tambahan lagi maka menggunakan simbol a), b), c), dst.\n\n   Tidak diperkenankan menggunakan simbol gambar seperti panah, bintang, dll.\n\n4. Nomor halaman bagian awal: romawi kecil (i, ii, iii, dst), kecuali halaman judul tidak ditampilkan.\n5. Nomor halaman bagian utama: angka (1, 2, 3, dst). Bagian akhir tidak diberi nomor halaman.\n6. Letak nomor halaman di kanan atas (header kanan), tetapi untuk halaman yang memuat judul BAB nomor halaman terletak di tengah bawah (footer tengah)." }
  ];

  var lampiranList = document.getElementById('lampiranList');
  LAMPIRAN.forEach(function(item, idx){
    var wrap = document.createElement('div');
    wrap.className = 'lampiran-item';

    var btn = document.createElement('button');
    btn.className = 'lampiran-toggle';
    btn.type = 'button';
    btn.innerHTML = '&lt;span&gt;' + item.judul + '&lt;/span&gt;&lt;span class="chev"&gt;[ buka ]&lt;/span&gt;';

    var body = document.createElement('div');
    body.className = 'lampiran-body';
    body.textContent = item.isi;

    // Proteksi penyalinan: blokir copy, cut, klik kanan, dan seleksi via keyboard
    body.addEventListener('copy', function(e){ e.preventDefault(); alert('Contoh laporan ini tidak dapat disalin. Silakan baca lalu ketik ulang di lembar dokumen.'); });
    body.addEventListener('cut', function(e){ e.preventDefault(); });
    body.addEventListener('contextmenu', function(e){ e.preventDefault(); });
    body.addEventListener('dragstart', function(e){ e.preventDefault(); });

    btn.addEventListener('click', function(){
      var isOpen = body.classList.toggle('open');
      btn.querySelector('.chev').textContent = isOpen ? '[ tutup ]' : '[ buka ]';
    });

    wrap.appendChild(btn);
    wrap.appendChild(body);
    lampiranList.appendChild(wrap);
  });

  // ============================================================
  // TAHAP 2: LATIHAN PRAKTIK DOKUMEN F4
  // ============================================================
  var docPasteDetected = false;
  var currentDocPage = null;
  var pageCounter = 3;

  var PRACTICE_TARGETS = [
    { label:"Nama perusahaan pada Cover", marker:"[Ketik Nama Perusahaan Tempat PKL]" },
    { label:"Nama pada Cover", marker:"[Ketik Nama Anda]" },
    { label:"NIS pada Cover", marker:"[Ketik NIS Anda]" },
    { label:"Kelas pada Cover", marker:"[Ketik Kelas Anda]" },
    { label:"Program Keahlian pada Lembar Pengesahan", marker:"[Ketik Program Keahlian Anda]" },
    { label:"Tanggal Pengesahan", marker:"[Ketik Tanggal Pengesahan]" },
    { label:"Nama Pembimbing Industri", marker:"[Ketik Nama Pembimbing Industri]" },
    { label:"Nama Guru Pembimbing", marker:"[Ketik Nama Guru Pembimbing]" }
  ];

  var PRACTICE_ESSAYS = [
    { label:"A. Latar Belakang", marker:"ketik latar belakang pelaksanaan PKL", minChars:200 },
    { label:"B. Tujuan PKL", marker:"ketik tujuan dilaksanakannya PKL", minChars:200 },
    { label:"C. Manfaat PKL", marker:"ketik manfaat PKL bagi peserta didik", minChars:200 }
  ];

  function getDocPages(){ return document.querySelectorAll('.f4-page'); }

  function getDocText(){
    var pages = getDocPages();
    var out = [];
    for (var i = 0; i &lt; pages.length; i++){ out.push(pages[i].innerText); }
    return out.join('\n');
  }

  function bindPage(page){
    page.addEventListener('focus', function(){ currentDocPage = page; });
    page.addEventListener('paste', function(e){
      e.preventDefault();
      docPasteDetected = true;
      var flag = document.getElementById('docPasteFlag');
      flag.classList.add('show');
      flag.textContent = '[PERINGATAN] Percobaan tempel terdeteksi - nilai latihan praktik dipotong 50%';
    });
    page.addEventListener('drop', function(e){ e.preventDefault(); });
    page.addEventListener('input', updateDocCount);
  }

  function updateDocCount(){
    document.getElementById('docCharCount').textContent = getDocText().trim().length + ' karakter diketik';
  }

  var initPages = getDocPages();
  for (var p = 0; p &lt; initPages.length; p++){ bindPage(initPages[p]); }
  updateDocCount();

  document.getElementById('docToolbar').addEventListener('mousedown', function(e){
    if (e.target.tagName === 'BUTTON') e.preventDefault();
  });
  var docBtns = document.querySelectorAll('#docToolbar button[data-cmd]');
  for (var db = 0; db &lt; docBtns.length; db++){
    (function(btn){
      btn.addEventListener('click', function(){
        if (!currentDocPage){ alert('Klik di dalam lembar dokumen terlebih dahulu.'); return; }
        currentDocPage.focus();
        document.execCommand(btn.dataset.cmd, false, null);
      });
    })(docBtns[db]);
  }
  document.getElementById('fontSizeSelect').addEventListener('change', function(e){
    if (!currentDocPage) return;
    currentDocPage.focus();
    document.execCommand('fontSize', false, e.target.value);
  });
  document.getElementById('fontFamilySelect').addEventListener('change', function(e){
    if (!currentDocPage) return;
    currentDocPage.focus();
    document.execCommand('fontName', false, e.target.value);
  });
  document.getElementById('btnTambahHalaman').addEventListener('click', function(){
    pageCounter++;
    var newPage = document.createElement('div');
    newPage.className = 'f4-page';
    newPage.contentEditable = 'true';
    newPage.setAttribute('data-pagelabel', 'Halaman ' + pageCounter + ' - Tambahan');
    newPage.innerHTML = '&lt;div style="text-align:center; font-weight:bold; font-size:14pt;"&gt;BAB ...&lt;br&gt;...&lt;/div&gt;&lt;br&gt;&lt;div style="text-align:justify; text-indent:1.25cm;"&gt;Ketik isi halaman tambahan di sini.&lt;/div&gt;';
    document.getElementById('docStage').appendChild(newPage);
    bindPage(newPage);
    newPage.scrollIntoView({ behavior:'smooth', block:'start' });
  });

  var practiceDetail = [];

  function hitungPraktik(){
    var docText = getDocText();
    practiceDetail = [];
    var poinIsian = 0;

    PRACTICE_TARGETS.forEach(function(t){
      var stillThere = docText.indexOf(t.marker) !== -1;
      practiceDetail.push({ label: t.label, ok: !stillThere, ket: stillThere ? 'Belum diganti' : 'Sudah diisi' });
      if (!stillThere) poinIsian++;
    });

    var poinEsai = 0;
    PRACTICE_ESSAYS.forEach(function(es){
      var markerGone = docText.indexOf(es.marker) === -1;
      var ok = false, ket = '';
      if (!markerGone){
        ket = 'Teks petunjuk belum dihapus/diganti';
      } else {
        ok = true; ket = 'Sudah ditulis dengan kalimat sendiri';
      }
      practiceDetail.push({ label: es.label, ok: ok, ket: ket });
      if (ok) poinEsai++;
    });

    var totalItem = PRACTICE_TARGETS.length + PRACTICE_ESSAYS.length;
    var base = ((poinIsian + poinEsai) / totalItem) * 100;

    // Bonus kelengkapan tulisan: dokumen yang digarap serius jauh lebih panjang
    var len = docText.trim().length;
    var lenFactor = Math.min(1, len / 2600);
    var score = Math.round(base * 0.75 + lenFactor * 25);
    if (docPasteDetected) score = Math.round(score * 0.5);
    if (score &gt; 100) score = 100;
    return score;
  }

  document.getElementById('btnHitungPraktik').addEventListener('click', function(){
    var id = getIdentitas();
    var msg = document.getElementById('praktikMsg');
    if (!id.noAbsen || !id.nama || !id.kelas){
      msg.textContent = 'Lengkapi identitas terlebih dahulu.';
      return;
    }
    msg.textContent = '';
    praktikScore = hitungPraktik();

    var sudah = 0;
    for (var i = 0; i &lt; practiceDetail.length; i++){ if (practiceDetail[i].ok) sudah++; }

    document.getElementById('praktikScoreValue').textContent = praktikScore;
    var detail = 'Terpenuhi ' + sudah + ' dari ' + practiceDetail.length + ' butir daftar periksa, ditambah penilaian kelengkapan isi dokumen.';
    if (docPasteDetected) detail = '[PERINGATAN] Terdeteksi percobaan tempel - nilai dipotong 50%. ' + detail;
    document.getElementById('praktikResultDetail').textContent = detail;
    document.getElementById('praktikResultPanel').style.display = 'block';

    tryFinalize();
  });

  // ============================================================
  // NILAI AKHIR &amp; PENGIRIMAN
  // ============================================================
  function tryFinalize(){
    if (evalFinalScore === null || praktikScore === null) return;

    combinedFinalScore = Math.round((evalFinalScore * 0.5) + (praktikScore * 0.5));
    var panel = document.getElementById('finalResultPanel');
    panel.style.display = 'block';
    document.getElementById('finalResultLabel').textContent = 'Nilai Akhir Evaluasi (Terkirim ke Guru)';
    document.getElementById('finalScoreValue').textContent = combinedFinalScore;
    document.getElementById('finalResultDetail').textContent =
      'Nilai akhir = 50% Kuis Tahap 1 (' + evalFinalScore + ') + 50% Latihan Praktik (' + praktikScore + ') = ' + combinedFinalScore + '. Mengirim ke guru...';

    document.getElementById('btnUnduhPDF').style.display = 'inline-block';
    document.getElementById('pdfHint').style.display = 'block';

    var id = getIdentitas();
    fetch(GAS_ENDPOINT, {
      method: 'POST',
      mode: 'no-cors',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ noAbsen: id.noAbsen, nama: id.nama, kelas: id.kelas, skor: combinedFinalScore, judulMateri: JUDUL_MATERI })
    }).then(function(){
      document.getElementById('finalResultDetail').textContent =
        'Nilai akhir = 50% Kuis Tahap 1 (' + evalFinalScore + ') + 50% Latihan Praktik (' + praktikScore + ') = ' + combinedFinalScore + '. Nilai sudah terkirim ke guru. Unduh bukti PDF di bawah, lalu catat nilainya di buku catatan.';
    }).catch(function(){
      document.getElementById('finalResultDetail').textContent =
        'Nilai akhir = ' + combinedFinalScore + ', tetapi gagal terkirim otomatis. Unduh bukti PDF di bawah sebagai bukti fisik dan tunjukkan kepada guru.';
    });
  }

  // ============================================================
  // BUKTI PDF F4
  // ============================================================
  function escapeHTML(str){
    return String(str).replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');
  }

  function generatePrintArea(){
    var id = getIdentitas();
    var now = new Date();
    var tanggalCetak = now.toLocaleDateString('id-ID', { day:'numeric', month:'long', year:'numeric' }) +
      ', ' + now.toLocaleTimeString('id-ID', { hour:'2-digit', minute:'2-digit' });

    var html = '';
    html += '&lt;div class="pd-kop"&gt;&lt;h1&gt;BUKTI MENGERJAKAN EVALUASI&lt;/h1&gt;&lt;p&gt;' + escapeHTML(JUDUL_MATERI) + '&lt;/p&gt;&lt;p&gt;Master Penyusun Laporan PKL - Informatika Fase E Kelas X SMK&lt;/p&gt;&lt;/div&gt;';

    html += '&lt;table class="pd-meta-table"&gt;';
    html += '&lt;tr&gt;&lt;td class="lbl"&gt;No. Absen&lt;/td&gt;&lt;td&gt;: ' + escapeHTML(id.noAbsen) + '&lt;/td&gt;&lt;td class="lbl"&gt;Dicetak&lt;/td&gt;&lt;td&gt;: ' + tanggalCetak + '&lt;/td&gt;&lt;/tr&gt;';
    html += '&lt;tr&gt;&lt;td class="lbl"&gt;Nama&lt;/td&gt;&lt;td&gt;: ' + escapeHTML(id.nama) + '&lt;/td&gt;&lt;td class="lbl"&gt;Percobaan Kuis&lt;/td&gt;&lt;td&gt;: ' + evalAttemptScores.length + ' dari ' + MAX_ATTEMPTS + ' kali&lt;/td&gt;&lt;/tr&gt;';
    html += '&lt;tr&gt;&lt;td class="lbl"&gt;Kelas&lt;/td&gt;&lt;td&gt;: ' + escapeHTML(id.kelas) + '&lt;/td&gt;&lt;td class="lbl"&gt;KKM&lt;/td&gt;&lt;td&gt;: ' + KKM + '&lt;/td&gt;&lt;/tr&gt;';
    html += '&lt;/table&gt;';

    html += '&lt;div class="pd-section-title"&gt;Ringkasan Nilai&lt;/div&gt;';
    html += '&lt;table class="pd-score-table"&gt;&lt;tr&gt;&lt;th&gt;Komponen&lt;/th&gt;&lt;th&gt;Bobot&lt;/th&gt;&lt;th&gt;Skor&lt;/th&gt;&lt;/tr&gt;';
    html += '&lt;tr&gt;&lt;td&gt;Tahap 1 - Kuis Drag &amp;amp; Drop (' + EVAL_SOAL_COUNT + ' soal)&lt;/td&gt;&lt;td&gt;50%&lt;/td&gt;&lt;td&gt;' + (evalFinalScore !== null ? evalFinalScore : '-') + '&lt;/td&gt;&lt;/tr&gt;';
    html += '&lt;tr&gt;&lt;td&gt;Tahap 2 - Latihan Praktik Dokumen F4&lt;/td&gt;&lt;td&gt;50%&lt;/td&gt;&lt;td&gt;' + (praktikScore !== null ? praktikScore : '-') + '&lt;/td&gt;&lt;/tr&gt;';
    html += '&lt;tr&gt;&lt;th&gt;Nilai Akhir&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;' + (combinedFinalScore !== null ? combinedFinalScore : '-') + '&lt;/th&gt;&lt;/tr&gt;&lt;/table&gt;';

    if (evalAttemptScores.length){
      var rincian = [];
      for (var i = 0; i &lt; evalAttemptScores.length; i++){ rincian.push('Percobaan ' + (i+1) + ' = ' + evalAttemptScores[i]); }
      html += '&lt;p style="font-size:9.5pt; margin-bottom:12px;"&gt;Rincian percobaan kuis: ' + rincian.join('; ') + '.&lt;/p&gt;';
    }

    if (evalFinalAttemptIndex !== null &amp;&amp; evalAttemptLogs[evalFinalAttemptIndex]){
      html += '&lt;div class="pd-section-title"&gt;Rincian Jawaban Kuis (Percobaan ke-' + (evalFinalAttemptIndex+1) + ')&lt;/div&gt;';
      html += '&lt;table class="pd-eval-table"&gt;&lt;tr&gt;&lt;th style="width:40%;"&gt;Pertanyaan&lt;/th&gt;&lt;th style="width:20%;"&gt;Jawaban Murid&lt;/th&gt;&lt;th style="width:20%;"&gt;Jawaban Benar&lt;/th&gt;&lt;th style="width:20%;"&gt;Status&lt;/th&gt;&lt;/tr&gt;';
      evalAttemptLogs[evalFinalAttemptIndex].forEach(function(r){
        html += '&lt;tr&gt;&lt;td&gt;' + escapeHTML(r.q) + '&lt;/td&gt;&lt;td&gt;' + escapeHTML(r.userAns) + '&lt;/td&gt;&lt;td&gt;' + escapeHTML(r.correctAns) + '&lt;/td&gt;&lt;td&gt;' +
          (r.isCorrect ? '&lt;span class="pd-verdict ok"&gt;BENAR&lt;/span&gt;' : '&lt;span class="pd-verdict no"&gt;SALAH&lt;/span&gt;') + '&lt;/td&gt;&lt;/tr&gt;';
      });
      html += '&lt;/table&gt;';
    }

    if (practiceDetail.length){
      html += '&lt;div class="pd-section-title"&gt;Daftar Periksa Latihan Praktik&lt;/div&gt;';
      html += '&lt;table class="pd-eval-table"&gt;&lt;tr&gt;&lt;th style="width:55%;"&gt;Butir yang Dinilai&lt;/th&gt;&lt;th style="width:25%;"&gt;Keterangan&lt;/th&gt;&lt;th style="width:20%;"&gt;Status&lt;/th&gt;&lt;/tr&gt;';
      practiceDetail.forEach(function(d){
        html += '&lt;tr&gt;&lt;td&gt;' + escapeHTML(d.label) + '&lt;/td&gt;&lt;td&gt;' + escapeHTML(d.ket) + '&lt;/td&gt;&lt;td&gt;' +
          (d.ok ? '&lt;span class="pd-verdict ok"&gt;TERPENUHI&lt;/span&gt;' : '&lt;span class="pd-verdict no"&gt;BELUM&lt;/span&gt;') + '&lt;/td&gt;&lt;/tr&gt;';
      });
      html += '&lt;/table&gt;';
    }

    html += '&lt;div class="pd-section-title"&gt;Hasil Ketikan Dokumen Laporan PKL&lt;/div&gt;';
    var pages = getDocPages();
    for (var pg = 0; pg &lt; pages.length; pg++){
      var label = pages[pg].getAttribute('data-pagelabel') || ('Halaman ' + (pg+1));
      var teks = pages[pg].innerText.trim();
      html += '&lt;div class="pd-answer-item"&gt;&lt;div class="pd-anum"&gt;' + escapeHTML(label) + '&lt;/div&gt;' +
        '&lt;div class="pd-atext"&gt;' + (teks ? escapeHTML(teks) : '(kosong)') + '&lt;/div&gt;&lt;/div&gt;';
    }

    html += '&lt;div class="pd-signature"&gt;' +
      '&lt;div&gt;Peserta Didik&lt;div class="line"&gt;' + escapeHTML(id.nama) + '&lt;/div&gt;&lt;/div&gt;' +
      '&lt;div&gt;Guru Mata Pelajaran&lt;div class="line"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;' +
      '&lt;/div&gt;';

    html += '&lt;p class="pd-footnote"&gt;Dokumen ini dihasilkan otomatis sebagai bukti pengerjaan evaluasi. Cetak pada kertas F4 dan serahkan kepada guru mata pelajaran.&lt;/p&gt;';

    document.getElementById('printArea').innerHTML = html;
  }

  document.getElementById('btnUnduhPDF').addEventListener('click', function(){
    generatePrintArea();
    setTimeout(function(){ window.print(); }, 150);
  });
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/integrasi-dokumen-dan-otomasi-pengolah.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-3348254440559995971</guid><pubDate>Tue, 15 Sep 2026 00:32:28 +0000</pubDate><atom:updated>2026-09-15T07:32:28.318+07:00</atom:updated><title>Evaluasi Informasi dalam Teks Ceramah</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Evaluasi Informasi dalam Teks Ceramah - Kelas XI SMK&lt;/title&gt;
&lt;style&gt;
  :root{
    --ink:#1B2430;
    --ink-soft:#4A5568;
    --paper:#F7F5F0;
    --card:#FFFFFF;
    --line:#D8D2C4;
    --amber:#E8A33D;
    --amber-dark:#8A5A12;
    --green:#3F7D58;
    --green-bg:#E7F2EB;
    --red:#C1443B;
    --red-bg:#FBEAE8;
  }
  *{box-sizing:border-box;}
  body{margin:0;background:var(--paper);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;line-height:1.6;}
  .wrap{max-width:800px;margin:0 auto;padding:28px 20px 90px;}
  header.top{border-bottom:3px solid var(--ink);padding-bottom:16px;margin-bottom:10px;}
  .kode{font-size:12px;letter-spacing:.04em;color:var(--ink-soft);}
  h1{font-size:23px;margin:6px 0 4px;font-weight:800;}
  .sub{font-size:14px;color:var(--ink-soft);margin:0;}
  .cpbox{background:#FFF6E6;border:1px solid var(--amber);border-left:4px solid var(--amber-dark);border-radius:6px;padding:12px 14px;margin-top:14px;font-size:13.5px;}
  nav.tabs{position:sticky;top:0;background:var(--paper);z-index:10;display:flex;gap:8px;padding:12px 0;border-bottom:1px solid var(--line);margin-bottom:20px;flex-wrap:wrap;}
  nav.tabs a{font-size:13px;font-weight:700;text-decoration:none;color:var(--ink);background:var(--card);border:1px solid var(--line);padding:8px 14px;border-radius:20px;}
  nav.tabs a:hover{background:#F1EFE7;}
  section{margin-bottom:10px;}
  .card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:22px;margin-bottom:20px;}
  h2.secTitle{font-size:19px;margin:0 0 16px;padding-bottom:10px;border-bottom:3px solid var(--ink);}
  h3{font-size:16px;color:var(--amber-dark);margin:22px 0 8px;}
  h3:first-of-type{margin-top:0;}
  p{font-size:14.5px;margin:8px 0;}
  ul,ol{font-size:14.5px;padding-left:22px;}
  li{margin-bottom:6px;}
  table.materi-table{width:100%;border-collapse:collapse;font-size:13.5px;margin:10px 0 16px;}
  table.materi-table th,table.materi-table td{border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top;}
  table.materi-table th{background:#F1EFE7;}
  .contoh-box{background:#FBF9F2;border:1px solid var(--line);border-left:4px solid var(--amber);padding:14px 16px;border-radius:4px;margin:12px 0;font-size:14px;white-space:pre-line;}
  .contoh-box .ct-label{font-weight:800;font-size:12.5px;color:var(--amber-dark);margin-bottom:6px;}
  .rangkuman{background:var(--green-bg);border:1px solid var(--green);border-radius:6px;padding:14px 16px;}
  .rangkuman li{margin-bottom:4px;}
  .taskbox{background:#FFF6E6;border:1px solid var(--amber);border-left:4px solid var(--amber-dark);border-radius:6px;padding:12px 14px;margin:12px 0;font-size:13.5px;}
  label{display:block;font-size:13px;color:var(--ink-soft);margin:12px 0 4px;}
  input[type=text],input[type=number]{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:6px;font-size:15px;background:#fff;color:var(--ink);}
  input:focus{outline:2px solid var(--amber);outline-offset:1px;}
  .btn{display:inline-block;border:none;border-radius:6px;padding:12px 20px;font-size:15px;font-weight:700;cursor:pointer;margin-top:16px;margin-right:8px;}
  .btn-primary{background:var(--ink);color:#fff;}
  .btn-primary:hover{background:#000;}
  .btn-secondary{background:var(--amber);color:#3A2400;}
  .btn-secondary:hover{background:#d6912e;}
  .btn:disabled{opacity:.5;cursor:not-allowed;}
  .err{color:var(--red);font-size:13px;margin-top:8px;display:none;}
  .stimulus{background:#FBF9F2;border:1px solid var(--line);border-left:4px solid var(--amber);padding:14px 16px;border-radius:4px;margin-bottom:14px;font-size:14.5px;white-space:pre-line;}
  .stimulus .st-title{font-weight:800;font-size:14px;margin-bottom:6px;color:var(--amber-dark);}
  .qgroup{margin-bottom:26px;}
  .q{margin-bottom:20px;padding-bottom:18px;border-bottom:1px solid var(--line);}
  .q:last-child{border-bottom:none;}
  .q-num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--ink-soft);}
  .q-text{font-size:15px;font-weight:600;margin:4px 0 10px;}
  .opt{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:6px;cursor:pointer;border:1px solid transparent;font-size:14.5px;}
  .opt:hover{background:#F1EFE7;}
  .opt input{margin-top:3px;}
  .opt.selected{background:#FCEFDA;border-color:var(--amber);}
  #progressWrap{position:sticky;top:0;background:var(--paper);padding:10px 0;z-index:5;border-bottom:1px solid var(--line);margin-bottom:16px;}
  #progressBar{height:8px;background:var(--line);border-radius:4px;overflow:hidden;}
  #progressFill{height:100%;background:var(--amber);width:0%;transition:width .2s;}
  #progressText{font-size:12px;color:var(--ink-soft);margin-top:4px;}
  .result-score{font-size:48px;font-weight:800;margin:6px 0;}
  .pass{color:var(--green);}
  .fail{color:var(--red);}
  .result-box{border-radius:8px;padding:20px;text-align:center;}
  .result-box.pass-bg{background:var(--green-bg);border:1px solid var(--green);}
  .result-box.fail-bg{background:var(--red-bg);border:1px solid var(--red);}
  .hidden{display:none;}
  .essaySection{margin-top:10px;}
  .essayQ{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--line);}
  .essayQ:last-child{border-bottom:none;}
  .essayQ-num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--ink-soft);}
  .essayQ-text{font-size:15px;font-weight:600;margin:4px 0 8px;}
  textarea.essayInput{width:100%;min-height:80px;padding:10px 12px;border:1px solid var(--line);border-radius:6px;font-size:14.5px;font-family:inherit;resize:vertical;background:#fff;color:var(--ink);}
  textarea.essayInput:focus{outline:2px solid var(--amber);outline-offset:1px;}
  .charCount{font-size:12px;color:var(--ink-soft);text-align:right;margin-top:3px;}
  .charCount.over{color:var(--red);font-weight:700;}
  .pasteWarn{font-size:12.5px;color:var(--red);font-weight:700;margin-top:4px;display:none;}
  .pasteWarn.show{display:block;}
  .sectionLabel{font-size:13px;font-weight:800;letter-spacing:.02em;color:var(--amber-dark);margin:26px 0 4px;border-top:3px solid var(--ink);padding-top:14px;}
  #printArea{display:none;}
  @media print{
    body *{visibility:hidden;}
    #printArea, #printArea *{visibility:visible;}
    #printArea{display:block;position:absolute;left:0;top:0;width:100%;}
    @page{size:215mm 330mm;margin:14mm;}
    .pbreak{break-before:page;page-break-before:always;}
    .noBreak{break-inside:avoid;page-break-inside:avoid;}
  }
  .pf-kop{text-align:center;border-bottom:3px solid #000;padding-bottom:10px;margin-bottom:14px;}
  .pf-kop h2{margin:0;font-size:16px;}
  .pf-kop p{margin:2px 0 0;font-size:12px;}
  .pf-identitas{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:14px;}
  .pf-identitas td{padding:3px 4px;vertical-align:top;}
  .pf-identitas td.lbl{width:150px;color:#333;}
  .pf-skorbox{border:2px solid #000;border-radius:4px;padding:10px 14px;margin-bottom:16px;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;}
  .pf-skoritem{font-size:12px;}
  .pf-skoritem b{display:block;font-size:20px;}
  .pf-essay-q{font-size:13px;font-weight:700;margin-bottom:3px;}
  .pf-essay-a{font-size:12.5px;border:1px solid #999;border-radius:4px;padding:6px 8px;min-height:28px;white-space:pre-wrap;background:#FAFAF7;}
  .pf-ttd{display:flex;justify-content:space-between;margin-top:40px;font-size:12.5px;}
  .pf-ttd div{width:45%;text-align:center;}
  .pf-ttd .garis{margin-top:56px;border-top:1px solid #000;padding-top:4px;}
  .pf-note{font-size:11px;color:#555;margin-top:10px;}
  footer{margin-top:30px;font-size:12px;color:var(--ink-soft);text-align:center;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="wrap"&gt;

  &lt;header class="top"&gt;
    &lt;div class="kode"&gt;DOK/B.INDO/XI/CERAMAH-01&lt;/div&gt;
    &lt;h1&gt;Evaluasi Informasi dalam Teks Ceramah&lt;/h1&gt;
    &lt;p class="sub"&gt;Bahasa Indonesia - Kelas XI SMK - Mengidentifikasi Gagasan Pokok dan Gagasan Pendukung serta Mengevaluasi Informasi dalam Teks Ceramah&lt;/p&gt;
    &lt;div class="cpbox"&gt;&lt;b&gt;Tujuan Pembelajaran:&lt;/b&gt; Murid mampu mengevaluasi informasi dalam teks ceramah serta mengidentifikasi gagasan pokok dan gagasan pendukung.&lt;/div&gt;
  &lt;/header&gt;

  &lt;nav class="tabs"&gt;
    &lt;a href="#materi"&gt;1. Materi&lt;/a&gt;
    &lt;a href="#kelompok"&gt;2. Tugas Kelompok&lt;/a&gt;
    &lt;a href="#individu"&gt;3. Tugas Individu&lt;/a&gt;
  &lt;/nav&gt;

  &lt;section id="materi"&gt;
  &lt;div class="card"&gt;
    &lt;h2 class="secTitle"&gt;Materi: Evaluasi Informasi dalam Teks Ceramah&lt;/h2&gt;

    &lt;h3&gt;A. Mengenal Teks Ceramah&lt;/h3&gt;
    &lt;p&gt;&lt;b&gt;Teks ceramah&lt;/b&gt; adalah teks yang berisi pemaparan gagasan, pengetahuan, atau informasi mengenai suatu topik tertentu yang disampaikan seseorang (penceramah) secara lisan di hadapan orang banyak, dengan tujuan memberi pengetahuan, menyadarkan, meyakinkan, atau mengajak pendengar untuk melakukan sesuatu. Ceramah biasa ditemukan dalam kegiatan keagamaan, upacara bendera, seminar, penyuluhan, hingga pengarahan kerja di dunia industri.&lt;/p&gt;
    &lt;p&gt;Ciri-ciri umum teks ceramah antara lain:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;Disampaikan oleh satu orang penceramah kepada khalayak (bersifat satu arah, meskipun bisa diakhiri sesi tanya jawab).&lt;/li&gt;
      &lt;li&gt;Membahas satu topik tertentu secara sistematis dari pembukaan hingga penutup.&lt;/li&gt;
      &lt;li&gt;Bersifat persuasif, yaitu berusaha meyakinkan dan mengajak pendengar.&lt;/li&gt;
      &lt;li&gt;Didukung oleh data, fakta, atau contoh untuk memperkuat gagasan yang disampaikan.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;B. Struktur Teks Ceramah&lt;/h3&gt;
    &lt;p&gt;Secara umum, teks ceramah disusun dalam tiga bagian struktur berikut.&lt;/p&gt;
    &lt;table class="materi-table"&gt;
      &lt;tr&gt;&lt;th&gt;Bagian&lt;/th&gt;&lt;th&gt;Isi&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;Pembukaan&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Berisi salam, sapaan kepada hadirin, ucapan syukur, dan pengantar topik yang akan dibahas.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;Isi&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Berisi pemaparan gagasan pokok dan gagasan pendukung mengenai topik, disertai data, fakta, contoh, atau alasan logis, serta ajakan (persuasi) kepada pendengar.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;Penutup&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Berisi simpulan, harapan penceramah, dan salam penutup.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h3&gt;C. Kaidah Kebahasaan Teks Ceramah&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;b&gt;Kata ganti orang pertama jamak&lt;/b&gt; (kita, kami) untuk membangun kedekatan dengan pendengar. Contoh: "Marilah kita jaga kebersihan lingkungan sekolah."&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Kata sapaan&lt;/b&gt; untuk menyapa pendengar. Contoh: "Bapak/Ibu guru dan teman-teman yang saya hormati."&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Kata teknis/istilah&lt;/b&gt; sesuai topik yang dibahas. Contoh: "disiplin kerja", "Otoritas Jasa Keuangan".&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Konjungsi argumentatif&lt;/b&gt; seperti "oleh karena itu", "dengan demikian", "sebab" untuk menghubungkan alasan dan simpulan.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Kata kerja mental&lt;/b&gt; yang menyatakan sikap/pandangan, seperti "menyimpulkan", "berpendapat", "meyakini".&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Kalimat persuasif&lt;/b&gt; berupa ajakan, seperti "marilah", "mari kita".&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;D. Gagasan Pokok dan Gagasan Pendukung&lt;/h3&gt;
    &lt;p&gt;&lt;b&gt;Gagasan pokok&lt;/b&gt; (ide pokok/ide utama) adalah inti persoalan yang dibahas dalam sebuah paragraf atau bagian teks. Gagasan pokok biasanya dituangkan dalam satu kalimat yang disebut kalimat utama.&lt;/p&gt;
    &lt;p&gt;&lt;b&gt;Gagasan pendukung&lt;/b&gt; (ide penjelas) adalah uraian, contoh, data, fakta, atau alasan yang berfungsi memperjelas, memperkuat, atau menjabarkan gagasan pokok. Gagasan pendukung dituangkan dalam kalimat-kalimat penjelas.&lt;/p&gt;
    &lt;p&gt;Berdasarkan letak gagasan pokoknya, paragraf dapat dibedakan menjadi tiga pola berikut.&lt;/p&gt;
    &lt;table class="materi-table"&gt;
      &lt;tr&gt;&lt;th&gt;Pola&lt;/th&gt;&lt;th&gt;Letak Gagasan Pokok&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;Deduktif&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Gagasan pokok terletak di awal paragraf, diikuti kalimat-kalimat penjelas.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;Induktif&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Gagasan pokok terletak di akhir paragraf, didahului kalimat-kalimat penjelas.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;Campuran&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Gagasan pokok muncul di awal, ditegaskan kembali di akhir paragraf.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;p&gt;Langkah menemukan gagasan pokok dan gagasan pendukung:&lt;/p&gt;
    &lt;ol&gt;
      &lt;li&gt;Bacalah paragraf secara utuh untuk memahami keseluruhan isi.&lt;/li&gt;
      &lt;li&gt;Temukan kalimat yang memuat inti pembahasan (biasanya di awal atau akhir paragraf).&lt;/li&gt;
      &lt;li&gt;Tandai kalimat-kalimat lain sebagai gagasan pendukung jika berisi penjelasan, contoh, sebab-akibat, atau data yang mendukung gagasan pokok tersebut.&lt;/li&gt;
      &lt;li&gt;Rumuskan gagasan pokok dalam satu kalimat singkat menggunakan kata-katamu sendiri.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3&gt;E. Evaluasi Informasi dalam Teks Ceramah&lt;/h3&gt;
    &lt;p&gt;&lt;b&gt;Mengevaluasi informasi&lt;/b&gt; berarti menilai kelayakan, kebenaran, dan kualitas suatu informasi berdasarkan kriteria tertentu, bukan sekadar menerima dan memahami informasi tersebut secara mentah-mentah. Kemampuan ini sangat penting bagi siswa SMK karena di dunia nyata kita sering menemukan ceramah, motivasi kerja, maupun informasi lisan lain yang isinya belum tentu benar, akurat, atau dapat dipertanggungjawabkan - termasuk potensi berita bohong (hoaks) dan opini yang dibungkus seolah-olah fakta.&lt;/p&gt;
    &lt;p&gt;Berikut enam kriteria yang digunakan untuk mengevaluasi informasi dalam teks ceramah.&lt;/p&gt;
    &lt;table class="materi-table"&gt;
      &lt;tr&gt;&lt;th&gt;Kriteria&lt;/th&gt;&lt;th&gt;Indikator&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;1. Kredibilitas&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Apakah penceramah/sumber informasi memiliki keahlian, pengalaman, atau otoritas yang relevan dengan topik yang dibahas?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;2. Keakuratan&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Apakah data, fakta, dan angka yang disampaikan benar, dapat diverifikasi, dan berasal dari sumber yang jelas (bukan sekadar opini pribadi)?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;3. Kelogisan&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Apakah alasan atau argumen yang dikemukakan masuk akal dan hubungan sebab-akibatnya wajar, bukan generalisasi berlebihan?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;4. Objektivitas&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Apakah informasi disampaikan secara berimbang, tidak memihak secara berlebihan, dan minim bias pribadi?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;5. Kelengkapan&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Apakah informasi yang disampaikan cukup lengkap sehingga tidak menyesatkan pendengar?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;6. Kesesuaian tujuan&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Apakah isi ceramah relevan dan sesuai dengan topik serta tujuan ceramah yang disampaikan di awal?&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;p&gt;Langkah-langkah mengevaluasi informasi dalam teks ceramah:&lt;/p&gt;
    &lt;ol&gt;
      &lt;li&gt;Membaca/menyimak teks ceramah secara menyeluruh.&lt;/li&gt;
      &lt;li&gt;Mengidentifikasi struktur teks (pembukaan, isi, penutup).&lt;/li&gt;
      &lt;li&gt;Menemukan gagasan pokok dan gagasan pendukung pada bagian isi.&lt;/li&gt;
      &lt;li&gt;Menguji setiap informasi penting menggunakan keenam kriteria evaluasi di atas.&lt;/li&gt;
      &lt;li&gt;Mencatat temuan (informasi yang kuat maupun yang lemah/perlu diverifikasi).&lt;/li&gt;
      &lt;li&gt;Menyimpulkan dan memberi rekomendasi, misalnya perbaikan yang diperlukan agar informasi lebih dapat dipercaya.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3&gt;F. Contoh Analisis Singkat&lt;/h3&gt;
    &lt;div class="contoh-box"&gt;
      &lt;div class="ct-label"&gt;CONTOH PENGGALAN CERAMAH&lt;/div&gt;"...Sayangnya, masih banyak siswa yang membuang sampah sembarangan. Menurut pengamatan pribadi saya, hampir separuh siswa di sekolah ini membuang sampah tidak pada tempatnya. Oleh karena itu, marilah kita membiasakan diri membuang sampah pada tempatnya..."&lt;/div&gt;
    &lt;table class="materi-table"&gt;
      &lt;tr&gt;&lt;th&gt;Aspek&lt;/th&gt;&lt;th&gt;Analisis&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Gagasan pokok&lt;/td&gt;&lt;td&gt;Ajakan untuk membiasakan diri membuang sampah pada tempatnya.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Gagasan pendukung&lt;/td&gt;&lt;td&gt;Klaim bahwa hampir separuh siswa membuang sampah sembarangan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Evaluasi (Keakuratan)&lt;/td&gt;&lt;td&gt;Lemah - klaim "hampir separuh siswa" hanya berdasarkan pengamatan pribadi, bukan data resmi (misalnya survei atau catatan petugas kebersihan), sehingga akurasinya perlu dipertanyakan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Rekomendasi&lt;/td&gt;&lt;td&gt;Penceramah sebaiknya mencantumkan data resmi agar informasi lebih kredibel dan akurat.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h3&gt;G. Rangkuman&lt;/h3&gt;
    &lt;div class="rangkuman"&gt;
      &lt;ul&gt;
        &lt;li&gt;Teks ceramah terdiri atas struktur pembukaan, isi, dan penutup.&lt;/li&gt;
        &lt;li&gt;Gagasan pokok adalah inti pembahasan; gagasan pendukung memperjelas gagasan pokok.&lt;/li&gt;
        &lt;li&gt;Pola letak gagasan pokok: deduktif (awal), induktif (akhir), campuran (awal dan akhir).&lt;/li&gt;
        &lt;li&gt;Mengevaluasi informasi berarti menilai kredibilitas, keakuratan, kelogisan, objektivitas, kelengkapan, dan kesesuaian tujuan suatu informasi - bukan menerimanya begitu saja.&lt;/li&gt;
        &lt;li&gt;Kemampuan mengevaluasi informasi penting agar kita tidak mudah terpengaruh oleh informasi lisan yang belum tentu benar.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;/section&gt;

  &lt;section id="kelompok"&gt;
  &lt;div class="card"&gt;
    &lt;h2 class="secTitle"&gt;Tugas Kelompok&lt;/h2&gt;
    &lt;p&gt;&lt;b&gt;Judul:&lt;/b&gt; Mengevaluasi Informasi dalam Teks Ceramah Secara Berkelompok&lt;/p&gt;
    &lt;div class="taskbox"&gt;&lt;b&gt;Ketentuan kelompok:&lt;/b&gt; 1 kelompok terdiri atas 4-5 siswa, dibagi oleh guru atau berdasarkan kesepakatan kelas.&lt;/div&gt;

    &lt;h3&gt;Langkah Pengerjaan&lt;/h3&gt;
    &lt;ol&gt;
      &lt;li&gt;Carilah atau gunakan satu teks/rekaman ceramah (transkrip pidato, ceramah keagamaan, motivasi kerja, atau video ceramah singkat dari sumber yang jelas). Teks/video boleh ditentukan guru atau dicari sendiri oleh kelompok.&lt;/li&gt;
      &lt;li&gt;Bacalah/simaklah teks ceramah tersebut secara menyeluruh bersama anggota kelompok.&lt;/li&gt;
      &lt;li&gt;Identifikasi struktur teks ceramah (pembukaan, isi, penutup).&lt;/li&gt;
      &lt;li&gt;Tentukan gagasan pokok pada setiap paragraf bagian isi.&lt;/li&gt;
      &lt;li&gt;Tentukan minimal dua gagasan pendukung untuk setiap gagasan pokok yang ditemukan.&lt;/li&gt;
      &lt;li&gt;Evaluasi informasi dalam ceramah tersebut menggunakan enam kriteria evaluasi (kredibilitas, keakuratan, kelogisan, objektivitas, kelengkapan, kesesuaian tujuan). Untuk tiap kriteria, berikan skor 1-4 beserta alasannya.&lt;/li&gt;
      &lt;li&gt;Simpulkan apakah ceramah tersebut layak dijadikan rujukan/dipercaya, disertai alasan dan rekomendasi perbaikan (jika ada).&lt;/li&gt;
      &lt;li&gt;Susun laporan tertulis, lalu presentasikan hasilnya di depan kelas (sekitar 10 menit per kelompok, termasuk sesi tanya jawab).&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3&gt;Format Laporan&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;Halaman judul: judul tugas, nama kelompok, anggota, dan kelas.&lt;/li&gt;
      &lt;li&gt;Identitas teks ceramah yang dianalisis: judul/topik, sumber, nama penceramah (jika ada), tanggal/tautan.&lt;/li&gt;
      &lt;li&gt;Tabel gagasan pokok dan gagasan pendukung per paragraf isi.&lt;/li&gt;
      &lt;li&gt;Tabel hasil evaluasi enam kriteria beserta skor dan alasan.&lt;/li&gt;
      &lt;li&gt;Simpulan dan rekomendasi.&lt;/li&gt;
      &lt;li&gt;Lampiran: naskah/tautan teks ceramah yang dianalisis.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;Rubrik Penilaian (skor 1-4 per aspek)&lt;/h3&gt;
    &lt;table class="materi-table"&gt;
      &lt;tr&gt;&lt;th&gt;Aspek&lt;/th&gt;&lt;th&gt;Deskripsi&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan identifikasi struktur&lt;/td&gt;&lt;td&gt;Kesesuaian pembagian pembukaan, isi, dan penutup dengan teks yang dianalisis.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan gagasan pokok &amp;amp; pendukung&lt;/td&gt;&lt;td&gt;Kesesuaian dan kelengkapan gagasan pokok serta gagasan pendukung yang ditemukan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kedalaman evaluasi&lt;/td&gt;&lt;td&gt;Ketajaman analisis pada keenam kriteria evaluasi beserta alasannya.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kualitas simpulan &amp;amp; rekomendasi&lt;/td&gt;&lt;td&gt;Kejelasan dan kelogisan simpulan serta rekomendasi yang diberikan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kerja sama &amp;amp; presentasi&lt;/td&gt;&lt;td&gt;Pembagian tugas antaranggota serta kejelasan penyampaian saat presentasi.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;p style="font-size:13px;color:var(--ink-soft);"&gt;Total skor maksimal 20, dikonversi ke skala 100 oleh guru. Batas waktu pengumpulan dan jadwal presentasi ditentukan oleh guru mata pelajaran.&lt;/p&gt;
  &lt;/div&gt;
  &lt;/section&gt;

  &lt;section id="individu"&gt;
  &lt;div class="card" id="screen-intro"&gt;
    &lt;h2 class="secTitle"&gt;Tugas Individu&lt;/h2&gt;
    &lt;p style="font-size:14px;"&gt;Tugas individu terdiri atas &lt;b&gt;25 soal pilihan ganda&lt;/b&gt; dan &lt;b&gt;5 soal esai&lt;/b&gt; dari materi Evaluasi Informasi dalam Teks Ceramah. Susunan soal dan urutan opsi jawaban diacak berbeda-beda untuk tiap peserta. Skor dihitung otomatis: &lt;b&gt;Skor PG x 70% + Skor Esai x 30%&lt;/b&gt;. Skor esai dihitung dari kesesuaian jawabanmu dengan konsep-konsep kunci pada tiap soal. &lt;b&gt;Jawaban esai wajib diketik sendiri&lt;/b&gt; - fitur tempel/paste (Ctrl+V, klik kanan, maupun tarik-lepas teks) dinonaktifkan pada kolom esai.&lt;/p&gt;
    &lt;div class="taskbox"&gt;
      &lt;b&gt;PENTING - wajib dilakukan setelah selesai mengerjakan:&lt;/b&gt;
      &lt;ol style="margin:6px 0 0;padding-left:18px;"&gt;
        &lt;li&gt;Jawaban dan skor akan &lt;b&gt;dikirim otomatis ke sistem sekolah&lt;/b&gt; begitu kamu menekan tombol Kirim.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Unduh&lt;/b&gt; bukti mengerjakan (PDF, ukuran F4) lewat tombol "Unduh Bukti Mengerjakan (PDF)".&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Cetak&lt;/b&gt; dokumen tersebut (maksimal 3 lembar).&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Serahkan hasil cetak ke guru mata pelajaran&lt;/b&gt; sebagai bukti fisik pengerjaan tugas.&lt;/li&gt;
      &lt;/ol&gt;
    &lt;/div&gt;

    &lt;label for="absen"&gt;No. Absen&lt;/label&gt;
    &lt;input type="number" id="absen" placeholder="Contoh: 14" min="1"&gt;
    &lt;label for="nama"&gt;Nama Lengkap&lt;/label&gt;
    &lt;input type="text" id="nama" placeholder="Tulis nama lengkapmu"&gt;
    &lt;label for="kelas"&gt;Kelas&lt;/label&gt;
    &lt;input type="text" id="kelas" placeholder="Contoh: XI TKR 1"&gt;
    &lt;div class="err" id="introErr"&gt;Isi No. Absen, Nama Lengkap, dan Kelas terlebih dahulu.&lt;/div&gt;
    &lt;button class="btn btn-primary" id="btnCekStatus"&gt;Lanjutkan&lt;/button&gt;
  &lt;/div&gt;

  &lt;div id="screen-status" class="card hidden"&gt;
    &lt;h2 id="statusGreeting"&gt;&lt;/h2&gt;
    &lt;div id="statusBody"&gt;&lt;/div&gt;
    &lt;button class="btn btn-secondary" id="btnMulai"&gt;Mulai Mengerjakan&lt;/button&gt;
    &lt;button class="btn hidden" id="btnUnduhStatus" style="background:var(--green);color:#fff;"&gt;Unduh Bukti Mengerjakan (PDF)&lt;/button&gt;
    &lt;p class="hidden" id="instruksiStatus" style="font-size:12.5px;color:var(--ink-soft);margin-top:6px;"&gt;Cetak dokumen ini (maks. 3 lembar F4) dan &lt;b&gt;serahkan ke guru mata pelajaran&lt;/b&gt; sebagai bukti pengerjaan.&lt;/p&gt;
    &lt;button class="btn" id="btnGanti" style="background:transparent;border:1px solid var(--line);"&gt;Ganti No. Absen&lt;/button&gt;
  &lt;/div&gt;

  &lt;div id="screen-quiz" class="hidden"&gt;
    &lt;div id="progressWrap"&gt;
      &lt;div id="progressBar"&gt;&lt;div id="progressFill"&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;div id="progressText"&gt;0 dari 30 soal terjawab&lt;/div&gt;
    &lt;/div&gt;
    &lt;div id="quizBody"&gt;&lt;/div&gt;
    &lt;div class="err" id="quizErr"&gt;Masih ada soal yang belum dijawab. Lengkapi seluruh soal sebelum mengirim.&lt;/div&gt;
    &lt;button class="btn btn-primary" id="btnKirim"&gt;Kirim Jawaban&lt;/button&gt;
  &lt;/div&gt;

  &lt;div id="screen-result" class="card hidden"&gt;
    &lt;div id="resultBoxOuter"&gt;&lt;/div&gt;
    &lt;button class="btn btn-secondary hidden" id="btnUnduhHasil" style="background:var(--green);color:#fff;"&gt;Unduh Bukti Mengerjakan (PDF)&lt;/button&gt;
    &lt;p id="instruksiHasil" style="font-size:12.5px;color:var(--ink-soft);margin-top:6px;"&gt;Cetak dokumen ini (maks. 3 lembar F4) dan &lt;b&gt;serahkan ke guru mata pelajaran&lt;/b&gt; sebagai bukti pengerjaan.&lt;/p&gt;
    &lt;button class="btn" id="btnSelesai" style="background:transparent;border:1px solid var(--line);"&gt;Kembali ke Awal&lt;/button&gt;
  &lt;/div&gt;
  &lt;/section&gt;

  &lt;footer&gt;DOK/B.INDO/XI/CERAMAH-01 - Evaluasi Informasi dalam Teks Ceramah - 25 Butir Pilihan Ganda + 5 Esai&lt;/footer&gt;
&lt;/div&gt;

&lt;div id="printArea"&gt;&lt;/div&gt;

&lt;script&gt;
const GAS_URL = "https://script.google.com/macros/s/AKfycbzM7t2qgAENzxQJXzSYJYL28R6nb3TxJVELLL3CopyEXb51t_gRtrkPOxTpI5mq6VCEKw/exec";

// ===== 25 SOAL PILIHAN GANDA =====
// Grup 0: konsep dasar (tanpa teks stimulus) - 10 soal
// Grup 1-3: masing-masing punya 1 teks ceramah stimulus - 5 soal per grup
const GROUPS = [
{
  title: "Konsep Dasar Teks Ceramah",
  stimulus: null,
  questions: [
    {q:"Teks ceramah adalah teks yang berisi...", opts:["Cerita fiksi tentang tokoh rekaan","Pemaparan gagasan atau informasi di hadapan orang banyak mengenai suatu topik tertentu","Kumpulan resep masakan","Petunjuk langkah kerja suatu alat","Data statistik dalam bentuk tabel"], correct:1},
    {q:"Struktur teks ceramah terdiri atas tiga bagian utama, yaitu...", opts:["Orientasi, komplikasi, resolusi","Pembukaan, isi, penutup","Abstrak, orientasi, koda","Pernyataan umum, deretan penjelas, interpretasi","Tesis, argumentasi, penegasan ulang pendapat"], correct:1},
    {q:"Bagian ceramah yang berisi salam, sapaan, dan pengantar topik termasuk struktur bagian...", opts:["Isi","Penutup","Pembukaan","Argumen","Simpulan"], correct:2},
    {q:"Gagasan pokok adalah...", opts:["Kalimat pembuka paragraf tanpa makna khusus","Ide utama yang menjadi inti pembahasan dalam sebuah paragraf atau teks","Kalimat tanya dalam paragraf","Kutipan langsung dari sumber lain","Judul dari keseluruhan teks"], correct:1},
    {q:"Gagasan pendukung berfungsi untuk...", opts:["Menggantikan gagasan pokok","Memperjelas, memperkuat, atau memberi contoh terhadap gagasan pokok","Menghilangkan gagasan pokok","Menjadi judul paragraf","Menutup keseluruhan teks"], correct:1},
    {q:"Paragraf yang gagasan pokoknya terletak di awal paragraf disebut paragraf berpola...", opts:["Induktif","Deduktif","Campuran","Naratif","Deskriptif"], correct:1},
    {q:"Paragraf yang gagasan pokoknya terletak di akhir paragraf, setelah dijabarkan dengan kalimat-kalimat penjelas terlebih dahulu, disebut paragraf berpola...", opts:["Deduktif","Induktif","Deskriptif","Naratif","Argumentatif"], correct:1},
    {q:"Berikut ini yang termasuk kaidah kebahasaan khas teks ceramah adalah...", opts:["Penggunaan kalimat imperatif untuk langkah kerja","Penggunaan kata ganti orang pertama jamak (kita, kami) untuk membangun kedekatan dengan pendengar","Penggunaan konjungsi kronologis semata","Penggunaan rumus matematika","Penggunaan dialog antartokoh"], correct:1},
    {q:"Mengevaluasi informasi dalam teks ceramah berarti...", opts:["Menghafalkan seluruh isi ceramah kata demi kata","Menilai kelayakan, kebenaran, dan kualitas informasi yang disampaikan penceramah berdasarkan kriteria tertentu","Menuliskan ulang ceramah dengan bahasa sendiri tanpa penilaian","Menerima seluruh isi ceramah tanpa mempertanyakan kebenarannya","Mencari kesalahan ejaan dalam naskah ceramah"], correct:1},
    {q:"Berikut ini yang BUKAN merupakan kriteria evaluasi informasi dalam teks ceramah adalah...", opts:["Kredibilitas penceramah/sumber informasi","Keakuratan data dan fakta yang disampaikan","Kelogisan alasan atau argumen yang dikemukakan","Keindahan rima dan irama kalimat seperti dalam puisi","Kelengkapan informasi yang disampaikan"], correct:3}
  ]
},
{
  title: "Ceramah 1 - Pentingnya Menjaga Kebersihan Lingkungan Sekolah",
  stimulus: "Assalamualaikum warahmatullahi wabarakatuh. Bapak/Ibu guru dan teman-teman yang saya hormati, pagi ini saya ingin mengajak kita semua untuk merenungkan pentingnya menjaga kebersihan lingkungan sekolah.\n\nLingkungan sekolah yang bersih memberikan banyak manfaat bagi warga sekolah. Pertama, lingkungan yang bersih membuat suasana belajar menjadi lebih nyaman sehingga konsentrasi belajar meningkat. Kedua, kebersihan lingkungan dapat mencegah munculnya berbagai penyakit yang disebabkan oleh sampah dan genangan air, seperti demam berdarah dan diare. Ketiga, sekolah yang bersih mencerminkan kedisiplinan dan karakter warga sekolahnya, sehingga dapat meningkatkan citra sekolah di mata masyarakat.\n\nSayangnya, masih banyak siswa yang membuang sampah sembarangan. Menurut pengamatan pribadi saya, hampir separuh siswa di sekolah ini membuang sampah tidak pada tempatnya. Oleh karena itu, marilah kita membiasakan diri membuang sampah pada tempatnya, memilah sampah organik dan anorganik, serta aktif dalam kegiatan Jumat bersih.\n\nDemikian yang dapat saya sampaikan. Semoga kita semua dapat menjadi warga sekolah yang peduli terhadap kebersihan lingkungan. Wassalamualaikum warahmatullahi wabarakatuh.",
  questions: [
    {q:"Apa gagasan pokok pada paragraf kedua ceramah tersebut?", opts:["Ajakan membuang sampah pada tempatnya","Manfaat menjaga kebersihan lingkungan sekolah","Data siswa yang membuang sampah sembarangan","Ucapan salam pembuka","Harapan penutup ceramah"], correct:1},
    {q:"Berikut yang termasuk gagasan pendukung dari gagasan pokok \"manfaat kebersihan lingkungan\" adalah...", opts:["Membiasakan memilah sampah","Lingkungan bersih mencegah penyakit seperti demam berdarah","Ajakan mengikuti Jumat bersih","Salam penutup ceramah","Sapaan kepada guru dan teman-teman"], correct:1},
    {q:"Kalimat \"menurut pengamatan pribadi saya, hampir separuh siswa di sekolah ini membuang sampah tidak pada tempatnya\" merupakan informasi yang lemah dari segi kriteria evaluasi berupa...", opts:["Kelogisan argumen","Objektivitas penceramah","Keakuratan data, karena hanya berdasarkan perkiraan pribadi tanpa data resmi","Kesesuaian dengan tujuan ceramah","Kelengkapan struktur teks"], correct:2},
    {q:"Bagian ceramah yang berisi ajakan \"membiasakan diri membuang sampah pada tempatnya...\" termasuk struktur teks ceramah bagian...", opts:["Pembukaan","Isi (rangkaian argumen dan ajakan)","Penutup","Salam pembuka","Simpulan akhir"], correct:1},
    {q:"Jika penceramah ingin memperkuat keakuratan informasi pada bagian data siswa yang membuang sampah sembarangan, langkah yang paling tepat dilakukan adalah...", opts:["Mengganti kalimat ajakan menjadi kalimat perintah","Menyertakan data resmi, misalnya hasil survei atau catatan petugas kebersihan sekolah","Menghilangkan seluruh bagian data tersebut","Mengubah topik ceramah","Menambahkan lebih banyak ucapan salam"], correct:1}
  ]
},
{
  title: "Ceramah 2 - Membangun Sikap Disiplin di Dunia Kerja",
  stimulus: "Selamat pagi, Bapak/Ibu guru serta adik-adik kelas XI yang saya banggakan. Hari ini saya akan berbicara tentang pentingnya membangun sikap disiplin sejak di bangku SMK, sebagai bekal memasuki dunia kerja.\n\nDisiplin adalah kunci utama keberhasilan seseorang di tempat kerja. Seorang pekerja yang disiplin akan selalu datang tepat waktu, menyelesaikan tugas sesuai target, dan mematuhi prosedur keselamatan kerja yang berlaku. Sebaliknya, pekerja yang tidak disiplin berisiko menimbulkan kerugian, baik bagi dirinya sendiri maupun perusahaan tempatnya bekerja.\n\nMenurut sebuah artikel yang pernah saya baca di internet, seratus persen perusahaan besar di dunia hanya mau merekrut karyawan yang disiplin tanpa terkecuali. Oleh karena itu, mari kita mulai membiasakan disiplin dari hal-hal kecil, seperti datang ke sekolah tepat waktu, mengumpulkan tugas sesuai tenggat, dan menaati tata tertib praktik kerja lapangan.\n\nSemoga dengan kebiasaan disiplin ini, kita semua siap menghadapi dunia kerja yang penuh tantangan. Terima kasih.",
  questions: [
    {q:"Topik utama ceramah tersebut adalah...", opts:["Pentingnya kebersihan lingkungan","Pentingnya sikap disiplin dalam dunia kerja","Cara mencari pekerjaan","Sejarah dunia kerja","Tata tertib sekolah"], correct:1},
    {q:"Gagasan pendukung yang menjelaskan ciri pekerja disiplin pada ceramah tersebut adalah...", opts:["Pekerja disiplin selalu datang tepat waktu, menyelesaikan tugas sesuai target, dan mematuhi prosedur keselamatan kerja","Pekerja disiplin selalu mendapat gaji tinggi","Pekerja disiplin tidak perlu mengikuti pelatihan","Pekerja disiplin bebas dari pengawasan atasan","Pekerja disiplin selalu bekerja lembur"], correct:0},
    {q:"Pernyataan \"seratus persen perusahaan besar di dunia hanya mau merekrut karyawan yang disiplin tanpa terkecuali\" lemah dari segi kriteria evaluasi...", opts:["Kelengkapan struktur teks","Kredibilitas sumber dan keakuratan data, karena bersifat generalisasi mutlak tanpa sumber yang jelas","Kesesuaian dengan tujuan ceramah","Penggunaan kalimat persuasif","Struktur bagian penutup"], correct:1},
    {q:"Frasa \"sebuah artikel yang pernah saya baca di internet\" pada ceramah tersebut menunjukkan kelemahan dari sisi...", opts:["Kelogisan argumen","Sumber informasi yang tidak disebutkan secara jelas dan tidak dapat ditelusuri","Struktur kalimat yang tidak baku","Penggunaan konjungsi","Ketepatan ejaan"], correct:1},
    {q:"Simpulan paling tepat mengenai kualitas informasi dalam ceramah tersebut adalah...", opts:["Seluruh informasi dalam ceramah tersebut sudah akurat dan dapat dipercaya sepenuhnya","Gagasan tentang pentingnya disiplin cukup logis, tetapi klaim persentase mutlak tentang perusahaan perlu diverifikasi lebih lanjut karena sumbernya tidak jelas","Ceramah tersebut tidak memiliki gagasan pokok sama sekali","Ceramah tersebut tidak layak didengarkan karena seluruhnya tidak logis","Ceramah tersebut hanya berisi salam tanpa isi"], correct:1}
  ]
},
{
  title: "Ceramah 3 - Waspada Pinjaman Online Ilegal",
  stimulus: "Assalamualaikum warahmatullahi wabarakatuh. Adik-adik yang saya sayangi, sebentar lagi kalian akan lulus dan memasuki dunia kerja dengan penghasilan sendiri. Oleh sebab itu, penting bagi kita untuk waspada terhadap pinjaman online ilegal.\n\nPinjaman online ilegal biasanya menawarkan proses pencairan dana yang sangat cepat tanpa syarat yang jelas, bunga yang sangat tinggi, serta melakukan penagihan dengan cara mengancam dan mengintimidasi peminjam. Berdasarkan data Otoritas Jasa Keuangan tahun 2023, ribuan aplikasi pinjaman online ilegal telah diblokir karena merugikan masyarakat.\n\nCiri-ciri pinjaman online ilegal antara lain tidak terdaftar di Otoritas Jasa Keuangan, meminta akses ke seluruh data pribadi di ponsel, serta tidak memiliki alamat kantor yang jelas. Untuk itu, sebelum meminjam, pastikan aplikasi tersebut sudah terdaftar dan diawasi oleh Otoritas Jasa Keuangan.\n\nMari kita bijak dalam mengelola keuangan dan menghindari jebakan pinjaman online ilegal, demi masa depan finansial yang lebih baik. Wassalamualaikum warahmatullahi wabarakatuh.",
  questions: [
    {q:"Topik utama ceramah tersebut adalah...", opts:["Pentingnya menabung","Bahaya pinjaman online ilegal","Cara melamar pekerjaan","Pentingnya kebersihan","Pentingnya disiplin kerja"], correct:1},
    {q:"Salah satu ciri pinjaman online ilegal yang disebutkan dalam ceramah adalah...", opts:["Terdaftar resmi di Otoritas Jasa Keuangan","Proses pencairan dana sangat cepat tanpa syarat jelas","Memiliki kantor dengan alamat yang jelas","Bunga pinjaman yang rendah dan wajar","Melakukan penagihan sesuai prosedur hukum"], correct:1},
    {q:"Kalimat \"Berdasarkan data Otoritas Jasa Keuangan tahun 2023, ribuan aplikasi pinjaman online ilegal telah diblokir\" menunjukkan bahwa informasi dalam ceramah tersebut memiliki keunggulan dari segi kriteria evaluasi...", opts:["Kelogisan semata","Kredibilitas sumber dan keakuratan data, karena merujuk pada lembaga resmi","Kesesuaian struktur teks","Penggunaan konjungsi temporal","Ketepatan salam pembuka"], correct:1},
    {q:"Dibandingkan dengan ceramah tentang disiplin kerja pada Teks 2, ceramah tentang pinjaman online ilegal ini lebih unggul dalam hal...", opts:["Panjang teks","Jumlah salam pembuka","Kejelasan dan ketertelusuran sumber informasi yang digunakan","Jumlah paragraf penutup","Penggunaan bahasa daerah"], correct:2},
    {q:"Berdasarkan perbandingan ketiga teks ceramah (kebersihan lingkungan, disiplin kerja, dan pinjaman online ilegal), simpulan yang paling tepat mengenai kualitas informasi adalah...", opts:["Ketiga ceramah memiliki kualitas informasi yang sama baiknya","Ceramah yang mencantumkan sumber data resmi dan jelas cenderung memiliki informasi yang lebih dapat dipertanggungjawabkan dibandingkan yang hanya mengandalkan opini atau sumber tidak jelas","Ceramah yang paling panjang selalu memiliki informasi paling akurat","Ceramah tanpa data sama sekali lebih meyakinkan karena lebih ringkas","Kualitas informasi ceramah tidak dapat dievaluasi"], correct:1}
  ]
}
];

// ===== 5 SOAL ESAI (skor otomatis berbasis konsep kunci) =====
const ESSAYS = [
  { q: "Jelaskan pengertian gagasan pokok dan gagasan pendukung, lalu jelaskan hubungan keduanya dalam sebuah paragraf ceramah!",
    concepts: [["gagasan pokok","ide utama","ide pokok"], ["gagasan pendukung","ide penjelas","ide pendukung"], ["memperjelas","memperkuat","contoh"], ["paragraf"]] },
  { q: "Sebutkan struktur teks ceramah (3 bagian) dan jelaskan secara singkat isi masing-masing bagian!",
    concepts: [["pembukaan"], ["isi"], ["penutup"], ["salam","sapaan"]] },
  { q: "Sebutkan minimal 4 dari 6 kriteria yang digunakan untuk mengevaluasi informasi dalam teks ceramah!",
    concepts: [["kredibilitas"], ["keakuratan","akurat"], ["kelogisan","logis"], ["objektivitas","bias"], ["kelengkapan","lengkap"], ["kesesuaian","relevan","tujuan"]] },
  { q: "Perhatikan kembali ceramah tentang \"disiplin di dunia kerja\" pada soal pilihan ganda. Menurut pendapatmu, mengapa klaim \"seratus persen perusahaan besar di dunia hanya mau merekrut karyawan yang disiplin\" perlu dipertanyakan kebenarannya? Jelaskan alasanmu berdasarkan kriteria evaluasi informasi!",
    concepts: [["sumber","tidak jelas"], ["generalisasi","mutlak","100%","seratus persen"], ["data","tidak ada","tanpa bukti"], ["keakuratan","kredibilitas"]] },
  { q: "Tuliskan satu gagasan pokok dan minimal dua gagasan pendukung dari sebuah ceramah singkat bertema bebas (sesuai bidang keahlianmu), lalu jelaskan secara singkat apakah informasi dalam ceramah buatanmu tersebut sudah memenuhi kriteria keakuratan dan kelogisan!",
    concepts: [["gagasan pokok"], ["gagasan pendukung"], ["akurat","keakuratan"], ["logis","kelogisan"]] }
];
const ESSAY_MAXLEN = 500;
const PG_WEIGHT = 0.7;
const ESSAY_WEIGHT = 0.3;

function scoreEssayAnswer(answerText, concepts){
  const norm = (answerText || '').toLowerCase();
  let found = 0;
  concepts.forEach(altGroup =&gt; {
    const hit = altGroup.some(alt =&gt; norm.includes(alt.toLowerCase()));
    if(hit) found++;
  });
  return {found: found, total: concepts.length, pct: Math.round((found/concepts.length)*100)};
}

const LETTERS = ["A","B","C","D","E"];
let currentAbsen = null, currentNama = null, currentKelas = null, currentRecord = null;
let quizGroups = null;
let answers = {};
let essayAnswers = {};

function shuffle(arr){
  const a = arr.slice();
  for(let i=a.length-1;i&gt;0;i--){
    const j = Math.floor(Math.random()*(i+1));
    [a[i],a[j]] = [a[j],a[i]];
  }
  return a;
}

function buildShuffledQuiz(){
  const groupOrder = shuffle(GROUPS);
  return groupOrder.map(g =&gt; ({
    title: g.title,
    stimulus: g.stimulus,
    questions: shuffle(g.questions).map(q =&gt; {
      const optIdx = shuffle(q.opts.map((_,i)=&gt;i));
      return {
        q: q.q,
        opts: optIdx.map(i =&gt; q.opts[i]),
        correctLetter: LETTERS[optIdx.indexOf(q.correct)]
      };
    })
  }));
}

async function loadRecord(absen){
  try{
    const r = await window.storage.get('ceramah-siswa:'+absen, true);
    return r ? JSON.parse(r.value) : null;
  }catch(e){
    return null;
  }
}
async function saveRecord(absen, record){
  try{
    await window.storage.set('ceramah-siswa:'+absen, JSON.stringify(record), true);
  }catch(e){
    console.error('Gagal menyimpan data', e);
  }
}

function submitToGoogleScript(payload){
  try{
    const params = new URLSearchParams();
    Object.keys(payload).forEach(k =&gt; params.append(k, payload[k] == null ? '' : String(payload[k])));
    fetch(GAS_URL, {method:'POST', mode:'no-cors', body: params}).catch(e =&gt; console.error('Gagal mengirim ke sistem sekolah', e));
  }catch(e){
    console.error('Gagal mengirim ke sistem sekolah', e);
  }
}

document.getElementById('btnCekStatus').addEventListener('click', async () =&gt; {
  const absenEl = document.getElementById('absen');
  const namaEl = document.getElementById('nama');
  const kelasEl = document.getElementById('kelas');
  const absen = absenEl.value.trim();
  const nama = namaEl.value.trim();
  const kelas = kelasEl.value.trim();
  const err = document.getElementById('introErr');
  if(!absen || !nama || !kelas){
    err.style.display = 'block';
    return;
  }
  err.style.display = 'none';
  currentAbsen = absen;
  currentNama = nama;
  currentKelas = kelas;
  currentRecord = await loadRecord(absen);
  if(!currentRecord){
    currentRecord = {absen, nama, kelas, done:false, result:null};
  } else {
    currentRecord.nama = nama;
    currentRecord.kelas = kelas;
  }
  showStatusScreen();
});

document.getElementById('btnGanti').addEventListener('click', () =&gt; {
  document.getElementById('screen-status').classList.add('hidden');
  document.getElementById('screen-intro').classList.remove('hidden');
});

function showStatusScreen(){
  document.getElementById('screen-intro').classList.add('hidden');
  const statusScreen = document.getElementById('screen-status');
  statusScreen.classList.remove('hidden');
  document.getElementById('statusGreeting').textContent = 'Halo, ' + currentNama + ' (No. Absen ' + currentAbsen + ')';
  const body = document.getElementById('statusBody');
  const btnMulai = document.getElementById('btnMulai');
  const btnUnduhStatus = document.getElementById('btnUnduhStatus');
  const instruksiStatus = document.getElementById('instruksiStatus');

  if(currentRecord.done &amp;&amp; currentRecord.result){
    const r = currentRecord.result;
    body.innerHTML =
      '&lt;p style="font-size:14px;"&gt;Tugas individu ini sudah kamu kerjakan dan skornya sudah tersimpan/terkirim.&lt;/p&gt;' +
      '&lt;div class="result-box ' + (r.score &gt;= 75 ? 'pass-bg' : 'fail-bg') + '" style="margin-top:10px;"&gt;' +
        '&lt;div style="font-size:13px;color:var(--ink-soft);"&gt;Nilai akhir&lt;/div&gt;' +
        '&lt;div class="result-score ' + (r.score &gt;= 75 ? 'pass' : 'fail') + '"&gt;' + r.score + '&lt;/div&gt;' +
        '&lt;div style="font-size:12px;color:var(--ink-soft);"&gt;Skor PG ' + r.pgScore + ' (bobot 70%) - Skor Esai ' + r.essayScorePct + ' (bobot 30%)&lt;/div&gt;' +
      '&lt;/div&gt;';
    btnMulai.classList.add('hidden');
    btnUnduhStatus.classList.remove('hidden');
    instruksiStatus.classList.remove('hidden');
  } else {
    body.innerHTML = '&lt;p style="font-size:14px;"&gt;Tugas ini hanya bisa dikerjakan &lt;b&gt;satu kali&lt;/b&gt;. Pastikan kamu sudah membaca materi sebelum mulai.&lt;/p&gt;';
    btnMulai.classList.remove('hidden');
    btnUnduhStatus.classList.add('hidden');
    instruksiStatus.classList.add('hidden');
  }
}

document.getElementById('btnMulai').addEventListener('click', startQuiz);

function startQuiz(){
  answers = {};
  essayAnswers = {};
  quizGroups = buildShuffledQuiz();
  document.getElementById('screen-status').classList.add('hidden');
  document.getElementById('screen-result').classList.add('hidden');
  document.getElementById('screen-quiz').classList.remove('hidden');
  renderQuiz();
  window.scrollTo({top:0, behavior:'smooth'});
}

function esc(s){
  const d = document.createElement('div');
  d.textContent = s;
  return d.innerHTML;
}

function renderQuiz(){
  const body = document.getElementById('quizBody');
  let html = '';
  let counter = 0;
  quizGroups.forEach((g, gi) =&gt; {
    html += '&lt;div class="qgroup"&gt;';
    if(g.stimulus){
      html += '&lt;div class="stimulus"&gt;&lt;div class="st-title"&gt;' + esc(g.title) + '&lt;/div&gt;' + esc(g.stimulus) + '&lt;/div&gt;';
    } else {
      html += '&lt;div class="stimulus" style="border-left-color:var(--ink);"&gt;&lt;div class="st-title"&gt;' + esc(g.title) + '&lt;/div&gt;Soal-soal berikut menguji pemahaman konsep dari materi, tanpa teks bacaan tambahan.&lt;/div&gt;';
    }
    g.questions.forEach((q, qi) =&gt; {
      counter++;
      const qKey = gi + '-' + qi;
      html += '&lt;div class="q" data-qkey="' + qKey + '"&gt;';
      html += '&lt;div class="q-num"&gt;Soal ' + counter + '&lt;/div&gt;';
      html += '&lt;div class="q-text"&gt;' + esc(q.q) + '&lt;/div&gt;';
      q.opts.forEach((opt, oi) =&gt; {
        const letter = LETTERS[oi];
        html += '&lt;label class="opt" data-qkey="' + qKey + '" data-letter="' + letter + '"&gt;' +
          '&lt;input type="radio" name="q-' + qKey + '" value="' + letter + '"&gt;' +
          '&lt;span&gt;&lt;b&gt;' + letter + '.&lt;/b&gt; ' + esc(opt) + '&lt;/span&gt;&lt;/label&gt;';
      });
      html += '&lt;/div&gt;';
    });
    html += '&lt;/div&gt;';
  });

  html += '&lt;div class="sectionLabel"&gt;Bagian II - Esai (5 soal, dinilai otomatis berdasarkan kesesuaian konsep kunci jawabanmu - bobot Esai 30% dari nilai akhir - maksimal ' + ESSAY_MAXLEN + ' karakter per soal - jawaban wajib diketik sendiri, tempel/paste dinonaktifkan)&lt;/div&gt;';
  html += '&lt;div class="essaySection"&gt;';
  ESSAYS.forEach((item, ei) =&gt; {
    html += '&lt;div class="essayQ" data-ekey="' + ei + '"&gt;';
    html += '&lt;div class="essayQ-num"&gt;Esai ' + (ei+1) + '&lt;/div&gt;';
    html += '&lt;div class="essayQ-text"&gt;' + esc(item.q) + '&lt;/div&gt;';
    html += '&lt;textarea class="essayInput" data-ekey="' + ei + '" maxlength="' + ESSAY_MAXLEN + '" placeholder="Ketik jawabanmu di sini (tempel/paste tidak diperbolehkan)..."&gt;&lt;/textarea&gt;';
    html += '&lt;div class="charCount" data-ekey="' + ei + '"&gt;0 / ' + ESSAY_MAXLEN + '&lt;/div&gt;';
    html += '&lt;div class="pasteWarn" data-ekey="' + ei + '"&gt;Menempel (paste) tidak diperbolehkan. Silakan ketik sendiri jawabanmu.&lt;/div&gt;';
    html += '&lt;/div&gt;';
  });
  html += '&lt;/div&gt;';

  body.innerHTML = html;

  body.querySelectorAll('.opt').forEach(optEl =&gt; {
    optEl.addEventListener('click', () =&gt; {
      const qKey = optEl.getAttribute('data-qkey');
      const letter = optEl.getAttribute('data-letter');
      answers[qKey] = letter;
      document.querySelectorAll('.opt[data-qkey="' + qKey + '"]').forEach(o =&gt; o.classList.remove('selected'));
      optEl.classList.add('selected');
      optEl.querySelector('input').checked = true;
      updateProgress();
    });
  });

  body.querySelectorAll('textarea.essayInput').forEach(ta =&gt; {
    ta.addEventListener('input', () =&gt; {
      const ekey = ta.getAttribute('data-ekey');
      essayAnswers[ekey] = ta.value;
      const counterEl = body.querySelector('.charCount[data-ekey="' + ekey + '"]');
      const len = ta.value.length;
      counterEl.textContent = len + ' / ' + ESSAY_MAXLEN;
      counterEl.classList.toggle('over', len &gt;= ESSAY_MAXLEN);
      updateProgress();
    });

    const showPasteWarn = () =&gt; {
      const ekey = ta.getAttribute('data-ekey');
      const warnEl = body.querySelector('.pasteWarn[data-ekey="' + ekey + '"]');
      if(!warnEl) return;
      warnEl.classList.add('show');
      clearTimeout(warnEl._hideTimer);
      warnEl._hideTimer = setTimeout(() =&gt; warnEl.classList.remove('show'), 3500);
    };
    ta.addEventListener('paste', (e) =&gt; { e.preventDefault(); showPasteWarn(); });
    ta.addEventListener('drop', (e) =&gt; { e.preventDefault(); showPasteWarn(); });
    ta.addEventListener('dragover', (e) =&gt; { e.preventDefault(); });
    ta.addEventListener('contextmenu', (e) =&gt; { e.preventDefault(); showPasteWarn(); });
    ta.addEventListener('keydown', (e) =&gt; {
      const key = (e.key || '').toLowerCase();
      const pasteCombo = (e.ctrlKey || e.metaKey) &amp;&amp; key === 'v';
      const shiftInsert = e.shiftKey &amp;&amp; key === 'insert';
      if(pasteCombo || shiftInsert){
        e.preventDefault();
        showPasteWarn();
      }
    });
  });

  updateProgress();
}

function totalPGQuestions(){
  return quizGroups.reduce((sum,g) =&gt; sum + g.questions.length, 0);
}
function totalQuestions(){
  return totalPGQuestions() + ESSAYS.length;
}
function essayAnsweredCount(){
  return ESSAYS.reduce((n,_,ei) =&gt; n + (essayAnswers[ei] &amp;&amp; essayAnswers[ei].trim() ? 1 : 0), 0);
}
function updateProgress(){
  const total = totalQuestions();
  const answered = Object.keys(answers).length + essayAnsweredCount();
  document.getElementById('progressFill').style.width = (answered/total*100) + '%';
  document.getElementById('progressText').textContent = answered + ' dari ' + total + ' soal terjawab (25 PG + 5 esai)';
}

document.getElementById('btnKirim').addEventListener('click', async () =&gt; {
  const total = totalQuestions();
  const answered = Object.keys(answers).length + essayAnsweredCount();
  const errEl = document.getElementById('quizErr');
  if(answered &lt; total){
    errEl.style.display = 'block';
    let target = null;
    const qEls = document.querySelectorAll('.q');
    for(let i=0;i&lt;qEls.length;i++){
      const qk = qEls[i].getAttribute('data-qkey');
      if(!answers[qk]){ target = qEls[i]; break; }
    }
    if(!target){
      const eEls = document.querySelectorAll('.essayQ');
      for(let i=0;i&lt;eEls.length;i++){
        const ek = eEls[i].getAttribute('data-ekey');
        if(!essayAnswers[ek] || !essayAnswers[ek].trim()){ target = eEls[i]; break; }
      }
    }
    if(target) target.scrollIntoView({behavior:'smooth', block:'center'});
    return;
  }
  errEl.style.display = 'none';

  let correctCount = 0;
  quizGroups.forEach((g, gi) =&gt; {
    g.questions.forEach((q, qi) =&gt; {
      const qKey = gi + '-' + qi;
      if(answers[qKey] === q.correctLetter) correctCount++;
    });
  });
  const pgScore = Math.round(correctCount * (100 / totalPGQuestions()));

  const essaySnapshot = ESSAYS.map((item, ei) =&gt; {
    const ans = (essayAnswers[ei] || '').trim();
    const result = scoreEssayAnswer(ans, item.concepts);
    return {q: item.q, a: ans, found: result.found, total: result.total, pct: result.pct};
  });
  const essayScorePct = Math.round(essaySnapshot.reduce((s,e) =&gt; s + e.pct, 0) / essaySnapshot.length);
  const score = Math.round(pgScore * PG_WEIGHT + essayScorePct * ESSAY_WEIGHT);

  const timestamp = new Date().toISOString();
  currentRecord.done = true;
  currentRecord.result = {score: score, pgScore: pgScore, essayScorePct: essayScorePct, correctCount: correctCount, essay: essaySnapshot, timestamp: timestamp};

  await saveRecord(currentAbsen, currentRecord);

  const gasPayload = {
    waktu: timestamp,
    nama: currentRecord.nama,
    kelas: currentRecord.kelas,
    absen: currentRecord.absen,
    materi: "Evaluasi Informasi dalam Teks Ceramah",
    skorPG: pgScore,
    skorEsai: essayScorePct,
    nilaiAkhir: score,
    benarPG: correctCount,
    totalPG: totalPGQuestions()
  };
  essaySnapshot.forEach((e, i) =&gt; { gasPayload['esai' + (i+1)] = e.a; });
  submitToGoogleScript(gasPayload);

  showResult(score, pgScore, essayScorePct);
});

function showResult(score, pgScore, essayScorePct){
  document.getElementById('screen-quiz').classList.add('hidden');
  const resultScreen = document.getElementById('screen-result');
  resultScreen.classList.remove('hidden');
  const passedNow = score &gt;= 75;
  const outer = document.getElementById('resultBoxOuter');

  outer.innerHTML =
    '&lt;div class="result-box ' + (passedNow ? 'pass-bg' : 'fail-bg') + '"&gt;' +
      '&lt;div style="font-size:13px;color:var(--ink-soft);"&gt;Nilai akhir tugas individu&lt;/div&gt;' +
      '&lt;div class="result-score ' + (passedNow ? 'pass' : 'fail') + '"&gt;' + score + ' / 100&lt;/div&gt;' +
      '&lt;div style="font-size:12px;color:var(--ink-soft);margin-bottom:6px;"&gt;Skor PG ' + pgScore + ' (bobot 70%) + Skor Esai ' + essayScorePct + ' (bobot 30%)&lt;/div&gt;' +
      '&lt;div style="font-size:14px;"&gt;Jawaban dan skor sudah dikirim ke sistem sekolah. Jangan lupa unduh, cetak, dan serahkan bukti ke guru.&lt;/div&gt;' +
    '&lt;/div&gt;';

  document.getElementById('btnUnduhHasil').classList.remove('hidden');
  window.scrollTo({top:0, behavior:'smooth'});
}

document.getElementById('btnSelesai').addEventListener('click', () =&gt; {
  document.getElementById('screen-result').classList.add('hidden');
  document.getElementById('screen-intro').classList.remove('hidden');
  document.getElementById('absen').value = '';
  document.getElementById('nama').value = '';
  document.getElementById('kelas').value = '';
});

function generatePrintArea(){
  const r = currentRecord.result;
  if(!r) return;
  const tgl = new Date(r.timestamp || Date.now()).toLocaleDateString('id-ID', {day:'numeric', month:'long', year:'numeric'});
  const statusTxt = r.score &gt;= 75 ? 'Mencapai KKM (75)' : 'Di bawah KKM (75)';

  let html = '';
  html += '&lt;div class="pf-kop noBreak"&gt;';
  html += '&lt;h2&gt;Bukti Mengerjakan Tugas Individu - Evaluasi Informasi dalam Teks Ceramah&lt;/h2&gt;';
  html += '&lt;p&gt;Mata Pelajaran Bahasa Indonesia - Kelas XI SMK - 25 Soal Pilihan Ganda + 5 Soal Esai&lt;/p&gt;';
  html += '&lt;/div&gt;';

  html += '&lt;table class="pf-identitas noBreak"&gt;';
  html += '&lt;tr&gt;&lt;td class="lbl"&gt;Nama Lengkap&lt;/td&gt;&lt;td&gt;: ' + esc(currentRecord.nama || '') + '&lt;/td&gt;' +
          '&lt;td class="lbl"&gt;No. Absen&lt;/td&gt;&lt;td&gt;: ' + esc(currentRecord.absen || '') + '&lt;/td&gt;&lt;/tr&gt;';
  html += '&lt;tr&gt;&lt;td class="lbl"&gt;Kelas&lt;/td&gt;&lt;td&gt;: ' + esc(currentRecord.kelas || '') + '&lt;/td&gt;' +
          '&lt;td class="lbl"&gt;Tanggal&lt;/td&gt;&lt;td&gt;: ' + tgl + '&lt;/td&gt;&lt;/tr&gt;';
  html += '&lt;/table&gt;';

  html += '&lt;div class="pf-skorbox noBreak"&gt;';
  html += '&lt;div class="pf-skoritem"&gt;Skor Pilihan Ganda (70%)&lt;b&gt;' + r.pgScore + ' / 100&lt;/b&gt;&lt;/div&gt;';
  html += '&lt;div class="pf-skoritem"&gt;Skor Esai Otomatis (30%)&lt;b&gt;' + r.essayScorePct + ' / 100&lt;/b&gt;&lt;/div&gt;';
  html += '&lt;div class="pf-skoritem"&gt;Nilai Akhir&lt;b&gt;' + r.score + ' / 100&lt;/b&gt;&lt;/div&gt;';
  html += '&lt;div class="pf-skoritem"&gt;Status&lt;b style="font-size:13px;"&gt;' + statusTxt + '&lt;/b&gt;&lt;/div&gt;';
  html += '&lt;/div&gt;';

  html += '&lt;div class="pf-kop noBreak" style="border-top:1px solid #000;border-bottom:none;padding-top:8px;margin-top:6px;"&gt;&lt;h2 style="font-size:14px;"&gt;Jawaban Esai (skor otomatis berdasarkan cakupan konsep kunci)&lt;/h2&gt;&lt;/div&gt;';

  r.essay.forEach((item, i) =&gt; {
    const breakClass = (i === 2) ? ' pbreak' : '';
    html += '&lt;div class="noBreak' + breakClass + '" style="margin-bottom:10px;"&gt;';
    html += '&lt;div class="pf-essay-q"&gt;' + (i+1) + '. ' + esc(item.q) + ' &lt;span style="font-weight:400;color:#555;"&gt;(cakupan konsep: ' + item.found + '/' + item.total + ' - skor ' + item.pct + ')&lt;/span&gt;&lt;/div&gt;';
    html += '&lt;div class="pf-essay-a"&gt;' + esc(item.a || '(tidak dijawab)') + '&lt;/div&gt;';
    html += '&lt;/div&gt;';
  });

  html += '&lt;div class="pf-ttd noBreak"&gt;';
  html += '&lt;div&gt;Peserta Didik&lt;div class="garis"&gt;' + esc(currentRecord.nama || '') + '&lt;/div&gt;&lt;/div&gt;';
  html += '&lt;div&gt;Guru Mata Pelajaran&lt;div class="garis"&gt;.............................&lt;/div&gt;&lt;/div&gt;';
  html += '&lt;/div&gt;';
  html += '&lt;p class="pf-note"&gt;&lt;b&gt;Dokumen ini wajib dicetak dan diserahkan kepada guru mata pelajaran Bahasa Indonesia&lt;/b&gt; sebagai bukti fisik pengerjaan tugas. Nilai akhir = (Skor Pilihan Ganda x 70%) + (Skor Esai Otomatis x 30%). Skor esai dihitung berdasarkan cakupan konsep kunci pada jawaban, sehingga guru tetap disarankan meninjau ulang jawaban esai untuk memastikan kualitas dan kejujuran akademik. Jawaban dan skor juga telah dikirim otomatis ke sistem sekolah.&lt;/p&gt;';

  document.getElementById('printArea').innerHTML = html;
}

function downloadProof(){
  if(!currentRecord.result){
    alert('Bukti PDF hanya tersedia setelah tugas dikerjakan dan dikirim.');
    return;
  }
  generatePrintArea();
  setTimeout(() =&gt; window.print(), 100);
}

document.getElementById('btnUnduhStatus').addEventListener('click', downloadProof);
document.getElementById('btnUnduhHasil').addEventListener('click', downloadProof);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/evaluasi-informasi-dalam-teks-ceramah.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-8160615648339880190</guid><pubDate>Tue, 08 Sep 2026 00:52:38 +0000</pubDate><atom:updated>2026-09-21T08:13:54.497+07:00</atom:updated><title>Fitur Lanjut Pengolah Kata untuk Dokumen Profesional</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Fitur Lanjut Pengolah Kata untuk Dokumen Profesional - Informatika Kelas X&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&amp;family=IBM+Plex+Sans:wght@400;500;600;700&amp;family=Tinos:ital,wght@0,400;0,700;1,400&amp;display=swap" rel="stylesheet"&gt;
&lt;style&gt;
  :root{
    --word: #1660D6;
    --word-dark: #0E3E8F;
    --ribbon: #EFF3FA;
    --paper: #FFFFFF;
    --ink: #16202E;
    --ink-soft: #4C5A6B;
    --line: #D7DEE7;
    --amber: #D99A1B;
    --green: #17845A;
    --red: #D6412C;
    --radius: 6px;
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{ font-family:'IBM Plex Sans', sans-serif; background:#FFFFFF; color: var(--ink); line-height:1.6; }
  .mono{font-family:'IBM Plex Mono', monospace;}
  .serif{font-family:'Tinos', 'Times New Roman', serif;}

  .page-shell{
    max-width: 1140px; margin: 16px auto; background:#FFFFFF; border-radius:14px;
    box-shadow: 0 8px 32px rgba(20,30,50,0.12), 0 1px 3px rgba(20,30,50,0.08); border: 1px solid var(--line);
  }

  /* ===== Ribbon hero ===== */
  .ribbon-hero{ background: var(--ribbon); border-bottom: 3px solid var(--word); border-radius:14px 14px 0 0; overflow:hidden; }
  .ribbon-strip{ display:flex; gap:6px; padding: 10px 5% 0; }
  .ribbon-tab{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; padding:6px 12px; background:#FFFFFF; border:1px solid var(--line); border-bottom:none; border-radius:4px 4px 0 0; color: var(--ink-soft); }
  .ribbon-tab.active{ color: var(--word); font-weight:700; border-color: var(--word); }
  .hero-body{ padding: 28px 5% 40px; background:#FFFFFF; }
  .eyebrow{ font-family:'IBM Plex Mono', monospace; font-size:0.76rem; letter-spacing:0.14em; text-transform:uppercase; color: var(--word); display:flex; align-items:center; gap:10px; margin-bottom:18px; }
  .eyebrow::before{ content:""; width:10px; height:10px; border:1.5px solid var(--word); border-radius:2px; display:inline-block; }
  h1.title{ font-family:'IBM Plex Mono', monospace; font-weight:700; font-size: clamp(1.7rem, 4vw, 2.7rem); line-height:1.18; color: var(--word-dark); max-width:24ch; }
  .hero-sub{ margin-top:16px; max-width: 66ch; font-size:1.02rem; color: var(--ink-soft); }
  .meta-strip{ margin-top:30px; display:grid; grid-template-columns: repeat(auto-fit,minmax(160px,1fr)); gap:1px; background: var(--line); border:1px solid var(--line); }
  .meta-cell{ background: var(--ribbon); padding:12px 14px; }
  .meta-cell .k{ font-family:'IBM Plex Mono', monospace; font-size:0.64rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--word); }
  .meta-cell .v{ margin-top:5px; font-size:0.9rem; font-weight:600; color: var(--ink); }

  /* ===== Content ===== */
  main{ background: var(--paper); }
  .section{ padding: 36px 5%; border-bottom:1px solid #ECEFF3; }
  .section:last-of-type{border-bottom:none;}
  .section-tag{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.14em; text-transform:uppercase; color: var(--ink-soft); display:flex; align-items:center; gap:10px; margin-bottom:10px; }
  .section-tag .num{ color:#fff; background: var(--word); padding:3px 8px; border-radius:3px; font-weight:600; }
  h2.section-title{ font-family:'IBM Plex Mono', monospace; font-size: clamp(1.25rem, 2.2vw, 1.7rem); font-weight:700; color: var(--word-dark); margin-bottom: 18px; }
  h3.sub-title{ font-family:'IBM Plex Mono', monospace; font-size:1.02rem; font-weight:600; color: var(--word-dark); margin: 22px 0 10px; display:flex; align-items:center; gap:10px; }
  h3.sub-title::before{ content:""; width:8px;height:8px; background: var(--amber); display:inline-block; border-radius:1px; }
  p{ color:#33414F; max-width: 74ch; margin-bottom: 12px;}
  strong{color:var(--word-dark);}
  ul, ol{ margin: 6px 0 16px 1.3em; max-width: 74ch;}
  li{margin-bottom:7px; color:#33414F;}

  .callout{ border-left: 3px solid var(--word); background:#EBF2FB; padding: 14px 18px; border-radius: 0 6px 6px 0; margin: 16px 0; max-width: 74ch; }
  .callout .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--word-dark); font-weight:700; margin-bottom:6px; }
  .callout.warn{ border-left-color: var(--red); background:#FBEAE7; }
  .callout.warn .lbl{ color:#9B3324; }

  .card-grid{ display:grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; margin: 16px 0 6px; }
  .card{ background: #FFFFFF; border: 1.5px solid var(--line); border-radius: var(--radius); padding: 16px 18px; box-shadow: 0 2px 8px rgba(20,30,50,0.05); }
  .card .tag{ font-family:'IBM Plex Mono', monospace; font-size:0.64rem; letter-spacing:0.1em; text-transform:uppercase; color:#fff; background: var(--word); padding:3px 8px; border-radius:3px; display:inline-block; margin-bottom:10px; }
  .card h4{ font-family:'IBM Plex Mono', monospace; font-size:0.94rem; margin-bottom:6px; color:var(--word-dark); }
  .card p{font-size:0.87rem; margin-bottom:0;}

  .table-scroll{ overflow-x:auto; margin:16px 0; }
  table.compare{ width:100%; border-collapse:collapse; font-size:0.88rem; min-width:460px; }
  table.compare th, table.compare td{ border:1px solid var(--line); padding:10px 12px; text-align:left; }
  table.compare th{ background: var(--word); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.compare tr:nth-child(even) td{ background: var(--ribbon); }

  .summary-box{ background: var(--word-dark); color: #fff; border-radius: 8px; padding: 22px 24px; margin-top: 8px; }
  .summary-box h4{ font-family:'IBM Plex Mono', monospace; color:#FCE29A; font-size:0.82rem; letter-spacing:0.08em; text-transform:uppercase; margin-bottom:12px; }
  .summary-box ul{ margin:0 0 0 1.1em; max-width:none; }
  .summary-box li{ color:#E6ECF7; margin-bottom:7px; }

  /* ===== Praktik: toolbar &amp; editor ===== */
  #praktik, #evaluasi{ background: linear-gradient(180deg, #EEF4FF 0%, #FFFFFF 60%); border-top:3px solid var(--word); }
  #praktik .section-tag .num, #evaluasi .section-tag .num{ background: linear-gradient(135deg, var(--word), var(--word-dark)); }

  .toolbar{
    position: sticky; top:10px; z-index:20; background:#FFFFFF; border:1.5px solid var(--word);
    border-radius:8px; padding:10px 12px; display:flex; flex-wrap:wrap; gap:6px; align-items:center;
    box-shadow: 0 6px 20px rgba(20,90,189,0.18); margin-bottom:20px;
  }
  .toolbar button{
    font-family:'IBM Plex Sans', sans-serif; font-size:0.85rem; background:#F3F5F8; border:1px solid var(--line);
    border-radius:4px; padding:6px 10px; cursor:pointer; color: var(--ink);
  }
  .toolbar button:hover{ background:#E4EAF2; }
  .toolbar button.b{font-weight:700;} .toolbar button.i{font-style:italic;} .toolbar button.u{text-decoration:underline;}
  .toolbar select{ font-family:'IBM Plex Sans', sans-serif; font-size:0.82rem; padding:6px 8px; border-radius:4px; border:1px solid var(--line); background:#F3F5F8; }
  .toolbar .swatch{ width:22px; height:22px; border-radius:4px; border:1.5px solid var(--line); cursor:pointer; padding:0; }
  .toolbar .sep{ width:1px; height:22px; background:var(--line); margin:0 4px; }
  .toolbar .hint{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; color: var(--ink-soft); margin-left:auto; }

  .latihan-card{ background:#FFFFFF; border:1px solid var(--line); border-left:4px solid var(--word); border-radius:8px; margin-bottom:22px; overflow:hidden; box-shadow: 0 2px 10px rgba(20,30,50,0.05); }
  .latihan-head{ background: linear-gradient(90deg, #EEF4FF, var(--ribbon)); padding:14px 18px; border-bottom:1px solid var(--line); }
  .latihan-head .lnum{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; color: var(--word); letter-spacing:0.08em; }
  .latihan-head h4{ font-family:'IBM Plex Mono', monospace; font-size:1rem; color: var(--word-dark); margin-top:4px; }
  .latihan-body{ padding:16px 18px; }
  .latihan-instruksi{ font-size:0.88rem; color: var(--ink-soft); margin-bottom:12px; }
  .reference-box{
    background:#FBF9F2; border:1px dashed var(--amber); border-radius:6px; padding:12px 14px; margin-bottom:14px;
    font-family:'Tinos','Times New Roman', serif; font-size:0.95rem; color:#3A3226; white-space:pre-wrap;
    user-select:none; -webkit-user-select:none;
  }
  .reference-box .rlbl{ font-family:'IBM Plex Mono', monospace; font-size:0.64rem; letter-spacing:0.08em; text-transform:uppercase; color:#8A6A1E; margin-bottom:8px; display:block; }
  .editor-box{
    min-height:110px; background:#FFFFFF; border:1px solid var(--line); border-radius:6px; padding:14px 16px;
    font-family:'Tinos','Times New Roman', serif; font-size:1rem; color: var(--ink);
    box-shadow: inset 0 0 0 1px transparent; outline:none;
  }
  .editor-box:focus{ border-color: var(--word); box-shadow: 0 0 0 3px rgba(24,90,189,0.12); }
  .editor-box:empty::before{ content: attr(data-placeholder); color:#A6ADB8; }
  .editor-meta{ display:flex; justify-content:space-between; align-items:center; margin-top:8px; font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--ink-soft); }
  .editor-meta .flag{ color: var(--red); font-weight:700; display:none; }
  .editor-meta .flag.show{ display:inline; }

  /* ===== Submit panel ===== */
  .submit-panel{ background: var(--ribbon); border:1px solid var(--line); border-radius:10px; padding:26px 24px; margin-top:8px; }
  .student-info{ display:grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap:14px; margin: 14px 0 22px; }
  .field label{ display:block; font-family:'IBM Plex Mono', monospace; font-size:0.68rem; letter-spacing:0.06em; text-transform:uppercase; color: var(--word-dark); margin-bottom:6px; }
  .field input, .field select{ width:100%; padding:9px 11px; border-radius:5px; border:1px solid var(--line); background:#FFFFFF; color: var(--ink); font-family:'IBM Plex Sans', sans-serif; font-size:0.9rem; }
  .field select{cursor:pointer;}
  .field input:focus, .field select:focus{ outline:2px solid var(--word); }
  #btnHitung, #btnKirim{ font-family:'IBM Plex Mono', monospace; font-weight:600; font-size:0.85rem; padding:12px 22px; border-radius:6px; border:none; cursor:pointer; }
  #btnHitung{ background: var(--word); color:#fff; }
  #btnKirim{ background: var(--green); color:#fff; display:none; }
  #btnKirim:disabled{ opacity:0.6; cursor:not-allowed; }
  #submitMsg{ font-family:'IBM Plex Mono', monospace; font-size:0.83rem; color:#8A6A1E; margin-left:12px; }
  .result-panel{ display:none; margin-top:18px; background:#FFFFFF; border:1.5px solid var(--green); border-radius:8px; padding:20px 22px; }
  .result-panel .score{ font-family:'IBM Plex Mono', monospace; font-size:2.2rem; font-weight:700; color: var(--green); }
  .result-panel .score-lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--ink-soft); }
  .result-panel p{ color:#33414F; font-size:0.88rem; margin-top:8px; }

  footer{ background: var(--ribbon); color: var(--ink-soft); text-align:center; padding: 22px 5% 30px; font-family:'IBM Plex Mono', monospace; font-size:0.72rem; border-top:1px solid var(--line); border-radius:0 0 14px 14px; overflow:hidden; }

  /* ===== Evaluasi: Dokumen Master (game gabungan) ===== */
  .primary-btn{
    font-family:'IBM Plex Mono', monospace; font-weight:700; font-size:0.9rem; padding:13px 26px; border-radius:8px; border:none; cursor:pointer;
    background: linear-gradient(135deg, var(--word), var(--word-dark)); color:#fff; box-shadow: 0 4px 14px rgba(16,63,134,0.3);
    transition: transform .15s, box-shadow .15s;
  }
  .primary-btn:hover{ transform: translateY(-2px); box-shadow: 0 6px 18px rgba(16,63,134,0.4); }
  .primary-btn.ghost{ background:#fff; color:var(--word-dark); border:1.5px solid var(--word); box-shadow:none; }
  .primary-btn.ghost:hover{ background:#EEF4FF; }

  .attempt-strip{ display:flex; gap:10px; flex-wrap:wrap; margin:16px 0; }
  .attempt-pill{
    font-family:'IBM Plex Mono', monospace; font-size:0.76rem; font-weight:600; padding:9px 16px; border-radius:20px;
    border:1.5px solid var(--line); background:#fff; color: var(--ink-soft); box-shadow: 0 1px 4px rgba(20,30,50,0.06);
  }
  .attempt-pill.done{ border-color: var(--word); color: var(--word-dark); }
  .attempt-pill.pass{ border-color: var(--green); background:#DFF6E7; color:#0F5C30; }
  .attempt-pill.fail{ border-color: var(--red); background:#FBDEDA; color:#8A2A1C; }
  .attempt-pill.current{ box-shadow: 0 0 0 3px rgba(24,90,189,0.2); background:#EEF4FF; }

  .game-panel{ background:#FFFFFF; border:1px solid var(--line); border-radius:10px; padding:22px; box-shadow: 0 2px 10px rgba(20,30,50,0.05); }
  .game-subtitle{ font-family:'IBM Plex Mono', monospace; font-size:0.85rem; color: var(--word-dark); font-weight:700; margin-bottom:14px; }
  .game-progress{ font-family:'IBM Plex Mono', monospace; font-size:0.74rem; color: var(--ink-soft); margin-bottom:16px; }
  .game-instruction{ background:#EBF2FB; border:1px solid #C7DAF2; border-radius:8px; padding:10px 14px; font-size:0.85rem; color: var(--word-dark); margin-bottom:16px; }

  .drop-grid{ display:grid; grid-template-columns: repeat(auto-fit, minmax(260px,1fr)); gap:12px; margin-bottom:18px; }
  .droppable{ background:#FBFBFB; border:2px dashed var(--line); border-radius:8px; padding:12px 14px; transition: all .2s; cursor:pointer; }
  .droppable:hover:not(.filled):not(.wrong){ border-color: var(--word); background:#F5F9FF; }
  .droppable.filled{ border-style:solid; border-color: var(--green); background:#F0FBF4; cursor:default; }
  .droppable.wrong{ border-style:solid; border-color: var(--red); background:#FDF1EF; animation: shakeX .4s; cursor:default; }
  @keyframes shakeX{ 0%,100%{transform:translateX(0);} 25%{transform:translateX(-4px);} 75%{transform:translateX(4px);} }
  .droppable .func-text{ font-size:0.86rem; color:#33414F; margin-bottom:10px; }
  .drop-target{ min-height:44px; background:#F3F5F8; border:1.5px dashed var(--line); border-radius:6px; display:flex; align-items:center; justify-content:center; padding:6px 10px; text-align:center; }
  .drop-target .placeholder-text{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color:#A6ADB8; }
  .drop-target .correct-reveal{ font-family:'IBM Plex Mono', monospace; font-size:0.76rem; color:#9B3324; }

  .drag-pool{ background: var(--ribbon); border:1.5px solid var(--line); border-radius:10px; padding:16px; display:flex; flex-wrap:wrap; gap:10px; justify-content:center; }
  .draggable-chip{
    font-family:'IBM Plex Mono', monospace; font-size:0.85rem; background: var(--word); color:#fff;
    padding:10px 16px; border-radius:8px; cursor:pointer; box-shadow:0 2px 6px rgba(24,90,189,0.3);
    border:2px solid transparent; transition: transform .12s, box-shadow .12s; user-select:none; -webkit-tap-highlight-color: transparent;
  }
  .draggable-chip:active{ transform: scale(0.96); }
  .draggable-chip.selected{ background: var(--amber); border-color:#8A6A1E; box-shadow:0 0 0 4px rgba(192,154,62,0.28); transform: scale(1.05); }
  .draggable-chip.used{ display:none; }

  .type-box{ max-width:520px; margin:0 auto; text-align:center; }
  .type-question-text{ font-size:1.02rem; color: var(--ink); min-height:56px; display:flex; align-items:center; justify-content:center; margin-bottom:18px; }
  .type-input{ width:100%; text-align:center; font-size:1.1rem; padding:12px 14px; border:2px solid var(--line); border-radius:8px; font-family:'IBM Plex Mono', monospace; }
  .type-input:focus{ outline:none; border-color: var(--word); }
  .type-input.correct{ border-color: var(--green); background:#F0FBF4; }
  .type-input.wrong{ border-color: var(--red); background:#FDF1EF; }
  .type-feedback{ margin-top:10px; font-family:'IBM Plex Mono', monospace; font-size:0.84rem; min-height:20px; }
  .type-feedback.ok{ color: var(--green); }
  .type-feedback.no{ color:#9B3324; }

  .closing-task{ background:#FFF6E6; border:1.5px solid var(--amber); border-radius:8px; padding:18px 20px; }
  .closing-task .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase; color:#8A5A0A; font-weight:700; margin-bottom:8px; }

  @media (max-width:700px){ .hero-body{padding:22px 5% 32px;} .section{padding:26px 5%;} }
&lt;/style&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="page-shell"&gt;
&lt;div class="ribbon-hero"&gt;
  &lt;div class="ribbon-strip"&gt;
    &lt;div class="ribbon-tab active"&gt;Beranda&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Sisipkan&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Tata Letak&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Referensi&lt;/div&gt;
    &lt;div class="ribbon-tab"&gt;Surat&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="hero-body"&gt;
    &lt;div class="eyebrow"&gt;Informatika - Fase E - Kelas X SMK&lt;/div&gt;
    &lt;h1 class="title"&gt;Fitur Lanjut Pengolah Kata untuk Dokumen Profesional&lt;/h1&gt;
    &lt;p class="hero-sub"&gt;Materi ini membahas fitur-fitur lanjutan pengolah kata  -  style &amp;amp; heading, daftar isi otomatis, tabel, gambar, mail merge, referensi/sitasi, serta berbagai fitur otomatis lain  -  agar kalian mampu menghasilkan dokumen yang rapi dan profesional.&lt;/p&gt;
    &lt;div class="meta-strip"&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Elemen CP&lt;/div&gt;&lt;div class="v"&gt;Pengolah Kata Lanjut&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK Kelas X&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;1 Pertemuan - 4 JP (180 menit)&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Model&lt;/div&gt;&lt;div class="v"&gt;Penjelasan &amp; Praktik Langsung&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;main&gt;

  &lt;!-- ===================== TUJUAN ===================== --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;00&lt;/span&gt; Capaian &amp; Tujuan Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Ke Mana Materi Ini Menuju&lt;/h2&gt;
    &lt;h3 class="sub-title"&gt;Tujuan Pembelajaran&lt;/h3&gt;
    &lt;p&gt;Murid mampu menggunakan style, heading, daftar isi otomatis, tabel, gambar, mail merge, referensi, dan fitur otomatis lainnya untuk menghasilkan dokumen profesional.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Rincian Kegiatan (4 JP x 45 menit)&lt;/h3&gt;
    &lt;div class="table-scroll"&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Tahap&lt;/th&gt;&lt;th&gt;Kegiatan&lt;/th&gt;&lt;th&gt;Waktu&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pendahuluan&lt;/td&gt;&lt;td&gt;Apersepsi ("Bagaimana laporan/skripsi bisa punya daftar isi yang otomatis mengikuti nomor halaman?"), penyampaian tujuan&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti  -  Eksplorasi Konsep&lt;/td&gt;&lt;td&gt;Penjelasan style/heading, daftar isi otomatis, tabel, gambar, mail merge, referensi, fitur otomatis lain&lt;/td&gt;&lt;td&gt;50 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti  -  Praktik Langsung&lt;/td&gt;&lt;td&gt;Mengerjakan 19 latihan mengetik &amp;amp; memformat dokumen langsung di halaman ini (wajib diketik sendiri, tidak boleh tempel/paste)&lt;/td&gt;&lt;td&gt;95 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penutup&lt;/td&gt;&lt;td&gt;Refleksi, penguatan konsep, menulis kesimpulan ringkas di buku catatan&lt;/td&gt;&lt;td&gt;20 menit&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== A. STYLE &amp; HEADING ===================== --&gt;
  &lt;section class="section" id="style-heading"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;01&lt;/span&gt; Struktur Dokumen&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Style &amp; Heading&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Style&lt;/strong&gt; adalah kumpulan pengaturan format (jenis huruf, ukuran, warna, spasi) yang disimpan dengan satu nama, sehingga dapat diterapkan berulang kali secara konsisten. &lt;strong&gt;Heading&lt;/strong&gt; adalah style khusus untuk judul bab/subbab (Heading 1, Heading 2, Heading 3, dst.) yang menandai struktur/hierarki dokumen.&lt;/p&gt;
    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Mengapa Penting&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Dokumen yang judul-judulnya diberi Heading (bukan sekadar huruf besar/tebal manual) dapat langsung dikenali oleh fitur otomatis lain, seperti Daftar Isi Otomatis dan Navigation Pane  -  inilah alasan utama style/heading menjadi fondasi dokumen profesional.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== B. DAFTAR ISI OTOMATIS ===================== --&gt;
  &lt;section class="section" id="toc"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;02&lt;/span&gt; Navigasi Dokumen&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Daftar Isi Otomatis&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Daftar isi otomatis (Table of Contents)&lt;/strong&gt; dibuat dari menu References &amp;gt; Table of Contents, dan secara otomatis mengambil seluruh teks yang diberi style Heading beserta nomor halamannya. Jika ada perubahan judul atau halaman, cukup klik &lt;strong&gt;Update Table&lt;/strong&gt;  -  tidak perlu mengetik ulang satu per satu seperti daftar isi manual.&lt;/p&gt;
  &lt;/section&gt;

  &lt;!-- ===================== C. TABEL &amp; GAMBAR ===================== --&gt;
  &lt;section class="section" id="tabel-gambar"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;03&lt;/span&gt; Elemen Visual&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tabel &amp; Gambar&lt;/h2&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Data Terstruktur&lt;/span&gt;&lt;h4&gt;Tabel&lt;/h4&gt;&lt;p&gt;Menyusun data dalam baris &amp;amp; kolom; dapat digabung (merge cell), diberi Table Style, dan dihitung otomatis dengan rumus sederhana.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Ilustrasi&lt;/span&gt;&lt;h4&gt;Gambar &amp; Text Wrapping&lt;/h4&gt;&lt;p&gt;Gambar dapat diatur agar teks mengalir di sekitarnya (Square, Tight) atau di belakang/depan teks (Behind/In Front of Text).&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Penjelasan Gambar&lt;/span&gt;&lt;h4&gt;Caption&lt;/h4&gt;&lt;p&gt;Keterangan otomatis di bawah gambar/tabel (mis. "Gambar 1.1") yang bisa dirujuk ulang di teks (cross-reference).&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== D. MAIL MERGE ===================== --&gt;
  &lt;section class="section" id="mail-merge"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;04&lt;/span&gt; Surat Massal&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mail Merge&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Mail merge&lt;/strong&gt; adalah fitur untuk membuat banyak dokumen serupa (mis. surat undangan, sertifikat) secara otomatis, dengan menggabungkan satu &lt;strong&gt;dokumen utama&lt;/strong&gt; (format surat) dan satu &lt;strong&gt;sumber data&lt;/strong&gt; (mis. tabel Excel berisi daftar nama &amp;amp; alamat). Bagian yang berubah-ubah ditandai sebagai &lt;em&gt;merge field&lt;/em&gt;, misalnya &lt;span class="mono"&gt;&amp;lt;&amp;lt;Nama&amp;gt;&amp;gt;&lt;/span&gt; dan &lt;span class="mono"&gt;&amp;lt;&amp;lt;Alamat&amp;gt;&amp;gt;&lt;/span&gt;.&lt;/p&gt;
    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Contoh Penggunaan&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Membuat 30 surat undangan wali murid dengan nama &amp;amp; kelas berbeda-beda, tanpa perlu mengetik ulang 30 kali  -  cukup satu template surat + satu daftar 30 nama.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== E. REFERENSI ===================== --&gt;
  &lt;section class="section" id="referensi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;05&lt;/span&gt; Kutipan &amp; Rujukan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Referensi &amp; Sitasi&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Citation/Sitasi&lt;/strong&gt;  -  menandai sumber kutipan dalam teks, mis. (Sugono, 2003).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Daftar Pustaka (Bibliography)&lt;/strong&gt;  -  dibuat otomatis dari seluruh sitasi yang sudah dimasukkan, tersusun sesuai gaya penulisan (APA, MLA, dsb.).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Footnote/Endnote&lt;/strong&gt;  -  catatan kaki/akhir untuk penjelasan tambahan tanpa mengganggu alur teks utama.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;!-- ===================== F. FITUR OTOMATIS LAIN ===================== --&gt;
  &lt;section class="section" id="fitur-lain"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;06&lt;/span&gt; Efisiensi Kerja&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Fitur Otomatis Lainnya&lt;/h2&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Penomoran&lt;/span&gt;&lt;h4&gt;Page Number Otomatis&lt;/h4&gt;&lt;p&gt;Nomor halaman yang otomatis bertambah dan dapat diformat berbeda per bagian (section break).&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Koreksi&lt;/span&gt;&lt;h4&gt;Spelling &amp; AutoCorrect&lt;/h4&gt;&lt;p&gt;Mendeteksi salah ketik dan otomatis memperbaiki kesalahan umum saat mengetik.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Keamanan Isi&lt;/span&gt;&lt;h4&gt;Watermark &amp; Proteksi&lt;/h4&gt;&lt;p&gt;Menandai dokumen (mis. "DRAFT") atau membatasi siapa yang dapat mengedit bagian tertentu.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== RANGKUMAN ===================== --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;07&lt;/span&gt; Penguatan Konsep&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Materi&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;h4&gt;Poin-Poin Kunci&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Style &amp;amp; Heading membangun struktur dokumen yang konsisten dan dapat dikenali fitur otomatis lain.&lt;/li&gt;
        &lt;li&gt;Daftar isi otomatis dibangun dari Heading, dapat diperbarui otomatis tanpa mengetik ulang.&lt;/li&gt;
        &lt;li&gt;Tabel menyusun data terstruktur; gambar dilengkapi text wrapping dan caption.&lt;/li&gt;
        &lt;li&gt;Mail merge menggabungkan dokumen utama + sumber data untuk membuat banyak surat sekaligus.&lt;/li&gt;
        &lt;li&gt;Referensi/sitasi dan daftar pustaka membantu menyusun karya tulis yang kredibel.&lt;/li&gt;
        &lt;li&gt;Fitur otomatis lain (nomor halaman, autocorrect, watermark) meningkatkan efisiensi dan profesionalitas dokumen.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== TUGAS PRAKTIK ===================== --&gt;
  &lt;section class="section" id="praktik"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;08&lt;/span&gt; Praktik Langsung&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tugas Praktik: Latihan Mengetik 1-19&lt;/h2&gt;
    &lt;p&gt;Kerjakan seluruh 19 latihan berikut &lt;strong&gt;langsung di halaman ini&lt;/strong&gt;, dengan cara &lt;strong&gt;mengetik ulang sendiri&lt;/strong&gt;  -  bukan menyalin/tempel (paste). Setiap kotak jawaban akan &lt;strong&gt;menolak aksi tempel&lt;/strong&gt;; jika terdeteksi ada percobaan tempel, latihan tersebut otomatis bernilai 0. Gunakan toolbar pemformatan di atas untuk menerapkan Bold, Italic, Underline, warna huruf, perataan, dan daftar bertingkat/bernomor sesuai instruksi masing-masing latihan.&lt;/p&gt;

    &lt;div class="callout warn"&gt;
      &lt;div class="lbl"&gt;Aturan Pengerjaan&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Dilarang menyalin-tempel teks dari mana pun (termasuk dari kotak naskah acuan di atas kolom jawaban). Ketik sendiri persis sesuai naskah, lalu format menggunakan toolbar. Kejujuran mengetik adalah bagian dari penilaian.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="toolbar" id="toolbar"&gt;
      &lt;button class="b" data-cmd="bold" title="Bold"&gt;B&lt;/button&gt;
      &lt;button class="i" data-cmd="italic" title="Italic"&gt;I&lt;/button&gt;
      &lt;button class="u" data-cmd="underline" title="Underline"&gt;U&lt;/button&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;button class="swatch" style="background:#000000" data-cmd="foreColor" data-val="#000000" title="Hitam"&gt;&lt;/button&gt;
      &lt;button class="swatch" style="background:#C43E2E" data-cmd="foreColor" data-val="#C43E2E" title="Merah"&gt;&lt;/button&gt;
      &lt;button class="swatch" style="background:#185ABD" data-cmd="foreColor" data-val="#185ABD" title="Biru"&gt;&lt;/button&gt;
      &lt;button class="swatch" style="background:#1E7A46" data-cmd="foreColor" data-val="#1E7A46" title="Hijau"&gt;&lt;/button&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;button data-cmd="justifyLeft" title="Rata Kiri"&gt;Kiri&lt;/button&gt;
      &lt;button data-cmd="justifyCenter" title="Rata Tengah"&gt;Tengah&lt;/button&gt;
      &lt;button data-cmd="justifyRight" title="Rata Kanan"&gt;Kanan&lt;/button&gt;
      &lt;button data-cmd="justifyFull" title="Rata Kiri-Kanan"&gt;Rata&lt;/button&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;button data-cmd="insertUnorderedList" title="Bullet List"&gt;List Bullet&lt;/button&gt;
      &lt;button data-cmd="insertOrderedList" title="Numbered List"&gt;1. List&lt;/button&gt;
      &lt;span class="sep"&gt;&lt;/span&gt;
      &lt;select id="fontSizeSelect" title="Ukuran Huruf"&gt;
        &lt;option value="2"&gt;Kecil&lt;/option&gt;
        &lt;option value="3" selected&gt;Normal&lt;/option&gt;
        &lt;option value="5"&gt;Besar&lt;/option&gt;
        &lt;option value="7"&gt;Sangat Besar&lt;/option&gt;
      &lt;/select&gt;
      &lt;select id="fontFamilySelect" title="Jenis Huruf"&gt;
        &lt;option value="Times New Roman"&gt;Times New Roman&lt;/option&gt;
        &lt;option value="Arial"&gt;Arial&lt;/option&gt;
        &lt;option value="Courier New"&gt;Courier New&lt;/option&gt;
        &lt;option value="Comic Sans MS"&gt;Comic Sans MS&lt;/option&gt;
      &lt;/select&gt;
      &lt;span class="hint"&gt;Klik di kotak jawaban dulu, lalu gunakan tombol ini&lt;/span&gt;
    &lt;/div&gt;

    &lt;div id="latihanContainer"&gt;&lt;/div&gt;

    &lt;div class="submit-panel"&gt;
      &lt;h3 class="sub-title"&gt;Identitas Peserta&lt;/h3&gt;
      &lt;div class="student-info"&gt;
        &lt;div class="field"&gt;&lt;label for="noAbsen"&gt;No. Absen&lt;/label&gt;&lt;input type="number" id="noAbsen" min="1" placeholder="mis. 12"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="nama"&gt;Nama Lengkap&lt;/label&gt;&lt;input type="text" id="nama" placeholder="Nama sesuai absensi"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="kelas"&gt;Kelas&lt;/label&gt;
          &lt;select id="kelas"&gt;
            &lt;option value=""&gt;-- Pilih Kelas --&lt;/option&gt;
            &lt;option value="X TB1"&gt;X TB1&lt;/option&gt;
            &lt;option value="X TB2"&gt;X TB2&lt;/option&gt;
            &lt;option value="X TO1"&gt;X TO1&lt;/option&gt;
            &lt;option value="X TO2"&gt;X TO2&lt;/option&gt;
            &lt;option value="X TJKT1"&gt;X TJKT1&lt;/option&gt;
            &lt;option value="X TJKT2"&gt;X TJKT2&lt;/option&gt;
          &lt;/select&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;button id="btnHitungLatihan"&gt;Hitung Skor Latihan Mengetik&lt;/button&gt;
      &lt;span id="latihanMsg" class="mono" style="font-size:0.83rem; color:#8A6A1E; margin-left:12px;"&gt;&lt;/span&gt;

      &lt;div class="result-panel" id="latihanResultPanel"&gt;
        &lt;div class="score-lbl"&gt;Skor Latihan Mengetik (1-19)&lt;/div&gt;
        &lt;div class="score" id="latihanScoreValue"&gt;0&lt;/div&gt;
        &lt;p id="latihanResultDetail"&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== EVALUASI DOKUMEN MASTER (GAME) ===================== --&gt;
  &lt;section class="section" id="evaluasi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;09&lt;/span&gt; Evaluasi Pemahaman&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Evaluasi: Dokumen Master&lt;/h2&gt;
    &lt;p&gt;Bagian kedua dari Tugas Praktik ini adalah evaluasi pemahaman fitur pengolah kata dalam bentuk permainan singkat, terdiri dari &lt;strong&gt;Bagian A: Cocokkan Fitur (Drag &amp;amp; Drop)&lt;/strong&gt; dan &lt;strong&gt;Bagian B: Ketik Cepat&lt;/strong&gt;. Skor bagian ini akan digabung 50:50 dengan skor Latihan Mengetik di atas menjadi &lt;strong&gt;nilai akhir Tugas Praktik&lt;/strong&gt;.&lt;/p&gt;

    &lt;div class="callout warn"&gt;
      &lt;div class="lbl"&gt;Aturan Bermain&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Jika jawaban salah, soal langsung lanjut ke soal berikutnya dan tidak mendapat nilai untuk soal itu&lt;/strong&gt;  -  tidak ada kesempatan mengulang jawaban pada soal yang sama. Nilai akhir dikirim ke guru otomatis jika mencapai &lt;strong&gt;KKM = 75&lt;/strong&gt;. Jika belum mencapai KKM, kalian punya &lt;strong&gt;3 kali kesempatan mengulang evaluasi ini&lt;/strong&gt; (skor Latihan Mengetik tidak perlu diulang); jika setelah 3 kali masih belum mencapai KKM, &lt;strong&gt;nilai tertinggi dari 3 percobaan itulah yang dikirim ke guru&lt;/strong&gt;.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="attempt-strip" id="attemptStrip"&gt;&lt;/div&gt;

    &lt;div class="game-panel" id="gamePanel"&gt;
      &lt;button id="btnMulaiEvaluasi" class="primary-btn"&gt;Mulai Evaluasi Dokumen Master&lt;/button&gt;
    &lt;/div&gt;

    &lt;div class="result-panel" id="finalResultPanel"&gt;
      &lt;div class="score-lbl" id="finalResultLabel"&gt;Nilai Akhir Tugas Praktik&lt;/div&gt;
      &lt;div class="score" id="finalScoreValue"&gt;0&lt;/div&gt;
      &lt;p id="finalResultDetail"&gt;&lt;/p&gt;
      &lt;button id="btnCobaLagi" class="primary-btn" style="display:none; margin-top:14px;"&gt;Coba Lagi Evaluasi&lt;/button&gt;
      &lt;button id="btnUnduhPDF" class="primary-btn ghost" style="display:none; margin-top:14px;"&gt;Unduh Bukti Mengerjakan (PDF)&lt;/button&gt;
      &lt;p id="pdfHint" style="display:none; font-size:0.8rem; color:var(--ink-soft); margin-top:8px;"&gt;Setelah diunduh, cetak dokumen ini (ukuran F4) dan serahkan ke guru mata pelajaran sebagai bukti pengerjaan.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== PENUTUP: BUKU CATATAN ===================== --&gt;
  &lt;section class="section" id="penutup"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;10&lt;/span&gt; Penutup Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tugas Individu di Buku Catatan&lt;/h2&gt;
    &lt;div class="closing-task"&gt;
      &lt;div class="lbl"&gt;1. Catat Nilai Evaluasi&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Salin &lt;strong&gt;Nilai Akhir Tugas Praktik&lt;/strong&gt; yang muncul di layar ke buku catatan kalian, pada kolom &lt;strong&gt;"Nilai Evaluasi"&lt;/strong&gt; (buat tabel kecil: Tanggal | Materi | Nilai Evaluasi), sebagai bukti dan rekam jejak pencapaian belajar kalian.&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="closing-task" style="margin-top:14px;"&gt;
      &lt;div class="lbl"&gt;2. Tulis Resume Materi&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Buatlah &lt;strong&gt;resume (rangkuman) materi "Fitur Lanjut Pengolah Kata untuk Dokumen Profesional"&lt;/strong&gt; di buku catatan, mencakup: style &amp;amp; heading, daftar isi otomatis, tabel &amp;amp; gambar, mail merge, referensi/sitasi, serta fitur otomatis lainnya. Tulis dengan bahasa dan pemahaman kalian sendiri.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  INFORMATIKA - FITUR LANJUT PENGOLAH KATA UNTUK DOKUMEN PROFESIONAL - FASE E KELAS X SMK
&lt;/footer&gt;
&lt;/div&gt;

&lt;script&gt;
  const GAS_ENDPOINT = "https://script.google.com/macros/s/AKfycbwKp7DrBTALJMlw8crjK7RgXIO8LVcU4yVEd9WJNs_vgSXkVxfw7fwkGbOT2IBNOjg3uQ/exec";
  const JUDUL_MATERI = "Fitur Lanjut Pengolah Kata untuk Dokumen Profesional";

  // type: "match" = dinilai berdasarkan kemiripan dengan reference; "open" = dinilai berdasarkan panjang minimal (tugas kreatif tanpa naskah acuan tetap)
  const LATIHAN = [
    { title: "Latihan Mengetik dengan Keyboard", type:"match",
      instruksi: "Ketik ulang alfabet besar-kecil, angka, contoh operasi hitung, dan paragraf berikut PERSIS seperti aslinya (perhatikan huruf besar/kecil dan tanda baca).",
      reference: "ABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n1234567890\n2 + 2 = 4\nDi dalam sebuah hadits qudsy dijelaskan bahwa Allah SWT sangat menyukai dan mencintai hamba-hamba-Nya, yang banyak mengingat-Nya dan datang kepada-Nya dengan ibadah, membawa kebaikan dan amal-amal saleh serta memohon ampun dan bertobat atas dosa dan kesalahan yang dilakukannya." },
    { title: "Latihan Mengetik Teks/Paragraf", type:"match",
      instruksi: "Ketik ulang paragraf berikut dengan memperhatikan penggunaan tombol Shift untuk simbol di atas angka.",
      reference: "Ingatlah selalu bahwa untuk mengetik tanda yang berada di atas angka, harus menekan shift bersamaan dengan tanda tersebut. Seperti tanda % yang berada di atas angka 5, jika ingin mengetik angka lima saja, kita tidak perlu menekan shift. Contohnya $500 yang digunakan di luar negeri, contoh kedua yaitu seperti judul Tom &amp; Jerry." },
    { title: "Latihan Jenis, Ukuran, dan Gaya Huruf", type:"match",
      instruksi: "Ketik keempat baris berikut, lalu format sesuai keterangannya menggunakan tombol Bold, Italic, dan Underline pada toolbar di atas.",
      reference: "Times New Roman 12 Bold\nTimes New Roman 12 Italic\nTimes New Roman 12 Underline\nTimes New Roman 12 Bold Italic Underline" },
    { title: "Latihan Warna Huruf dan Perataan Paragraf", type:"match",
      instruksi: "Ketik ketiga baris berikut lalu beri warna huruf sesuai keterangan menggunakan tombol warna pada toolbar, kemudian ketik paragraf di bawahnya dan ratakan kiri-kanan (justify).",
      reference: "Times New Roman 12 Font Color: Red\nTimes New Roman 14 Font Color: Blue\nTimes New Roman 16 Font Color: Green\nPerkembangan ilmu pengetahuan dan teknologi semakin lama menjadi semakin penting artinya, baik untuk kepentingan sipil maupun militer, kepentingan damai maupun perang." },
    { title: "Latihan Penomoran dan Pembutiran", type:"match",
      instruksi: "Ketik daftar alat menggunakan Bullet List, lalu ketik daftar bahan menggunakan Numbered List (gunakan tombol list pada toolbar).",
      reference: "Alat-alat yang dibutuhkan: Nampan, Ompreng, Ember, Gayung, Kompor.\nBahan yang diperlukan: Air bersih satu ember, Minyak goreng satu liter, Telur ayam 5 butir, Cabe bawang dan garam secukupnya." },
    { title: "Latihan Tabulasi", type:"match",
      instruksi: "Ketik ulang tiga baris tanggal berikut menggunakan tombol Tab agar sejajar rapi.",
      reference: "Jakarta, 27 Maret 1987\nBandung, 28 Agustus 1945\nSurabaya, 2 Januari 2009" },
    { title: "Latihan Membuat Daftar Isi (Manual)", type:"match",
      instruksi: "Ketik ulang daftar isi berikut lengkap dengan titik-titik penghubung (dot leader) sebelum nomor halaman.",
      reference: "Daftar Isi\nKata Pengantar ..... i\nDaftar Isi ..... ii\nBAB I ..... 1\nBAB II ..... 4\nBAB III ..... 7\nDaftar Pustaka ..... 10" },
    { title: "Latihan Word Art (Simulasi)", type:"open", minChars: 10,
      instruksi: "Karena WordArt tidak tersedia di kotak ini, ketik sebuah judul singkat (nama sekolah/kelas kalian), lalu format dengan ukuran Sangat Besar dan warna mencolok pada toolbar untuk mensimulasikan efek WordArt." },
    { title: "Latihan Shapes dan Teks dalam Shapes (Simulasi)", type:"open", minChars: 10,
      instruksi: "Ketik sebuah kalimat singkat yang biasanya diletakkan di dalam sebuah shape (kotak/oval), lalu format rata tengah (Center) menggunakan toolbar." },
    { title: "Latihan Clip Art &amp; AutoShapes (Deskripsi)", type:"open", minChars: 20,
      instruksi: "Karena bagian ini aslinya berupa gambar clip art, tuliskan deskripsi singkat (2-3 kalimat) tentang ilustrasi yang akan kalian sisipkan di dokumen asli kalian di MS Word." },
    { title: "Latihan Membuat Tabel Data Diri", type:"match",
      instruksi: "Karena kotak jawaban belum berupa tabel sungguhan, ketik data berikut per baris dengan format: Nama | Kelas | Hobi | Cita-cita | Musik.",
      reference: "Nama | Kelas | Hobi | Cita-cita | Musik\nEntong | 2 SD | Baca | Presiden | Pop\nSiti | 3 SD | Ngerumpi | Sekretaris | Rock\nUcup | 4 SD | Menulis | Direktur | Dangdut" },
    { title: "Latihan Membuat Tabel Jadwal Pelajaran", type:"match",
      instruksi: "Ketik jadwal pelajaran berikut per baris dengan format: Hari | Pelajaran 1 | Pelajaran 2 | Pelajaran 3.",
      reference: "Senin | Upacara | Matematika | Bahasa\nSelasa | Bahasa Inggris | IPS | Matematika\nRabu | Agama | Penjas | Matematika" },
    { title: "Latihan Tabel &amp; Menghitung Jumlah Uang", type:"match",
      instruksi: "Ketik data berikut, lalu hitung sendiri jumlahnya (latihan menggabungkan tabel dengan operasi hitung sederhana).",
      reference: "Di Rumah | Di Kantong | Jumlahnya\n5000 | 3000 | 8000\n2000 | 5000 | 7000\n10000 | 500 | 10500" },
    { title: "Latihan Membuat Surat Resmi", type:"match",
      instruksi: "Ketik ulang bagian inti surat resmi berikut, lengkap dengan nomor surat, hal, dan salam pembuka/penutup.",
      reference: "No : 076/FQ/III/2009  Jakarta, 22 Maret 2009\nHal : Pemberitahuan dan Undangan\n\nKepada Yth,\nBapak/Ibu Orang tua murid\nDi tempat\n\nAssalamu'alaikum Wr.Wb.\nSehubungan dengan datangnya hari besar, kami akan mengadakan acara yang Insya Allah akan dilaksanakan pada Hari Minggu, Pukul 07.00 WIB.\n\nWassalamu'alaikum Wr.Wb." },
    { title: "Latihan Membuat Cover Makalah", type:"match",
      instruksi: "Ketik ulang susunan cover makalah berikut, gunakan perataan tengah (Center) dan Bold untuk judul.",
      reference: "MAKALAH\nHUKUM NUN MATI DAN TANWIN\nDisusun sebagai tugas mata pelajaran Agama Islam\n\nDisusun Oleh\nRAHMAT FAUZI\nKelas 8 A\n\nSEKOLAH MENENGAH PERTAMA NEGERI 176\nJAKARTA BARAT\nTAHUN 2010" },
    { title: "Latihan Membuat Pengumuman", type:"match",
      instruksi: "Ketik ulang teks pengumuman berikut sesuai aslinya.",
      reference: "Telah hilang dompet tanpa isinya dengan ciri-ciri warna coklat, berbahan kulit, robek dikit di bagian tengahnya, yang hilang pada Hari Senin, 12 Maret 2010 sekitar pukul 09.00 WIB di sekitar Monas. Bagi yang menemukan, diharapkan menghubungi nomor di bawah ini, terima kasih." },
    { title: "Latihan Membuat Bagan/Struktur Organisasi (Teks Bertingkat)", type:"open", minChars: 30,
      instruksi: "Karena bagan berupa kotak-kotak yang dihubungkan garis, tuliskan struktur organisasi dalam bentuk daftar bertingkat (indentasi) sebagai gambaran teksnya. Contoh: Ketua, lalu di bawahnya Wakil Ketua, lalu Sekretaris &amp; Bendahara, lalu Anggota." },
    { title: "Latihan Drop Cap dan Kolom Koran", type:"match",
      instruksi: "Ketik ulang paragraf berikut, lalu perbesar ukuran huruf pertama saja (blok satu huruf pertama, pilih ukuran Sangat Besar) untuk mensimulasikan efek Drop Cap.",
      reference: "GEGER Jakarta! Selama dua hari diguyur hujan kawasan Jakarta langsung berubah menjadi kota air kotor dengan sampah yang begitu melimpah dan komunitas warga yang terserang berbagai penyakit." },
    { title: "Latihan Simbol dan Karakter Khusus", type:"match",
      instruksi: "Ketik ulang simbol-simbol khusus berikut menggunakan keyboard atau fitur Insert Symbol yang tersedia di perangkat kalian.",
      reference: "± Rp 10.000.000,- untuk satu unit motor\nΠ = 3,14\nx ≥ 7\nSonic®\nSony Entertainment™" }
  ];

  const container = document.getElementById('latihanContainer');
  const pasteFlags = new Array(LATIHAN.length).fill(false);
  let currentEditor = null;

  LATIHAN.forEach((item, idx) =&gt; {
    const card = document.createElement('div');
    card.className = 'latihan-card';

    const head = document.createElement('div');
    head.className = 'latihan-head';
    head.innerHTML = '&lt;div class="lnum"&gt;LATIHAN ' + (idx+1) + ' / ' + LATIHAN.length + '&lt;/div&gt;&lt;h4&gt;' + item.title + '&lt;/h4&gt;';
    card.appendChild(head);

    const body = document.createElement('div');
    body.className = 'latihan-body';

    const instr = document.createElement('div');
    instr.className = 'latihan-instruksi';
    instr.textContent = item.instruksi;
    body.appendChild(instr);

    if (item.reference) {
      const refBox = document.createElement('div');
      refBox.className = 'reference-box';
      const rlbl = document.createElement('span');
      rlbl.className = 'rlbl';
      rlbl.textContent = 'Naskah Acuan (ketik ulang, jangan disalin)';
      refBox.appendChild(rlbl);
      const refText = document.createElement('div');
      refText.textContent = item.reference;
      refBox.appendChild(refText);
      body.appendChild(refBox);
    }

    const editor = document.createElement('div');
    editor.className = 'editor-box';
    editor.contentEditable = 'true';
    editor.setAttribute('data-placeholder', 'Ketik jawaban latihan di sini...');
    editor.dataset.idx = idx;

    editor.addEventListener('focus', () =&gt; { currentEditor = editor; });
    editor.addEventListener('paste', (e) =&gt; {
      e.preventDefault();
      pasteFlags[idx] = true;
      const flagEl = card.querySelector('.flag');
      flagEl.classList.add('show');
      flagEl.textContent = '[PERINGATAN] Percobaan tempel terdeteksi  -  latihan ini akan bernilai 0';
    });
    editor.addEventListener('drop', (e) =&gt; e.preventDefault());

    body.appendChild(editor);

    const meta = document.createElement('div');
    meta.className = 'editor-meta';
    meta.innerHTML = '&lt;span class="charcount"&gt;0 karakter&lt;/span&gt;&lt;span class="flag"&gt;&lt;/span&gt;';
    body.appendChild(meta);

    editor.addEventListener('input', () =&gt; {
      const len = editor.innerText.trim().length;
      meta.querySelector('.charcount').textContent = len + ' karakter';
    });

    card.appendChild(body);
    container.appendChild(card);
  });

  // Toolbar
  document.getElementById('toolbar').addEventListener('mousedown', (e) =&gt; {
    if (e.target.tagName === 'BUTTON') e.preventDefault(); // keep selection in editor
  });
  document.querySelectorAll('#toolbar button[data-cmd]').forEach(btn =&gt; {
    btn.addEventListener('click', () =&gt; {
      if (!currentEditor) { alert('Klik di dalam kotak jawaban terlebih dahulu.'); return; }
      currentEditor.focus();
      const cmd = btn.dataset.cmd;
      const val = btn.dataset.val || null;
      document.execCommand(cmd, false, val);
    });
  });
  document.getElementById('fontSizeSelect').addEventListener('change', (e) =&gt; {
    if (!currentEditor) return;
    currentEditor.focus();
    document.execCommand('fontSize', false, e.target.value);
  });
  document.getElementById('fontFamilySelect').addEventListener('change', (e) =&gt; {
    if (!currentEditor) return;
    currentEditor.focus();
    document.execCommand('fontName', false, e.target.value);
  });

  function normWords(text){
    return Array.from(new Set(
      text.toLowerCase().replace(/[^a-z0-9\s]/gi, ' ').split(/\s+/).filter(w =&gt; w.length &gt;= 3)
    ));
  }

  function scoreLatihan(idx){
    const item = LATIHAN[idx];
    const editor = document.querySelectorAll('.editor-box')[idx];
    const typed = editor.innerText.trim();

    if (pasteFlags[idx]) return 0;
    if (typed.length === 0) return 0;

    if (item.type === 'open') {
      const min = item.minChars || 15;
      return Math.round(Math.min(100, (typed.length / min) * 100));
    }

    const ref = item.reference;
    const lengthRatio = Math.min(1, typed.length / (0.5 * ref.length));
    const refWords = normWords(ref);
    const typedLower = typed.toLowerCase();
    let matched = 0;
    refWords.forEach(w =&gt; { if (typedLower.indexOf(w) !== -1) matched++; });
    const overlapRatio = refWords.length ? (matched / refWords.length) : 1;
    return Math.round(100 * (0.4 * lengthRatio + 0.6 * overlapRatio));
  }

  // ============================================================
  // BAGIAN 1: HITUNG SKOR LATIHAN MENGETIK (1-19)
  // ============================================================
  let latihanScore = null;

  document.getElementById('btnHitungLatihan').addEventListener('click', () =&gt; {
    const noAbsen = document.getElementById('noAbsen').value.trim();
    const nama = document.getElementById('nama').value.trim();
    const kelas = document.getElementById('kelas').value.trim();
    const msg = document.getElementById('latihanMsg');

    if (!noAbsen || !nama || !kelas) {
      msg.textContent = 'Lengkapi No. Absen, Nama, dan Kelas terlebih dahulu.';
      return;
    }

    let total = 0;
    let pasteCount = 0;
    for (let i = 0; i &lt; LATIHAN.length; i++) {
      total += scoreLatihan(i);
      if (pasteFlags[i]) pasteCount++;
    }
    latihanScore = Math.round(total / LATIHAN.length);

    msg.textContent = '';
    document.getElementById('latihanScoreValue').textContent = latihanScore;
    let detail = 'Skor dihitung dari kemiripan &amp; kelengkapan jawaban pada ' + LATIHAN.length + ' latihan (kontribusi 50% dari nilai akhir).';
    if (pasteCount &gt; 0) {
      detail = '[PERINGATAN] Terdeteksi ' + pasteCount + ' latihan dengan percobaan tempel (dinilai 0). ' + detail;
    }
    document.getElementById('latihanResultDetail').textContent = detail;
    document.getElementById('latihanResultPanel').style.display = 'block';

    // Buka bagian evaluasi setelah skor latihan dihitung
    const evalSection = document.getElementById('evaluasi');
    evalSection.style.display = 'block';
    evalSection.scrollIntoView({ behavior: 'smooth', block: 'start' });
  });

  // ============================================================
  // BAGIAN 2: EVALUASI DOKUMEN MASTER (drag&amp;drop + ketik cepat)
  // ============================================================
  const GAS_ENDPOINT2 = GAS_ENDPOINT; // reuse
  const KKM = 75;
  const MAX_ATTEMPTS = 3;
  const EVAL_DRAG_COUNT = 6;
  const EVAL_TYPE_COUNT = 6;

  const dragDropQuestions = [
    { id: "dd1", func: "Fitur untuk membuat daftar pustaka otomatis berdasarkan kutipan.", ans: "References / Bibliography" },
    { id: "dd2", func: "Gaya teks bawaan untuk menentukan judul utama bab dokumen.", ans: "Heading 1" },
    { id: "dd3", func: "Mengirim satu format surat/sertifikat ke banyak penerima otomatis.", ans: "Mail Merge" },
    { id: "dd4", func: "Membuat struktur urutan bab beserta nomor halamannya secara otomatis.", ans: "Table of Contents" },
    { id: "dd5", func: "Memaksa teks berpindah ke halaman baru tanpa menekan enter berkali-kali.", ans: "Page Break" },
    { id: "dd6", func: "Menambahkan keterangan teks kecil tepat di bawah gambar atau tabel.", ans: "Caption" },
    { id: "dd7", func: "Memberikan penjelasan rujukan yang diletakkan di bagian paling bawah halaman.", ans: "Footnote" },
    { id: "dd8", func: "Area berulang di bagian atas setiap lembar halaman dokumen.", ans: "Header" },
    { id: "dd9", func: "Teks atau gambar samar (transparan) di latar belakang halaman.", ans: "Watermark" },
    { id: "dd10", func: "Mengatur orientasi kertas agar melebar (mendatar).", ans: "Landscape" },
    { id: "dd11", func: "Mengatur batas jarak kosong di tepi halaman untuk dicetak.", ans: "Margins" },
    { id: "dd12", func: "Membagi paragraf menjadi beberapa lajur seperti koran.", ans: "Columns" },
    { id: "dd13", func: "Menggabungkan dua sel atau lebih di dalam tabel menjadi satu sel utuh.", ans: "Merge Cells" },
    { id: "dd14", func: "Fitur melacak setiap perubahan, penambahan, penghapusan teks oleh editor.", ans: "Track Changes" },
    { id: "dd15", func: "Menyalin format gaya huruf dari satu teks dan menerapkannya ke teks lain.", ans: "Format Painter" }
  ];

  const typingQuestions = [
    { q: "Ketik nama tab menu untuk mengatur 'Margins' dan ukuran kertas.", a: ["Page Layout", "Layout"] },
    { q: "Fitur 'Heading' biasanya berada di tab menu utama, ketik nama tab-nya.", a: ["Home"] },
    { q: "Ketik nama fitur untuk menyisipkan penomoran halaman otomatis.", a: ["Page Number", "Page Numbers"] },
    { q: "Tombol pintas keyboard (Shortcut) untuk menebalkan teks.", a: ["Ctrl+B", "Ctrl + B", "Control+B"] },
    { q: "Tombol pintas keyboard (Shortcut) untuk memiringkan teks.", a: ["Ctrl+I", "Ctrl + I", "Control+I"] },
    { q: "Tombol pintas keyboard (Shortcut) untuk memberi garis bawah teks.", a: ["Ctrl+U", "Ctrl + U", "Control+U"] },
    { q: "Tombol shortcut untuk membuat paragraf menjadi rata tengah.", a: ["Ctrl+E", "Ctrl + E", "Control+E"] },
    { q: "Tombol shortcut untuk membuat paragraf menjadi rata kiri dan kanan (justify).", a: ["Ctrl+J", "Ctrl + J", "Control+J"] },
    { q: "Ketik nama fitur untuk membatalkan perintah terakhir yang kamu lakukan.", a: ["Undo"] },
    { q: "Ketik nama menu untuk mengubah warna latar belakang keseluruhan halaman.", a: ["Page Color"] },
    { q: "Tombol pintas keyboard (Shortcut) untuk menyimpan dokumen secara cepat.", a: ["Ctrl+S", "Ctrl + S", "Control+S"] },
    { q: "Tombol pintas keyboard (Shortcut) untuk mencetak (print) dokumen.", a: ["Ctrl+P", "Ctrl + P", "Control+P"] },
    { q: "Tombol pintas keyboard (Shortcut) untuk menyalin (copy) teks.", a: ["Ctrl+C", "Ctrl + C", "Control+C"] },
    { q: "Tombol pintas keyboard (Shortcut) untuk menempelkan (paste) teks.", a: ["Ctrl+V", "Ctrl + V", "Control+V"] },
    { q: "Format file ekstensi standar penyimpanan Microsoft Word versi modern (setelah 2007).", a: [".docx", "docx"] },
    { q: "Format dokumen populer yang bentuknya tidak mudah berubah saat dibuka di beda perangkat.", a: [".pdf", "pdf"] },
    { q: "Ketik nama fitur untuk membuat tulisan/teks berukuran besar dan artistik.", a: ["WordArt", "Word Art"] },
    { q: "Fitur pembuat surat massal bernama...", a: ["Mail Merge"] },
    { q: "Membuat huruf pertama paragraf menjadi besar dan memakan beberapa baris disebut...", a: ["Drop Cap"] },
    { q: "Fitur yang mengoreksi ejaan/tata bahasa yang salah dengan garis bawah merah/biru.", a: ["Spelling &amp; Grammar", "Spelling", "Grammar"] }
  ];

  function shuffleArray(array){
    const a = array.slice();
    for (let i = a.length - 1; i &gt; 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
  }

  let evalAttemptScores = [];
  let evalAttemptDetails = [];
  let evalAttemptQuestionLogs = [];
  let currentAttemptDragLog = [];
  let currentAttemptTypeLog = [];
  let evalFinalAttemptIndex = null;
  let evalFinalScore = null;
  let combinedFinalScore = null;
  let selectedChip = null;
  let dragCorrect = 0, dragAnswered = 0;
  let typeCorrect = 0, typeAnswered = 0, typeIndex = 0, currentTypeSet = [];

  function renderAttemptStrip(){
    const strip = document.getElementById('attemptStrip');
    strip.innerHTML = '';
    for (let i = 0; i &lt; MAX_ATTEMPTS; i++) {
      const pill = document.createElement('div');
      pill.className = 'attempt-pill';
      if (i &lt; evalAttemptScores.length) {
        const s = evalAttemptScores[i];
        pill.classList.add('done', s &gt;= KKM ? 'pass' : 'fail');
        pill.textContent = 'Percobaan ' + (i+1) + ': ' + s;
      } else if (i === evalAttemptScores.length) {
        pill.classList.add('current');
        pill.textContent = 'Percobaan ' + (i+1) + ': belum dimulai';
      } else {
        pill.textContent = 'Percobaan ' + (i+1) + ': -';
      }
      strip.appendChild(pill);
    }
  }
  renderAttemptStrip();

  document.getElementById('btnMulaiEvaluasi').addEventListener('click', startEvalAttempt);
  document.getElementById('btnCobaLagi').addEventListener('click', () =&gt; {
    document.getElementById('finalResultPanel').style.display = 'none';
    startEvalAttempt();
  });

  function startEvalAttempt(){
    dragCorrect = 0; dragAnswered = 0;
    typeCorrect = 0; typeAnswered = 0; typeIndex = 0;
    currentAttemptDragLog = [];
    currentAttemptTypeLog = [];
    document.getElementById('finalResultPanel').style.display = 'none';
    renderDragBatch();
  }

  function renderDragBatch(){
    const panel = document.getElementById('gamePanel');
    const pool = shuffleArray(dragDropQuestions).slice(0, EVAL_DRAG_COUNT);
    selectedChip = null;
    panel.innerHTML =
      '&lt;div class="game-subtitle"&gt;Bagian A - Cocokkan Fitur&lt;/div&gt;' +
      '&lt;div class="game-instruction"&gt;Cara main: &lt;strong&gt;1)&lt;/strong&gt; Ketuk salah satu jawaban di kotak biru di bawah untuk memilihnya, &lt;strong&gt;2)&lt;/strong&gt; lalu ketuk kotak soal yang sesuai untuk menempatkannya. Bisa dikerjakan dengan mouse maupun layar sentuh (HP/tablet).&lt;/div&gt;' +
      '&lt;div class="game-progress" id="dragProgress"&gt;0 / ' + EVAL_DRAG_COUNT + ' soal dijawab&lt;/div&gt;' +
      '&lt;div class="drop-grid" id="dropGrid"&gt;&lt;/div&gt;' +
      '&lt;div class="drag-pool" id="dragPool"&gt;&lt;/div&gt;';

    const dropGrid = document.getElementById('dropGrid');
    const dragPool = document.getElementById('dragPool');

    pool.forEach(q =&gt; {
      const zone = document.createElement('div');
      zone.className = 'droppable';
      zone.dataset.expected = q.id;
      zone.innerHTML =
        '&lt;div class="func-text"&gt;' + q.func + '&lt;/div&gt;' +
        '&lt;div class="drop-target"&gt;&lt;span class="placeholder-text"&gt;Ketuk di sini setelah memilih jawaban&lt;/span&gt;&lt;/div&gt;';
      dropGrid.appendChild(zone);

      zone.addEventListener('click', () =&gt; {
        if (zone.classList.contains('filled') || zone.classList.contains('wrong')) return; // sudah dikunci
        if (!selectedChip) return; // belum pilih jawaban
        handleDragDrop(zone, selectedChip, q);
      });
    });

    const shuffledAnswers = shuffleArray(pool);
    shuffledAnswers.forEach(q =&gt; {
      const chip = document.createElement('div');
      chip.className = 'draggable-chip';
      chip.dataset.id = q.id;
      chip.textContent = q.ans;
      chip.addEventListener('click', () =&gt; {
        if (chip.classList.contains('used')) return;
        document.querySelectorAll('.draggable-chip').forEach(c =&gt; c.classList.remove('selected'));
        if (selectedChip === chip) { selectedChip = null; return; } // ketuk lagi = batal pilih
        selectedChip = chip;
        chip.classList.add('selected');
      });
      dragPool.appendChild(chip);
    });
  }

  function handleDragDrop(zone, chip, question){
    const target = zone.querySelector('.drop-target');
    const isCorrect = chip.dataset.id === question.id;
    dragAnswered++;

    currentAttemptDragLog.push({ func: question.func, correctAns: question.ans, userAns: chip.textContent.trim(), isCorrect: isCorrect });

    if (isCorrect) {
      dragCorrect++;
      zone.classList.add('filled');
      target.innerHTML = '&lt;span style="font-family:\'IBM Plex Mono\',monospace; font-size:0.8rem; color:#177A46; font-weight:700;"&gt;[BENAR] ' + question.ans + '&lt;/span&gt;';
      chip.classList.add('used');
    } else {
      // Salah: kunci soal ini (tidak dapat nilai), tetap lanjut - tidak ada pengulangan pada soal yang sama.
      // Chip yang salah TIDAK dihapus dari pool karena mungkin cocok untuk zona lain yang masih terbuka.
      zone.classList.add('wrong');
      target.innerHTML = '&lt;span class="correct-reveal"&gt;[SALAH] Jawaban benar: ' + question.ans + '&lt;/span&gt;';
    }

    chip.classList.remove('selected');
    selectedChip = null;

    document.getElementById('dragProgress').textContent = dragAnswered + ' / ' + EVAL_DRAG_COUNT + ' soal dijawab';

    if (dragAnswered &gt;= EVAL_DRAG_COUNT) {
      setTimeout(renderTypeBatch, 500);
    }
  }

  function renderTypeBatch(){
    currentTypeSet = shuffleArray(typingQuestions).slice(0, EVAL_TYPE_COUNT);
    typeIndex = 0;
    renderTypeQuestion();
  }

  function renderTypeQuestion(){
    const panel = document.getElementById('gamePanel');
    if (typeIndex &gt;= currentTypeSet.length) {
      finishEvalAttempt();
      return;
    }
    const q = currentTypeSet[typeIndex];
    panel.innerHTML =
      '&lt;div class="game-subtitle"&gt;Bagian B - Ketik Cepat&lt;/div&gt;' +
      '&lt;div class="game-progress"&gt;Soal ' + (typeIndex+1) + ' / ' + EVAL_TYPE_COUNT + '&lt;/div&gt;' +
      '&lt;div class="type-box"&gt;' +
        '&lt;div class="type-question-text"&gt;' + q.q + '&lt;/div&gt;' +
        '&lt;form id="typeForm"&gt;&lt;input type="text" id="typeInput" class="type-input" autocomplete="off" placeholder="Ketik jawabanmu..." required&gt;' +
        '&lt;div class="type-feedback" id="typeFeedback"&gt;&lt;/div&gt;&lt;/form&gt;' +
      '&lt;/div&gt;';

    const input = document.getElementById('typeInput');
    setTimeout(() =&gt; input.focus(), 50);

    document.getElementById('typeForm').addEventListener('submit', (e) =&gt; {
      e.preventDefault();
      const userAns = input.value.trim().toLowerCase().replace(/\s+/g, ' ');
      const isCorrect = q.a.some(ans =&gt; ans.toLowerCase().replace(/\s+/g, ' ') === userAns);
      typeAnswered++;
      const feedback = document.getElementById('typeFeedback');

      currentAttemptTypeLog.push({ q: q.q, correctAns: q.a[0], userAns: input.value.trim(), isCorrect: isCorrect });

      if (isCorrect) {
        typeCorrect++;
        input.classList.add('correct');
        feedback.className = 'type-feedback ok';
        feedback.textContent = 'Benar! [BENAR]';
      } else {
        input.classList.add('wrong');
        feedback.className = 'type-feedback no';
        feedback.textContent = 'Kurang tepat. Jawaban: ' + q.a[0];
      }
      input.disabled = true;

      // Salah atau benar, tetap lanjut ke soal berikutnya  -  tidak ada pengulangan.
      setTimeout(() =&gt; { typeIndex++; renderTypeQuestion(); }, 1100);
    });
  }

  function finishEvalAttempt(){
    const attemptScore = Math.round(((dragCorrect + typeCorrect) / (EVAL_DRAG_COUNT + EVAL_TYPE_COUNT)) * 100);
    evalAttemptScores.push(attemptScore);
    evalAttemptDetails.push({ drag: dragCorrect, type: typeCorrect });
    evalAttemptQuestionLogs.push({ drag: currentAttemptDragLog.slice(), type: currentAttemptTypeLog.slice() });
    renderAttemptStrip();

    document.getElementById('gamePanel').innerHTML =
      '&lt;p style="text-align:center; color:#33414F; font-size:0.95rem;"&gt;Percobaan ke-' + evalAttemptScores.length + ' selesai. Skor: &lt;strong&gt;' + attemptScore + '&lt;/strong&gt; (KKM = ' + KKM + ')&lt;/p&gt;';

    const finalPanel = document.getElementById('finalResultPanel');
    const label = document.getElementById('finalResultLabel');
    const scoreEl = document.getElementById('finalScoreValue');
    const detailEl = document.getElementById('finalResultDetail');
    const btnCoba = document.getElementById('btnCobaLagi');

    if (attemptScore &gt;= KKM) {
      evalFinalScore = attemptScore;
      evalFinalAttemptIndex = evalAttemptScores.length - 1;
      label.textContent = 'Nilai Evaluasi (Tercapai KKM)';
      scoreEl.textContent = evalFinalScore;
      detailEl.textContent = 'Selamat, kamu mencapai KKM pada percobaan ke-' + evalAttemptScores.length + '. Nilai evaluasi ini digabung 50:50 dengan skor Latihan Mengetik.';
      btnCoba.style.display = 'none';
      finalPanel.style.display = 'block';
      finalizeAndSubmit();
    } else if (evalAttemptScores.length &lt; MAX_ATTEMPTS) {
      label.textContent = 'Belum Mencapai KKM';
      scoreEl.textContent = attemptScore;
      detailEl.textContent = 'Skor percobaan ke-' + evalAttemptScores.length + ' adalah ' + attemptScore + ', belum mencapai KKM (' + KKM + '). Sisa kesempatan: ' + (MAX_ATTEMPTS - evalAttemptScores.length) + ' kali.';
      btnCoba.style.display = 'inline-block';
      finalPanel.style.display = 'block';
    } else {
      evalFinalScore = Math.max(...evalAttemptScores);
      evalFinalAttemptIndex = evalAttemptScores.indexOf(evalFinalScore);
      label.textContent = 'Nilai Evaluasi (Nilai Tertinggi dari 3 Percobaan)';
      scoreEl.textContent = evalFinalScore;
      detailEl.textContent = 'Percobaan sudah 3 kali dan belum mencapai KKM. Nilai tertinggi (' + evalFinalScore + ') dari 3 percobaan akan digunakan dan digabung 50:50 dengan skor Latihan Mengetik.';
      btnCoba.style.display = 'none';
      finalPanel.style.display = 'block';
      finalizeAndSubmit();
    }
  }

  function finalizeAndSubmit(){
    if (latihanScore === null) {
      document.getElementById('finalResultDetail').textContent += ' (Hitung dulu Skor Latihan Mengetik di Bagian 1 sebelum nilai akhir bisa dikirim.)';
      return;
    }
    combinedFinalScore = Math.round((latihanScore * 0.5) + (evalFinalScore * 0.5));
    document.getElementById('finalResultLabel').textContent = 'Nilai Akhir Tugas Praktik (Terkirim ke Guru)';
    document.getElementById('finalScoreValue').textContent = combinedFinalScore;
    document.getElementById('finalResultDetail').textContent =
      'Nilai akhir = 50% Skor Latihan Mengetik (' + latihanScore + ') + 50% Nilai Evaluasi (' + evalFinalScore + ') = ' + combinedFinalScore + '. Salin nilai ini ke buku catatan kalian pada kolom "Nilai Evaluasi". Mengirim ke guru...';

    const noAbsen = document.getElementById('noAbsen').value.trim();
    const nama = document.getElementById('nama').value.trim();
    const kelas = document.getElementById('kelas').value.trim();

    document.getElementById('btnUnduhPDF').style.display = 'inline-block';
    document.getElementById('pdfHint').style.display = 'block';

    fetch(GAS_ENDPOINT2, {
      method: 'POST',
      mode: 'no-cors',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ noAbsen: noAbsen, nama: nama, kelas: kelas, skor: combinedFinalScore, judulMateri: JUDUL_MATERI })
    }).then(() =&gt; {
      document.getElementById('finalResultDetail').textContent =
        'Nilai akhir = 50% Skor Latihan Mengetik (' + latihanScore + ') + 50% Nilai Evaluasi (' + evalFinalScore + ') = ' + combinedFinalScore + '. Nilai sudah terkirim ke guru. Unduh &amp; cetak bukti mengerjakan di bawah ini, lalu jangan lupa salin ke buku catatan kalian.';
    }).catch(() =&gt; {
      document.getElementById('finalResultDetail').textContent =
        'Nilai akhir = ' + combinedFinalScore + ', tetapi gagal terkirim otomatis. Unduh &amp; cetak bukti mengerjakan di bawah ini sebagai bukti fisik, tunjukkan ke guru, dan tetap catat di buku catatan kalian.';
    });
  }

  // ============================================================
  // BUKTI MENGERJAKAN (PDF, ukuran F4) - dibuat LANGSUNG dengan jsPDF
  // (teks asli/vektor, bukan screenshot atau dialog print browser,
  // sehingga hasilnya konsisten di HP maupun laptop dan tidak kosong)
  // ============================================================
  function downloadBuktiPDF(){
    if (combinedFinalScore === null) {
      alert('Selesaikan dulu Bagian 1 (Latihan Mengetik) dan Bagian 2 (Evaluasi Dokumen Master) sampai Nilai Akhir Tugas Praktik muncul, baru bukti PDF bisa diunduh.');
      return;
    }
    if (!window.jspdf) {
      alert('Pustaka pembuat PDF gagal dimuat (kemungkinan koneksi internet bermasalah). Coba muat ulang halaman lalu unduh lagi.');
      return;
    }

    const noAbsen = document.getElementById('noAbsen').value.trim();
    const nama = document.getElementById('nama').value.trim();
    const kelas = document.getElementById('kelas').value.trim();
    const now = new Date();
    const tanggalCetak = now.toLocaleDateString('id-ID', { day:'numeric', month:'long', year:'numeric' }) +
      ', ' + now.toLocaleTimeString('id-ID', { hour:'2-digit', minute:'2-digit' });

    const { jsPDF } = window.jspdf;
    const doc = new jsPDF({ unit: 'mm', format: [215, 330] }); // ukuran kertas F4
    const pageW = 215, pageH = 330;
    const marginX = 16, marginTop = 16, marginBottom = 16;
    const contentW = pageW - marginX * 2;
    let y = marginTop;

    function ensureSpace(h){
      if (y + h &gt; pageH - marginBottom) { doc.addPage([pageW, pageH]); y = marginTop; }
    }
    function text(str, opts){
      opts = opts || {};
      const size = opts.size || 10;
      const style = opts.style || 'normal';
      const align = opts.align || 'left';
      const gapAfter = opts.gap !== undefined ? opts.gap : 2;
      doc.setFont('helvetica', style);
      doc.setFontSize(size);
      const x = align === 'center' ? pageW / 2 : marginX;
      const lines = doc.splitTextToSize(String(str), contentW);
      lines.forEach(ln =&gt; {
        ensureSpace(size * 0.5);
        doc.text(ln, x, y, { align: align });
        y += size * 0.45;
      });
      y += gapAfter;
    }
    function divider(){
      ensureSpace(5);
      doc.setDrawColor(60);
      doc.setLineWidth(0.3);
      doc.line(marginX, y, pageW - marginX, y);
      y += 5;
    }

    // ---- KOP ----
    text('BUKTI MENGERJAKAN TUGAS PRAKTIK', { size:16, style:'bold', align:'center', gap:2 });
    text(JUDUL_MATERI, { size:11, align:'center', gap:1 });
    text('Informatika - Fase E - Kelas X SMK', { size:9, align:'center', gap:4 });
    divider();

    // ---- IDENTITAS ----
    text('No. Absen : ' + (noAbsen || '-'), { size:10, gap:1 });
    text('Nama      : ' + (nama || '-'), { size:10, gap:1 });
    text('Kelas     : ' + (kelas || '-'), { size:10, gap:1 });
    text('Dicetak   : ' + tanggalCetak, { size:10, gap:4 });
    divider();

    // ---- RINGKASAN NILAI ----
    text('RINGKASAN NILAI', { size:12, style:'bold', gap:3 });
    text('1. Latihan Mengetik (1-' + LATIHAN.length + ')  -  Bobot 50%  -  Skor: ' + (latihanScore !== null ? latihanScore : '-'), { size:10, gap:1 });
    text('2. Evaluasi Dokumen Master (percobaan ke-' + (evalFinalAttemptIndex !== null ? (evalFinalAttemptIndex + 1) : '-') + ' dari ' + evalAttemptScores.length + ', KKM=' + KKM + ')  -  Bobot 50%  -  Skor: ' + (evalFinalScore !== null ? evalFinalScore : '-'), { size:10, gap:1 });
    if (evalAttemptScores.length) {
      text('   Rincian tiap percobaan: ' + evalAttemptScores.map((s,i) =&gt; 'Percobaan ' + (i+1) + ' = ' + s).join('   |   '), { size:9, gap:2 });
    }
    text('NILAI AKHIR TUGAS PRAKTIK : ' + combinedFinalScore, { size:14, style:'bold', gap:4 });
    divider();

    // ---- RINCIAN JAWABAN EVALUASI (BENAR &amp; SALAH) ----
    if (evalFinalAttemptIndex !== null &amp;&amp; evalAttemptQuestionLogs[evalFinalAttemptIndex]) {
      const logDetail = evalAttemptQuestionLogs[evalFinalAttemptIndex];
      text('RINCIAN JAWABAN EVALUASI (Percobaan ke-' + (evalFinalAttemptIndex + 1) + ')', { size:12, style:'bold', gap:3 });

      text('Bagian A - Cocokkan Fitur', { size:10, style:'bold', gap:1 });
      logDetail.drag.forEach((r, i) =&gt; {
        ensureSpace(10);
        text((i+1) + '. ' + r.func, { size:9, gap:0.5 });
        text('    Jawaban kamu: ' + r.userAns + '   |   Jawaban benar: ' + r.correctAns + '   |   ' + (r.isCorrect ? 'BENAR' : 'SALAH'), { size:9, style: r.isCorrect ? 'normal' : 'bold', gap:2 });
      });

      text('Bagian B - Ketik Cepat', { size:10, style:'bold', gap:1 });
      logDetail.type.forEach((r, i) =&gt; {
        ensureSpace(10);
        text((i+1) + '. ' + r.q, { size:9, gap:0.5 });
        text('    Jawaban kamu: ' + (r.userAns || '(kosong)') + '   |   Jawaban benar: ' + r.correctAns + '   |   ' + (r.isCorrect ? 'BENAR' : 'SALAH'), { size:9, style: r.isCorrect ? 'normal' : 'bold', gap:2 });
      });
      divider();
    }

    // ---- JAWABAN LATIHAN MENGETIK 1-19 ----
    text('JAWABAN LATIHAN MENGETIK (1-' + LATIHAN.length + ')', { size:12, style:'bold', gap:3 });
    LATIHAN.forEach((item, idx) =&gt; {
      const editor = document.querySelectorAll('.editor-box')[idx];
      const typed = editor ? editor.innerText.trim() : '';
      const s = scoreLatihan(idx);
      ensureSpace(12);
      text('Latihan ' + (idx+1) + ' - ' + item.title + '  (skor: ' + s + ')', { size:10, style:'bold', gap:1 });
      text(typed ? typed : '(belum diisi)', { size:9, gap:3 });
    });

    divider();
    ensureSpace(22);
    text('Tanda tangan siswa,', { size:10, gap:16 });
    text(nama || '(.....................................)', { size:10, gap:6 });
    ensureSpace(22);
    text('Tanda tangan guru mata pelajaran,', { size:10, gap:16 });
    text('(.....................................)', { size:10, gap:2 });

    const namaFile = 'Bukti-Tugas-Praktik-' + (nama ? nama.replace(/[^a-zA-Z0-9]+/g,'_') : 'siswa') + '.pdf';
    doc.save(namaFile);
  }

  document.getElementById('btnUnduhPDF').addEventListener('click', downloadBuktiPDF);
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/fitur-lanjut-pengolah-kata-untuk.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-5689077165551123896</guid><pubDate>Mon, 07 Sep 2026 05:59:32 +0000</pubDate><atom:updated>2026-09-14T08:22:47.401+07:00</atom:updated><title>Pengenalan Aplikasi Pengolah Kata untuk Administrasi Perkantoran</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Informatika X - Pengenalan Aplikasi Pengolah Kata untuk Administrasi Perkantoran&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=Source+Serif+4:opsz,wght@8..60,400;8..60,600;8..60,700&amp;family=Inter:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"&gt;&lt;/script&gt;
&lt;style&gt;
  :root{
    --ink:#182634; --paper:#f6f3ea; --card:#ffffff; --line:#dcd3bd;
    --teal:#0e6f63; --teal-dark:#0a5249;
    --gold:#b9791d; --gold-dark:#8f5c12;
    --danger:#c1392b; --ok:#1f7a5c;
    --tint:#e2f2ee;
  }
  *{box-sizing:border-box;}
  body{margin:0; background:var(--paper); color:var(--ink); font-family:'Inter', sans-serif; line-height:1.55; padding-bottom:64px;}
  .letterhead{background:linear-gradient(135deg, var(--teal-dark), var(--teal)); padding:30px 24px 22px; text-align:center; color:#fff;}
  .letterhead .eyebrow{font-size:12.5px; letter-spacing:.06em; color:#cdeee7; margin-bottom:8px; font-weight:600;}
  .letterhead h1{font-family:'Source Serif 4', serif; font-weight:700; font-size:clamp(23px,4vw,31px); margin:0 0 8px; max-width:800px; margin-left:auto; margin-right:auto;}
  .letterhead p.sub{margin:0; font-size:14.5px; color:#e2f3ef; max-width:700px; margin-left:auto; margin-right:auto;}
  main{max-width:820px; margin:0 auto; padding:0 24px;}
  section{margin-top:38px;}
  h2.section-title{
    font-family:'Source Serif 4', serif; font-size:21px; font-weight:700; color:var(--ink);
    background:var(--tint); border-left:6px solid var(--gold); padding:10px 14px; border-radius:3px; margin:0 0 16px;
  }
  h3.step-title{font-family:'Source Serif 4', serif; font-size:17px; font-weight:700; color:var(--teal-dark); margin:0 0 10px; display:flex; align-items:center; gap:8px;}
  h3.step-title .num{background:var(--gold); color:#fff; width:25px; height:25px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; font-size:13px; font-family:'Inter',sans-serif; flex:none;}
  .card{background:var(--card); border:1px solid var(--line); border-radius:6px; padding:22px 24px; margin-bottom:16px; box-shadow:0 1px 2px rgba(24,38,52,.04);}
  .card h3{font-family:'Source Serif 4', serif; font-size:17.5px; margin:0 0 8px; color:var(--teal-dark);}
  .card p, .card li{font-size:15px; color:#2b3746;}
  .card ul, .card ol{padding-left:20px; margin:8px 0;}
  table.std{width:100%; border-collapse:collapse; margin-top:8px; font-size:14.5px;}
  table.std th, table.std td{border:1px solid var(--line); padding:8px 10px; text-align:left;}
  table.std th{background:var(--tint); font-family:'Source Serif 4', serif; color:var(--teal-dark);}
  code.kbd{background:#eef3f1; border:1px solid var(--line); border-radius:3px; padding:1px 6px; font-family:monospace; font-size:13px; color:var(--teal-dark);}
  details{margin-bottom:10px;}
  details summary{cursor:pointer; font-weight:600; padding:6px 0; list-style:none; color:var(--ink);}
  details summary::-webkit-details-marker{display:none;}
  details summary::before{content:"+ "; color:var(--gold); font-weight:700;}
  details[open] summary::before{content:"- ";}

  .resume-card{background:#fbf4e6; border:1px solid #e6d3a0; border-left:6px solid var(--gold); border-radius:6px; padding:20px 24px;}
  .resume-card ul{margin:0; padding-left:20px;}
  .resume-card li{font-size:14.5px; margin-bottom:7px; color:#2b3746;}
  .resume-card b{color:var(--gold-dark);}

  fieldset{border:1px solid var(--line); border-radius:8px; padding:20px 22px; background:var(--card); margin-bottom:18px;}
  legend{font-family:'Source Serif 4', serif; font-weight:700; padding:0 8px; color:var(--teal-dark); font-size:16px;}
  label.field-label{display:block; font-size:13.5px; font-weight:600; margin:12px 0 5px;}
  input[type=text], input[type=number], select, textarea{
    width:100%; padding:9px 10px; font-size:15px; border:1px solid #b7ad93; border-radius:4px;
    font-family:inherit; background:#fdfcf9;
  }
  textarea{min-height:110px; resize:vertical; line-height:1.6;}
  input:focus, select:focus, textarea:focus{outline:2px solid var(--gold); outline-offset:1px;}

  .quiz-item{border-top:1px dashed var(--line); padding-top:16px; margin-top:16px;}
  .quiz-item:first-child{border-top:none; padding-top:0; margin-top:0;}
  .quiz-item p.q{font-weight:600; margin:0 0 10px;}
  .quiz-item .opt{display:flex; align-items:flex-start; gap:9px; padding:7px 9px; border-radius:4px; margin-bottom:5px; cursor:pointer; font-size:14.5px;}
  .quiz-item .opt:hover{background:var(--tint);}
  .quiz-item input[type=radio]{margin-top:3px;}

  .essay-item{border-top:1px dashed var(--line); padding-top:16px; margin-top:16px;}
  .essay-item:first-child{border-top:none; padding-top:0; margin-top:0;}
  .essay-item p.q{font-weight:600; margin:0 0 10px;}
  .essay-note{font-size:12.5px; color:var(--danger); margin-top:6px; font-weight:600;}
  .essay-count{font-size:12.5px; color:#7a8390; margin-top:4px;}

  .game-toolbar{display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; flex-wrap:wrap; gap:8px;}
  .game-toolbar a{font-size:13px; color:var(--gold-dark); text-decoration:none; font-weight:700;}
  .game-toolbar a:hover{text-decoration:underline;}
  .game-wrap{border:2px solid var(--teal); border-radius:8px; overflow:hidden; background:#f0fdf4;}
  .game-wrap iframe{display:block; width:100%; height:720px; border:0;}

  .status-chip{display:inline-flex; align-items:center; gap:6px; font-size:13.5px; font-weight:700; padding:7px 14px; border-radius:20px; background:#f5e8d2; color:var(--gold-dark); margin-top:12px;}
  .status-chip.ok-chip{background:#d9f0e5; color:var(--ok);}
  .status-chip .dot{width:8px; height:8px; border-radius:50%; background:currentColor;}

  button.submit-btn{background:linear-gradient(135deg, var(--teal-dark), var(--teal)); color:#fff; border:none; border-radius:6px; padding:14px 22px; font-size:15.5px; font-weight:700; cursor:pointer; font-family:'Inter', sans-serif; width:100%; margin-top:6px;}
  button.submit-btn:hover{filter:brightness(1.08);}
  button.submit-btn:disabled{background:#b9c0bd; cursor:not-allowed;}

  button.pdf-btn{background:linear-gradient(135deg, var(--gold-dark), var(--gold)); color:#fff; border:none; border-radius:6px; padding:14px 22px; font-size:15.5px; font-weight:700; cursor:pointer; font-family:'Inter', sans-serif; width:100%; margin-top:10px;}
  button.pdf-btn:hover{filter:brightness(1.08);}
  button.pdf-btn:disabled{background:#d8cbb0; cursor:not-allowed;}

  .msg{padding:12px 14px; border-radius:6px; font-size:14.5px; margin-top:14px; display:none;}
  .msg.show{display:block;}
  .msg.ok{background:#d9f0e5; color:var(--ok); border:1px solid #a9dcc3;}
  .msg.err{background:#fbe2db; color:var(--danger); border:1px solid #eeb7a7;}
  .msg.wait{background:#eef0eb; color:#555; border:1px solid var(--line);}

  .stamp{display:inline-block; border:2px solid var(--gold); color:var(--gold-dark); border-radius:6px; padding:6px 12px; font-family:'Source Serif 4', serif; font-weight:700; font-size:13px; transform:rotate(-3deg);}
  .checklist{font-size:13.5px; color:#3d4a58; margin-top:14px; padding:14px 16px; background:var(--tint); border-radius:6px;}
  .checklist div{display:flex; align-items:center; gap:8px; margin-bottom:6px;}
  .checklist .mark{width:16px; height:16px; border-radius:50%; border:2px solid #9aa5a1; display:inline-block; flex:none; position:relative;}
  .checklist .mark.done{background:var(--ok); border-color:var(--ok);}
  .checklist .mark.done::after{content:"v"; color:#fff; font-size:10px; font-weight:700; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;}

  footer{max-width:820px; margin:48px auto 0; padding:0 24px; font-size:12.5px; color:#7a8390; text-align:center;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="letterhead"&gt;
  &lt;div class="eyebrow"&gt;MATA PELAJARAN INFORMATIKA - KELAS X SMK&lt;/div&gt;
  &lt;h1&gt;Pengenalan Aplikasi Pengolah Kata untuk Administrasi Perkantoran&lt;/h1&gt;
  &lt;p class="sub"&gt;Membuat, mengedit, memformat, dan menyimpan dokumen administrasi sesuai standar perkantoran&lt;/p&gt;
&lt;/div&gt;

&lt;main&gt;

  &lt;!-- ================= MATERI ================= --&gt;
  &lt;section id="materi"&gt;
    &lt;h2 class="section-title"&gt;A. Materi Pembelajaran&lt;/h2&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;1. Apa itu Aplikasi Pengolah Kata?&lt;/h3&gt;
      &lt;p&gt;&lt;b&gt;Aplikasi pengolah kata (word processor)&lt;/b&gt; adalah perangkat lunak yang digunakan untuk membuat, menyunting (mengedit), memformat, menyimpan, dan mencetak dokumen berbasis teks. Dalam dunia administrasi perkantoran, aplikasi ini menjadi alat utama untuk menghasilkan surat, memo, nota dinas, laporan, proposal, undangan, hingga dokumen kontrak.&lt;/p&gt;
      &lt;p&gt;Berbeda dengan mesin tik manual, aplikasi pengolah kata modern memungkinkan pengguna mengedit teks berulang kali tanpa merusak dokumen, menyisipkan gambar dan tabel, memeriksa ejaan otomatis, serta menyimpan dokumen dalam berbagai format digital yang mudah dibagikan.&lt;/p&gt;
      &lt;table class="std"&gt;
        &lt;tr&gt;&lt;th&gt;Aplikasi&lt;/th&gt;&lt;th&gt;Sifat&lt;/th&gt;&lt;th&gt;Karakteristik&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Microsoft Word&lt;/td&gt;&lt;td&gt;Berbayar (desktop)&lt;/td&gt;&lt;td&gt;Standar industri, fitur paling lengkap, format asli .docx&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Google Docs&lt;/td&gt;&lt;td&gt;Gratis (berbasis web/cloud)&lt;/td&gt;&lt;td&gt;Kolaborasi real-time, otomatis tersimpan di Google Drive&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;LibreOffice Writer&lt;/td&gt;&lt;td&gt;Gratis &amp; open source&lt;/td&gt;&lt;td&gt;Alternatif Word untuk desktop, kompatibel dengan .docx&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;WPS Writer&lt;/td&gt;&lt;td&gt;Gratis (versi dasar)&lt;/td&gt;&lt;td&gt;Ringan, tampilan mirip Microsoft Word&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;2. Mengenal Antarmuka (Ribbon/Menu)&lt;/h3&gt;
      &lt;p&gt;Sebelum bekerja, kenali dulu letak perintah pada aplikasi pengolah kata. Microsoft Word menggunakan sistem &lt;b&gt;Ribbon&lt;/b&gt; berisi tab menu, sedangkan Google Docs menggunakan &lt;b&gt;menu bar&lt;/b&gt; klasik, namun fungsinya setara:&lt;/p&gt;
      &lt;table class="std"&gt;
        &lt;tr&gt;&lt;th&gt;Microsoft Word (Ribbon)&lt;/th&gt;&lt;th&gt;Google Docs (Menu)&lt;/th&gt;&lt;th&gt;Fungsi utama&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Home&lt;/td&gt;&lt;td&gt;Format&lt;/td&gt;&lt;td&gt;Font, ukuran huruf, warna, perataan teks, bullet/numbering&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Insert&lt;/td&gt;&lt;td&gt;Insert&lt;/td&gt;&lt;td&gt;Menyisipkan gambar, tabel, header/footer, nomor halaman, shape&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Layout&lt;/td&gt;&lt;td&gt;File &amp;gt; Page setup&lt;/td&gt;&lt;td&gt;Ukuran kertas, orientasi, margin, kolom&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;References&lt;/td&gt;&lt;td&gt;Insert &amp;gt; Table of contents&lt;/td&gt;&lt;td&gt;Daftar isi, catatan kaki, kutipan&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Review&lt;/td&gt;&lt;td&gt;Tools&lt;/td&gt;&lt;td&gt;Spell check, komentar, lacak perubahan (track changes)&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;View&lt;/td&gt;&lt;td&gt;View&lt;/td&gt;&lt;td&gt;Mode tampilan, zoom, tampilkan penggaris&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;3. Membuat Dokumen Baru&lt;/h3&gt;
      &lt;ol&gt;
        &lt;li&gt;Buka aplikasi pengolah kata, lalu pilih &lt;b&gt;Blank document / Dokumen kosong&lt;/b&gt; atau gunakan template yang tersedia (misalnya template surat resmi).&lt;/li&gt;
        &lt;li&gt;Atur terlebih dahulu ukuran kertas (umumnya &lt;b&gt;A4&lt;/b&gt; untuk dokumen perkantoran di Indonesia) melalui menu &lt;i&gt;Layout &amp;gt; Size&lt;/i&gt;.&lt;/li&gt;
        &lt;li&gt;Atur margin halaman sebelum mulai mengetik agar tata letak dokumen konsisten.&lt;/li&gt;
        &lt;li&gt;Mulai mengetik isi dokumen sesuai kebutuhan (surat, laporan, memo, dsb).&lt;/li&gt;
      &lt;/ol&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;4. Mengedit Dokumen&lt;/h3&gt;
      &lt;p&gt;Mengedit adalah proses menyunting teks yang sudah ditulis. Beberapa teknik dasar mengedit dokumen:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;b&gt;Menyisipkan (Insert)&lt;/b&gt; - menambahkan kata, kalimat, gambar, atau tabel di posisi kursor.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Menghapus (Delete/Backspace)&lt;/b&gt; - membuang karakter, kata, atau paragraf yang tidak diperlukan.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Menyalin &amp; menempel (Copy-Paste)&lt;/b&gt; - menggandakan teks/objek ke bagian lain dokumen.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Memindahkan (Cut-Paste)&lt;/b&gt; - memindahkan teks/objek dari satu tempat ke tempat lain.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Mencari &amp; mengganti (Find &amp; Replace)&lt;/b&gt; - menemukan kata tertentu dan menggantinya secara otomatis di seluruh dokumen, sangat berguna saat merevisi nomor surat atau nama instansi yang berulang.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Undo &amp; Redo&lt;/b&gt; - membatalkan atau mengulang perubahan terakhir.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;Shortcut keyboard yang wajib dikuasai staf administrasi:&lt;/p&gt;
      &lt;p&gt;
        &lt;code class="kbd"&gt;Ctrl+C&lt;/code&gt; salin ,
        &lt;code class="kbd"&gt;Ctrl+X&lt;/code&gt; potong ,
        &lt;code class="kbd"&gt;Ctrl+V&lt;/code&gt; tempel ,
        &lt;code class="kbd"&gt;Ctrl+Z&lt;/code&gt; batalkan ,
        &lt;code class="kbd"&gt;Ctrl+Y&lt;/code&gt; ulangi ,
        &lt;code class="kbd"&gt;Ctrl+S&lt;/code&gt; simpan ,
        &lt;code class="kbd"&gt;Ctrl+P&lt;/code&gt; cetak ,
        &lt;code class="kbd"&gt;Ctrl+F&lt;/code&gt; cari
      &lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;5. Memformat Dokumen&lt;/h3&gt;
      &lt;p&gt;Format dokumen menentukan tampilan visual sekaligus keterbacaan dan profesionalitas dokumen resmi.&lt;/p&gt;
      &lt;details&gt;
        &lt;summary&gt;Jenis dan ukuran huruf (font)&lt;/summary&gt;
        &lt;p&gt;Dokumen resmi perkantoran di Indonesia umumnya menggunakan huruf &lt;b&gt;Times New Roman ukuran 12pt&lt;/b&gt; atau &lt;b&gt;Arial ukuran 11pt&lt;/b&gt;, karena mudah dibaca dan bersifat formal. Hindari font dekoratif (misalnya Comic Sans) untuk dokumen resmi.&lt;/p&gt;
      &lt;/details&gt;
      &lt;details&gt;
        &lt;summary&gt;Perataan teks (alignment)&lt;/summary&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;b&gt;Rata kiri (Align Left)&lt;/b&gt; - umum untuk draf/kerja.&lt;/li&gt;
          &lt;li&gt;&lt;b&gt;Rata tengah (Center)&lt;/b&gt; - untuk judul dokumen.&lt;/li&gt;
          &lt;li&gt;&lt;b&gt;Rata kanan (Align Right)&lt;/b&gt; - untuk tempat &amp; tanggal surat.&lt;/li&gt;
          &lt;li&gt;&lt;b&gt;Rata kiri-kanan (Justify)&lt;/b&gt; - standar untuk isi/paragraf surat resmi agar tepi kiri dan kanan sama rata.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/details&gt;
      &lt;details&gt;
        &lt;summary&gt;Spasi baris &amp; margin&lt;/summary&gt;
        &lt;p&gt;Spasi baris dokumen resmi umumnya &lt;b&gt;1,15 sampai 1,5&lt;/b&gt;. Margin standar (Normal) yang lazim digunakan adalah &lt;b&gt;2,54 cm&lt;/b&gt; di seluruh sisi, meskipun instansi tertentu memakai margin khusus (misal 4 cm kiri &amp; atas, 3 cm kanan &amp; bawah) sesuai pedoman tata naskah dinas.&lt;/p&gt;
      &lt;/details&gt;
      &lt;details&gt;
        &lt;summary&gt;Elemen pendukung lain&lt;/summary&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;b&gt;Bullet &amp; Numbering&lt;/b&gt; - merapikan daftar poin atau langkah bernomor.&lt;/li&gt;
          &lt;li&gt;&lt;b&gt;Tabel&lt;/b&gt; - menyajikan data terstruktur (misalnya daftar hadir, rincian anggaran).&lt;/li&gt;
          &lt;li&gt;&lt;b&gt;Header/Footer &amp; Page Number&lt;/b&gt; - nomor halaman dan identitas dokumen berulang di tiap halaman.&lt;/li&gt;
          &lt;li&gt;&lt;b&gt;Watermark, Page Break, Columns&lt;/b&gt; - pengaturan tata letak lanjutan untuk dokumen kompleks (kontrak, buletin, laporan panjang).&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/details&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;6. Standar Dokumen Administrasi Perkantoran&lt;/h3&gt;
      &lt;p&gt;Dokumen resmi (misalnya surat dinas) memiliki struktur baku yang harus dikenali sebelum diketik:&lt;/p&gt;
      &lt;table class="std"&gt;
        &lt;tr&gt;&lt;th&gt;Bagian&lt;/th&gt;&lt;th&gt;Keterangan&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kop surat (letterhead)&lt;/td&gt;&lt;td&gt;Logo, nama instansi, dan alamat di bagian atas dokumen&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Nomor, Hal, Lampiran&lt;/td&gt;&lt;td&gt;Kode administrasi dan ringkasan isi surat&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Tanggal surat&lt;/td&gt;&lt;td&gt;Ditulis rata kanan, mengikuti tempat penerbitan&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Alamat tujuan&lt;/td&gt;&lt;td&gt;Nama dan alamat penerima surat&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Salam pembuka &amp; isi&lt;/td&gt;&lt;td&gt;Paragraf pembuka, isi pokok, dan penutup&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Tanda tangan &amp; nama jelas&lt;/td&gt;&lt;td&gt;Pengesahan dokumen oleh pejabat berwenang&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;7. Menyimpan Dokumen&lt;/h3&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;b&gt;.docx&lt;/b&gt; - format standar Microsoft Word, mudah diedit kembali.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;.pdf&lt;/b&gt; - untuk dokumen final yang tidak boleh diubah, tampilan konsisten di semua perangkat.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;.odt&lt;/b&gt; - format terbuka (open document), digunakan LibreOffice.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;.rtf&lt;/b&gt; - format teks kaya yang kompatibel lintas aplikasi lama.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;Gunakan shortcut &lt;code class="kbd"&gt;Ctrl+S&lt;/code&gt; secara berkala saat mengetik agar dokumen tidak hilang. Beri &lt;b&gt;nama file yang jelas&lt;/b&gt;, memuat jenis dokumen, nomor/nama, dan tanggal, misalnya &lt;code class="kbd"&gt;Surat_Undangan_Rapat_04Sep2026.docx&lt;/code&gt;, bukan nama acak seperti &lt;code class="kbd"&gt;dokumen1.docx&lt;/code&gt;. Untuk dokumen berbasis Google Docs, penyimpanan berjalan otomatis ke Google Drive setiap ada perubahan.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;8. Kolaborasi &amp; Berbagi Dokumen&lt;/h3&gt;
      &lt;p&gt;Aplikasi berbasis cloud seperti Google Docs memungkinkan beberapa staf mengerjakan satu dokumen secara bersamaan (real-time). Pengaturan akses berbagi umumnya terdiri dari:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;b&gt;Viewer (Pelihat)&lt;/b&gt; - hanya bisa membaca dokumen.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Commenter (Pemberi komentar)&lt;/b&gt; - bisa menambahkan catatan tanpa mengubah isi.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Editor&lt;/b&gt; - bisa mengubah langsung isi dokumen.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;Fitur &lt;b&gt;Version History / Riwayat Versi&lt;/b&gt; mencatat setiap perubahan sehingga dokumen bisa dikembalikan ke versi sebelumnya jika terjadi kesalahan, sangat penting untuk dokumen administrasi yang dikerjakan bersama tim.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;h3&gt;9. Etika dan Keamanan Dokumen Digital&lt;/h3&gt;
      &lt;ul&gt;
        &lt;li&gt;Jangan mengubah atau menghapus dokumen milik orang lain tanpa izin, terutama pada dokumen bersama (shared document).&lt;/li&gt;
        &lt;li&gt;Lindungi dokumen penting/rahasia dengan kata sandi (password protect) sebelum dibagikan.&lt;/li&gt;
        &lt;li&gt;Cantumkan sumber jika mengutip isi dari dokumen atau publikasi lain (hindari plagiarisme).&lt;/li&gt;
        &lt;li&gt;Selalu buat cadangan (backup) dokumen penting di lebih dari satu tempat penyimpanan.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ================= RESUME ================= --&gt;
  &lt;section id="resume"&gt;
    &lt;h2 class="section-title"&gt;B. Resume Materi&lt;/h2&gt;
    &lt;div class="resume-card"&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;b&gt;Definisi:&lt;/b&gt; aplikasi pengolah kata (word processor) untuk membuat, mengedit, memformat, menyimpan, dan mencetak dokumen teks. Contoh: Microsoft Word, Google Docs, LibreOffice Writer, WPS Writer.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Antarmuka:&lt;/b&gt; perintah terkumpul dalam Ribbon (Word: Home, Insert, Layout, References, Review, View) atau menu bar (Google Docs: Format, Insert, File, Tools, View).&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Membuat dokumen:&lt;/b&gt; mulai dari Blank document, atur ukuran kertas A4, lalu atur margin sebelum mengetik.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Mengedit:&lt;/b&gt; insert, delete, copy-paste, cut-paste, find &amp; replace, undo-redo, dipercepat dengan shortcut &lt;code class="kbd"&gt;Ctrl+C/X/V/Z/Y/S/P/F&lt;/code&gt;.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Memformat:&lt;/b&gt; font resmi Times New Roman 12pt / Arial 11pt; perataan left/center/right/justify; spasi baris 1,15 sampai 1,5; margin standar 2,54 cm; dilengkapi bullet, numbering, tabel, header/footer.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Struktur surat resmi:&lt;/b&gt; kop surat, nomor/hal/lampiran, tanggal, alamat tujuan, salam &amp; isi, tanda tangan.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Menyimpan:&lt;/b&gt; .docx (bisa diedit), .pdf (final, tidak diedit), .odt, .rtf, dengan nama file jelas (jenis dokumen + nama/nomor + tanggal).&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Kolaborasi:&lt;/b&gt; hak akses viewer/commenter/editor, dan version history untuk melacak &amp; mengembalikan perubahan.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Etika &amp; keamanan:&lt;/b&gt; hormati dokumen bersama, lindungi dokumen rahasia dengan password, hindari plagiarisme, selalu backup.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ================= TUGAS PRIBADI (GABUNGAN) ================= --&gt;
  &lt;section id="tugas"&gt;
    &lt;h2 class="section-title"&gt;C. Tugas Pribadi (Dikerjakan Langsung di Web Ini)&lt;/h2&gt;
    &lt;div class="card"&gt;
      &lt;p&gt;Tugas ini terdiri atas empat langkah: identitas, uji keterampilan (game), soal pilihan ganda, dan soal esai. &lt;b&gt;Nilai Evaluasi Akhir bersumber dari 15 soal (10 PG + 5 esai) dengan skor total 100&lt;/b&gt;, sedangkan skor game ditampilkan terpisah sebagai informasi keterampilan. Setelah berhasil dikirim, unduh bukti pengerjaan dalam format PDF ukuran F4, cetak, lalu serahkan ke guru. &lt;span class="stamp"&gt;1x kirim per siswa&lt;/span&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;form id="taskForm" novalidate&gt;

      &lt;fieldset&gt;
        &lt;legend&gt;Identitas Siswa&lt;/legend&gt;
        &lt;label class="field-label" for="noAbsen"&gt;No. Absen&lt;/label&gt;
        &lt;input type="number" id="noAbsen" min="1" max="60" placeholder="Contoh: 12" required&gt;
        &lt;label class="field-label" for="nama"&gt;Nama Lengkap&lt;/label&gt;
        &lt;input type="text" id="nama" placeholder="Tulis nama lengkap" required&gt;
        &lt;label class="field-label" for="kelas"&gt;Kelas&lt;/label&gt;
        &lt;select id="kelas" required&gt;
          &lt;option value="" disabled selected&gt;- Pilih kelas -&lt;/option&gt;
          &lt;option value="X TB1"&gt;X TB1&lt;/option&gt;
          &lt;option value="X TB2"&gt;X TB2&lt;/option&gt;
          &lt;option value="X TO1"&gt;X TO1&lt;/option&gt;
          &lt;option value="X TO2"&gt;X TO2&lt;/option&gt;
          &lt;option value="X TJKT1"&gt;X TJKT1&lt;/option&gt;
          &lt;option value="X TJKT2"&gt;X TJKT2&lt;/option&gt;
        &lt;/select&gt;
      &lt;/fieldset&gt;

      &lt;fieldset&gt;
        &lt;h3 class="step-title"&gt;&lt;span class="num"&gt;1&lt;/span&gt; Uji Keterampilan - Game Master Pengolah Kata&lt;/h3&gt;
        &lt;p style="font-size:14.5px; color:#4a5568; margin-top:0;"&gt;Seret (drag) kartu tugas ke ikon fitur pengolah kata yang tepat. Mainkan sampai selesai (50 tantangan). Skor ini bersifat informasi keterampilan dan tidak dihitung ke Nilai Evaluasi Akhir.&lt;/p&gt;
        &lt;div class="game-toolbar"&gt;
          &lt;span&gt;&lt;/span&gt;
          &lt;a href="data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImlkIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iPgogICAgPHRpdGxlPkdhbWUgQWRtaW5pc3RyYXNpOiBNYXN0ZXIgUGVuZ29sYWggS2F0YTwvdGl0bGU+CiAgICA8IS0tIFRhaWx3aW5kIENTUyB1bnR1ayBTdHlsaW5nIENlcGF0IGRhbiBSZXNwb25zaWYgLS0+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4udGFpbHdpbmRjc3MuY29tIj48L3NjcmlwdD4KICAgIDwhLS0gRm9udEF3ZXNvbWUgdW50dWsgSWtvbiBNZW51IFBlbmdvbGFoIEthdGEgLS0+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS82LjQuMC9jc3MvYWxsLm1pbi5jc3MiPgogICAgPCEtLSBHb29nbGUgRm9udHMgKFBvcHBpbnMpIC0tPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Qb3BwaW5zOndnaHRANDAwOzYwMDs3MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgogICAgCiAgICA8c3R5bGU+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUG9wcGlucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGZkZjQ7IC8qIEhpamF1IHNhbmdhdCBtdWRhL3NlZ2FyICovCiAgICAgICAgICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7IC8qIE1lbmNlZ2FoIHB1bGwtdG8tcmVmcmVzaCBkaSBtb2JpbGUgKi8KICAgICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLyogQW5pbWFzaSAqLwogICAgICAgIC5ib3VuY2UtaW4gewogICAgICAgICAgICBhbmltYXRpb246IGJvdW5jZUluIDAuNXMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpOwogICAgICAgIH0KICAgICAgICBAa2V5ZnJhbWVzIGJvdW5jZUluIHsKICAgICAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7IG9wYWNpdHk6IDA7IH0KICAgICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH0KICAgICAgICB9CgogICAgICAgIC5zaGFrZSB7CiAgICAgICAgICAgIGFuaW1hdGlvbjogc2hha2UgMC40czsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBzaGFrZSB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9CiAgICAgICAgICAgIDI1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTBweCk7IH0KICAgICAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpOyB9CiAgICAgICAgICAgIDc1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTBweCk7IH0KICAgICAgICB9CgogICAgICAgIC8qIFN0eWxpbmcgS2FydHUgRHJhZ2dhYmxlICovCiAgICAgICAgLmRyYWdnYWJsZS1jYXJkIHsKICAgICAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7IC8qIFBlbnRpbmcgdW50dWsgY3VzdG9tIHRvdWNoIGRyYWcgKi8KICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzOwogICAgICAgIH0KICAgICAgICAuZHJhZ2dhYmxlLWNhcmQ6YWN0aXZlIHsKICAgICAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgICB9CiAgICAgICAgLmRyYWdnaW5nIHsKICAgICAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICAgICAgICB6LWluZGV4OiA1MDsKICAgICAgICB9CgogICAgICAgIC8qIFN0eWxpbmcgRHJvcCBab25lICovCiAgICAgICAgLmRyb3Atem9uZSB7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIC5kcm9wLXpvbmUuZHJhZy1vdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RiZWFmZTsgLyogQmlydSBtdWRhIHNhYXQgZGktaG92ZXIgKi8KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2OwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICAgIH0KICAgICAgICAuZHJvcC16b25lLmNvcnJlY3QgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNmY2U3OwogICAgICAgICAgICBib3JkZXItY29sb3I6ICMyMmM1NWU7CiAgICAgICAgICAgIGNvbG9yOiAjMTY2NTM0OwogICAgICAgIH0KICAgICAgICAuZHJvcC16b25lLndyb25nIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZTJlMjsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZWY0NDQ0OwogICAgICAgICAgICBjb2xvcjogIzk5MWIxYjsKICAgICAgICB9CgogICAgICAgIC8qIFV0aWxpdHkgdW50dWsgY3VzdG9tIGRyYWcgbW9iaWxlICovCiAgICAgICAgLmFic29sdXRlLWRyYWcgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIFN1cGF5YSBlbGVtZW4gZGkgYmF3YWhueWEgKGRyb3Agem9uZSkgYmlzYSB0ZXJkZXRla3NpICovCiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keSBjbGFzcz0ibWluLWgtc2NyZWVuIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNCI+CgogICAgPCEtLSBMQVlBUiBNVUxBSSAtLT4KICAgIDxkaXYgaWQ9InN0YXJ0LXNjcmVlbiIgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtM3hsIHNoYWRvdy0yeGwgcC04IG1heC13LW1kIHctZnVsbCB0ZXh0LWNlbnRlciBib3VuY2UtaW4gYm9yZGVyLXQtOCBib3JkZXItYmx1ZS01MDAiPgogICAgICAgIDxpIGNsYXNzPSJmYS1zb2xpZCBmYS1sYXB0b3AtZmlsZSB0ZXh0LTZ4bCB0ZXh0LWJsdWUtNTAwIG1iLTQiPjwvaT4KICAgICAgICA8aDEgY2xhc3M9InRleHQtM3hsIGZvbnQtYm9sZCB0ZXh0LWdyYXktODAwIG1iLTIiPk1hc3RlciBQZW5nb2xhaCBLYXRhPC9oMT4KICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTYwMCBtYi02IHRleHQtc20iPlVqaSBrZWFobGlhbiBhZG1pbmlzdHJhc2kgcGVya2FudG9yYW5tdSEgQmFjYSB0dWdhcyBkYXJpIGF0YXNhbiBkYW4gdGFyaWsgKGRyYWcpIGthcnR1IHR1Z2FzIGtlIGFsYXQvZml0dXIgeWFuZyB0ZXBhdC48L3A+CiAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJzdGFydEdhbWUoKSIgY2xhc3M9InctZnVsbCBiZy1ibHVlLTYwMCBob3ZlcjpiZy1ibHVlLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBweS0zIHB4LTYgcm91bmRlZC14bCB0cmFuc2l0aW9uIGR1cmF0aW9uLTIwMCB0cmFuc2Zvcm0gaG92ZXI6c2NhbGUtMTA1IHNoYWRvdy1sZyI+CiAgICAgICAgICAgIE11bGFpIEJla2VyamEgPGkgY2xhc3M9ImZhLXNvbGlkIGZhLXBsYXkgbWwtMiI+PC9pPgogICAgICAgIDwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPCEtLSBBUkVBIFBFUk1BSU5BTiAtLT4KICAgIDxkaXYgaWQ9ImdhbWUtc2NyZWVuIiBjbGFzcz0iaGlkZGVuIHctZnVsbCBtYXgtdy0zeGwgZmxleCBmbGV4LWNvbCBoLVs5MHZoXSBqdXN0aWZ5LWJldHdlZW4iPgogICAgICAgIDwhLS0gSGVhZGVyOiBTa29yICYgUHJvZ3JlcyAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3ctbWQgcC00IGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ibHVlLTYwMCBmb250LWJvbGQiPgogICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXNvbGlkIGZhLWxpc3QtY2hlY2siPjwvaT4gVHVnYXM6IDxzcGFuIGlkPSJwcm9ncmVzcy10ZXh0Ij4xLzEwPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ncmVlbi02MDAgZm9udC1ib2xkIHRleHQteGwiPgogICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXNvbGlkIGZhLXN0YXIgdGV4dC15ZWxsb3ctNDAwIj48L2k+IFNrb3I6IDxzcGFuIGlkPSJzY29yZS10ZXh0Ij4wPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBBcmVhIFBlcnRhbnlhYW4gKEthcnR1IERyYWdnYWJsZSkgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1ncm93IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgcmVsYXRpdmUiIGlkPSJkcmFnLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1ncmF5LTYwMCB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgbWItMyB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSI+VHVnYXMgQW5kYTo8L2gyPgogICAgICAgICAgICA8ZGl2IGlkPSJ0YXNrLWNhcmQiIGNsYXNzPSJkcmFnZ2FibGUtY2FyZCBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLTYgdy1mdWxsIG1heC13LXNtIHRleHQtY2VudGVyIGJvcmRlci1iLTQgYm9yZGVyLWJsdWUtNzAwIG14LWF1dG8iIGRyYWdnYWJsZT0idHJ1ZSI+CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEtc29saWQgZmEtZW52ZWxvcGUtb3Blbi10ZXh0IHRleHQtM3hsIG1iLTMgdGV4dC1ibHVlLTIwMCI+PC9pPgogICAgICAgICAgICAgICAgPHAgaWQ9InRhc2stZGVzYyIgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCBsZWFkaW5nLXNudWciPgogICAgICAgICAgICAgICAgICAgIDwhLS0gRGVza3JpcHNpIGFrYW4gZGktbG9hZCBkaSBzaW5pIC0tPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCB0ZXh0LWJsdWUtMjAwIHRleHQteHMgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYS1zb2xpZCBmYS1oYW5kLXBvaW50ZXIiPjwvaT4gVGFyaWsga2FydHUgaW5pIGtlIGFsYXQgZGkgYmF3YWgKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBBcmVhIERyb3AgWm9uZSAoUGlsaWhhbiBBbGF0KSAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIGdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC0zIG1kOmdhcC00IHBiLTQiIGlkPSJkcm9wLXpvbmVzLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDwhLS0gS290YWsgcGlsaWhhbiBha2FuIGRpLWdlbmVyYXRlIG9sZWggSmF2YVNjcmlwdCAtLT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTEFZQVIgQUtISVIgLS0+CiAgICA8ZGl2IGlkPSJlbmQtc2NyZWVuIiBjbGFzcz0iaGlkZGVuIGJnLXdoaXRlIHJvdW5kZWQtM3hsIHNoYWRvdy0yeGwgcC04IG1heC13LW1kIHctZnVsbCB0ZXh0LWNlbnRlciBib3VuY2UtaW4gYm9yZGVyLXQtOCBib3JkZXItZ3JlZW4tNTAwIj4KICAgICAgICA8aSBjbGFzcz0iZmEtc29saWQgZmEtYXdhcmQgdGV4dC03eGwgdGV4dC15ZWxsb3ctNDAwIG1iLTQiPjwvaT4KICAgICAgICA8aDEgY2xhc3M9InRleHQtM3hsIGZvbnQtYm9sZCB0ZXh0LWdyYXktODAwIG1iLTIiPktlcmphIEJhZ3VzITwvaDE+CiAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS02MDAgbWItMiI+QW5kYSB0ZWxhaCBtZW55ZWxlc2Fpa2FuIGphbSBrZXJqYSBkZW5nYW4gYmFpay48L3A+CiAgICAgICAgPGRpdiBjbGFzcz0idGV4dC01eGwgZm9udC1ib2xkIHRleHQtYmx1ZS02MDAgbXktNiIgaWQ9ImZpbmFsLXNjb3JlIj4xMDA8L2Rpdj4KICAgICAgICA8cCBpZD0iZmVlZGJhY2stbXNnIiBjbGFzcz0idGV4dC1ncmF5LTYwMCBmb250LXNlbWlib2xkIG1iLTYiPjwvcD4KICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InJlc2V0R2FtZSgpIiBjbGFzcz0idy1mdWxsIGJnLWdyZWVuLTUwMCBob3ZlcjpiZy1ncmVlbi02MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcHktMyBweC02IHJvdW5kZWQteGwgdHJhbnNpdGlvbiBkdXJhdGlvbi0yMDAgc2hhZG93LWxnIj4KICAgICAgICAgICAgTWFpbiBMYWdpIDxpIGNsYXNzPSJmYS1zb2xpZCBmYS1yb3RhdGUtcmlnaHQgbWwtMiI+PC9pPgogICAgICAgIDwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgICAvLyAtLS0gREFUQSBNQVNURVIgLS0tCiAgICAgICAgLy8gS3VtcHVsYW4gc2VtdWEgYWxhdC9maXR1ciB1bnR1ayBtZW1idWF0IHBlbmdlY29oIChkaXN0cmFjdG9ycykKICAgICAgICBjb25zdCBhbGxUb29scyA9IFsKICAgICAgICAgICAgeyBpZDogJ25ldycsIG5hbWU6ICdOZXcgRG9jdW1lbnQnLCBpY29uOiAnZmEtZmlsZS1jaXJjbGUtcGx1cycgfSwKICAgICAgICAgICAgeyBpZDogJ3NhdmUnLCBuYW1lOiAnU2F2ZSAvIFNhdmUgQXMnLCBpY29uOiAnZmEtZmxvcHB5LWRpc2snIH0sCiAgICAgICAgICAgIHsgaWQ6ICdib2xkJywgbmFtZTogJ0JvbGQnLCBpY29uOiAnZmEtYm9sZCcgfSwKICAgICAgICAgICAgeyBpZDogJ2p1c3RpZnknLCBuYW1lOiAnSnVzdGlmeScsIGljb246ICdmYS1hbGlnbi1qdXN0aWZ5JyB9LAogICAgICAgICAgICB7IGlkOiAnY29weScsIG5hbWU6ICdDb3B5JywgaWNvbjogJ2ZhLWNvcHknIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwYWdlc2l6ZScsIG5hbWU6ICdQYWdlIFNpemUnLCBpY29uOiAnZmEtZmlsZS1saW5lcycgfSwKICAgICAgICAgICAgeyBpZDogJ3VuZG8nLCBuYW1lOiAnVW5kbycsIGljb246ICdmYS1yb3RhdGUtbGVmdCcgfSwKICAgICAgICAgICAgeyBpZDogJ251bWJlcmluZycsIG5hbWU6ICdOdW1iZXJpbmcnLCBpY29uOiAnZmEtbGlzdC1vbCcgfSwKICAgICAgICAgICAgeyBpZDogJ2ZpbmQnLCBuYW1lOiAnRmluZCAmIFJlcGxhY2UnLCBpY29uOiAnZmEtbWFnbmlmeWluZy1nbGFzcy1hcnJvdy1yaWdodCcgfSwKICAgICAgICAgICAgeyBpZDogJ3BkZicsIG5hbWU6ICdFeHBvcnQgUERGJywgaWNvbjogJ2ZhLWZpbGUtcGRmJyB9LAogICAgICAgICAgICB7IGlkOiAnaXRhbGljJywgbmFtZTogJ0l0YWxpYycsIGljb246ICdmYS1pdGFsaWMnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwcmludCcsIG5hbWU6ICdQcmludCcsIGljb246ICdmYS1wcmludCcgfSwKICAgICAgICAgICAgeyBpZDogJ2NlbnRlcicsIG5hbWU6ICdDZW50ZXIgQWxpZ24nLCBpY29uOiAnZmEtYWxpZ24tY2VudGVyJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9udGNvbG9yJywgbmFtZTogJ0ZvbnQgQ29sb3InLCBpY29uOiAnZmEtcGFsZXR0ZScgfSwKICAgICAgICAgICAgeyBpZDogJ3VuZGVybGluZScsIG5hbWU6ICdVbmRlcmxpbmUnLCBpY29uOiAnZmEtdW5kZXJsaW5lJyB9LAogICAgICAgICAgICB7IGlkOiAnYWxpZ25sZWZ0JywgbmFtZTogJ0FsaWduIExlZnQnLCBpY29uOiAnZmEtYWxpZ24tbGVmdCcgfSwKICAgICAgICAgICAgeyBpZDogJ2FsaWducmlnaHQnLCBuYW1lOiAnQWxpZ24gUmlnaHQnLCBpY29uOiAnZmEtYWxpZ24tcmlnaHQnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdjdXQnLCBuYW1lOiAnQ3V0JywgaWNvbjogJ2ZhLXNjaXNzb3JzJyB9LAogICAgICAgICAgICB7IGlkOiAncGFzdGUnLCBuYW1lOiAnUGFzdGUnLCBpY29uOiAnZmEtcGFzdGUnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdyZWRvJywgbmFtZTogJ1JlZG8nLCBpY29uOiAnZmEtcm90YXRlLXJpZ2h0JyB9LAogICAgICAgICAgICB7IGlkOiAnYnVsbGV0cycsIG5hbWU6ICdCdWxsZXRzJywgaWNvbjogJ2ZhLWxpc3QtdWwnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdsaW5lc3BhY2luZycsIG5hbWU6ICdMaW5lIFNwYWNpbmcnLCBpY29uOiAnZmEtYXJyb3dzLXVwLWRvd24nIH0sCiAgICAgICAgICAgIHsgaWQ6ICdtYXJnaW5zJywgbmFtZTogJ01hcmdpbnMnLCBpY29uOiAnZmEtbWF4aW1pemUnIH0sCiAgICAgICAgICAgIHsgaWQ6ICd0YWJsZScsIG5hbWU6ICdJbnNlcnQgVGFibGUnLCBpY29uOiAnZmEtdGFibGUnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwaWN0dXJlJywgbmFtZTogJ0luc2VydCBQaWN0dXJlJywgaWNvbjogJ2ZhLWltYWdlJyB9LAogICAgICAgICAgICB7IGlkOiAnaGVhZGVyJywgbmFtZTogJ0hlYWRlcicsIGljb246ICdmYS1oZWFkaW5nJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9vdGVyJywgbmFtZTogJ0Zvb3RlcicsIGljb246ICdmYS1zaG9lLXByaW50cycgfSwKICAgICAgICAgICAgeyBpZDogJ3BhZ2VudW1iZXInLCBuYW1lOiAnUGFnZSBOdW1iZXInLCBpY29uOiAnZmEtYXJyb3ctZG93bi0xLTknIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwYWdlYnJlYWsnLCBuYW1lOiAnUGFnZSBCcmVhaycsIGljb246ICdmYS1maWxlLWRhc2hlZC1saW5lJyB9LAogICAgICAgICAgICB7IGlkOiAnY29sdW1ucycsIG5hbWU6ICdDb2x1bW5zJywgaWNvbjogJ2ZhLXRhYmxlLWNvbHVtbnMnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdvcmllbnRhdGlvbicsIG5hbWU6ICdPcmllbnRhdGlvbicsIGljb246ICdmYS1tb2JpbGUtc2NyZWVuJyB9LAogICAgICAgICAgICB7IGlkOiAnd2F0ZXJtYXJrJywgbmFtZTogJ1dhdGVybWFyaycsIGljb246ICdmYS1zdGFtcCcgfSwKICAgICAgICAgICAgeyBpZDogJ3NwZWxsY2hlY2snLCBuYW1lOiAnU3BlbGwgQ2hlY2snLCBpY29uOiAnZmEtc3BlbGwtY2hlY2snIH0sCiAgICAgICAgICAgIHsgaWQ6ICdtYWlsbWVyZ2UnLCBuYW1lOiAnTWFpbCBNZXJnZScsIGljb246ICdmYS1lbnZlbG9wZXMtYnVsaycgfSwKICAgICAgICAgICAgeyBpZDogJ3N1cGVyc2NyaXB0JywgbmFtZTogJ1N1cGVyc2NyaXB0JywgaWNvbjogJ2ZhLXN1cGVyc2NyaXB0JyB9LAogICAgICAgICAgICB7IGlkOiAnc3Vic2NyaXB0JywgbmFtZTogJ1N1YnNjcmlwdCcsIGljb246ICdmYS1zdWJzY3JpcHQnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdoaWdobGlnaHQnLCBuYW1lOiAnSGlnaGxpZ2h0JywgaWNvbjogJ2ZhLWhpZ2hsaWdodGVyJyB9LAogICAgICAgICAgICB7IGlkOiAnaHlwZXJsaW5rJywgbmFtZTogJ0h5cGVybGluaycsIGljb246ICdmYS1saW5rJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9ybWF0cGFpbnRlcicsIG5hbWU6ICdGb3JtYXQgUGFpbnRlcicsIGljb246ICdmYS1wYWludC1yb2xsZXInIH0sCiAgICAgICAgICAgIHsgaWQ6ICd0ZXh0Ym94JywgbmFtZTogJ1RleHQgQm94JywgaWNvbjogJ2ZhLXNxdWFyZS1wZW4nIH0sCiAgICAgICAgICAgIHsgaWQ6ICd3b3JkY291bnQnLCBuYW1lOiAnV29yZCBDb3VudCcsIGljb246ICdmYS1jYWxjdWxhdG9yJyB9LAogICAgICAgICAgICB7IGlkOiAnem9vbScsIG5hbWU6ICdab29tJywgaWNvbjogJ2ZhLW1hZ25pZnlpbmctZ2xhc3MtcGx1cycgfSwKICAgICAgICAgICAgeyBpZDogJ3N0cmlrZXRocm91Z2gnLCBuYW1lOiAnU3RyaWtldGhyb3VnaCcsIGljb246ICdmYS1zdHJpa2V0aHJvdWdoJyB9LAogICAgICAgICAgICB7IGlkOiAnaW5kZW50aW5jcmVhc2UnLCBuYW1lOiAnSW5jcmVhc2UgSW5kZW50JywgaWNvbjogJ2ZhLWluZGVudCcgfSwKICAgICAgICAgICAgeyBpZDogJ2luZGVudGRlY3JlYXNlJywgbmFtZTogJ0RlY3JlYXNlIEluZGVudCcsIGljb246ICdmYS1vdXRkZW50JyB9LAogICAgICAgICAgICB7IGlkOiAnY2hhcnQnLCBuYW1lOiAnSW5zZXJ0IENoYXJ0JywgaWNvbjogJ2ZhLWNoYXJ0LXBpZScgfSwKICAgICAgICAgICAgeyBpZDogJ3NoYXBlcycsIG5hbWU6ICdJbnNlcnQgU2hhcGVzJywgaWNvbjogJ2ZhLXNoYXBlcycgfSwKICAgICAgICAgICAgeyBpZDogJ3N5bWJvbCcsIG5hbWU6ICdJbnNlcnQgU3ltYm9sJywgaWNvbjogJ2ZhLW9tZWdhJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9udGZhbWlseScsIG5hbWU6ICdGb250IFN0eWxlJywgaWNvbjogJ2ZhLWZvbnQnIH0KICAgICAgICBdOwoKICAgICAgICAvLyBEYWZ0YXIgNTAgUGVydGFueWFhbgogICAgICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFsKICAgICAgICAgICAgLy8gU2VzaSAxOiBEYXNhciAmIFBlbnlpbXBhbmFuCiAgICAgICAgICAgIHsgdGFzazogIkJvcyBtZW1pbnRhIEFuZGEgbWVtYnVhdCBzdXJhdCBwZW5hd2FyYW4gYmFydSBkYXJpIGtlcnRhcyBrb3NvbmcuIiwgY29ycmVjdElkOiAibmV3IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIHN1ZGFoIG1lbmdldGlrIGxhcG9yYW4uIFNla2FyYW5nIEFuZGEgaGFydXMgbWVueWltcGFubnlhIGRlbmdhbiBuYW1hIGZpbGUgYmFydSAnTGFwb3Jhbl9CdWxhbl9JbmknLiIsIGNvcnJlY3RJZDogInNhdmUiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkRva3VtZW4ga29udHJhayBzdWRhaCBmaW5hbC4gQW5kYSBoYXJ1cyBtZW55aW1wYW5ueWEga2UgZm9ybWF0IHlhbmcgdGlkYWsgYmlzYSBkaWVkaXQgc2VtYmFyYW5nYW4uIiwgY29ycmVjdElkOiAicGRmIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJTaW1wYW4gcGVtYmFydWFuIHBla2VyamFhbiB5YW5nIGJhcnUgc2FqYSBBbmRhIGtldGlrIGFnYXIgdGlkYWsgaGlsYW5nIGppa2EgdGliYS10aWJhIG1hdGkgbGFtcHUuIiwgY29ycmVjdElkOiAic2F2ZSIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQ2V0YWsgMyByYW5na2FwIGRva3VtZW4gcGVyamFuamlhbiBrZXJqYXNhbWEgaW5pIG1lbmdndW5ha2FuIHByaW50ZXIgZGkgcnVhbmcgbWVldGluZy4iLCBjb3JyZWN0SWQ6ICJwcmludCIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgMjogRm9ybWF0IEZvbnQgJiBUZWtzCiAgICAgICAgICAgIHsgdGFzazogIkp1ZHVsIGtvcCBzdXJhdCBoYXJ1cyB0ZXJsaWhhdCBsZWJpaCB0ZWJhbCBkYW4gbWVuY29sb2sgZGFyaSB0ZWtzIGxhaW5ueWEuIiwgY29ycmVjdElkOiAiYm9sZCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSBnYXJpcyBiYXdhaCBwYWRhIGthdGEgJ1BFTlRJTkcnIGRpIHBlbmd1bXVtYW4gaW50ZXJuYWwga2FudG9yLiIsIGNvcnJlY3RJZDogInVuZGVybGluZSIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiSmFkaWthbiB0ZWtzIGt1dGlwYW4gcGVudGluZyBpbmkgbWVuamFkaSBtaXJpbmcgYWdhciBiZXJiZWRhIGRhcmkgdGVrcyBwYXJhZ3JhZiBsYWlubnlhLiIsIGNvcnJlY3RJZDogIml0YWxpYyIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVWJhaCBqZW5pcyBnYXlhIHR1bGlzYW4gZG9rdW1lbiBzdXJhdCByZXNtaSBpbmkgZGFyaSBmb250IGRlZmF1bHQgbWVuamFkaSBBcmlhbCBhdGF1IFRpbWVzIE5ldyBSb21hbi4iLCBjb3JyZWN0SWQ6ICJmb250ZmFtaWx5IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJVYmFoIHdhcm5hIHRla3MgcGVyaW5nYXRhbiBkaSBwZW5ndW11bWFuIGluaSBkYXJpIGhpdGFtIG1lbmphZGkgbWVyYWggdGVyYW5nLiIsIGNvcnJlY3RJZDogImZvbnRjb2xvciIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSB3YXJuYSBsYXRhciBrdW5pbmcgKHNlcGVydGkgc3RhYmlsbykgcGFkYSBrYWxpbWF0IHlhbmcgaGFydXMgc2VnZXJhIGRpcmV2aXNpIG9sZWggdGltLiIsIGNvcnJlY3RJZDogImhpZ2hsaWdodCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSBnYXJpcyBjb3JldGFuIGRpIHRlbmdhaCB0ZWtzIHVudHVrIG1lbmFuZGFpIGhhcmdhIGxhbWEgcHJvZHVrIHlhbmcgc3VkYWggZGlza29uLiIsIGNvcnJlY3RJZDogInN0cmlrZXRocm91Z2giIH0sCiAgICAgICAgICAgIHsgdGFzazogIlNhbGluIGdheWEgaHVydWYgZGFuIHdhcm5hIGRhcmkgSnVkdWwgMSwgbGFsdSB0ZXJhcGthbiBzZWNhcmEgaW5zdGFuIGtlIEp1ZHVsIDIgdGFucGEgbWVuZ2F0dXIgdWxhbmcuIiwgY29ycmVjdElkOiAiZm9ybWF0cGFpbnRlciIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgMzogUGVyYXRhYW4gJiBQYXJhZ3JhZgogICAgICAgICAgICB7IHRhc2s6ICJBZ2FyIHN1cmF0IHJlc21pIHRlcmxpaGF0IHJhcGksIHNpc2kga2FuYW4gZGFuIGtpcmkgcGFyYWdyYWYgaGFydXMgc2VqYWphciByYXRhLiIsIGNvcnJlY3RJZDogImp1c3RpZnkiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkZvcm1hdCB0YW5nZ2FsIHN1cmF0IGRpIGJhZ2lhbiBhdGFzIGhhcnVzIGRpcmF0YWthbiBraHVzdXMga2Ugc2lzaSBraXJpIGRva3VtZW4uIiwgY29ycmVjdElkOiAiYWxpZ25sZWZ0IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQb3Npc2lrYW4gYmxvayB0YW5kYSB0YW5nYW4gZGlyZWt0dXIgYWdhciBiZXJhZGEgc2VqYWphciBkaSBtYXJnaW4ga2FuYW4gYmF3YWguIiwgY29ycmVjdElkOiAiYWxpZ25yaWdodCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiUHVzYXRrYW4ganVkdWwgbGFwb3JhbiBhZ2FyIGJlcmFkYSB0ZXBhdCBkaSB0ZW5nYWgtdGVuZ2FoIGhhbGFtYW4gc2VjYXJhIGhvcml6b250YWwuIiwgY29ycmVjdElkOiAiY2VudGVyIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUZWtzIGxhcG9yYW4gdGVybGFsdSBwYWRhdCBkaWJhY2EuIFViYWggamFyYWsgYW50YXIgYmFyaXMgdGVrcyAoc3Bhc2kgYmFyaXMpIG1lbmphZGkgMSw1LiIsIGNvcnJlY3RJZDogImxpbmVzcGFjaW5nIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJEb3JvbmcgcGFyYWdyYWYgaW5pIGxlYmloIG1lbmpvcm9rIGtlIGRhbGFtIChrZSBrYW5hbikgYWdhciBtYXN1ayBzZWJhZ2FpIGJhZ2lhbiBkYXJpIHN1Yi1iYWIuIiwgY29ycmVjdElkOiAiaW5kZW50aW5jcmVhc2UiIH0sCiAgICAgICAgICAgIHsgdGFzazogIlRhcmlrIGtlbWJhbGkgdGVrcyB5YW5nIHBvc2lzaW55YSB0ZXJsYWx1IG1lbmpvcm9rIGtlIGRhbGFtIGFnYXIgc2VqYWphciBsYWdpIGRlbmdhbiBiYXRhcyBraXJpIG5vcm1hbC4iLCBjb3JyZWN0SWQ6ICJpbmRlbnRkZWNyZWFzZSIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgNDogTmF2aWdhc2ksIENvcHksIFBhc3RlICYgVW5kbwogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIG1lbWJhdGFsa2FuIHNlYnVhaCBrZXRpa2FuIChVbmRvKSwgdGFwaSBiZXJ1YmFoIHBpa2lyYW4gZGFuIGluZ2luIG1lbmdlbWJhbGlrYW4ga2V0aWthbiB0ZXJzZWJ1dC4iLCBjb3JyZWN0SWQ6ICJyZWRvIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIGluZ2luIG1lbWluZGFoa2FuIHRla3MgYWxhbWF0IGRhcmkgZG9rdW1lbiBsYW1hIHRhbnBhIG1lbmdldGlrIHVsYW5nIChMYW5na2FoIHBlcnRhbWE6IFNhbGluKS4iLCBjb3JyZWN0SWQ6ICJjb3B5IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJTZXRlbGFoIG1lbnlhbGluIChDb3B5KSB0ZWtzIGRhcmkgZW1haWwsIHRlbXBlbGthbiB0ZWtzIHRlcnNlYnV0IGtlIGRhbGFtIGRva3VtZW4gV29yZCBBbmRhLiIsIGNvcnJlY3RJZDogInBhc3RlIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQaW5kYWhrYW4gcGFyYWdyYWYgaW5pIGtlIGJhYiBsYWluLiAoTGFuZ2thaCBwZXJ0YW1hOiBQb3RvbmcvaGlsYW5na2FuIGRhcmkgdGVtcGF0IGFzbGlueWEpLiIsIGNvcnJlY3RJZDogImN1dCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVXBzISBBbmRhIHRpZGFrIHNlbmdhamEgbWVuZ2hhcHVzIHBhcmFncmFmIHBlbnRpbmcuIEJhdGFsa2FuIGtlc2FsYWhhbiB0ZXJzZWJ1dCBhZ2FyIGtlbWJhbGkgc2VwZXJ0aSBzZW11bGEuIiwgY29ycmVjdElkOiAidW5kbyIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQWRhIGtlc2FsYWhhbiBrZXRpayBuYW1hIHBlcnVzYWhhYW4gZGkgNTAgaGFsYW1hbi4gVGVtdWthbiBrYXRhIHRlcnNlYnV0IGRhbiBnYW50aSBzZW11YW55YSBzZWthbGlndXMuIiwgY29ycmVjdElkOiAiZmluZCIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgNTogVGF0YSBMZXRhayBIYWxhbWFuIChQYWdlIExheW91dCkKICAgICAgICAgICAgeyB0YXNrOiAiU3RhbmRhciBwZXJ1c2FoYWFuIG1lbmdoYXJ1c2thbiBkb2t1bWVuIHJlc21pIGRpY2V0YWsga2h1c3VzIGRpIGtlcnRhcyB1a3VyYW4gQTQuIiwgY29ycmVjdElkOiAicGFnZXNpemUiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkF0dXIgYmF0YXMga29zb25nIGRpIHBpbmdnaXIga2VydGFzIChtYXJnaW4gYXRhcywgYmF3YWgsIGtpcmksIGthbmFuKSBtZW5qYWRpIHRlcGF0IDIgY20uIiwgY29ycmVjdElkOiAibWFyZ2lucyIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVWJhaCBwb3Npc2kga2VydGFzIHVudHVrIG1lbmNldGFrIHRhYmVsIHBhbmphbmcgZGFyaSBiZXJkaXJpIChQb3J0cmFpdCkgbWVuamFkaSBtZW5kYXRhciAoTGFuZHNjYXBlKS4iLCBjb3JyZWN0SWQ6ICJvcmllbnRhdGlvbiIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVWJhaCBmb3JtYXQgYXJ0aWtlbCBidWxldGluIHBlcnVzYWhhYW4gaW5pIG1lbmphZGkgZHVhIGJhZ2lhbiB0ZWtzIHlhbmcgYmVyZGFtcGluZ2FuIChzZXBlcnRpIGtvcmFuKS4iLCBjb3JyZWN0SWQ6ICJjb2x1bW5zIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQYWtzYSBqdWR1bCBCYWIgMiBhZ2FyIGxhbmdzdW5nIGRpbXVsYWkgZGkgaGFsYW1hbiBiYXJ1LCB0ZXJwaXNhaCBkYXJpIGhhbGFtYW4gQmFiIDEuIiwgY29ycmVjdElkOiAicGFnZWJyZWFrIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUYW1iYWhrYW4gdHVsaXNhbiB0cmFuc3BhcmFuIGJlcnR1bGlza2FuICdSQUhBU0lBJyBkaSBsYXRhciBiZWxha2FuZyBoYWxhbWFuIGtvbnRyYWsga2VyamEuIiwgY29ycmVjdElkOiAid2F0ZXJtYXJrIiB9LAogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2VzaSA2OiBFbGVtZW4gU2lzaXBhbiAoSW5zZXJ0IEVsZW1lbnRzKQogICAgICAgICAgICB7IHRhc2s6ICJTaXNpcGthbiBnYW1iYXIgbG9nbyBwZXJ1c2FoYWFuIEFuZGEgZGkgYmFnaWFuIHN1ZHV0IGF0YXMgZG9rdW1lbiBwcm9wb3NhbC4iLCBjb3JyZWN0SWQ6ICJwaWN0dXJlIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJNYXN1a2thbiBkYWZ0YXIgbmFtYSBkYW4gbm9tb3IgdGVsZXBvbiBrbGllbiBkYWxhbSBmb3JtYXQgYmFyaXMgZGFuIGtvbG9tIGtvdGFrLWtvdGFrIHlhbmcgcmFwaS4iLCBjb3JyZWN0SWQ6ICJ0YWJsZSIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVGFtYmFoa2FuIG5hbWEgaW5zdGFuc2kgYWdhciBzZWxhbHUgbXVuY3VsIGJlcnVsYW5nIGRpIG1hcmdpbiBhdGFzIHNldGlhcCBoYWxhbWFuIGRva3VtZW4uIiwgY29ycmVjdElkOiAiaGVhZGVyIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUYW1iYWhrYW4gYWxhbWF0IGRhbiBrb250YWsga2FudG9yIGFnYXIgb3RvbWF0aXMgdGVyY2V0YWsgZGkgbWFyZ2luIGJhd2FoIHNldGlhcCBoYWxhbWFuLiIsIGNvcnJlY3RJZDogImZvb3RlciIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSBub21vciB1cnV0IGhhbGFtYW4gZGkgcG9qb2sgYWdhciBkb2t1bWVuIDEwMCBsZW1iYXIgaW5pIHRpZGFrIHRlcnN1c3VuIGFjYWsgamlrYSB0ZXJjZWNlci4iLCBjb3JyZWN0SWQ6ICJwYWdlbnVtYmVyIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJCdWF0IHNlYnVhaCBrb3RhayB0ZWtzIG1lbGF5YW5nIHlhbmcgYmlzYSBkaWdlc2VyIGJlYmFzIHVudHVrIG1lbWJlcmkgY2F0YXRhbiB0YW1iYWhhbiBkaSBwaW5nZ2lyIHN1cmF0LiIsIGNvcnJlY3RJZDogInRleHRib3giIH0sCiAgICAgICAgICAgIHsgdGFzazogIlNpc2lwa2FuIGJlbnR1ayBiYW5ndW4gZGF0YXIgKHBhbmFoL2tvdGFrKSB1bnR1ayBtZW5nZ2FtYmFyIGRpYWdyYW0gYWx1ciBvcGVyYXNpb25hbCAoU09QKS4iLCBjb3JyZWN0SWQ6ICJzaGFwZXMiIH0sCiAgICAgICAgICAgIHsgdGFzazogIlNpc2lwa2FuIGdyYWZpayBkaWFncmFtIGJhdGFuZyB1bnR1ayBtZW12aXN1YWxpc2FzaWthbiBwZXJzZW50YXNlIGRhdGEgcGVuanVhbGFuIGJ1bGFuIGluaS4iLCBjb3JyZWN0SWQ6ICJjaGFydCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiU2lzaXBrYW4gdGF1dGFuIGludGVybmV0IChsaW5rKSBhZ2FyIHRla3MgJ0tsaWsgZGkgc2luaScgYmlzYSBkaWtsaWsgZGFuIG1lbWJ1a2Egd2Vic2l0ZSBwcm9maWwgcGVydXNhaGFhbi4iLCBjb3JyZWN0SWQ6ICJoeXBlcmxpbmsiIH0sCiAgICAgICAgICAgIHsgdGFzazogIk1hc3Vra2FuIGthcmFrdGVyIGtodXN1cyBzZXBlcnRpIGxhbWJhbmcgSGFrIENpcHRhICjCqSkgYXRhdSBUcmFkZW1hcmsgKOKEoikgeWFuZyB0aWRhayBhZGEgZGkga2V5Ym9hcmQuIiwgY29ycmVjdElkOiAic3ltYm9sIiB9LAogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2VzaSA3OiBGaXR1ciBMYW5qdXRhbiAmIFBlbm9tb3JhbgogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIHBlcmx1IG1lbWJ1YXQgZGFmdGFyIGxhbmdrYWgtbGFuZ2thaCBrZXJqYSB5YW5nIGJlcnVydXRhbiBzZWNhcmEgb3RvbWF0aXMgKDEsIDIsIDMsIGRzdCkuIiwgY29ycmVjdElkOiAibnVtYmVyaW5nIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJCdWF0IGRhZnRhciBwZXJhbGF0YW4gQVRLIGthbnRvciBtZW5nZ3VuYWthbiBzaW1ib2wgdGl0aWstdGl0aWsgYnVsYXQgZGkgZGVwYW5ueWEgKGJ1a2FuIGFuZ2thKS4iLCBjb3JyZWN0SWQ6ICJidWxsZXRzIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJLZXRpa2thbiBhbmdrYSAyIGtlY2lsIG1lbGF5YW5nIGRpIGF0YXMgcGFkYSB0ZWtzIG1ldGVyIHBlcnNlZ2kgKG3CsikgdW50dWsgbGFwb3JhbiBzZXJ0aWZpa2F0IHRhbmFoLiIsIGNvcnJlY3RJZDogInN1cGVyc2NyaXB0IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUdWxpc2thbiBhbmdrYSAyIGtlY2lsIGRpIGJhd2FoIHBhZGEgcnVtdXMga2ltaWEgYWlyIChI4oKCTykgZGkganVybmFsIHBlbmVsaXRpYW4gbGluZ2t1bmdhbi4iLCBjb3JyZWN0SWQ6ICJzdWJzY3JpcHQiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkJ1YXQgMTAwIHN1cmF0IHVuZGFuZ2FuIHJhcGF0IGRhcmkgc2F0dSBmb3JtYXQsIGRpIG1hbmEgbmFtYSBwZW5lcmltYW55YSBkaXRhcmlrIG90b21hdGlzIGRhcmkgZGF0YWJhc2UgRXhjZWwuIiwgY29ycmVjdElkOiAibWFpbG1lcmdlIiB9LAogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2VzaSA4OiBSZXZpZXcgJiBUYW1waWxhbgogICAgICAgICAgICB7IHRhc2s6ICJKYWxhbmthbiBwZW5nZWNla2FuIG90b21hdGlzIHVudHVrIG1lbGloYXQgYXBha2FoIGFkYSBrYXRhLWthdGEgYmFoYXNhIEluZ2dyaXMgeWFuZyBzYWxhaCBrZXRpayAodHlwbykuIiwgY29ycmVjdElkOiAic3BlbGxjaGVjayIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQXRhc2FuIEFuZGEgYmVydGFueWEgdW50dWsgYmFoYW4gcHJlc2VudGFzaSwgc3VkYWggYmVyYXBhIGJhbnlhayBqdW1sYWgga2F0YSB5YW5nIEFuZGEga2V0aWsgZGFsYW0gYXJ0aWtlbCBpbmk/IiwgY29ycmVjdElkOiAid29yZGNvdW50IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQZXJiZXNhciAoWm9vbSkgdGFtcGlsYW4gbGVtYmFyIGtlcmphIEFuZGEgZGkgbGF5YXIga29tcHV0ZXIgbWVuamFkaSAxNTAlIGFnYXIgaHVydWZueWEgdGVybGloYXQgbGViaWggamVsYXMuIiwgY29ycmVjdElkOiAiem9vbSIgfQogICAgICAgIF07CgogICAgICAgIC8vIC0tLSBWQVJJQUJFTCBTVEFURSAtLS0KICAgICAgICBsZXQgY3VycmVudFF1ZXN0aW9uSW5kZXggPSAwOwogICAgICAgIGxldCBzY29yZSA9IDA7CiAgICAgICAgbGV0IGN1cnJlbnRPcHRpb25zID0gW107CiAgICAgICAgCiAgICAgICAgLy8gLS0tIEVMRU1FTiBET00gLS0tCiAgICAgICAgY29uc3Qgc3RhcnRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhcnQtc2NyZWVuJyk7CiAgICAgICAgY29uc3QgZ2FtZVNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnYW1lLXNjcmVlbicpOwogICAgICAgIGNvbnN0IGVuZFNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmQtc2NyZWVuJyk7CiAgICAgICAgY29uc3QgdGFza0NhcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFzay1jYXJkJyk7CiAgICAgICAgY29uc3QgdGFza0Rlc2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFzay1kZXNjJyk7CiAgICAgICAgY29uc3QgZHJvcFpvbmVzQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Atem9uZXMtY29udGFpbmVyJyk7CiAgICAgICAgY29uc3QgcHJvZ3Jlc3NUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzLXRleHQnKTsKICAgICAgICBjb25zdCBzY29yZVRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NvcmUtdGV4dCcpOwoKICAgICAgICAvLyBWYXJpYWJlbCB1bnR1ayBEcmFnIFRvdWNoIE1vYmlsZQogICAgICAgIGxldCBzdGFydFggPSAwLCBzdGFydFkgPSAwOwogICAgICAgIGxldCBpbml0aWFsWCA9IDAsIGluaXRpYWxZID0gMDsKICAgICAgICBsZXQgY2xvbmVDYXJkID0gbnVsbDsKCiAgICAgICAgLy8gLS0tIEZVTkdTSSBMT0dJS0EgR0FNRSAtLS0KCiAgICAgICAgZnVuY3Rpb24gc3RhcnRHYW1lKCkgewogICAgICAgICAgICBzdGFydFNjcmVlbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICAgICAgICAgICAgZ2FtZVNjcmVlbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsKICAgICAgICAgICAgZ2FtZVNjcmVlbi5jbGFzc0xpc3QuYWRkKCdib3VuY2UtaW4nKTsKICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uSW5kZXggPSAwOwogICAgICAgICAgICBzY29yZSA9IDA7CiAgICAgICAgICAgIHVwZGF0ZVNjb3JlKCk7CiAgICAgICAgICAgIGxvYWRRdWVzdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gbG9hZFF1ZXN0aW9uKCkgewogICAgICAgICAgICAvLyBDZWsgamlrYSBnYW1lIHNlbGVzYWkKICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWVzdGlvbkluZGV4ID49IHF1ZXN0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGVuZEdhbWUoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29uc3QgcSA9IHF1ZXN0aW9uc1tjdXJyZW50UXVlc3Rpb25JbmRleF07CiAgICAgICAgICAgIHRhc2tEZXNjLnRleHRDb250ZW50ID0gcS50YXNrOwogICAgICAgICAgICBwcm9ncmVzc1RleHQudGV4dENvbnRlbnQgPSBgJHtjdXJyZW50UXVlc3Rpb25JbmRleCArIDF9LyR7cXVlc3Rpb25zLmxlbmd0aH1gOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gUmVzZXQga2FydHUgdHVnYXMKICAgICAgICAgICAgdGFza0NhcmQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKICAgICAgICAgICAgdGFza0NhcmQuc3R5bGUub3BhY2l0eSA9ICcxJzsKICAgICAgICAgICAgdGFza0NhcmQuY2xhc3NMaXN0LnJlbW92ZSgnc2hha2UnKTsKICAgICAgICAgICAgdGFza0NhcmQuY2xhc3NMaXN0LmFkZCgnYm91bmNlLWluJyk7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGFza0NhcmQuY2xhc3NMaXN0LnJlbW92ZSgnYm91bmNlLWluJyksIDUwMCk7CgogICAgICAgICAgICBnZW5lcmF0ZURyb3Bab25lcyhxLmNvcnJlY3RJZCk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZURyb3Bab25lcyhjb3JyZWN0SWQpIHsKICAgICAgICAgICAgZHJvcFpvbmVzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnOwogICAgICAgICAgICBjdXJyZW50T3B0aW9ucyA9IFtdOwoKICAgICAgICAgICAgLy8gQ2FyaSBvYmplayBhbGF0IHlhbmcgYmVuYXIKICAgICAgICAgICAgY29uc3QgY29ycmVjdFRvb2wgPSBhbGxUb29scy5maW5kKHQgPT4gdC5pZCA9PT0gY29ycmVjdElkKTsKICAgICAgICAgICAgY3VycmVudE9wdGlvbnMucHVzaChjb3JyZWN0VG9vbCk7CgogICAgICAgICAgICAvLyBQaWxpaCA0IHBlbmdlY29oIChkaXN0cmFjdG9ycykgc2VjYXJhIGFjYWsKICAgICAgICAgICAgLy8gVG90YWwgNSBwaWxpaGFuICgxIGJlbmFyLCA0IHNhbGFoKSBkaSBzZXRpYXAgc29hbAogICAgICAgICAgICBsZXQgZGlzdHJhY3RvcnMgPSBhbGxUb29scy5maWx0ZXIodCA9PiB0LmlkICE9PSBjb3JyZWN0SWQpOwogICAgICAgICAgICBkaXN0cmFjdG9ycyA9IGRpc3RyYWN0b3JzLnNvcnQoKCkgPT4gMC41IC0gTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNCk7CiAgICAgICAgICAgIGN1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuY29uY2F0KGRpc3RyYWN0b3JzKTsKCiAgICAgICAgICAgIC8vIEFjYWsgdXJ1dGFuIHRhbXBpbAogICAgICAgICAgICBjdXJyZW50T3B0aW9ucy5zb3J0KCgpID0+IDAuNSAtIE1hdGgucmFuZG9tKCkpOwoKICAgICAgICAgICAgLy8gUmVuZGVyIGtvdGFrIGFsYXQKICAgICAgICAgICAgY3VycmVudE9wdGlvbnMuZm9yRWFjaCh0b29sID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgICAgIHpvbmUuY2xhc3NOYW1lID0gJ2Ryb3Atem9uZSBiZy13aGl0ZSBib3JkZXItNCBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLTJ4bCBwLTQgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgbWluLWgtWzEwMHB4XSBzaGFkb3ctc20nOwogICAgICAgICAgICAgICAgem9uZS5kYXRhc2V0LmlkID0gdG9vbC5pZDsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgem9uZS5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXNvbGlkICR7dG9vbC5pY29ufSB0ZXh0LTN4bCB0ZXh0LWdyYXktNTAwIG1iLTIgem9uZS1pY29uIHRyYW5zaXRpb24tY29sb3JzIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCB0ZXh0LXNtIHpvbmUtdGV4dCB0cmFuc2l0aW9uLWNvbG9ycyI+JHt0b29sLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgYDsKCiAgICAgICAgICAgICAgICAvLyBFdmVudCBMaXN0ZW5lcnMgdW50dWsgTW91c2UgKERlc2t0b3ApCiAgICAgICAgICAgICAgICB6b25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgaGFuZGxlRHJhZ092ZXIpOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCBoYW5kbGVEcmFnRW50ZXIpOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBoYW5kbGVEcmFnTGVhdmUpOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgaGFuZGxlRHJvcCk7CgogICAgICAgICAgICAgICAgZHJvcFpvbmVzQ29udGFpbmVyLmFwcGVuZENoaWxkKHpvbmUpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNjb3JlKCkgewogICAgICAgICAgICBzY29yZVRleHQudGV4dENvbnRlbnQgPSBzY29yZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNoZWNrQW5zd2VyKHNlbGVjdGVkSWQsIGRyb3Bab25lRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBjb3JyZWN0SWQgPSBxdWVzdGlvbnNbY3VycmVudFF1ZXN0aW9uSW5kZXhdLmNvcnJlY3RJZDsKICAgICAgICAgICAgY29uc3QgaWNvbkVsID0gZHJvcFpvbmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy56b25lLWljb24nKTsKICAgICAgICAgICAgY29uc3QgdGV4dEVsID0gZHJvcFpvbmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy56b25lLXRleHQnKTsKCiAgICAgICAgICAgIGlmIChzZWxlY3RlZElkID09PSBjb3JyZWN0SWQpIHsKICAgICAgICAgICAgICAgIC8vIEJlbmFyCiAgICAgICAgICAgICAgICBzY29yZSArPSAxMDsKICAgICAgICAgICAgICAgIHVwZGF0ZVNjb3JlKCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGRyb3Bab25lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7CiAgICAgICAgICAgICAgICBpY29uRWwuY2xhc3NMaXN0LnJlbW92ZSgndGV4dC1ncmF5LTUwMCcpOwogICAgICAgICAgICAgICAgaWNvbkVsLmNsYXNzTGlzdC5hZGQoJ3RleHQtZ3JlZW4tNjAwJyk7CiAgICAgICAgICAgICAgICB0ZXh0RWwuY2xhc3NMaXN0LmFkZCgndGV4dC1ncmVlbi04MDAnKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gU2VtYnVueWlrYW4ga2FydHUgdHVnYXMgZGVuZ2FuIGVmZWsKICAgICAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIExhbmp1dCBwZXJ0YW55YWFuIGJlcmlrdXRueWEKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbkluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgbG9hZFF1ZXN0aW9uKCk7CiAgICAgICAgICAgICAgICB9LCAxMDAwKTsKCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBTYWxhaCDigJQgdGlkYWsgZGFwYXQgbmlsYWksIGxhbmdzdW5nIGxhbmp1dCBrZSBzb2FsIGJlcmlrdXRueWEKICAgICAgICAgICAgICAgIGRyb3Bab25lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd3cm9uZycpOwogICAgICAgICAgICAgICAgaWNvbkVsLmNsYXNzTGlzdC5yZW1vdmUoJ3RleHQtZ3JheS01MDAnKTsKICAgICAgICAgICAgICAgIGljb25FbC5jbGFzc0xpc3QuYWRkKCd0ZXh0LXJlZC02MDAnKTsKICAgICAgICAgICAgICAgIHRleHRFbC5jbGFzc0xpc3QuYWRkKCd0ZXh0LXJlZC04MDAnKTsKCiAgICAgICAgICAgICAgICB0YXNrQ2FyZC5jbGFzc0xpc3QuYWRkKCdzaGFrZScpOwogICAgICAgICAgICAgICAgdGFza0NhcmQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsgLy8gUGFzdGlrYW4gdGVybGloYXQgbGFnaQoKICAgICAgICAgICAgICAgIC8vIEt1bmNpIHNlbXVhIGtvdGFrIGphd2FiYW4gYWdhciB0aWRhayBiaXNhIGRpY29iYSB1bGFuZyBwYWRhIHNvYWwgaW5pCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC16b25lJykuZm9yRWFjaCh6ID0+IHsKICAgICAgICAgICAgICAgICAgICB6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBTZW1idW55aWthbiBrYXJ0dSB0dWdhcyBsYWx1IGxhbmp1dCBrZSBwZXJ0YW55YWFuIGJlcmlrdXRueWEKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgICAgICAgICAgICB9LCA1MDApOwoKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbkluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgbG9hZFF1ZXN0aW9uKCk7CiAgICAgICAgICAgICAgICB9LCAxMTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZW5kR2FtZSgpIHsKICAgICAgICAgICAgZ2FtZVNjcmVlbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICAgICAgICAgICAgZW5kU2NyZWVuLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpOwogICAgICAgICAgICBlbmRTY3JlZW4uY2xhc3NMaXN0LmFkZCgnYm91bmNlLWluJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWwtc2NvcmUnKS50ZXh0Q29udGVudCA9IHNjb3JlOwoKICAgICAgICAgICAgLy8gS2lyaW0gc2tvciBha2hpciBrZSBoYWxhbWFuIGluZHVrIChkaXBha2FpIHVudHVrIG1lbnlhdHVrYW4KICAgICAgICAgICAgLy8gaGFzaWwgZ2FtZSBkZW5nYW4gVHVnYXMgUHJpYmFkaSBkaSBoYWxhbWFuIG1hdGVyaSkKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJ21hc3Rlci1wZW5nb2xhaC1rYXRhJywKICAgICAgICAgICAgICAgICAgICBzY29yZTogc2NvcmUsCiAgICAgICAgICAgICAgICAgICAgbWF4U2NvcmU6IHF1ZXN0aW9ucy5sZW5ndGggKiAxMAogICAgICAgICAgICAgICAgfSwgJyonKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IC8qIGFiYWlrYW4gamlrYSB0aWRhayBiZXJqYWxhbiBkaSBkYWxhbSBpZnJhbWUgKi8gfQogICAgICAgICAgICAKICAgICAgICAgICAgbGV0IGZlZWRiYWNrID0gIiI7CiAgICAgICAgICAgIC8vIE1lbnllc3VhaWthbiBsb2dpa2EgcG9pbiB1bnR1ayBtYWtzaW1hbCBza29yIDUwMCAoNTAgc29hbCkKICAgICAgICAgICAgaWYgKHNjb3JlID09PSA1MDApIGZlZWRiYWNrID0gIkx1YXIgQmlhc2EgU2VtcHVybmEhIEFuZGEgYWRhbGFoIFNhbmcgTWFzdGVyIFBlbmdvbGFoIEthdGEuIPCfjJ8iOwogICAgICAgICAgICBlbHNlIGlmIChzY29yZSA+PSA0MDApIGZlZWRiYWNrID0gIkhlYmF0IHNla2FsaSEgS2V0ZXJhbXBpbGFuIGFwbGlrYXNpIHBlcmthbnRvcmFuIEFuZGEgc2V0YXJhIHNla3JldGFyaXMgaGFuZGFsLiDwn5GNIjsKICAgICAgICAgICAgZWxzZSBpZiAoc2NvcmUgPj0gMjUwKSBmZWVkYmFjayA9ICJDdWt1cCBiYWlrLCB0YXBpIG1hc2loIGJhbnlhayBmaXR1ciBsYW5qdXRhbiB5YW5nIHBlcmx1IEFuZGEgcGVsYWphcmkuIFRldGFwIHNlbWFuZ2F0ISDwn5OaIjsKICAgICAgICAgICAgZWxzZSBmZWVkYmFjayA9ICJKYW5nYW4gbWVueWVyYWghIFRlcnVzIGJlcmxhdGloIGFnYXIgQW5kYSBsZWJpaCB0ZXJiaWFzYSBkZW5nYW4gZml0dXItZml0dXIgYWRtaW5pc3RyYXNpLiDwn5KqIjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZWVkYmFjay1tc2cnKS50ZXh0Q29udGVudCA9IGZlZWRiYWNrOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVzZXRHYW1lKCkgewogICAgICAgICAgICBlbmRTY3JlZW4uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7CiAgICAgICAgICAgIHN0YXJ0R2FtZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gLS0tIEVWRU5UIEhBTkRMRVJTIERSQUcgJiBEUk9QIChERVNLVE9QIC8gTU9VU0UpIC0tLQogICAgICAgIAogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChlKSA9PiB7CiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCAndGFzaycpOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRhc2tDYXJkLmNsYXNzTGlzdC5hZGQoJ29wYWNpdHktNTAnKSwgMCk7CiAgICAgICAgfSk7CgogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIHRhc2tDYXJkLmNsYXNzTGlzdC5yZW1vdmUoJ29wYWNpdHktNTAnKTsKICAgICAgICB9KTsKCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRHJhZ092ZXIoZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIFdhamliIGFnYXIgYmlzYSBkaS1kcm9wCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYW5kbGVEcmFnRW50ZXIoZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBlLnRhcmdldC5jbG9zZXN0KCcuZHJvcC16b25lJyk7CiAgICAgICAgICAgIGlmICh6b25lKSB6b25lLmNsYXNzTGlzdC5hZGQoJ2RyYWctb3ZlcicpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRHJhZ0xlYXZlKGUpIHsKICAgICAgICAgICAgY29uc3Qgem9uZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5kcm9wLXpvbmUnKTsKICAgICAgICAgICAgaWYgKHpvbmUpIHpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYW5kbGVEcm9wKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCB6b25lID0gZS50YXJnZXQuY2xvc2VzdCgnLmRyb3Atem9uZScpOwogICAgICAgICAgICBpZiAoem9uZSkgewogICAgICAgICAgICAgICAgem9uZS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnLW92ZXInKTsKICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB6b25lLmRhdGFzZXQuaWQ7CiAgICAgICAgICAgICAgICBjaGVja0Fuc3dlcihzZWxlY3RlZElkLCB6b25lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gLS0tIEVWRU5UIEhBTkRMRVJTIERSQUcgJiBEUk9QIChNT0JJTEUgLyBUT1VDSCBTQ1JFRU4pIC0tLQogICAgICAgIC8vIEthcmVuYSBIVE1MNSBEcmFnICYgRHJvcCBrdXJhbmcgcmVzcG9uc2lmIGRpIGxheWFyIHNlbnR1aCwga2l0YSBidWF0IGt1c3RvbQogICAgICAgIAogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBoYW5kbGVUb3VjaFN0YXJ0LCB7cGFzc2l2ZTogZmFsc2V9KTsKICAgICAgICB0YXNrQ2FyZC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUsIHtwYXNzaXZlOiBmYWxzZX0pOwogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaGFuZGxlVG91Y2hFbmQpOwoKICAgICAgICBmdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0KGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAvLyBNZW5jZWdhaCBzY3JvbGxpbmcgc2FhdCBtZW55ZW50dWgga2FydHUKICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF07CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBCdWF0IGtsb25pbmdhbiBrYXJ0dSB1bnR1ayB2aXN1YWwgZHJhZwogICAgICAgICAgICBjb25zdCByZWN0ID0gdGFza0NhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNsb25lQ2FyZCA9IHRhc2tDYXJkLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgY2xvbmVDYXJkLmNsYXNzTGlzdC5hZGQoJ2Fic29sdXRlLWRyYWcnLCAnc2hhZG93LTJ4bCcsICdvcGFjaXR5LTkwJywgJ3NjYWxlLTEwNScpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2V0IHBvc2lzaSBhd2FsCiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgOwogICAgICAgICAgICBjbG9uZUNhcmQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgOwogICAgICAgICAgICBjbG9uZUNhcmQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdH1weGA7CiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGA7CiAgICAgICAgICAgIAogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNsb25lQ2FyZCk7CiAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsgLy8gU2VtYnVueWlrYW4gYXNsaW55YQoKICAgICAgICAgICAgLy8gSGl0dW5nIG9mZnNldCBzZW50dWhhbgogICAgICAgICAgICBzdGFydFggPSB0b3VjaC5jbGllbnRYOwogICAgICAgICAgICBzdGFydFkgPSB0b3VjaC5jbGllbnRZOwogICAgICAgICAgICBpbml0aWFsWCA9IHJlY3QubGVmdDsKICAgICAgICAgICAgaW5pdGlhbFkgPSByZWN0LnRvcDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZShlKSB7CiAgICAgICAgICAgIGlmICghY2xvbmVDYXJkKSByZXR1cm47CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF07CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBkeCA9IHRvdWNoLmNsaWVudFggLSBzdGFydFg7CiAgICAgICAgICAgIGNvbnN0IGR5ID0gdG91Y2guY2xpZW50WSAtIHN0YXJ0WTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS5sZWZ0ID0gYCR7aW5pdGlhbFggKyBkeH1weGA7CiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS50b3AgPSBgJHtpbml0aWFsWSArIGR5fXB4YDsKCiAgICAgICAgICAgIC8vIEVmZWsgaG92ZXIgcGFkYSBkcm9wem9uZSBzYWF0IHRvdWNoIG1vdmUKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3Atem9uZScpLmZvckVhY2goeiA9PiB6LmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlbWJ1bnlpa2FuIGtsb25pbmdhbiBzZW1lbnRhcmEgdW50dWsgbWVuZGV0ZWtzaSBlbGVtZW4gZGkgYmF3YWhueWEKICAgICAgICAgICAgY2xvbmVDYXJkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgIGNvbnN0IGVsZW1CZWxvdyA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7CiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCiAgICAgICAgICAgIGlmIChlbGVtQmVsb3cpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBlbGVtQmVsb3cuY2xvc2VzdCgnLmRyb3Atem9uZScpOwogICAgICAgICAgICAgICAgaWYgKHpvbmUpIHpvbmUuY2xhc3NMaXN0LmFkZCgnZHJhZy1vdmVyJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoRW5kKGUpIHsKICAgICAgICAgICAgaWYgKCFjbG9uZUNhcmQpIHJldHVybjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gZS5jaGFuZ2VkVG91Y2hlc1swXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIERldGVrc2kgem9uYSBkcm9wCiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICBjb25zdCBlbGVtQmVsb3cgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFkpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSGFwdXMga2xvbmluZ2FuIHZpc3VhbAogICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNsb25lQ2FyZCk7CiAgICAgICAgICAgIGNsb25lQ2FyZCA9IG51bGw7CiAgICAgICAgICAgIAogICAgICAgICAgICBsZXQgZHJvcHBlZE9uWm9uZSA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKGVsZW1CZWxvdykgewogICAgICAgICAgICAgICAgY29uc3Qgem9uZSA9IGVsZW1CZWxvdy5jbG9zZXN0KCcuZHJvcC16b25lJyk7CiAgICAgICAgICAgICAgICBpZiAoem9uZSkgewogICAgICAgICAgICAgICAgICAgIGRyb3BwZWRPblpvbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHpvbmUuZGF0YXNldC5pZDsKICAgICAgICAgICAgICAgICAgICBjaGVja0Fuc3dlcihzZWxlY3RlZElkLCB6b25lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSmlrYSB0aWRhayBkaWxlcGFzIGRpIGRyb3Agem9uZSwga2VtYmFsaWthbiBrYXJ0dSBrZSBwb3Npc2kgYXdhbAogICAgICAgICAgICBpZiAoIWRyb3BwZWRPblpvbmUpIHsKICAgICAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CiAgICAgICAgICAgICAgICB0YXNrQ2FyZC5jbGFzc0xpc3QuYWRkKCdzaGFrZScpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0YXNrQ2FyZC5jbGFzc0xpc3QucmVtb3ZlKCdzaGFrZScpLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=" target="_blank" rel="noopener"&gt;Buka game di layar penuh (tab baru)&lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="game-wrap"&gt;
          &lt;iframe id="gameFrame" src="data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImlkIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iPgogICAgPHRpdGxlPkdhbWUgQWRtaW5pc3RyYXNpOiBNYXN0ZXIgUGVuZ29sYWggS2F0YTwvdGl0bGU+CiAgICA8IS0tIFRhaWx3aW5kIENTUyB1bnR1ayBTdHlsaW5nIENlcGF0IGRhbiBSZXNwb25zaWYgLS0+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4udGFpbHdpbmRjc3MuY29tIj48L3NjcmlwdD4KICAgIDwhLS0gRm9udEF3ZXNvbWUgdW50dWsgSWtvbiBNZW51IFBlbmdvbGFoIEthdGEgLS0+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS82LjQuMC9jc3MvYWxsLm1pbi5jc3MiPgogICAgPCEtLSBHb29nbGUgRm9udHMgKFBvcHBpbnMpIC0tPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Qb3BwaW5zOndnaHRANDAwOzYwMDs3MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgogICAgCiAgICA8c3R5bGU+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUG9wcGlucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGZkZjQ7IC8qIEhpamF1IHNhbmdhdCBtdWRhL3NlZ2FyICovCiAgICAgICAgICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7IC8qIE1lbmNlZ2FoIHB1bGwtdG8tcmVmcmVzaCBkaSBtb2JpbGUgKi8KICAgICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLyogQW5pbWFzaSAqLwogICAgICAgIC5ib3VuY2UtaW4gewogICAgICAgICAgICBhbmltYXRpb246IGJvdW5jZUluIDAuNXMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpOwogICAgICAgIH0KICAgICAgICBAa2V5ZnJhbWVzIGJvdW5jZUluIHsKICAgICAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7IG9wYWNpdHk6IDA7IH0KICAgICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH0KICAgICAgICB9CgogICAgICAgIC5zaGFrZSB7CiAgICAgICAgICAgIGFuaW1hdGlvbjogc2hha2UgMC40czsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBzaGFrZSB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9CiAgICAgICAgICAgIDI1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTBweCk7IH0KICAgICAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpOyB9CiAgICAgICAgICAgIDc1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTBweCk7IH0KICAgICAgICB9CgogICAgICAgIC8qIFN0eWxpbmcgS2FydHUgRHJhZ2dhYmxlICovCiAgICAgICAgLmRyYWdnYWJsZS1jYXJkIHsKICAgICAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7IC8qIFBlbnRpbmcgdW50dWsgY3VzdG9tIHRvdWNoIGRyYWcgKi8KICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzOwogICAgICAgIH0KICAgICAgICAuZHJhZ2dhYmxlLWNhcmQ6YWN0aXZlIHsKICAgICAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgICB9CiAgICAgICAgLmRyYWdnaW5nIHsKICAgICAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICAgICAgICB6LWluZGV4OiA1MDsKICAgICAgICB9CgogICAgICAgIC8qIFN0eWxpbmcgRHJvcCBab25lICovCiAgICAgICAgLmRyb3Atem9uZSB7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIC5kcm9wLXpvbmUuZHJhZy1vdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RiZWFmZTsgLyogQmlydSBtdWRhIHNhYXQgZGktaG92ZXIgKi8KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2OwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICAgIH0KICAgICAgICAuZHJvcC16b25lLmNvcnJlY3QgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNmY2U3OwogICAgICAgICAgICBib3JkZXItY29sb3I6ICMyMmM1NWU7CiAgICAgICAgICAgIGNvbG9yOiAjMTY2NTM0OwogICAgICAgIH0KICAgICAgICAuZHJvcC16b25lLndyb25nIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZTJlMjsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZWY0NDQ0OwogICAgICAgICAgICBjb2xvcjogIzk5MWIxYjsKICAgICAgICB9CgogICAgICAgIC8qIFV0aWxpdHkgdW50dWsgY3VzdG9tIGRyYWcgbW9iaWxlICovCiAgICAgICAgLmFic29sdXRlLWRyYWcgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIFN1cGF5YSBlbGVtZW4gZGkgYmF3YWhueWEgKGRyb3Agem9uZSkgYmlzYSB0ZXJkZXRla3NpICovCiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keSBjbGFzcz0ibWluLWgtc2NyZWVuIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNCI+CgogICAgPCEtLSBMQVlBUiBNVUxBSSAtLT4KICAgIDxkaXYgaWQ9InN0YXJ0LXNjcmVlbiIgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtM3hsIHNoYWRvdy0yeGwgcC04IG1heC13LW1kIHctZnVsbCB0ZXh0LWNlbnRlciBib3VuY2UtaW4gYm9yZGVyLXQtOCBib3JkZXItYmx1ZS01MDAiPgogICAgICAgIDxpIGNsYXNzPSJmYS1zb2xpZCBmYS1sYXB0b3AtZmlsZSB0ZXh0LTZ4bCB0ZXh0LWJsdWUtNTAwIG1iLTQiPjwvaT4KICAgICAgICA8aDEgY2xhc3M9InRleHQtM3hsIGZvbnQtYm9sZCB0ZXh0LWdyYXktODAwIG1iLTIiPk1hc3RlciBQZW5nb2xhaCBLYXRhPC9oMT4KICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTYwMCBtYi02IHRleHQtc20iPlVqaSBrZWFobGlhbiBhZG1pbmlzdHJhc2kgcGVya2FudG9yYW5tdSEgQmFjYSB0dWdhcyBkYXJpIGF0YXNhbiBkYW4gdGFyaWsgKGRyYWcpIGthcnR1IHR1Z2FzIGtlIGFsYXQvZml0dXIgeWFuZyB0ZXBhdC48L3A+CiAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJzdGFydEdhbWUoKSIgY2xhc3M9InctZnVsbCBiZy1ibHVlLTYwMCBob3ZlcjpiZy1ibHVlLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBweS0zIHB4LTYgcm91bmRlZC14bCB0cmFuc2l0aW9uIGR1cmF0aW9uLTIwMCB0cmFuc2Zvcm0gaG92ZXI6c2NhbGUtMTA1IHNoYWRvdy1sZyI+CiAgICAgICAgICAgIE11bGFpIEJla2VyamEgPGkgY2xhc3M9ImZhLXNvbGlkIGZhLXBsYXkgbWwtMiI+PC9pPgogICAgICAgIDwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPCEtLSBBUkVBIFBFUk1BSU5BTiAtLT4KICAgIDxkaXYgaWQ9ImdhbWUtc2NyZWVuIiBjbGFzcz0iaGlkZGVuIHctZnVsbCBtYXgtdy0zeGwgZmxleCBmbGV4LWNvbCBoLVs5MHZoXSBqdXN0aWZ5LWJldHdlZW4iPgogICAgICAgIDwhLS0gSGVhZGVyOiBTa29yICYgUHJvZ3JlcyAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3ctbWQgcC00IGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ibHVlLTYwMCBmb250LWJvbGQiPgogICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXNvbGlkIGZhLWxpc3QtY2hlY2siPjwvaT4gVHVnYXM6IDxzcGFuIGlkPSJwcm9ncmVzcy10ZXh0Ij4xLzEwPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ncmVlbi02MDAgZm9udC1ib2xkIHRleHQteGwiPgogICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXNvbGlkIGZhLXN0YXIgdGV4dC15ZWxsb3ctNDAwIj48L2k+IFNrb3I6IDxzcGFuIGlkPSJzY29yZS10ZXh0Ij4wPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBBcmVhIFBlcnRhbnlhYW4gKEthcnR1IERyYWdnYWJsZSkgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1ncm93IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgcmVsYXRpdmUiIGlkPSJkcmFnLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1ncmF5LTYwMCB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgbWItMyB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSI+VHVnYXMgQW5kYTo8L2gyPgogICAgICAgICAgICA8ZGl2IGlkPSJ0YXNrLWNhcmQiIGNsYXNzPSJkcmFnZ2FibGUtY2FyZCBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLTYgdy1mdWxsIG1heC13LXNtIHRleHQtY2VudGVyIGJvcmRlci1iLTQgYm9yZGVyLWJsdWUtNzAwIG14LWF1dG8iIGRyYWdnYWJsZT0idHJ1ZSI+CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEtc29saWQgZmEtZW52ZWxvcGUtb3Blbi10ZXh0IHRleHQtM3hsIG1iLTMgdGV4dC1ibHVlLTIwMCI+PC9pPgogICAgICAgICAgICAgICAgPHAgaWQ9InRhc2stZGVzYyIgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCBsZWFkaW5nLXNudWciPgogICAgICAgICAgICAgICAgICAgIDwhLS0gRGVza3JpcHNpIGFrYW4gZGktbG9hZCBkaSBzaW5pIC0tPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCB0ZXh0LWJsdWUtMjAwIHRleHQteHMgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYS1zb2xpZCBmYS1oYW5kLXBvaW50ZXIiPjwvaT4gVGFyaWsga2FydHUgaW5pIGtlIGFsYXQgZGkgYmF3YWgKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBBcmVhIERyb3AgWm9uZSAoUGlsaWhhbiBBbGF0KSAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIGdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC0zIG1kOmdhcC00IHBiLTQiIGlkPSJkcm9wLXpvbmVzLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDwhLS0gS290YWsgcGlsaWhhbiBha2FuIGRpLWdlbmVyYXRlIG9sZWggSmF2YVNjcmlwdCAtLT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTEFZQVIgQUtISVIgLS0+CiAgICA8ZGl2IGlkPSJlbmQtc2NyZWVuIiBjbGFzcz0iaGlkZGVuIGJnLXdoaXRlIHJvdW5kZWQtM3hsIHNoYWRvdy0yeGwgcC04IG1heC13LW1kIHctZnVsbCB0ZXh0LWNlbnRlciBib3VuY2UtaW4gYm9yZGVyLXQtOCBib3JkZXItZ3JlZW4tNTAwIj4KICAgICAgICA8aSBjbGFzcz0iZmEtc29saWQgZmEtYXdhcmQgdGV4dC03eGwgdGV4dC15ZWxsb3ctNDAwIG1iLTQiPjwvaT4KICAgICAgICA8aDEgY2xhc3M9InRleHQtM3hsIGZvbnQtYm9sZCB0ZXh0LWdyYXktODAwIG1iLTIiPktlcmphIEJhZ3VzITwvaDE+CiAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS02MDAgbWItMiI+QW5kYSB0ZWxhaCBtZW55ZWxlc2Fpa2FuIGphbSBrZXJqYSBkZW5nYW4gYmFpay48L3A+CiAgICAgICAgPGRpdiBjbGFzcz0idGV4dC01eGwgZm9udC1ib2xkIHRleHQtYmx1ZS02MDAgbXktNiIgaWQ9ImZpbmFsLXNjb3JlIj4xMDA8L2Rpdj4KICAgICAgICA8cCBpZD0iZmVlZGJhY2stbXNnIiBjbGFzcz0idGV4dC1ncmF5LTYwMCBmb250LXNlbWlib2xkIG1iLTYiPjwvcD4KICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InJlc2V0R2FtZSgpIiBjbGFzcz0idy1mdWxsIGJnLWdyZWVuLTUwMCBob3ZlcjpiZy1ncmVlbi02MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcHktMyBweC02IHJvdW5kZWQteGwgdHJhbnNpdGlvbiBkdXJhdGlvbi0yMDAgc2hhZG93LWxnIj4KICAgICAgICAgICAgTWFpbiBMYWdpIDxpIGNsYXNzPSJmYS1zb2xpZCBmYS1yb3RhdGUtcmlnaHQgbWwtMiI+PC9pPgogICAgICAgIDwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgICAvLyAtLS0gREFUQSBNQVNURVIgLS0tCiAgICAgICAgLy8gS3VtcHVsYW4gc2VtdWEgYWxhdC9maXR1ciB1bnR1ayBtZW1idWF0IHBlbmdlY29oIChkaXN0cmFjdG9ycykKICAgICAgICBjb25zdCBhbGxUb29scyA9IFsKICAgICAgICAgICAgeyBpZDogJ25ldycsIG5hbWU6ICdOZXcgRG9jdW1lbnQnLCBpY29uOiAnZmEtZmlsZS1jaXJjbGUtcGx1cycgfSwKICAgICAgICAgICAgeyBpZDogJ3NhdmUnLCBuYW1lOiAnU2F2ZSAvIFNhdmUgQXMnLCBpY29uOiAnZmEtZmxvcHB5LWRpc2snIH0sCiAgICAgICAgICAgIHsgaWQ6ICdib2xkJywgbmFtZTogJ0JvbGQnLCBpY29uOiAnZmEtYm9sZCcgfSwKICAgICAgICAgICAgeyBpZDogJ2p1c3RpZnknLCBuYW1lOiAnSnVzdGlmeScsIGljb246ICdmYS1hbGlnbi1qdXN0aWZ5JyB9LAogICAgICAgICAgICB7IGlkOiAnY29weScsIG5hbWU6ICdDb3B5JywgaWNvbjogJ2ZhLWNvcHknIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwYWdlc2l6ZScsIG5hbWU6ICdQYWdlIFNpemUnLCBpY29uOiAnZmEtZmlsZS1saW5lcycgfSwKICAgICAgICAgICAgeyBpZDogJ3VuZG8nLCBuYW1lOiAnVW5kbycsIGljb246ICdmYS1yb3RhdGUtbGVmdCcgfSwKICAgICAgICAgICAgeyBpZDogJ251bWJlcmluZycsIG5hbWU6ICdOdW1iZXJpbmcnLCBpY29uOiAnZmEtbGlzdC1vbCcgfSwKICAgICAgICAgICAgeyBpZDogJ2ZpbmQnLCBuYW1lOiAnRmluZCAmIFJlcGxhY2UnLCBpY29uOiAnZmEtbWFnbmlmeWluZy1nbGFzcy1hcnJvdy1yaWdodCcgfSwKICAgICAgICAgICAgeyBpZDogJ3BkZicsIG5hbWU6ICdFeHBvcnQgUERGJywgaWNvbjogJ2ZhLWZpbGUtcGRmJyB9LAogICAgICAgICAgICB7IGlkOiAnaXRhbGljJywgbmFtZTogJ0l0YWxpYycsIGljb246ICdmYS1pdGFsaWMnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwcmludCcsIG5hbWU6ICdQcmludCcsIGljb246ICdmYS1wcmludCcgfSwKICAgICAgICAgICAgeyBpZDogJ2NlbnRlcicsIG5hbWU6ICdDZW50ZXIgQWxpZ24nLCBpY29uOiAnZmEtYWxpZ24tY2VudGVyJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9udGNvbG9yJywgbmFtZTogJ0ZvbnQgQ29sb3InLCBpY29uOiAnZmEtcGFsZXR0ZScgfSwKICAgICAgICAgICAgeyBpZDogJ3VuZGVybGluZScsIG5hbWU6ICdVbmRlcmxpbmUnLCBpY29uOiAnZmEtdW5kZXJsaW5lJyB9LAogICAgICAgICAgICB7IGlkOiAnYWxpZ25sZWZ0JywgbmFtZTogJ0FsaWduIExlZnQnLCBpY29uOiAnZmEtYWxpZ24tbGVmdCcgfSwKICAgICAgICAgICAgeyBpZDogJ2FsaWducmlnaHQnLCBuYW1lOiAnQWxpZ24gUmlnaHQnLCBpY29uOiAnZmEtYWxpZ24tcmlnaHQnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdjdXQnLCBuYW1lOiAnQ3V0JywgaWNvbjogJ2ZhLXNjaXNzb3JzJyB9LAogICAgICAgICAgICB7IGlkOiAncGFzdGUnLCBuYW1lOiAnUGFzdGUnLCBpY29uOiAnZmEtcGFzdGUnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdyZWRvJywgbmFtZTogJ1JlZG8nLCBpY29uOiAnZmEtcm90YXRlLXJpZ2h0JyB9LAogICAgICAgICAgICB7IGlkOiAnYnVsbGV0cycsIG5hbWU6ICdCdWxsZXRzJywgaWNvbjogJ2ZhLWxpc3QtdWwnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdsaW5lc3BhY2luZycsIG5hbWU6ICdMaW5lIFNwYWNpbmcnLCBpY29uOiAnZmEtYXJyb3dzLXVwLWRvd24nIH0sCiAgICAgICAgICAgIHsgaWQ6ICdtYXJnaW5zJywgbmFtZTogJ01hcmdpbnMnLCBpY29uOiAnZmEtbWF4aW1pemUnIH0sCiAgICAgICAgICAgIHsgaWQ6ICd0YWJsZScsIG5hbWU6ICdJbnNlcnQgVGFibGUnLCBpY29uOiAnZmEtdGFibGUnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwaWN0dXJlJywgbmFtZTogJ0luc2VydCBQaWN0dXJlJywgaWNvbjogJ2ZhLWltYWdlJyB9LAogICAgICAgICAgICB7IGlkOiAnaGVhZGVyJywgbmFtZTogJ0hlYWRlcicsIGljb246ICdmYS1oZWFkaW5nJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9vdGVyJywgbmFtZTogJ0Zvb3RlcicsIGljb246ICdmYS1zaG9lLXByaW50cycgfSwKICAgICAgICAgICAgeyBpZDogJ3BhZ2VudW1iZXInLCBuYW1lOiAnUGFnZSBOdW1iZXInLCBpY29uOiAnZmEtYXJyb3ctZG93bi0xLTknIH0sCiAgICAgICAgICAgIHsgaWQ6ICdwYWdlYnJlYWsnLCBuYW1lOiAnUGFnZSBCcmVhaycsIGljb246ICdmYS1maWxlLWRhc2hlZC1saW5lJyB9LAogICAgICAgICAgICB7IGlkOiAnY29sdW1ucycsIG5hbWU6ICdDb2x1bW5zJywgaWNvbjogJ2ZhLXRhYmxlLWNvbHVtbnMnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdvcmllbnRhdGlvbicsIG5hbWU6ICdPcmllbnRhdGlvbicsIGljb246ICdmYS1tb2JpbGUtc2NyZWVuJyB9LAogICAgICAgICAgICB7IGlkOiAnd2F0ZXJtYXJrJywgbmFtZTogJ1dhdGVybWFyaycsIGljb246ICdmYS1zdGFtcCcgfSwKICAgICAgICAgICAgeyBpZDogJ3NwZWxsY2hlY2snLCBuYW1lOiAnU3BlbGwgQ2hlY2snLCBpY29uOiAnZmEtc3BlbGwtY2hlY2snIH0sCiAgICAgICAgICAgIHsgaWQ6ICdtYWlsbWVyZ2UnLCBuYW1lOiAnTWFpbCBNZXJnZScsIGljb246ICdmYS1lbnZlbG9wZXMtYnVsaycgfSwKICAgICAgICAgICAgeyBpZDogJ3N1cGVyc2NyaXB0JywgbmFtZTogJ1N1cGVyc2NyaXB0JywgaWNvbjogJ2ZhLXN1cGVyc2NyaXB0JyB9LAogICAgICAgICAgICB7IGlkOiAnc3Vic2NyaXB0JywgbmFtZTogJ1N1YnNjcmlwdCcsIGljb246ICdmYS1zdWJzY3JpcHQnIH0sCiAgICAgICAgICAgIHsgaWQ6ICdoaWdobGlnaHQnLCBuYW1lOiAnSGlnaGxpZ2h0JywgaWNvbjogJ2ZhLWhpZ2hsaWdodGVyJyB9LAogICAgICAgICAgICB7IGlkOiAnaHlwZXJsaW5rJywgbmFtZTogJ0h5cGVybGluaycsIGljb246ICdmYS1saW5rJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9ybWF0cGFpbnRlcicsIG5hbWU6ICdGb3JtYXQgUGFpbnRlcicsIGljb246ICdmYS1wYWludC1yb2xsZXInIH0sCiAgICAgICAgICAgIHsgaWQ6ICd0ZXh0Ym94JywgbmFtZTogJ1RleHQgQm94JywgaWNvbjogJ2ZhLXNxdWFyZS1wZW4nIH0sCiAgICAgICAgICAgIHsgaWQ6ICd3b3JkY291bnQnLCBuYW1lOiAnV29yZCBDb3VudCcsIGljb246ICdmYS1jYWxjdWxhdG9yJyB9LAogICAgICAgICAgICB7IGlkOiAnem9vbScsIG5hbWU6ICdab29tJywgaWNvbjogJ2ZhLW1hZ25pZnlpbmctZ2xhc3MtcGx1cycgfSwKICAgICAgICAgICAgeyBpZDogJ3N0cmlrZXRocm91Z2gnLCBuYW1lOiAnU3RyaWtldGhyb3VnaCcsIGljb246ICdmYS1zdHJpa2V0aHJvdWdoJyB9LAogICAgICAgICAgICB7IGlkOiAnaW5kZW50aW5jcmVhc2UnLCBuYW1lOiAnSW5jcmVhc2UgSW5kZW50JywgaWNvbjogJ2ZhLWluZGVudCcgfSwKICAgICAgICAgICAgeyBpZDogJ2luZGVudGRlY3JlYXNlJywgbmFtZTogJ0RlY3JlYXNlIEluZGVudCcsIGljb246ICdmYS1vdXRkZW50JyB9LAogICAgICAgICAgICB7IGlkOiAnY2hhcnQnLCBuYW1lOiAnSW5zZXJ0IENoYXJ0JywgaWNvbjogJ2ZhLWNoYXJ0LXBpZScgfSwKICAgICAgICAgICAgeyBpZDogJ3NoYXBlcycsIG5hbWU6ICdJbnNlcnQgU2hhcGVzJywgaWNvbjogJ2ZhLXNoYXBlcycgfSwKICAgICAgICAgICAgeyBpZDogJ3N5bWJvbCcsIG5hbWU6ICdJbnNlcnQgU3ltYm9sJywgaWNvbjogJ2ZhLW9tZWdhJyB9LAogICAgICAgICAgICB7IGlkOiAnZm9udGZhbWlseScsIG5hbWU6ICdGb250IFN0eWxlJywgaWNvbjogJ2ZhLWZvbnQnIH0KICAgICAgICBdOwoKICAgICAgICAvLyBEYWZ0YXIgNTAgUGVydGFueWFhbgogICAgICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFsKICAgICAgICAgICAgLy8gU2VzaSAxOiBEYXNhciAmIFBlbnlpbXBhbmFuCiAgICAgICAgICAgIHsgdGFzazogIkJvcyBtZW1pbnRhIEFuZGEgbWVtYnVhdCBzdXJhdCBwZW5hd2FyYW4gYmFydSBkYXJpIGtlcnRhcyBrb3NvbmcuIiwgY29ycmVjdElkOiAibmV3IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIHN1ZGFoIG1lbmdldGlrIGxhcG9yYW4uIFNla2FyYW5nIEFuZGEgaGFydXMgbWVueWltcGFubnlhIGRlbmdhbiBuYW1hIGZpbGUgYmFydSAnTGFwb3Jhbl9CdWxhbl9JbmknLiIsIGNvcnJlY3RJZDogInNhdmUiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkRva3VtZW4ga29udHJhayBzdWRhaCBmaW5hbC4gQW5kYSBoYXJ1cyBtZW55aW1wYW5ueWEga2UgZm9ybWF0IHlhbmcgdGlkYWsgYmlzYSBkaWVkaXQgc2VtYmFyYW5nYW4uIiwgY29ycmVjdElkOiAicGRmIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJTaW1wYW4gcGVtYmFydWFuIHBla2VyamFhbiB5YW5nIGJhcnUgc2FqYSBBbmRhIGtldGlrIGFnYXIgdGlkYWsgaGlsYW5nIGppa2EgdGliYS10aWJhIG1hdGkgbGFtcHUuIiwgY29ycmVjdElkOiAic2F2ZSIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQ2V0YWsgMyByYW5na2FwIGRva3VtZW4gcGVyamFuamlhbiBrZXJqYXNhbWEgaW5pIG1lbmdndW5ha2FuIHByaW50ZXIgZGkgcnVhbmcgbWVldGluZy4iLCBjb3JyZWN0SWQ6ICJwcmludCIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgMjogRm9ybWF0IEZvbnQgJiBUZWtzCiAgICAgICAgICAgIHsgdGFzazogIkp1ZHVsIGtvcCBzdXJhdCBoYXJ1cyB0ZXJsaWhhdCBsZWJpaCB0ZWJhbCBkYW4gbWVuY29sb2sgZGFyaSB0ZWtzIGxhaW5ueWEuIiwgY29ycmVjdElkOiAiYm9sZCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSBnYXJpcyBiYXdhaCBwYWRhIGthdGEgJ1BFTlRJTkcnIGRpIHBlbmd1bXVtYW4gaW50ZXJuYWwga2FudG9yLiIsIGNvcnJlY3RJZDogInVuZGVybGluZSIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiSmFkaWthbiB0ZWtzIGt1dGlwYW4gcGVudGluZyBpbmkgbWVuamFkaSBtaXJpbmcgYWdhciBiZXJiZWRhIGRhcmkgdGVrcyBwYXJhZ3JhZiBsYWlubnlhLiIsIGNvcnJlY3RJZDogIml0YWxpYyIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVWJhaCBqZW5pcyBnYXlhIHR1bGlzYW4gZG9rdW1lbiBzdXJhdCByZXNtaSBpbmkgZGFyaSBmb250IGRlZmF1bHQgbWVuamFkaSBBcmlhbCBhdGF1IFRpbWVzIE5ldyBSb21hbi4iLCBjb3JyZWN0SWQ6ICJmb250ZmFtaWx5IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJVYmFoIHdhcm5hIHRla3MgcGVyaW5nYXRhbiBkaSBwZW5ndW11bWFuIGluaSBkYXJpIGhpdGFtIG1lbmphZGkgbWVyYWggdGVyYW5nLiIsIGNvcnJlY3RJZDogImZvbnRjb2xvciIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSB3YXJuYSBsYXRhciBrdW5pbmcgKHNlcGVydGkgc3RhYmlsbykgcGFkYSBrYWxpbWF0IHlhbmcgaGFydXMgc2VnZXJhIGRpcmV2aXNpIG9sZWggdGltLiIsIGNvcnJlY3RJZDogImhpZ2hsaWdodCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSBnYXJpcyBjb3JldGFuIGRpIHRlbmdhaCB0ZWtzIHVudHVrIG1lbmFuZGFpIGhhcmdhIGxhbWEgcHJvZHVrIHlhbmcgc3VkYWggZGlza29uLiIsIGNvcnJlY3RJZDogInN0cmlrZXRocm91Z2giIH0sCiAgICAgICAgICAgIHsgdGFzazogIlNhbGluIGdheWEgaHVydWYgZGFuIHdhcm5hIGRhcmkgSnVkdWwgMSwgbGFsdSB0ZXJhcGthbiBzZWNhcmEgaW5zdGFuIGtlIEp1ZHVsIDIgdGFucGEgbWVuZ2F0dXIgdWxhbmcuIiwgY29ycmVjdElkOiAiZm9ybWF0cGFpbnRlciIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgMzogUGVyYXRhYW4gJiBQYXJhZ3JhZgogICAgICAgICAgICB7IHRhc2s6ICJBZ2FyIHN1cmF0IHJlc21pIHRlcmxpaGF0IHJhcGksIHNpc2kga2FuYW4gZGFuIGtpcmkgcGFyYWdyYWYgaGFydXMgc2VqYWphciByYXRhLiIsIGNvcnJlY3RJZDogImp1c3RpZnkiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkZvcm1hdCB0YW5nZ2FsIHN1cmF0IGRpIGJhZ2lhbiBhdGFzIGhhcnVzIGRpcmF0YWthbiBraHVzdXMga2Ugc2lzaSBraXJpIGRva3VtZW4uIiwgY29ycmVjdElkOiAiYWxpZ25sZWZ0IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQb3Npc2lrYW4gYmxvayB0YW5kYSB0YW5nYW4gZGlyZWt0dXIgYWdhciBiZXJhZGEgc2VqYWphciBkaSBtYXJnaW4ga2FuYW4gYmF3YWguIiwgY29ycmVjdElkOiAiYWxpZ25yaWdodCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiUHVzYXRrYW4ganVkdWwgbGFwb3JhbiBhZ2FyIGJlcmFkYSB0ZXBhdCBkaSB0ZW5nYWgtdGVuZ2FoIGhhbGFtYW4gc2VjYXJhIGhvcml6b250YWwuIiwgY29ycmVjdElkOiAiY2VudGVyIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUZWtzIGxhcG9yYW4gdGVybGFsdSBwYWRhdCBkaWJhY2EuIFViYWggamFyYWsgYW50YXIgYmFyaXMgdGVrcyAoc3Bhc2kgYmFyaXMpIG1lbmphZGkgMSw1LiIsIGNvcnJlY3RJZDogImxpbmVzcGFjaW5nIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJEb3JvbmcgcGFyYWdyYWYgaW5pIGxlYmloIG1lbmpvcm9rIGtlIGRhbGFtIChrZSBrYW5hbikgYWdhciBtYXN1ayBzZWJhZ2FpIGJhZ2lhbiBkYXJpIHN1Yi1iYWIuIiwgY29ycmVjdElkOiAiaW5kZW50aW5jcmVhc2UiIH0sCiAgICAgICAgICAgIHsgdGFzazogIlRhcmlrIGtlbWJhbGkgdGVrcyB5YW5nIHBvc2lzaW55YSB0ZXJsYWx1IG1lbmpvcm9rIGtlIGRhbGFtIGFnYXIgc2VqYWphciBsYWdpIGRlbmdhbiBiYXRhcyBraXJpIG5vcm1hbC4iLCBjb3JyZWN0SWQ6ICJpbmRlbnRkZWNyZWFzZSIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgNDogTmF2aWdhc2ksIENvcHksIFBhc3RlICYgVW5kbwogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIG1lbWJhdGFsa2FuIHNlYnVhaCBrZXRpa2FuIChVbmRvKSwgdGFwaSBiZXJ1YmFoIHBpa2lyYW4gZGFuIGluZ2luIG1lbmdlbWJhbGlrYW4ga2V0aWthbiB0ZXJzZWJ1dC4iLCBjb3JyZWN0SWQ6ICJyZWRvIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIGluZ2luIG1lbWluZGFoa2FuIHRla3MgYWxhbWF0IGRhcmkgZG9rdW1lbiBsYW1hIHRhbnBhIG1lbmdldGlrIHVsYW5nIChMYW5na2FoIHBlcnRhbWE6IFNhbGluKS4iLCBjb3JyZWN0SWQ6ICJjb3B5IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJTZXRlbGFoIG1lbnlhbGluIChDb3B5KSB0ZWtzIGRhcmkgZW1haWwsIHRlbXBlbGthbiB0ZWtzIHRlcnNlYnV0IGtlIGRhbGFtIGRva3VtZW4gV29yZCBBbmRhLiIsIGNvcnJlY3RJZDogInBhc3RlIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQaW5kYWhrYW4gcGFyYWdyYWYgaW5pIGtlIGJhYiBsYWluLiAoTGFuZ2thaCBwZXJ0YW1hOiBQb3RvbmcvaGlsYW5na2FuIGRhcmkgdGVtcGF0IGFzbGlueWEpLiIsIGNvcnJlY3RJZDogImN1dCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVXBzISBBbmRhIHRpZGFrIHNlbmdhamEgbWVuZ2hhcHVzIHBhcmFncmFmIHBlbnRpbmcuIEJhdGFsa2FuIGtlc2FsYWhhbiB0ZXJzZWJ1dCBhZ2FyIGtlbWJhbGkgc2VwZXJ0aSBzZW11bGEuIiwgY29ycmVjdElkOiAidW5kbyIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQWRhIGtlc2FsYWhhbiBrZXRpayBuYW1hIHBlcnVzYWhhYW4gZGkgNTAgaGFsYW1hbi4gVGVtdWthbiBrYXRhIHRlcnNlYnV0IGRhbiBnYW50aSBzZW11YW55YSBzZWthbGlndXMuIiwgY29ycmVjdElkOiAiZmluZCIgfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlc2kgNTogVGF0YSBMZXRhayBIYWxhbWFuIChQYWdlIExheW91dCkKICAgICAgICAgICAgeyB0YXNrOiAiU3RhbmRhciBwZXJ1c2FoYWFuIG1lbmdoYXJ1c2thbiBkb2t1bWVuIHJlc21pIGRpY2V0YWsga2h1c3VzIGRpIGtlcnRhcyB1a3VyYW4gQTQuIiwgY29ycmVjdElkOiAicGFnZXNpemUiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkF0dXIgYmF0YXMga29zb25nIGRpIHBpbmdnaXIga2VydGFzIChtYXJnaW4gYXRhcywgYmF3YWgsIGtpcmksIGthbmFuKSBtZW5qYWRpIHRlcGF0IDIgY20uIiwgY29ycmVjdElkOiAibWFyZ2lucyIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVWJhaCBwb3Npc2kga2VydGFzIHVudHVrIG1lbmNldGFrIHRhYmVsIHBhbmphbmcgZGFyaSBiZXJkaXJpIChQb3J0cmFpdCkgbWVuamFkaSBtZW5kYXRhciAoTGFuZHNjYXBlKS4iLCBjb3JyZWN0SWQ6ICJvcmllbnRhdGlvbiIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVWJhaCBmb3JtYXQgYXJ0aWtlbCBidWxldGluIHBlcnVzYWhhYW4gaW5pIG1lbmphZGkgZHVhIGJhZ2lhbiB0ZWtzIHlhbmcgYmVyZGFtcGluZ2FuIChzZXBlcnRpIGtvcmFuKS4iLCBjb3JyZWN0SWQ6ICJjb2x1bW5zIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQYWtzYSBqdWR1bCBCYWIgMiBhZ2FyIGxhbmdzdW5nIGRpbXVsYWkgZGkgaGFsYW1hbiBiYXJ1LCB0ZXJwaXNhaCBkYXJpIGhhbGFtYW4gQmFiIDEuIiwgY29ycmVjdElkOiAicGFnZWJyZWFrIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUYW1iYWhrYW4gdHVsaXNhbiB0cmFuc3BhcmFuIGJlcnR1bGlza2FuICdSQUhBU0lBJyBkaSBsYXRhciBiZWxha2FuZyBoYWxhbWFuIGtvbnRyYWsga2VyamEuIiwgY29ycmVjdElkOiAid2F0ZXJtYXJrIiB9LAogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2VzaSA2OiBFbGVtZW4gU2lzaXBhbiAoSW5zZXJ0IEVsZW1lbnRzKQogICAgICAgICAgICB7IHRhc2s6ICJTaXNpcGthbiBnYW1iYXIgbG9nbyBwZXJ1c2FoYWFuIEFuZGEgZGkgYmFnaWFuIHN1ZHV0IGF0YXMgZG9rdW1lbiBwcm9wb3NhbC4iLCBjb3JyZWN0SWQ6ICJwaWN0dXJlIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJNYXN1a2thbiBkYWZ0YXIgbmFtYSBkYW4gbm9tb3IgdGVsZXBvbiBrbGllbiBkYWxhbSBmb3JtYXQgYmFyaXMgZGFuIGtvbG9tIGtvdGFrLWtvdGFrIHlhbmcgcmFwaS4iLCBjb3JyZWN0SWQ6ICJ0YWJsZSIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiVGFtYmFoa2FuIG5hbWEgaW5zdGFuc2kgYWdhciBzZWxhbHUgbXVuY3VsIGJlcnVsYW5nIGRpIG1hcmdpbiBhdGFzIHNldGlhcCBoYWxhbWFuIGRva3VtZW4uIiwgY29ycmVjdElkOiAiaGVhZGVyIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUYW1iYWhrYW4gYWxhbWF0IGRhbiBrb250YWsga2FudG9yIGFnYXIgb3RvbWF0aXMgdGVyY2V0YWsgZGkgbWFyZ2luIGJhd2FoIHNldGlhcCBoYWxhbWFuLiIsIGNvcnJlY3RJZDogImZvb3RlciIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQmVyaSBub21vciB1cnV0IGhhbGFtYW4gZGkgcG9qb2sgYWdhciBkb2t1bWVuIDEwMCBsZW1iYXIgaW5pIHRpZGFrIHRlcnN1c3VuIGFjYWsgamlrYSB0ZXJjZWNlci4iLCBjb3JyZWN0SWQ6ICJwYWdlbnVtYmVyIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJCdWF0IHNlYnVhaCBrb3RhayB0ZWtzIG1lbGF5YW5nIHlhbmcgYmlzYSBkaWdlc2VyIGJlYmFzIHVudHVrIG1lbWJlcmkgY2F0YXRhbiB0YW1iYWhhbiBkaSBwaW5nZ2lyIHN1cmF0LiIsIGNvcnJlY3RJZDogInRleHRib3giIH0sCiAgICAgICAgICAgIHsgdGFzazogIlNpc2lwa2FuIGJlbnR1ayBiYW5ndW4gZGF0YXIgKHBhbmFoL2tvdGFrKSB1bnR1ayBtZW5nZ2FtYmFyIGRpYWdyYW0gYWx1ciBvcGVyYXNpb25hbCAoU09QKS4iLCBjb3JyZWN0SWQ6ICJzaGFwZXMiIH0sCiAgICAgICAgICAgIHsgdGFzazogIlNpc2lwa2FuIGdyYWZpayBkaWFncmFtIGJhdGFuZyB1bnR1ayBtZW12aXN1YWxpc2FzaWthbiBwZXJzZW50YXNlIGRhdGEgcGVuanVhbGFuIGJ1bGFuIGluaS4iLCBjb3JyZWN0SWQ6ICJjaGFydCIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiU2lzaXBrYW4gdGF1dGFuIGludGVybmV0IChsaW5rKSBhZ2FyIHRla3MgJ0tsaWsgZGkgc2luaScgYmlzYSBkaWtsaWsgZGFuIG1lbWJ1a2Egd2Vic2l0ZSBwcm9maWwgcGVydXNhaGFhbi4iLCBjb3JyZWN0SWQ6ICJoeXBlcmxpbmsiIH0sCiAgICAgICAgICAgIHsgdGFzazogIk1hc3Vra2FuIGthcmFrdGVyIGtodXN1cyBzZXBlcnRpIGxhbWJhbmcgSGFrIENpcHRhICjCqSkgYXRhdSBUcmFkZW1hcmsgKOKEoikgeWFuZyB0aWRhayBhZGEgZGkga2V5Ym9hcmQuIiwgY29ycmVjdElkOiAic3ltYm9sIiB9LAogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2VzaSA3OiBGaXR1ciBMYW5qdXRhbiAmIFBlbm9tb3JhbgogICAgICAgICAgICB7IHRhc2s6ICJBbmRhIHBlcmx1IG1lbWJ1YXQgZGFmdGFyIGxhbmdrYWgtbGFuZ2thaCBrZXJqYSB5YW5nIGJlcnVydXRhbiBzZWNhcmEgb3RvbWF0aXMgKDEsIDIsIDMsIGRzdCkuIiwgY29ycmVjdElkOiAibnVtYmVyaW5nIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJCdWF0IGRhZnRhciBwZXJhbGF0YW4gQVRLIGthbnRvciBtZW5nZ3VuYWthbiBzaW1ib2wgdGl0aWstdGl0aWsgYnVsYXQgZGkgZGVwYW5ueWEgKGJ1a2FuIGFuZ2thKS4iLCBjb3JyZWN0SWQ6ICJidWxsZXRzIiB9LAogICAgICAgICAgICB7IHRhc2s6ICJLZXRpa2thbiBhbmdrYSAyIGtlY2lsIG1lbGF5YW5nIGRpIGF0YXMgcGFkYSB0ZWtzIG1ldGVyIHBlcnNlZ2kgKG3CsikgdW50dWsgbGFwb3JhbiBzZXJ0aWZpa2F0IHRhbmFoLiIsIGNvcnJlY3RJZDogInN1cGVyc2NyaXB0IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJUdWxpc2thbiBhbmdrYSAyIGtlY2lsIGRpIGJhd2FoIHBhZGEgcnVtdXMga2ltaWEgYWlyIChI4oKCTykgZGkganVybmFsIHBlbmVsaXRpYW4gbGluZ2t1bmdhbi4iLCBjb3JyZWN0SWQ6ICJzdWJzY3JpcHQiIH0sCiAgICAgICAgICAgIHsgdGFzazogIkJ1YXQgMTAwIHN1cmF0IHVuZGFuZ2FuIHJhcGF0IGRhcmkgc2F0dSBmb3JtYXQsIGRpIG1hbmEgbmFtYSBwZW5lcmltYW55YSBkaXRhcmlrIG90b21hdGlzIGRhcmkgZGF0YWJhc2UgRXhjZWwuIiwgY29ycmVjdElkOiAibWFpbG1lcmdlIiB9LAogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2VzaSA4OiBSZXZpZXcgJiBUYW1waWxhbgogICAgICAgICAgICB7IHRhc2s6ICJKYWxhbmthbiBwZW5nZWNla2FuIG90b21hdGlzIHVudHVrIG1lbGloYXQgYXBha2FoIGFkYSBrYXRhLWthdGEgYmFoYXNhIEluZ2dyaXMgeWFuZyBzYWxhaCBrZXRpayAodHlwbykuIiwgY29ycmVjdElkOiAic3BlbGxjaGVjayIgfSwKICAgICAgICAgICAgeyB0YXNrOiAiQXRhc2FuIEFuZGEgYmVydGFueWEgdW50dWsgYmFoYW4gcHJlc2VudGFzaSwgc3VkYWggYmVyYXBhIGJhbnlhayBqdW1sYWgga2F0YSB5YW5nIEFuZGEga2V0aWsgZGFsYW0gYXJ0aWtlbCBpbmk/IiwgY29ycmVjdElkOiAid29yZGNvdW50IiB9LAogICAgICAgICAgICB7IHRhc2s6ICJQZXJiZXNhciAoWm9vbSkgdGFtcGlsYW4gbGVtYmFyIGtlcmphIEFuZGEgZGkgbGF5YXIga29tcHV0ZXIgbWVuamFkaSAxNTAlIGFnYXIgaHVydWZueWEgdGVybGloYXQgbGViaWggamVsYXMuIiwgY29ycmVjdElkOiAiem9vbSIgfQogICAgICAgIF07CgogICAgICAgIC8vIC0tLSBWQVJJQUJFTCBTVEFURSAtLS0KICAgICAgICBsZXQgY3VycmVudFF1ZXN0aW9uSW5kZXggPSAwOwogICAgICAgIGxldCBzY29yZSA9IDA7CiAgICAgICAgbGV0IGN1cnJlbnRPcHRpb25zID0gW107CiAgICAgICAgCiAgICAgICAgLy8gLS0tIEVMRU1FTiBET00gLS0tCiAgICAgICAgY29uc3Qgc3RhcnRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhcnQtc2NyZWVuJyk7CiAgICAgICAgY29uc3QgZ2FtZVNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnYW1lLXNjcmVlbicpOwogICAgICAgIGNvbnN0IGVuZFNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmQtc2NyZWVuJyk7CiAgICAgICAgY29uc3QgdGFza0NhcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFzay1jYXJkJyk7CiAgICAgICAgY29uc3QgdGFza0Rlc2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFzay1kZXNjJyk7CiAgICAgICAgY29uc3QgZHJvcFpvbmVzQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Atem9uZXMtY29udGFpbmVyJyk7CiAgICAgICAgY29uc3QgcHJvZ3Jlc3NUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzLXRleHQnKTsKICAgICAgICBjb25zdCBzY29yZVRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NvcmUtdGV4dCcpOwoKICAgICAgICAvLyBWYXJpYWJlbCB1bnR1ayBEcmFnIFRvdWNoIE1vYmlsZQogICAgICAgIGxldCBzdGFydFggPSAwLCBzdGFydFkgPSAwOwogICAgICAgIGxldCBpbml0aWFsWCA9IDAsIGluaXRpYWxZID0gMDsKICAgICAgICBsZXQgY2xvbmVDYXJkID0gbnVsbDsKCiAgICAgICAgLy8gLS0tIEZVTkdTSSBMT0dJS0EgR0FNRSAtLS0KCiAgICAgICAgZnVuY3Rpb24gc3RhcnRHYW1lKCkgewogICAgICAgICAgICBzdGFydFNjcmVlbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICAgICAgICAgICAgZ2FtZVNjcmVlbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsKICAgICAgICAgICAgZ2FtZVNjcmVlbi5jbGFzc0xpc3QuYWRkKCdib3VuY2UtaW4nKTsKICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uSW5kZXggPSAwOwogICAgICAgICAgICBzY29yZSA9IDA7CiAgICAgICAgICAgIHVwZGF0ZVNjb3JlKCk7CiAgICAgICAgICAgIGxvYWRRdWVzdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gbG9hZFF1ZXN0aW9uKCkgewogICAgICAgICAgICAvLyBDZWsgamlrYSBnYW1lIHNlbGVzYWkKICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWVzdGlvbkluZGV4ID49IHF1ZXN0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGVuZEdhbWUoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29uc3QgcSA9IHF1ZXN0aW9uc1tjdXJyZW50UXVlc3Rpb25JbmRleF07CiAgICAgICAgICAgIHRhc2tEZXNjLnRleHRDb250ZW50ID0gcS50YXNrOwogICAgICAgICAgICBwcm9ncmVzc1RleHQudGV4dENvbnRlbnQgPSBgJHtjdXJyZW50UXVlc3Rpb25JbmRleCArIDF9LyR7cXVlc3Rpb25zLmxlbmd0aH1gOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gUmVzZXQga2FydHUgdHVnYXMKICAgICAgICAgICAgdGFza0NhcmQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKICAgICAgICAgICAgdGFza0NhcmQuc3R5bGUub3BhY2l0eSA9ICcxJzsKICAgICAgICAgICAgdGFza0NhcmQuY2xhc3NMaXN0LnJlbW92ZSgnc2hha2UnKTsKICAgICAgICAgICAgdGFza0NhcmQuY2xhc3NMaXN0LmFkZCgnYm91bmNlLWluJyk7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGFza0NhcmQuY2xhc3NMaXN0LnJlbW92ZSgnYm91bmNlLWluJyksIDUwMCk7CgogICAgICAgICAgICBnZW5lcmF0ZURyb3Bab25lcyhxLmNvcnJlY3RJZCk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZURyb3Bab25lcyhjb3JyZWN0SWQpIHsKICAgICAgICAgICAgZHJvcFpvbmVzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnOwogICAgICAgICAgICBjdXJyZW50T3B0aW9ucyA9IFtdOwoKICAgICAgICAgICAgLy8gQ2FyaSBvYmplayBhbGF0IHlhbmcgYmVuYXIKICAgICAgICAgICAgY29uc3QgY29ycmVjdFRvb2wgPSBhbGxUb29scy5maW5kKHQgPT4gdC5pZCA9PT0gY29ycmVjdElkKTsKICAgICAgICAgICAgY3VycmVudE9wdGlvbnMucHVzaChjb3JyZWN0VG9vbCk7CgogICAgICAgICAgICAvLyBQaWxpaCA0IHBlbmdlY29oIChkaXN0cmFjdG9ycykgc2VjYXJhIGFjYWsKICAgICAgICAgICAgLy8gVG90YWwgNSBwaWxpaGFuICgxIGJlbmFyLCA0IHNhbGFoKSBkaSBzZXRpYXAgc29hbAogICAgICAgICAgICBsZXQgZGlzdHJhY3RvcnMgPSBhbGxUb29scy5maWx0ZXIodCA9PiB0LmlkICE9PSBjb3JyZWN0SWQpOwogICAgICAgICAgICBkaXN0cmFjdG9ycyA9IGRpc3RyYWN0b3JzLnNvcnQoKCkgPT4gMC41IC0gTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNCk7CiAgICAgICAgICAgIGN1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuY29uY2F0KGRpc3RyYWN0b3JzKTsKCiAgICAgICAgICAgIC8vIEFjYWsgdXJ1dGFuIHRhbXBpbAogICAgICAgICAgICBjdXJyZW50T3B0aW9ucy5zb3J0KCgpID0+IDAuNSAtIE1hdGgucmFuZG9tKCkpOwoKICAgICAgICAgICAgLy8gUmVuZGVyIGtvdGFrIGFsYXQKICAgICAgICAgICAgY3VycmVudE9wdGlvbnMuZm9yRWFjaCh0b29sID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgICAgIHpvbmUuY2xhc3NOYW1lID0gJ2Ryb3Atem9uZSBiZy13aGl0ZSBib3JkZXItNCBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLTJ4bCBwLTQgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgbWluLWgtWzEwMHB4XSBzaGFkb3ctc20nOwogICAgICAgICAgICAgICAgem9uZS5kYXRhc2V0LmlkID0gdG9vbC5pZDsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgem9uZS5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXNvbGlkICR7dG9vbC5pY29ufSB0ZXh0LTN4bCB0ZXh0LWdyYXktNTAwIG1iLTIgem9uZS1pY29uIHRyYW5zaXRpb24tY29sb3JzIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCB0ZXh0LXNtIHpvbmUtdGV4dCB0cmFuc2l0aW9uLWNvbG9ycyI+JHt0b29sLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgYDsKCiAgICAgICAgICAgICAgICAvLyBFdmVudCBMaXN0ZW5lcnMgdW50dWsgTW91c2UgKERlc2t0b3ApCiAgICAgICAgICAgICAgICB6b25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgaGFuZGxlRHJhZ092ZXIpOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCBoYW5kbGVEcmFnRW50ZXIpOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBoYW5kbGVEcmFnTGVhdmUpOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgaGFuZGxlRHJvcCk7CgogICAgICAgICAgICAgICAgZHJvcFpvbmVzQ29udGFpbmVyLmFwcGVuZENoaWxkKHpvbmUpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNjb3JlKCkgewogICAgICAgICAgICBzY29yZVRleHQudGV4dENvbnRlbnQgPSBzY29yZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNoZWNrQW5zd2VyKHNlbGVjdGVkSWQsIGRyb3Bab25lRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBjb3JyZWN0SWQgPSBxdWVzdGlvbnNbY3VycmVudFF1ZXN0aW9uSW5kZXhdLmNvcnJlY3RJZDsKICAgICAgICAgICAgY29uc3QgaWNvbkVsID0gZHJvcFpvbmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy56b25lLWljb24nKTsKICAgICAgICAgICAgY29uc3QgdGV4dEVsID0gZHJvcFpvbmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy56b25lLXRleHQnKTsKCiAgICAgICAgICAgIGlmIChzZWxlY3RlZElkID09PSBjb3JyZWN0SWQpIHsKICAgICAgICAgICAgICAgIC8vIEJlbmFyCiAgICAgICAgICAgICAgICBzY29yZSArPSAxMDsKICAgICAgICAgICAgICAgIHVwZGF0ZVNjb3JlKCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGRyb3Bab25lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7CiAgICAgICAgICAgICAgICBpY29uRWwuY2xhc3NMaXN0LnJlbW92ZSgndGV4dC1ncmF5LTUwMCcpOwogICAgICAgICAgICAgICAgaWNvbkVsLmNsYXNzTGlzdC5hZGQoJ3RleHQtZ3JlZW4tNjAwJyk7CiAgICAgICAgICAgICAgICB0ZXh0RWwuY2xhc3NMaXN0LmFkZCgndGV4dC1ncmVlbi04MDAnKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gU2VtYnVueWlrYW4ga2FydHUgdHVnYXMgZGVuZ2FuIGVmZWsKICAgICAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIExhbmp1dCBwZXJ0YW55YWFuIGJlcmlrdXRueWEKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbkluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgbG9hZFF1ZXN0aW9uKCk7CiAgICAgICAgICAgICAgICB9LCAxMDAwKTsKCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBTYWxhaCDigJQgdGlkYWsgZGFwYXQgbmlsYWksIGxhbmdzdW5nIGxhbmp1dCBrZSBzb2FsIGJlcmlrdXRueWEKICAgICAgICAgICAgICAgIGRyb3Bab25lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd3cm9uZycpOwogICAgICAgICAgICAgICAgaWNvbkVsLmNsYXNzTGlzdC5yZW1vdmUoJ3RleHQtZ3JheS01MDAnKTsKICAgICAgICAgICAgICAgIGljb25FbC5jbGFzc0xpc3QuYWRkKCd0ZXh0LXJlZC02MDAnKTsKICAgICAgICAgICAgICAgIHRleHRFbC5jbGFzc0xpc3QuYWRkKCd0ZXh0LXJlZC04MDAnKTsKCiAgICAgICAgICAgICAgICB0YXNrQ2FyZC5jbGFzc0xpc3QuYWRkKCdzaGFrZScpOwogICAgICAgICAgICAgICAgdGFza0NhcmQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsgLy8gUGFzdGlrYW4gdGVybGloYXQgbGFnaQoKICAgICAgICAgICAgICAgIC8vIEt1bmNpIHNlbXVhIGtvdGFrIGphd2FiYW4gYWdhciB0aWRhayBiaXNhIGRpY29iYSB1bGFuZyBwYWRhIHNvYWwgaW5pCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC16b25lJykuZm9yRWFjaCh6ID0+IHsKICAgICAgICAgICAgICAgICAgICB6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBTZW1idW55aWthbiBrYXJ0dSB0dWdhcyBsYWx1IGxhbmp1dCBrZSBwZXJ0YW55YWFuIGJlcmlrdXRueWEKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgICAgICAgICAgICB9LCA1MDApOwoKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbkluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgbG9hZFF1ZXN0aW9uKCk7CiAgICAgICAgICAgICAgICB9LCAxMTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZW5kR2FtZSgpIHsKICAgICAgICAgICAgZ2FtZVNjcmVlbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICAgICAgICAgICAgZW5kU2NyZWVuLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpOwogICAgICAgICAgICBlbmRTY3JlZW4uY2xhc3NMaXN0LmFkZCgnYm91bmNlLWluJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWwtc2NvcmUnKS50ZXh0Q29udGVudCA9IHNjb3JlOwoKICAgICAgICAgICAgLy8gS2lyaW0gc2tvciBha2hpciBrZSBoYWxhbWFuIGluZHVrIChkaXBha2FpIHVudHVrIG1lbnlhdHVrYW4KICAgICAgICAgICAgLy8gaGFzaWwgZ2FtZSBkZW5nYW4gVHVnYXMgUHJpYmFkaSBkaSBoYWxhbWFuIG1hdGVyaSkKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJ21hc3Rlci1wZW5nb2xhaC1rYXRhJywKICAgICAgICAgICAgICAgICAgICBzY29yZTogc2NvcmUsCiAgICAgICAgICAgICAgICAgICAgbWF4U2NvcmU6IHF1ZXN0aW9ucy5sZW5ndGggKiAxMAogICAgICAgICAgICAgICAgfSwgJyonKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IC8qIGFiYWlrYW4gamlrYSB0aWRhayBiZXJqYWxhbiBkaSBkYWxhbSBpZnJhbWUgKi8gfQogICAgICAgICAgICAKICAgICAgICAgICAgbGV0IGZlZWRiYWNrID0gIiI7CiAgICAgICAgICAgIC8vIE1lbnllc3VhaWthbiBsb2dpa2EgcG9pbiB1bnR1ayBtYWtzaW1hbCBza29yIDUwMCAoNTAgc29hbCkKICAgICAgICAgICAgaWYgKHNjb3JlID09PSA1MDApIGZlZWRiYWNrID0gIkx1YXIgQmlhc2EgU2VtcHVybmEhIEFuZGEgYWRhbGFoIFNhbmcgTWFzdGVyIFBlbmdvbGFoIEthdGEuIPCfjJ8iOwogICAgICAgICAgICBlbHNlIGlmIChzY29yZSA+PSA0MDApIGZlZWRiYWNrID0gIkhlYmF0IHNla2FsaSEgS2V0ZXJhbXBpbGFuIGFwbGlrYXNpIHBlcmthbnRvcmFuIEFuZGEgc2V0YXJhIHNla3JldGFyaXMgaGFuZGFsLiDwn5GNIjsKICAgICAgICAgICAgZWxzZSBpZiAoc2NvcmUgPj0gMjUwKSBmZWVkYmFjayA9ICJDdWt1cCBiYWlrLCB0YXBpIG1hc2loIGJhbnlhayBmaXR1ciBsYW5qdXRhbiB5YW5nIHBlcmx1IEFuZGEgcGVsYWphcmkuIFRldGFwIHNlbWFuZ2F0ISDwn5OaIjsKICAgICAgICAgICAgZWxzZSBmZWVkYmFjayA9ICJKYW5nYW4gbWVueWVyYWghIFRlcnVzIGJlcmxhdGloIGFnYXIgQW5kYSBsZWJpaCB0ZXJiaWFzYSBkZW5nYW4gZml0dXItZml0dXIgYWRtaW5pc3RyYXNpLiDwn5KqIjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZWVkYmFjay1tc2cnKS50ZXh0Q29udGVudCA9IGZlZWRiYWNrOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVzZXRHYW1lKCkgewogICAgICAgICAgICBlbmRTY3JlZW4uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7CiAgICAgICAgICAgIHN0YXJ0R2FtZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gLS0tIEVWRU5UIEhBTkRMRVJTIERSQUcgJiBEUk9QIChERVNLVE9QIC8gTU9VU0UpIC0tLQogICAgICAgIAogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChlKSA9PiB7CiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCAndGFzaycpOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRhc2tDYXJkLmNsYXNzTGlzdC5hZGQoJ29wYWNpdHktNTAnKSwgMCk7CiAgICAgICAgfSk7CgogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIHRhc2tDYXJkLmNsYXNzTGlzdC5yZW1vdmUoJ29wYWNpdHktNTAnKTsKICAgICAgICB9KTsKCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRHJhZ092ZXIoZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIFdhamliIGFnYXIgYmlzYSBkaS1kcm9wCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYW5kbGVEcmFnRW50ZXIoZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBlLnRhcmdldC5jbG9zZXN0KCcuZHJvcC16b25lJyk7CiAgICAgICAgICAgIGlmICh6b25lKSB6b25lLmNsYXNzTGlzdC5hZGQoJ2RyYWctb3ZlcicpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRHJhZ0xlYXZlKGUpIHsKICAgICAgICAgICAgY29uc3Qgem9uZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5kcm9wLXpvbmUnKTsKICAgICAgICAgICAgaWYgKHpvbmUpIHpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYW5kbGVEcm9wKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCB6b25lID0gZS50YXJnZXQuY2xvc2VzdCgnLmRyb3Atem9uZScpOwogICAgICAgICAgICBpZiAoem9uZSkgewogICAgICAgICAgICAgICAgem9uZS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnLW92ZXInKTsKICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB6b25lLmRhdGFzZXQuaWQ7CiAgICAgICAgICAgICAgICBjaGVja0Fuc3dlcihzZWxlY3RlZElkLCB6b25lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gLS0tIEVWRU5UIEhBTkRMRVJTIERSQUcgJiBEUk9QIChNT0JJTEUgLyBUT1VDSCBTQ1JFRU4pIC0tLQogICAgICAgIC8vIEthcmVuYSBIVE1MNSBEcmFnICYgRHJvcCBrdXJhbmcgcmVzcG9uc2lmIGRpIGxheWFyIHNlbnR1aCwga2l0YSBidWF0IGt1c3RvbQogICAgICAgIAogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBoYW5kbGVUb3VjaFN0YXJ0LCB7cGFzc2l2ZTogZmFsc2V9KTsKICAgICAgICB0YXNrQ2FyZC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUsIHtwYXNzaXZlOiBmYWxzZX0pOwogICAgICAgIHRhc2tDYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaGFuZGxlVG91Y2hFbmQpOwoKICAgICAgICBmdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0KGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAvLyBNZW5jZWdhaCBzY3JvbGxpbmcgc2FhdCBtZW55ZW50dWgga2FydHUKICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF07CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBCdWF0IGtsb25pbmdhbiBrYXJ0dSB1bnR1ayB2aXN1YWwgZHJhZwogICAgICAgICAgICBjb25zdCByZWN0ID0gdGFza0NhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNsb25lQ2FyZCA9IHRhc2tDYXJkLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgY2xvbmVDYXJkLmNsYXNzTGlzdC5hZGQoJ2Fic29sdXRlLWRyYWcnLCAnc2hhZG93LTJ4bCcsICdvcGFjaXR5LTkwJywgJ3NjYWxlLTEwNScpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2V0IHBvc2lzaSBhd2FsCiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgOwogICAgICAgICAgICBjbG9uZUNhcmQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgOwogICAgICAgICAgICBjbG9uZUNhcmQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdH1weGA7CiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGA7CiAgICAgICAgICAgIAogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNsb25lQ2FyZCk7CiAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsgLy8gU2VtYnVueWlrYW4gYXNsaW55YQoKICAgICAgICAgICAgLy8gSGl0dW5nIG9mZnNldCBzZW50dWhhbgogICAgICAgICAgICBzdGFydFggPSB0b3VjaC5jbGllbnRYOwogICAgICAgICAgICBzdGFydFkgPSB0b3VjaC5jbGllbnRZOwogICAgICAgICAgICBpbml0aWFsWCA9IHJlY3QubGVmdDsKICAgICAgICAgICAgaW5pdGlhbFkgPSByZWN0LnRvcDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZShlKSB7CiAgICAgICAgICAgIGlmICghY2xvbmVDYXJkKSByZXR1cm47CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF07CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBkeCA9IHRvdWNoLmNsaWVudFggLSBzdGFydFg7CiAgICAgICAgICAgIGNvbnN0IGR5ID0gdG91Y2guY2xpZW50WSAtIHN0YXJ0WTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS5sZWZ0ID0gYCR7aW5pdGlhbFggKyBkeH1weGA7CiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS50b3AgPSBgJHtpbml0aWFsWSArIGR5fXB4YDsKCiAgICAgICAgICAgIC8vIEVmZWsgaG92ZXIgcGFkYSBkcm9wem9uZSBzYWF0IHRvdWNoIG1vdmUKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3Atem9uZScpLmZvckVhY2goeiA9PiB6LmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlbWJ1bnlpa2FuIGtsb25pbmdhbiBzZW1lbnRhcmEgdW50dWsgbWVuZGV0ZWtzaSBlbGVtZW4gZGkgYmF3YWhueWEKICAgICAgICAgICAgY2xvbmVDYXJkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgIGNvbnN0IGVsZW1CZWxvdyA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7CiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCiAgICAgICAgICAgIGlmIChlbGVtQmVsb3cpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBlbGVtQmVsb3cuY2xvc2VzdCgnLmRyb3Atem9uZScpOwogICAgICAgICAgICAgICAgaWYgKHpvbmUpIHpvbmUuY2xhc3NMaXN0LmFkZCgnZHJhZy1vdmVyJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoRW5kKGUpIHsKICAgICAgICAgICAgaWYgKCFjbG9uZUNhcmQpIHJldHVybjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gZS5jaGFuZ2VkVG91Y2hlc1swXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIERldGVrc2kgem9uYSBkcm9wCiAgICAgICAgICAgIGNsb25lQ2FyZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICBjb25zdCBlbGVtQmVsb3cgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFkpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSGFwdXMga2xvbmluZ2FuIHZpc3VhbAogICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNsb25lQ2FyZCk7CiAgICAgICAgICAgIGNsb25lQ2FyZCA9IG51bGw7CiAgICAgICAgICAgIAogICAgICAgICAgICBsZXQgZHJvcHBlZE9uWm9uZSA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKGVsZW1CZWxvdykgewogICAgICAgICAgICAgICAgY29uc3Qgem9uZSA9IGVsZW1CZWxvdy5jbG9zZXN0KCcuZHJvcC16b25lJyk7CiAgICAgICAgICAgICAgICBpZiAoem9uZSkgewogICAgICAgICAgICAgICAgICAgIGRyb3BwZWRPblpvbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHpvbmUuZGF0YXNldC5pZDsKICAgICAgICAgICAgICAgICAgICBjaGVja0Fuc3dlcihzZWxlY3RlZElkLCB6b25lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSmlrYSB0aWRhayBkaWxlcGFzIGRpIGRyb3Agem9uZSwga2VtYmFsaWthbiBrYXJ0dSBrZSBwb3Npc2kgYXdhbAogICAgICAgICAgICBpZiAoIWRyb3BwZWRPblpvbmUpIHsKICAgICAgICAgICAgICAgIHRhc2tDYXJkLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CiAgICAgICAgICAgICAgICB0YXNrQ2FyZC5jbGFzc0xpc3QuYWRkKCdzaGFrZScpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0YXNrQ2FyZC5jbGFzc0xpc3QucmVtb3ZlKCdzaGFrZScpLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=" title="Game Master Pengolah Kata" loading="lazy"&gt;&lt;/iframe&gt;
        &lt;/div&gt;
        &lt;div class="status-chip" id="gameStatusChip"&gt;&lt;span class="dot"&gt;&lt;/span&gt; Game belum dimainkan/selesai&lt;/div&gt;
      &lt;/fieldset&gt;

      &lt;fieldset&gt;
        &lt;h3 class="step-title"&gt;&lt;span class="num"&gt;2&lt;/span&gt; Soal Pilihan Ganda (60 poin)&lt;/h3&gt;
        &lt;p style="font-size:14.5px; color:#4a5568; margin-top:0;"&gt;Jawab 10 soal pilihan ganda berikut berdasarkan materi di atas. Setiap soal bernilai 6 poin.&lt;/p&gt;
        &lt;div id="quizWrap"&gt;&lt;/div&gt;
      &lt;/fieldset&gt;

      &lt;fieldset&gt;
        &lt;h3 class="step-title"&gt;&lt;span class="num"&gt;3&lt;/span&gt; Soal Esai (40 poin)&lt;/h3&gt;
        &lt;p style="font-size:14.5px; color:#4a5568; margin-top:0;"&gt;Jawab 5 soal esai berikut dengan kalimatmu sendiri berdasarkan materi. Setiap soal bernilai 8 poin.&lt;/p&gt;
        &lt;p class="essay-note"&gt;Jawaban wajib diketik manual. Tempel (paste), seret-lepas teks, dan klik kanan pada kolom jawaban dinonaktifkan.&lt;/p&gt;
        &lt;div id="essayWrap"&gt;&lt;/div&gt;
      &lt;/fieldset&gt;

      &lt;fieldset&gt;
        &lt;h3 class="step-title"&gt;&lt;span class="num"&gt;4&lt;/span&gt; Kirim Hasil &amp; Unduh Bukti&lt;/h3&gt;
        &lt;div class="checklist"&gt;
          &lt;div&gt;&lt;span class="mark" id="chkIdentitas"&gt;&lt;/span&gt; Identitas siswa terisi lengkap&lt;/div&gt;
          &lt;div&gt;&lt;span class="mark" id="chkGame"&gt;&lt;/span&gt; Game uji keterampilan selesai dimainkan&lt;/div&gt;
          &lt;div&gt;&lt;span class="mark" id="chkKuis"&gt;&lt;/span&gt; Semua soal pilihan ganda terjawab&lt;/div&gt;
          &lt;div&gt;&lt;span class="mark" id="chkEsai"&gt;&lt;/span&gt; Semua soal esai terisi (diketik manual)&lt;/div&gt;
        &lt;/div&gt;
        &lt;button type="submit" class="submit-btn" id="submitBtn"&gt;Kirim Hasil Tugas&lt;/button&gt;
        &lt;div class="msg wait" id="msgWait"&gt;Mengirim hasil, mohon tunggu...&lt;/div&gt;
        &lt;div class="msg ok" id="msgOk"&gt;&lt;/div&gt;
        &lt;div class="msg err" id="msgErr"&gt;&lt;/div&gt;
        &lt;button type="button" class="pdf-btn" id="pdfBtn" disabled&gt;Unduh Bukti Mengerjakan (PDF - F4)&lt;/button&gt;
        &lt;p style="font-size:12.5px; color:#7a8390; margin-top:8px; margin-bottom:0;"&gt;Tombol unduh aktif setelah pengiriman berhasil. Cetak dokumen ini (maks. 1 lembar F4) dan serahkan ke guru mata pelajaran sebagai bukti fisik pengerjaan tugas.&lt;/p&gt;
      &lt;/fieldset&gt;

    &lt;/form&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;Informatika Kelas X - Pengenalan Aplikasi Pengolah Kata untuk Administrasi Perkantoran - DOK/INFORMATIKA/X/PENGOLAH-KATA&lt;/footer&gt;

&lt;iframe name="hidden_iframe" id="hidden_iframe" style="display:none;"&gt;&lt;/iframe&gt;
&lt;form id="gform" action="https://script.google.com/macros/s/AKfycbwKp7DrBTALJMlw8crjK7RgXIO8LVcU4yVEd9WJNs_vgSXkVxfw7fwkGbOT2IBNOjg3uQ/exec" method="POST" target="hidden_iframe" style="display:none;"&gt;
  &lt;input type="hidden" name="no absen" id="gNoAbsen"&gt;
  &lt;input type="hidden" name="nama" id="gNama"&gt;
  &lt;input type="hidden" name="kelas" id="gKelas"&gt;
  &lt;input type="hidden" name="nilai evaluasi" id="gNilai"&gt;
  &lt;input type="hidden" name="judul materi" id="gJudul"&gt;
&lt;/form&gt;

&lt;script&gt;
const JUDUL_MATERI = "Pengenalan Aplikasi Pengolah Kata untuk Administrasi Perkantoran";
const DOC_CODE = "DOK/INFORMATIKA/X/PENGOLAH-KATA";

/* ---------- Soal Pilihan Ganda (60 poin, 6 poin/soal) ---------- */
const QUESTIONS = [
  { q: "1. Aplikasi pengolah kata digunakan terutama untuk...", opts: ["Mengolah angka dan rumus matematika","Membuat dan mengedit dokumen berbasis teks","Mengedit video","Membuat presentasi slide"], correct: 1 },
  { q: "2. Berikut yang termasuk aplikasi pengolah kata, KECUALI...", opts: ["Microsoft Word","Google Docs","Microsoft Excel","LibreOffice Writer"], correct: 2 },
  { q: "3. Perintah cepat (shortcut) untuk menyimpan dokumen adalah...", opts: ["Ctrl + P","Ctrl + S","Ctrl + C","Ctrl + Z"], correct: 1 },
  { q: "4. Ukuran margin standar (Normal) yang umum digunakan pada dokumen perkantoran adalah...", opts: ["1 cm di semua sisi","2,54 cm di semua sisi","5 cm di semua sisi","0,5 cm di semua sisi"], correct: 1 },
  { q: "5. Jenis huruf (font) yang umum dipakai untuk surat resmi formal adalah...", opts: ["Comic Sans MS","Times New Roman atau Arial","Wingdings","Papyrus"], correct: 1 },
  { q: "6. Bagian dokumen surat resmi yang berisi nama instansi, alamat, dan logo disebut...", opts: ["Kop surat (letterhead)","Lampiran","Perihal","Tembusan"], correct: 0 },
  { q: "7. Fitur Find &amp; Replace digunakan untuk...", opts: ["Mencetak dokumen","Mencari dan mengganti kata secara otomatis","Menyisipkan gambar","Mengatur margin"], correct: 1 },
  { q: "8. Format file yang cocok untuk dokumen final yang tidak ingin diedit ulang oleh penerima adalah...", opts: [".docx",".txt",".pdf",".rtf"], correct: 2 },
  { q: "9. Perataan teks yang membuat teks rata di sisi kiri dan kanan sekaligus disebut...", opts: ["Align Left","Align Right","Center","Justify"], correct: 3 },
  { q: "10. Sebelum menyimpan dokumen administrasi, penamaan file yang baik sebaiknya memuat...", opts: ["Nama acak dan tanggal sembarang","Jenis dokumen, nama/nomor, dan tanggal secara jelas","Hanya angka","Emoji dan simbol"], correct: 1 }
];

const quizWrap = document.getElementById('quizWrap');
QUESTIONS.forEach((item, qi) =&gt; {
  const div = document.createElement('div');
  div.className = 'quiz-item';
  let optsHtml = '';
  item.opts.forEach((opt, oi) =&gt; {
    optsHtml += `&lt;label class="opt"&gt;&lt;input type="radio" name="q${qi}" value="${oi}"&gt;&lt;span&gt;${String.fromCharCode(97+oi)}. ${opt}&lt;/span&gt;&lt;/label&gt;`;
  });
  div.innerHTML = `&lt;p class="q"&gt;${item.q}&lt;/p&gt;${optsHtml}`;
  quizWrap.appendChild(div);
});

/* ---------- Soal Esai (40 poin, 8 poin/soal, dinilai dari kata kunci materi) ---------- */
const ESSAY = [
  {
    q: "1. Jelaskan perbedaan aplikasi pengolah kata berbasis desktop dan berbasis cloud (online), lengkap dengan satu contoh aplikasi untuk masing-masing jenis.",
    groups: [["desktop"], ["cloud","online","internet"], ["microsoft word"], ["google docs"], ["offline"], ["kolaborasi","real-time","realtime","bersama-sama"]]
  },
  {
    q: "2. Sebutkan minimal tiga teknik dasar mengedit dokumen beserta shortcut keyboard yang digunakan untuk masing-masing teknik tersebut.",
    groups: [["copy","salin"], ["paste","tempel"], ["cut","potong"], ["undo","batalkan"], ["redo","ulangi"], ["find","replace","cari","ganti"], ["ctrl"]]
  },
  {
    q: "3. Jelaskan standar format penulisan dokumen resmi perkantoran meliputi jenis huruf, ukuran huruf, margin, dan spasi baris yang tepat.",
    groups: [["times new roman"], ["arial"], ["12"], ["margin"], ["2,54","2.54"], ["spasi"], ["1,15","1.15","1,5","1.5"], ["justify","rata kiri kanan"]]
  },
  {
    q: "4. Sebutkan bagian-bagian struktur surat resmi secara berurutan, mulai dari kop surat hingga tanda tangan.",
    groups: [["kop surat"], ["nomor"], ["hal","lampiran"], ["tanggal"], ["alamat tujuan","alamat"], ["salam","isi"], ["tanda tangan"]]
  },
  {
    q: "5. Jelaskan mengapa etika dan keamanan dokumen digital penting diterapkan di lingkungan administrasi perkantoran.",
    groups: [["password","kata sandi"], ["backup","cadangan"], ["izin"], ["plagiarisme"], ["rahasia","kerahasiaan"], ["hak akses","akses"]]
  }
];
const POIN_PER_ESAI = 40 / ESSAY.length;

const essayWrap = document.getElementById('essayWrap');
ESSAY.forEach((item, ei) =&gt; {
  const div = document.createElement('div');
  div.className = 'essay-item';
  div.innerHTML = `&lt;p class="q"&gt;${item.q}&lt;/p&gt;
    &lt;textarea id="essay${ei}" data-idx="${ei}" placeholder="Ketik jawabanmu di sini (minimal beberapa kalimat)..."&gt;&lt;/textarea&gt;
    &lt;p class="essay-count" id="essayCount${ei}"&gt;0 karakter&lt;/p&gt;`;
  essayWrap.appendChild(div);
});

// Nonaktifkan paste, drag-drop teks, dan klik kanan pada semua kolom esai
document.querySelectorAll('#essayWrap textarea').forEach((ta, idx) =&gt; {
  ta.addEventListener('paste', e =&gt; {
    e.preventDefault();
    showEssayBlockedNotice(idx);
  });
  ta.addEventListener('drop', e =&gt; e.preventDefault());
  ta.addEventListener('contextmenu', e =&gt; e.preventDefault());
  ta.addEventListener('input', () =&gt; {
    document.getElementById('essayCount' + idx).textContent = ta.value.length + ' karakter';
    updateChecklist();
  });
});
function showEssayBlockedNotice(idx){
  const el = document.getElementById('essayCount' + idx);
  const old = el.textContent;
  el.textContent = 'Tempel (paste) dinonaktifkan - ketik manual jawabanmu.';
  el.style.color = 'var(--danger)';
  setTimeout(() =&gt; { el.textContent = old; el.style.color = ''; }, 2200);
}

function scoreEssay(idx){
  const text = document.getElementById('essay' + idx).value.toLowerCase().trim();
  if(text.length &lt; 15) return 0;
  const groups = ESSAY[idx].groups;
  let matched = 0;
  groups.forEach(g =&gt; { if(g.some(k =&gt; text.includes(k))) matched++; });
  return Math.round((matched / groups.length) * POIN_PER_ESAI);
}

/* ---------- Skor game via postMessage dari iframe (informasi, tidak masuk nilai evaluasi) ---------- */
let gameFinished = false;
let gameScoreRaw = null;
const GAME_MAX = 500;
const gameStatusChip = document.getElementById('gameStatusChip');

window.addEventListener('message', function(e){
  if(e.data &amp;&amp; e.data.source === 'master-pengolah-kata'){
    gameScoreRaw = e.data.score;
    gameFinished = true;
    const pct = Math.round((gameScoreRaw / GAME_MAX) * 100);
    gameStatusChip.classList.add('ok-chip');
    gameStatusChip.innerHTML = `&lt;span class="dot"&gt;&lt;/span&gt; Game selesai - Skor: ${gameScoreRaw}/${GAME_MAX} (${pct}%)`;
    updateChecklist();
  }
});

/* ---------- Validasi &amp; checklist real-time ---------- */
const form = document.getElementById('taskForm');
const chkIdentitas = document.getElementById('chkIdentitas');
const chkGame = document.getElementById('chkGame');
const chkKuis = document.getElementById('chkKuis');
const chkEsai = document.getElementById('chkEsai');

function isIdentitasLengkap(){
  return document.getElementById('noAbsen').value.trim() &amp;&amp;
         document.getElementById('nama').value.trim() &amp;&amp;
         document.getElementById('kelas').value;
}
function isKuisLengkap(){
  return QUESTIONS.every((_, qi) =&gt; form.querySelector(`input[name="q${qi}"]:checked`));
}
function isEsaiLengkap(){
  return ESSAY.every((_, ei) =&gt; document.getElementById('essay' + ei).value.trim().length &gt;= 15);
}
function updateChecklist(){
  chkIdentitas.classList.toggle('done', !!isIdentitasLengkap());
  chkGame.classList.toggle('done', gameFinished);
  chkKuis.classList.toggle('done', isKuisLengkap());
  chkEsai.classList.toggle('done', isEsaiLengkap());
}
form.addEventListener('input', updateChecklist);
form.addEventListener('change', updateChecklist);
updateChecklist();

/* ---------- Submit ---------- */
const submitBtn = document.getElementById('submitBtn');
const pdfBtn = document.getElementById('pdfBtn');
const msgWait = document.getElementById('msgWait');
const msgOk = document.getElementById('msgOk');
const msgErr = document.getElementById('msgErr');

let hasilAkhir = null; // menyimpan rincian nilai untuk PDF

form.addEventListener('submit', function(e){
  e.preventDefault();
  msgOk.classList.remove('show');
  msgErr.classList.remove('show');

  const noAbsen = document.getElementById('noAbsen').value.trim();
  const nama = document.getElementById('nama').value.trim();
  const kelas = document.getElementById('kelas').value;

  if(!isIdentitasLengkap()){
    msgErr.textContent = "Lengkapi dahulu No. Absen, Nama, dan Kelas.";
    msgErr.classList.add('show');
    return;
  }
  if(!gameFinished){
    msgErr.textContent = "Selesaikan dahulu game uji keterampilan sampai layar akhir muncul.";
    msgErr.classList.add('show');
    return;
  }
  let unanswered = [];
  QUESTIONS.forEach((_, qi) =&gt; { if(!form.querySelector(`input[name="q${qi}"]:checked`)) unanswered.push(qi+1); });
  if(unanswered.length){
    msgErr.textContent = "Soal pilihan ganda nomor " + unanswered.join(', ') + " belum dijawab.";
    msgErr.classList.add('show');
    return;
  }
  if(!isEsaiLengkap()){
    msgErr.textContent = "Lengkapi semua jawaban esai (ketik manual, minimal beberapa kalimat).";
    msgErr.classList.add('show');
    return;
  }

  let correctCount = 0;
  QUESTIONS.forEach((item, qi) =&gt; {
    const checked = form.querySelector(`input[name="q${qi}"]:checked`);
    if(parseInt(checked.value, 10) === item.correct) correctCount++;
  });
  const skorPG = Math.round((correctCount / QUESTIONS.length) * 60);

  let skorEsai = 0;
  ESSAY.forEach((_, ei) =&gt; { skorEsai += scoreEssay(ei); });
  skorEsai = Math.min(40, skorEsai);

  const nilaiEvaluasi = Math.min(100, skorPG + skorEsai);
  const skorGamePersen = Math.round((gameScoreRaw / GAME_MAX) * 100);

  hasilAkhir = {
    noAbsen, nama, kelas,
    skorPG, skorEsai, nilaiEvaluasi,
    skorGameRaw: gameScoreRaw, skorGamePersen,
    waktu: new Date()
  };

  document.getElementById('gNoAbsen').value = noAbsen;
  document.getElementById('gNama').value = nama;
  document.getElementById('gKelas').value = kelas;
  document.getElementById('gNilai').value = nilaiEvaluasi;
  document.getElementById('gJudul').value = JUDUL_MATERI;

  submitBtn.disabled = true;
  submitBtn.textContent = "Mengirim...";
  msgWait.classList.add('show');
  document.getElementById('gform').submit();

  setTimeout(() =&gt; {
    msgWait.classList.remove('show');
    msgOk.textContent = `Hasil terkirim. PG: ${skorPG}/60, Esai: ${skorEsai}/40 -&gt; Nilai Evaluasi Akhir: ${nilaiEvaluasi}/100. Skor Uji Keterampilan (informasi): ${skorGamePersen}/100.`;
    msgOk.classList.add('show');
    submitBtn.textContent = "Sudah Terkirim";
    pdfBtn.disabled = false;
  }, 1400);
});

/* ---------- Unduh Bukti Mengerjakan (PDF, ukuran F4 = 215 x 330 mm) ---------- */
pdfBtn.addEventListener('click', function(){
  if(!hasilAkhir) return;
  const { jsPDF } = window.jspdf;
  const doc = new jsPDF({ unit: 'mm', format: [215, 330] });
  const pageW = 215;
  let y = 22;

  doc.setFont('helvetica', 'bold');
  doc.setFontSize(16);
  doc.text('BUKTI MENGERJAKAN TUGAS', pageW/2, y, { align: 'center' }); y += 8;

  doc.setFontSize(12);
  doc.text('Informatika Kelas X SMK', pageW/2, y, { align: 'center' }); y += 6;

  doc.setFont('helvetica', 'normal');
  doc.setFontSize(11);
  doc.text(JUDUL_MATERI, pageW/2, y, { align: 'center', maxWidth: pageW - 40 }); y += 10;

  doc.setFontSize(9);
  doc.text(DOC_CODE, pageW/2, y, { align: 'center' }); y += 6;

  doc.setLineWidth(0.6);
  doc.line(20, y, pageW - 20, y); y += 10;

  doc.setFont('helvetica', 'bold');
  doc.setFontSize(12);
  doc.text('Identitas Siswa', 20, y); y += 8;

  doc.setFont('helvetica', 'normal');
  doc.setFontSize(11);
  const rows1 = [
    ['No. Absen', hasilAkhir.noAbsen],
    ['Nama Lengkap', hasilAkhir.nama],
    ['Kelas', hasilAkhir.kelas],
    ['Tanggal &amp; Waktu', hasilAkhir.waktu.toLocaleString('id-ID')]
  ];
  rows1.forEach(r =&gt; {
    doc.text(r[0], 22, y);
    doc.text(':', 62, y);
    doc.text(String(r[1]), 66, y);
    y += 7;
  });
  y += 6;

  doc.setFont('helvetica', 'bold');
  doc.setFontSize(12);
  doc.text('Rincian Nilai', 20, y); y += 8;

  doc.setFont('helvetica', 'normal');
  doc.setFontSize(11);
  const rows2 = [
    ['Skor Pilihan Ganda (60 poin)', hasilAkhir.skorPG + ' / 60'],
    ['Skor Esai (40 poin)', hasilAkhir.skorEsai + ' / 40'],
    ['Nilai Evaluasi Akhir (100 poin)', hasilAkhir.nilaiEvaluasi + ' / 100'],
  ];
  rows2.forEach(r =&gt; {
    doc.text(r[0], 22, y);
    doc.text(':', 92, y);
    doc.text(String(r[1]), 96, y);
    y += 7;
  });

  doc.setFont('helvetica', 'bold');
  doc.setFontSize(14);
  doc.text('Nilai Evaluasi Akhir: ' + hasilAkhir.nilaiEvaluasi + ' / 100', pageW/2, y + 6, { align: 'center' });
  y += 16;

  doc.setFont('helvetica', 'normal');
  doc.setFontSize(10);
  doc.text('Skor Uji Keterampilan / Game (informasi tambahan, tidak termasuk Nilai Evaluasi):', 22, y); y += 6;
  doc.text(hasilAkhir.skorGameRaw + ' / 500  (' + hasilAkhir.skorGamePersen + ' / 100)', 22, y); y += 12;

  doc.setLineWidth(0.3);
  doc.line(20, y, pageW - 20, y); y += 10;

  doc.setFontSize(10);
  const catatan = 'Dokumen ini adalah bukti otomatis bahwa siswa telah menyelesaikan tugas pada tanggal dan waktu di atas. Cetak dokumen ini (ukuran kertas F4, maksimal 1 lembar) dan serahkan kepada guru mata pelajaran sebagai bukti fisik pengerjaan tugas.';
  const wrapped = doc.splitTextToSize(catatan, pageW - 40);
  doc.text(wrapped, 20, y); y += wrapped.length * 5 + 14;

  doc.text('Tanda tangan Siswa,', 30, y);
  doc.text('Tanda tangan Guru,', pageW - 70, y);
  y += 22;
  doc.text('(' + hasilAkhir.nama + ')', 30, y);
  doc.text('(......................................)', pageW - 70, y);

  const safeName = hasilAkhir.nama.replace(/[^a-zA-Z0-9]+/g, '_');
  doc.save(`Bukti_Tugas_${safeName}_${hasilAkhir.noAbsen}.pdf`);
});
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/pengenalan-aplikasi-pengolah-kata-untuk.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-4680929617969456386</guid><pubDate>Fri, 04 Sep 2026 06:09:31 +0000</pubDate><atom:updated>2026-09-04T13:11:10.859+07:00</atom:updated><title>SERTIFIKAT KOMBEL</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Generator Sertifikat&lt;/title&gt;

&lt;link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&amp;display=swap" rel="stylesheet"&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"&gt;&lt;/script&gt;

&lt;style&gt;

body{
    font-family:Arial,sans-serif;
    background:#eef2f7;
    padding:20px;
    max-width:700px;
    margin:auto;
}

.card{
    background:white;
    padding:24px;
    border-radius:20px;
    box-shadow:0 10px 20px rgba(0,0,0,.1);
}

h2{
    text-align:center;
    color:#1e4668;
}

.confirm-box{
    background:#f0f6ff;
    border-left:5px solid #2c7da0;
    padding:16px;
    border-radius:16px;
    margin-bottom:20px;
    text-align:center;
}

.confirm-box p{
    margin-top:0;
    font-weight:bold;
    color:#1e4668;
}

.confirm-buttons{
    display:flex;
    gap:10px;
    margin-top:10px;
}

.confirm-buttons button{
    flex:1;
}

.yes-btn{
    background:#1f8a4c;
}

.yes-btn:hover{
    background:#166638;
}

.no-btn{
    background:#c0392b;
}

.no-btn:hover{
    background:#962d22;
}

input,select,button{
    width:100%;
    padding:12px;
    margin-top:10px;
    border-radius:12px;
    border:1px solid #ccc;
    font-size:16px;
}

button{
    background:#2c7da0;
    color:white;
    border:none;
    cursor:pointer;
    font-weight:bold;
}

button:hover{
    background:#1f5e7a;
}

button:disabled{
    background:#94a3b8;
    cursor:not-allowed;
}

input:disabled,
select:disabled{
    background:#f1f5f9;
}

#preview{
    width:100%;
    border-radius:12px;
    margin-top:10px;
}

.loading{
    display:none;
    margin-top:15px;
    color:#1e4668;
    font-weight:bold;
    text-align:center;
}

.status{
    margin-top:12px;
    font-weight:bold;
}

.success{
    color:#1f8a4c;
}

.error{
    color:#c0392b;
}

&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="card"&gt;

&lt;h2&gt;&#128220; Generator Sertifikat&lt;/h2&gt;

&lt;!-- ================= KONFIRMASI ================= --&gt;

&lt;div class="confirm-box"&gt;

&lt;p&gt;&#128269; Apakah Anda mengikuti pelatihan?&lt;/p&gt;

&lt;div class="confirm-buttons"&gt;

&lt;button class="yes-btn" onclick="confirmIkut()"&gt;
✅ YA, IKUT
&lt;/button&gt;

&lt;button class="no-btn" onclick="confirmTidakIkut()"&gt;
❌ TIDAK
&lt;/button&gt;

&lt;/div&gt;

&lt;div id="statusKonfirmasi" class="status"&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ================= FORM ================= --&gt;

&lt;label&gt;Nama Lengkap&lt;/label&gt;

&lt;input
type="text"
id="nama"
placeholder="Contoh: Ahmad Fauzi"
disabled&gt;

&lt;label&gt;Peran&lt;/label&gt;

&lt;select id="peran" disabled&gt;
    &lt;option&gt;Peserta&lt;/option&gt;
    &lt;option&gt;Narasumber&lt;/option&gt;
&lt;/select&gt;

&lt;img
id="preview"
src="https://lh3.googleusercontent.com/d/1Hu72T5j34moAaJG9Xnr1rGH3POtJ-Pug"
alt="Template"&gt;

&lt;button
id="downloadBtn"
onclick="generatePDF()"
disabled&gt;

⬇️ UNDUH PDF

&lt;/button&gt;

&lt;div class="loading" id="loading"&gt;
Memproses PDF...
&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

// ================= TEMPLATE (DIUBAH) =================

const FILE_ID =
'1Hu72T5j34moAaJG9Xnr1rGH3POtJ-Pug';  // &lt;-- ID baru

const TEMPLATE_URL =
`https://lh3.googleusercontent.com/d/${FILE_ID}`;

// ================= UTIL =================

function showLoading(show){

    document.getElementById('loading').style.display =
        show ? 'block' : 'none';

}

function getRomanMonth(monthIndex){

    const romawi = [
        "I","II","III","IV","V","VI",
        "VII","VIII","IX","X","XI","XII"
    ];

    return romawi[monthIndex];

}

function capitalizeEachWord(text){

    return text
        .toLowerCase()
        .replace(/\b\w/g,c=&gt;c.toUpperCase());

}

// ================= KONFIRMASI =================

function confirmIkut(){

    document.getElementById('nama').disabled = false;

    document.getElementById('peran').disabled = false;

    document.getElementById('downloadBtn').disabled = false;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="success"&gt;✅ Konfirmasi diterima. Anda dapat mengunduh sertifikat.&lt;/span&gt;';

}

function confirmTidakIkut(){

    document.getElementById('nama').disabled = true;

    document.getElementById('peran').disabled = true;

    document.getElementById('downloadBtn').disabled = true;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="error"&gt;❌ Anda tidak dapat mengunduh sertifikat.&lt;/span&gt;';

}

// ================= LOAD IMAGE =================

function loadImage(url){

    return new Promise((resolve,reject)=&gt;{

        const img = new Image();

        img.crossOrigin = "anonymous";

        img.onload = ()=&gt;resolve(img);

        img.onerror = ()=&gt;{

            reject(
                new Error(
                    'Template Google Drive gagal dimuat'
                )
            );

        };

        img.src = url + '?t=' + Date.now();

    });

}

// ================= NOMOR =================

async function generateNomor(){

    const now = new Date();

    const bulan =
        getRomanMonth(now.getMonth());

    const tahun =
        now.getFullYear();

    const nomor =
        Math.floor(Math.random()*900)+100;

    return `${nomor}/K/${bulan}/${tahun}`;

}

// ================= PDF =================

async function generatePDF(){

    const namaInput =
        document.getElementById('nama');

    const peranSelect =
        document.getElementById('peran');

    let nama =
        namaInput.value.trim();

    const peran =
        peranSelect.value;

    if(!nama){

        alert('Nama wajib diisi');

        return;

    }

    nama =
        capitalizeEachWord(nama);

    showLoading(true);

    try{

        await document.fonts.ready;

        const img =
            await loadImage(TEMPLATE_URL);

        const canvas =
            document.createElement('canvas');

        canvas.width = img.width;
        canvas.height = img.height;

        const ctx =
            canvas.getContext('2d');

        ctx.drawImage(
            img,
            0,
            0,
            canvas.width,
            canvas.height
        );

        // ================= POSISI =================

        const nomorY =
            canvas.height * 0.235;

        const namaY =
            canvas.height * 0.3990;

        const peranY =
            canvas.height * 0.5420;

        // ================= STYLE =================

        ctx.textAlign = 'center';

        ctx.textBaseline = 'middle';

        ctx.fillStyle = '#000';

        // nomor
        const nomorSertifikat =
            await generateNomor();

        ctx.font =
            `bold ${canvas.width*0.0125}px Montserrat`;

        ctx.fillText(
            nomorSertifikat,
            canvas.width/2,
            nomorY
        );

        // nama auto shrink
        let fontSize =
            canvas.width * 0.031;

        ctx.font =
            `700 ${fontSize}px Montserrat`;

        let textWidth =
            ctx.measureText(nama).width;

        const maxWidth =
            canvas.width - 180;

        while(
            textWidth &gt; maxWidth &amp;&amp;
            fontSize &gt; 20
        ){

            fontSize -= 2;

            ctx.font =
                `700 ${fontSize}px Montserrat`;

            textWidth =
                ctx.measureText(nama).width;

        }

        ctx.fillText(
            nama,
            canvas.width/2,
            namaY
        );

        // peran
        ctx.font =
            `bold ${canvas.width*0.024}px Montserrat`;

        ctx.fillText(
            peran,
            canvas.width/2,
            peranY
        );

        // ================= PDF =================

        const imageData =
            canvas.toDataURL(
                'image/jpeg',
                1.0
            );

        const { jsPDF } =
            window.jspdf;

        const pdf =
            new jsPDF({

                orientation:
                    canvas.width &gt; canvas.height
                    ? 'landscape'
                    : 'portrait',

                unit:'px',

                format:[
                    canvas.width,
                    canvas.height
                ]

            });

        pdf.addImage(
            imageData,
            'JPEG',
            0,
            0,
            canvas.width,
            canvas.height
        );

        const safeName =
            nama.replace(/[^a-z0-9]/gi,'_');

        pdf.save(
            `Sertifikat_${safeName}.pdf`
        );

    }catch(error){

        console.error(error);

        alert(
            '❌ Gagal membuat PDF\n\n' +
            error.message +
            '\n\nPastikan file Google Drive bersifat PUBLIC.'
        );

    }finally{

        showLoading(false);

    }

}

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/sertifikat-kombel.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://lh3.googleusercontent.com/d/1Hu72T5j34moAaJG9Xnr1rGH3POtJ-Pug=s72-c" width="72"/><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-7228811827870023901</guid><pubDate>Fri, 04 Sep 2026 03:08:01 +0000</pubDate><atom:updated>2026-09-11T07:40:01.163+07:00</atom:updated><title>Ulangan Harian 1 — Petunjuk Kerja BAHASA INDONESIA KELAS XI SMK</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Ulangan Harian 1 - Petunjuk Kerja - Kelas XI SMK&lt;/title&gt;
&lt;style&gt;
 :root{
 --ink:#1B2430;
 --ink-soft:#4A5568;
 --paper:#F7F5F0;
 --card:#FFFFFF;
 --line:#D8D2C4;
 --amber:#E8A33D;
 --amber-dark:#8A5A12;
 --green:#3F7D58;
 --green-bg:#E7F2EB;
 --red:#C1443B;
 --red-bg:#FBEAE8;
 }
 *{box-sizing:border-box;}
 body{
 margin:0;
 background:var(--paper);
 color:var(--ink);
 font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
 line-height:1.55;
 }
 .wrap{max-width:760px;margin:0 auto;padding:28px 20px 80px;}
 header.top{border-bottom:3px solid var(--ink);padding-bottom:16px;margin-bottom:22px;}
 .kode{font-size:12px;letter-spacing:.04em;color:var(--ink-soft);}
 h1{font-size:22px;margin:6px 0 4px;font-weight:800;}
 .sub{font-size:14px;color:var(--ink-soft);margin:0;}
 .meta-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:14px;}
 .meta-chip{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:8px 12px;font-size:13px;min-width:130px;}
 .meta-chip b{display:block;font-size:16px;}
 .card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:20px;margin-bottom:18px;}
 .card h2{font-size:16px;margin:0 0 10px;}
 label{display:block;font-size:13px;color:var(--ink-soft);margin:12px 0 4px;}
 input[type=text],input[type=number]{
 width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:6px;
 font-size:15px;background:#fff;color:var(--ink);
 }
 input:focus{outline:2px solid var(--amber);outline-offset:1px;}
 .btn{
 display:inline-block;border:none;border-radius:6px;padding:12px 20px;
 font-size:15px;font-weight:700;cursor:pointer;margin-top:16px;
 }
 .btn-primary{background:var(--ink);color:#fff;}
 .btn-primary:hover{background:#000;}
 .btn-secondary{background:var(--amber);color:#3A2400;}
 .btn-secondary:hover{background:#d6912e;}
 .btn:disabled{opacity:.5;cursor:not-allowed;}
 .err{color:var(--red);font-size:13px;margin-top:8px;display:none;}
 .stimulus{
 background:#FBF9F2;border:1px solid var(--line);border-left:4px solid var(--amber);
 padding:14px 16px;border-radius:4px;margin-bottom:14px;font-size:14.5px;white-space:pre-line;
 }
 .stimulus .st-title{font-weight:800;font-size:14px;margin-bottom:6px;color:var(--amber-dark);}
 .qgroup{margin-bottom:26px;}
 .q{margin-bottom:20px;padding-bottom:18px;border-bottom:1px solid var(--line);}
 .q:last-child{border-bottom:none;}
 .q-num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--ink-soft);}
 .q-text{font-size:15px;font-weight:600;margin:4px 0 10px;}
 .opt{
 display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:6px;
 cursor:pointer;border:1px solid transparent;font-size:14.5px;
 }
 .opt:hover{background:#F1EFE7;}
 .opt input{margin-top:3px;}
 .opt.selected{background:#FCEFDA;border-color:var(--amber);}
 #progressWrap{position:sticky;top:0;background:var(--paper);padding:10px 0;z-index:5;border-bottom:1px solid var(--line);margin-bottom:16px;}
 #progressBar{height:8px;background:var(--line);border-radius:4px;overflow:hidden;}
 #progressFill{height:100%;background:var(--amber);width:0%;transition:width .2s;}
 #progressText{font-size:12px;color:var(--ink-soft);margin-top:4px;}
 .result-score{font-size:48px;font-weight:800;margin:6px 0;}
 .pass{color:var(--green);}
 .fail{color:var(--red);}
 .result-box{border-radius:8px;padding:20px;text-align:center;}
 .result-box.pass-bg{background:var(--green-bg);border:1px solid var(--green);}
 .result-box.fail-bg{background:var(--red-bg);border:1px solid var(--red);}
 .attempt-log{margin-top:14px;font-size:13px;}
 .attempt-log div{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px dashed var(--line);}
 .hidden{display:none;}
 footer{margin-top:30px;font-size:12px;color:var(--ink-soft);text-align:center;}

 .essaySection{margin-top:10px;}
 .essayQ{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--line);}
 .essayQ:last-child{border-bottom:none;}
 .essayQ-num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--ink-soft);}
 .essayQ-text{font-size:15px;font-weight:600;margin:4px 0 8px;}
 textarea.essayInput{
 width:100%;min-height:80px;padding:10px 12px;border:1px solid var(--line);
 border-radius:6px;font-size:14.5px;font-family:inherit;resize:vertical;background:#fff;color:var(--ink);
 }
 textarea.essayInput:focus{outline:2px solid var(--amber);outline-offset:1px;}
 .charCount{font-size:12px;color:var(--ink-soft);text-align:right;margin-top:3px;}
 .charCount.over{color:var(--red);font-weight:700;}
 .pasteWarn{font-size:12.5px;color:var(--red);font-weight:700;margin-top:4px;display:none;}
 .pasteWarn.show{display:block;}
 .sectionLabel{font-size:13px;font-weight:800;letter-spacing:.02em;color:var(--amber-dark);margin:26px 0 4px;border-top:3px solid var(--ink);padding-top:14px;}

 #printArea{display:none;}
 @media print{
 body *{visibility:hidden;}
 #printArea, #printArea *{visibility:visible;}
 #printArea{display:block;position:absolute;left:0;top:0;width:100%;}
 @page{size:215mm 330mm;margin:14mm;}
 .pbreak{break-before:page;page-break-before:always;}
 .noBreak{break-inside:avoid;page-break-inside:avoid;}
 }
 .pf-kop{text-align:center;border-bottom:3px solid #000;padding-bottom:10px;margin-bottom:14px;}
 .pf-kop h2{margin:0;font-size:16px;}
 .pf-kop p{margin:2px 0 0;font-size:12px;}
 .pf-identitas{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:14px;}
 .pf-identitas td{padding:3px 4px;vertical-align:top;}
 .pf-identitas td.lbl{width:150px;color:#333;}
 .pf-skorbox{border:2px solid #000;border-radius:4px;padding:10px 14px;margin-bottom:16px;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;}
 .pf-skoritem{font-size:12px;}
 .pf-skoritem b{display:block;font-size:20px;}
 .pf-essay-q{font-size:13px;font-weight:700;margin-bottom:3px;}
 .pf-essay-a{font-size:12.5px;border:1px solid #999;border-radius:4px;padding:6px 8px;min-height:28px;white-space:pre-wrap;background:#FAFAF7;}
 .pf-ttd{display:flex;justify-content:space-between;margin-top:40px;font-size:12.5px;}
 .pf-ttd div{width:45%;text-align:center;}
 .pf-ttd .garis{margin-top:56px;border-top:1px solid #000;padding-top:4px;}
 .pf-note{font-size:11px;color:#555;margin-top:10px;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="wrap"&gt;

 &lt;header class="top"&gt;
 &lt;div class="kode"&gt;DOK/B.INDO/XI/PROSEDUR-UH1&lt;/div&gt;
 &lt;h1&gt;Ulangan Harian 1 - Petunjuk Kerja&lt;/h1&gt;
 &lt;p class="sub"&gt;Bahasa Indonesia - Kelas XI SMK - Materi: teks prosedur / petunjuk kerja (evaluasi informasi, perbandingan teks, kaidah kebahasaan, penyusunan &amp;amp; penyajian)&lt;/p&gt;
 &lt;div class="meta-row"&gt;
 &lt;div class="meta-chip"&gt;Pilihan ganda&lt;b&gt;40 butir - bobot 70%&lt;/b&gt;&lt;/div&gt;
 &lt;div class="meta-chip"&gt;Esai&lt;b&gt;10 butir - bobot 30%&lt;/b&gt;&lt;/div&gt;
 &lt;div class="meta-chip"&gt;KKM (nilai akhir)&lt;b&gt;75&lt;/b&gt;&lt;/div&gt;
 &lt;div class="meta-chip"&gt;Kesempatan&lt;b&gt;3 kali&lt;/b&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;/header&gt;

 &lt;div id="screen-intro" class="card"&gt;
 &lt;h2&gt;Sebelum mengerjakan&lt;/h2&gt;
 &lt;p style="font-size:14px;"&gt;Setiap peserta mendapat susunan soal dan urutan opsi jawaban yang berbeda-beda, jadi jangan heran jika berbeda dengan teman sebangku. Ulangan terdiri atas &lt;b&gt;40 soal pilihan ganda&lt;/b&gt; dan &lt;b&gt;10 soal esai&lt;/b&gt;. Keduanya dinilai &lt;b&gt;otomatis oleh sistem&lt;/b&gt;: skor esai dihitung dari kesesuaian jawabanmu dengan konsep-konsep kunci pada setiap soal. Nilai akhir = &lt;b&gt;Skor PG x 70% + Skor Esai x 30%&lt;/b&gt;. Kamu punya &lt;b&gt;3 kali kesempatan&lt;/b&gt;. Begitu nilai akhir mencapai atau melebihi KKM (75), nilai itu langsung tersimpan. Jika sampai percobaan ke-3 belum mencapai KKM, sistem otomatis menyimpan &lt;b&gt;nilai tertinggi&lt;/b&gt; beserta rinciannya. &lt;b&gt;Jawaban esai wajib diketik sendiri&lt;/b&gt; - fitur tempel/paste (baik lewat Ctrl+V, klik kanan, maupun tarik-lepas teks) dinonaktifkan pada kolom esai.&lt;/p&gt;
 &lt;p style="font-size:14px;"&gt;Isi No. Absen yang sama setiap kali mencoba, supaya sistem bisa menghitung sisa kesempatanmu dengan benar.&lt;/p&gt;
 &lt;div style="background:#FFF6E6;border:1px solid var(--amber);border-left:4px solid var(--amber-dark);border-radius:6px;padding:12px 14px;margin:10px 0 16px;font-size:13.5px;"&gt;
 &lt;b style="color:var(--amber-dark);"&gt;PENTING - wajib dilakukan setelah nilai akhir tersimpan:&lt;/b&gt;
 &lt;ol style="margin:6px 0 0;padding-left:18px;"&gt;
 &lt;li&gt;&lt;b&gt;Unduh&lt;/b&gt; bukti mengerjakan (PDF, ukuran F4) lewat tombol "Unduh Bukti Mengerjakan (PDF)".&lt;/li&gt;
 &lt;li&gt;&lt;b&gt;Cetak&lt;/b&gt; dokumen tersebut (maksimal 3 lembar).&lt;/li&gt;
 &lt;li&gt;&lt;b&gt;Serahkan hasil cetak ke guru mata pelajaran&lt;/b&gt; sebagai bukti fisik pengerjaan ulangan.&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/div&gt;

 &lt;label for="absen"&gt;No. Absen&lt;/label&gt;
 &lt;input type="number" id="absen" placeholder="Contoh: 14" min="1"&gt;
 &lt;label for="nama"&gt;Nama Lengkap&lt;/label&gt;
 &lt;input type="text" id="nama" placeholder="Tulis nama lengkapmu"&gt;
 &lt;label for="kelas"&gt;Kelas&lt;/label&gt;
 &lt;input type="text" id="kelas" placeholder="Contoh: XI TKR 1"&gt;
 &lt;div class="err" id="introErr"&gt;Isi No. Absen, Nama Lengkap, dan Kelas terlebih dahulu.&lt;/div&gt;
 &lt;button class="btn btn-primary" id="btnCekStatus"&gt;Lanjutkan&lt;/button&gt;
 &lt;/div&gt;

 &lt;div id="screen-status" class="card hidden"&gt;
 &lt;h2 id="statusGreeting"&gt;&lt;/h2&gt;
 &lt;div id="statusBody"&gt;&lt;/div&gt;
 &lt;button class="btn btn-secondary" id="btnMulai"&gt;Mulai Mengerjakan&lt;/button&gt;
 &lt;button class="btn hidden" id="btnUnduhStatus" style="background:var(--green);color:#fff;"&gt;Unduh Bukti Mengerjakan (PDF)&lt;/button&gt;
 &lt;p class="hidden" id="instruksiStatus" style="font-size:12.5px;color:var(--ink-soft);margin-top:6px;"&gt;Setelah diunduh, cetak dokumen ini (maks. 3 lembar F4) dan &lt;b&gt;serahkan ke guru mata pelajaran&lt;/b&gt; sebagai bukti pengerjaan.&lt;/p&gt;
 &lt;button class="btn" id="btnGanti" style="background:transparent;border:1px solid var(--line);"&gt;Ganti No. Absen&lt;/button&gt;
 &lt;/div&gt;

 &lt;div id="screen-quiz" class="hidden"&gt;
 &lt;div id="progressWrap"&gt;
 &lt;div id="progressBar"&gt;&lt;div id="progressFill"&gt;&lt;/div&gt;&lt;/div&gt;
 &lt;div id="progressText"&gt;0 dari 40 soal terjawab&lt;/div&gt;
 &lt;/div&gt;
 &lt;div id="quizBody"&gt;&lt;/div&gt;
 &lt;div class="err" id="quizErr"&gt;Masih ada soal yang belum dijawab. Lengkapi seluruh soal sebelum mengirim.&lt;/div&gt;
 &lt;button class="btn btn-primary" id="btnKirim"&gt;Kirim Jawaban&lt;/button&gt;
 &lt;/div&gt;

 &lt;div id="screen-result" class="card hidden"&gt;
 &lt;div id="resultBoxOuter"&gt;&lt;/div&gt;
 &lt;div class="attempt-log" id="attemptLog"&gt;&lt;/div&gt;
 &lt;button class="btn btn-secondary hidden" id="btnUnduhHasil" style="background:var(--green);color:#fff;"&gt;Unduh Bukti Mengerjakan (PDF)&lt;/button&gt;
 &lt;p class="hidden" id="instruksiHasil" style="font-size:12.5px;color:var(--ink-soft);margin-top:6px;"&gt;Setelah diunduh, cetak dokumen ini (maks. 3 lembar F4) dan &lt;b&gt;serahkan ke guru mata pelajaran&lt;/b&gt; sebagai bukti pengerjaan.&lt;/p&gt;
 &lt;button class="btn btn-secondary hidden" id="btnCobaLagi"&gt;Coba Lagi&lt;/button&gt;
 &lt;button class="btn" id="btnSelesai" style="background:transparent;border:1px solid var(--line);"&gt;Kembali ke Awal&lt;/button&gt;
 &lt;/div&gt;

 &lt;footer&gt;DOK/B.INDO/XI/PROSEDUR-UH1 - Ulangan Harian 1, 40 Butir Pilihan Ganda + 10 Esai, Pokok Bahasan Petunjuk Kerja&lt;/footer&gt;
&lt;/div&gt;

&lt;div id="printArea"&gt;&lt;/div&gt;

&lt;script&gt;
const GROUPS = [
{
 title: "Teks 1 - Cara Mengganti Oli Sepeda Motor",
 stimulus: "Mengganti oli mesin secara berkala menjaga performa sepeda motor tetap optimal. Berikut langkah mengganti oli mesin sepeda motor jenis matic.\n\nAlat dan bahan: kunci pas 17, wadah penampung oli bekas, oli mesin baru sesuai spesifikasi pabrikan, corong, kain lap.\n\nLangkah-langkah:\n1) Panaskan mesin selama tiga menit agar oli lama lebih mudah mengalir, lalu matikan mesin.\n2) Letakkan wadah penampung tepat di bawah baut pembuangan oli.\n3) Buka baut pembuangan oli menggunakan kunci pas 17 secara perlahan agar oli tidak tumpah ke luar wadah.\n4) Biarkan oli lama mengalir habis selama kurang lebih lima menit.\n5) Pasang kembali baut pembuangan oli dan kencangkan hingga rapat, tetapi jangan berlebihan agar ulir baut tidak rusak.\n6) Buka tutup pengisian oli, lalu tuangkan oli baru menggunakan corong sesuai takaran yang tertera pada buku manual.\n7) Pasang kembali tutup pengisian oli, nyalakan mesin, dan periksa ketinggian oli menggunakan dipstick.",
 questions: [
 {q:"Alat yang digunakan untuk membuka baut pembuangan oli adalah...", opts:["Obeng plus","Kunci pas 17","Tang kombinasi","Kunci inggris","Kunci L"], correct:1},
 {q:"Berdasarkan teks, mesin perlu dipanaskan sebelum oli dikuras dengan tujuan...", opts:["Mempercepat proses pemasangan baut","Membuat oli lama lebih mudah mengalir","Mendinginkan komponen mesin","Mengurangi tekanan pada karburator","Menstabilkan putaran mesin"], correct:1},
 {q:"Jika langkah ke-3 dan ke-5 pada teks tersebut ditukar urutannya, akibat yang paling mungkin terjadi adalah...", opts:["Oli baru akan tercampur dengan oli lama","Baut pembuangan tidak dapat dibuka sama sekali","Oli lama tidak dapat dikeluarkan karena baut belum dibuka saat wadah sudah terpasang","Proses penggantian oli menjadi lebih cepat","Tidak ada perbedaan hasil karena urutan bebas"], correct:2},
 {q:"Kalimat \"kencangkan hingga rapat, tetapi jangan berlebihan agar ulir baut tidak rusak\" berfungsi sebagai...", opts:["Latar belakang masalah","Peringatan sekaligus alasan tindakan","Kesimpulan prosedur","Tujuan utama teks","Definisi istilah teknis"], correct:1},
 {q:"Informasi yang TIDAK termuat secara eksplisit dalam teks tersebut adalah...", opts:["Jenis kunci yang digunakan","Lama waktu memanaskan mesin","Interval jarak tempuh ideal untuk mengganti oli","Alat untuk mengecek ketinggian oli","Tujuan memasang wadah penampung"], correct:2}
 ]
},
{
 title: "Teks 2 - Petunjuk Penggunaan Alat Pemadam Api Ringan (APAR)",
 stimulus: "Alat Pemadam Api Ringan (APAR) jenis serbuk kimia kering merupakan alat pertolongan pertama saat terjadi kebakaran skala kecil. Ikuti langkah berikut saat menggunakan APAR, yang dikenal dengan istilah PASS.\n\n1) Pull (tarik): Tarik pin pengaman yang terdapat pada bagian atas tabung.\n2) Aim (arahkan): Arahkan corong atau selang ke titik api, bukan ke kobaran asap.\n3) Squeeze (tekan): Tekan tuas atau pemicu secara mantap agar media pemadam keluar.\n4) Sweep (ayunkan): Ayunkan corong ke kiri dan ke kanan menyapu dasar api hingga api benar-benar padam.\n\nSebelum menggunakan APAR, pastikan posisi tubuh membelakangi arah angin agar asap dan media pemadam tidak mengenai wajah. Setelah kebakaran padam, jangan langsung meninggalkan lokasi; tunggu beberapa saat untuk memastikan tidak ada bara api yang menyala kembali.",
 questions: [
 {q:"Singkatan PASS pada teks tersebut merujuk pada...", opts:["Empat jenis APAR","Empat tahapan menggunakan APAR","Empat bahan pemadam api","Empat lokasi penyimpanan APAR","Empat ukuran tabung"], correct:1},
 {q:"Bagian tabung yang pertama kali harus ditarik adalah...", opts:["Selang","Corong","Pin pengaman","Tuas pemicu","Label tabung"], correct:2},
 {q:"Tujuan mengarahkan corong ke titik api, bukan ke kobaran asap adalah...", opts:["Agar media pemadam lebih hemat","Karena asap tidak mengandung oksigen","Agar sumber api langsung padam, bukan hanya menghilangkan asapnya","Supaya pengguna tidak terlihat panik","Karena asap dapat merusak tabung APAR"], correct:2},
 {q:"Posisi tubuh membelakangi arah angin saat memadamkan api bertujuan untuk...", opts:["Mempercepat proses penyemprotan","Menghindari asap dan media pemadam mengenai wajah pengguna","Membuat api lebih cepat menyebar","Mengurangi tekanan dalam tabung","Memudahkan pengambilan tabung cadangan"], correct:1},
 {q:"Simpulan yang paling tepat berdasarkan seluruh isi teks tersebut adalah...", opts:["APAR hanya dapat digunakan oleh petugas pemadam kebakaran profesional","Penggunaan APAR memerlukan urutan tindakan dan kewaspadaan hingga api benar-benar padam","APAR jenis serbuk kimia kering tidak boleh digunakan untuk kebakaran skala kecil","Kobaran asap lebih berbahaya daripada api itu sendiri","Tuas pemicu hanya berfungsi jika pin belum dilepas"], correct:1}
 ]
},
{
 title: "Teks 3 - Dua Metode Menyeduh Kopi (Perbandingan)",
 stimulus: "Teks A - Menyeduh Kopi Metode V60\nAlat: dripper V60, kertas filter, kopi bubuk giling sedang-halus 15 gram, air panas suhu 92-96 derajat Celsius, timbangan, kettle leher angsa.\nLangkah: 1) Basahi kertas filter dengan air panas untuk menghilangkan aroma kertas. 2) Masukkan kopi bubuk ke dalam filter, ratakan permukaannya. 3) Tuang air panas sedikit demi sedikit membentuk gerakan memutar selama 30 detik untuk proses blooming. 4) Lanjutkan menuang air secara bertahap hingga total air mencapai 250 ml dalam waktu sekitar tiga menit. 5) Biarkan air menetes habis sebelum dripper diangkat.\n\nTeks B - Menyeduh Kopi Metode Tubruk\nAlat: cangkir atau gelas tahan panas, kopi bubuk kasar 10 gram, air panas suhu 90 derajat Celsius, sendok.\nLangkah: 1) Masukkan kopi bubuk langsung ke dalam cangkir. 2) Tuangkan air panas hingga cangkir hampir penuh. 3) Aduk sebentar agar bubuk kopi tercampur rata dengan air. 4) Diamkan selama tiga hingga empat menit hingga ampas kopi mengendap di dasar cangkir. 5) Kopi siap dinikmati tanpa perlu disaring.",
 questions: [
 {q:"Perbedaan utama alat yang digunakan pada kedua metode tersebut adalah...", opts:["Metode V60 tidak memerlukan air panas","Metode V60 menggunakan dripper dan kertas filter, sedangkan metode tubruk tidak","Metode tubruk memerlukan timbangan, metode V60 tidak","Kedua metode sama-sama tidak menggunakan air panas","Metode tubruk memerlukan kettle leher angsa"], correct:1},
 {q:"Persamaan dari kedua prosedur penyeduhan kopi tersebut adalah...", opts:["Keduanya menggunakan kertas filter","Keduanya memerlukan proses penyaringan","Keduanya menggunakan air panas dan kopi bubuk sebagai bahan utama","Keduanya menghasilkan volume kopi yang sama persis","Keduanya membutuhkan waktu penyeduhan yang identik"], correct:2},
 {q:"Ukuran gilingan kopi pada metode V60 lebih halus dibandingkan metode tubruk. Hal ini kemungkinan besar berkaitan dengan...", opts:["Warna kopi yang dihasilkan","Adanya proses penyaringan menggunakan kertas filter pada metode V60","Suhu air yang digunakan","Jenis cangkir yang dipakai","Lama waktu penyimpanan kopi bubuk"], correct:1},
 {q:"Jika seseorang tidak memiliki kertas filter maupun dripper tetapi ingin menikmati kopi dengan cepat tanpa proses penuangan bertahap, metode yang paling sesuai untuk direkomendasikan adalah...", opts:["Metode V60, karena hasilnya lebih jernih","Metode tubruk, karena alat yang dibutuhkan lebih sederhana dan langkahnya lebih singkat","Kedua metode sama-sama tidak dapat dilakukan","Metode V60, karena prosesnya lebih cepat daripada tubruk","Tidak dapat ditentukan karena teks tidak membahas kecepatan penyeduhan"], correct:1},
 {q:"Lama waktu penuangan air pada metode V60 hingga mencapai 250 ml adalah sekitar...", opts:["30 detik","1 menit","3 menit","5 menit","10 menit"], correct:2}
 ]
},
{
 title: "Teks 4 - Langkah Mendaftar Akun SIAKAD Sekolah",
 stimulus: "Berikut langkah pendaftaran akun SIAKAD bagi peserta didik baru.\n1) Buka peramban (browser) lalu ketik alamat siakad.sekolah.sch.id pada bilah alamat.\n2) Klik tombol \"Daftar Akun Baru\" yang terletak di pojok kanan atas laman.\n3) Isi formulir menggunakan Nomor Induk Siswa (NIS) dan tanggal lahir sesuai data yang tercatat di tata usaha.\n4) Buat kata sandi yang terdiri atas kombinasi huruf, angka, dan simbol, minimal delapan karakter.\n5) Klik tombol \"Kirim\", kemudian periksa surel (email) untuk menemukan tautan aktivasi akun.\n6) Klik tautan aktivasi tersebut dalam waktu 24 jam agar akun tidak perlu didaftarkan ulang.\n7) Masuk (login) ke SIAKAD menggunakan NIS dan kata sandi yang telah dibuat.",
 questions: [
 {q:"Data yang digunakan untuk mengisi formulir pendaftaran adalah...", opts:["Nomor telepon dan alamat rumah","NIS dan tanggal lahir","Nama orang tua dan pekerjaan","Alamat surel dan nomor rekening","Nomor induk kependudukan dan agama"], correct:1},
 {q:"Tautan aktivasi akun dikirimkan melalui...", opts:["Pesan singkat (SMS)","Aplikasi SIAKAD langsung","Surel (email)","Media sosial sekolah","Surat resmi dari tata usaha"], correct:2},
 {q:"Batas waktu mengklik tautan aktivasi sebagaimana disebutkan dalam teks adalah...", opts:["1 jam","12 jam","24 jam","48 jam","7 hari"], correct:2},
 {q:"Apabila siswa tidak mengklik tautan aktivasi dalam batas waktu yang ditentukan, konsekuensi yang paling mungkin terjadi berdasarkan teks adalah...", opts:["Akun otomatis aktif dengan sendirinya","Siswa harus mendaftarkan akun dari awal","Kata sandi akan direset otomatis oleh sistem","Data NIS akan terhapus dari sistem sekolah","Tidak ada konsekuensi apa pun"], correct:1},
 {q:"Kalimat \"Buat kata sandi yang terdiri atas kombinasi huruf, angka, dan simbol, minimal delapan karakter\" termasuk ke dalam unsur kebahasaan teks prosedur berupa...", opts:["Kalimat tanya","Kalimat larangan","Kalimat perintah (imperatif) yang memuat syarat/batasan","Kalimat pengandaian","Kalimat pasif"], correct:2}
 ]
},
{
 title: "Teks 5 - Kaidah Kebahasaan Teks Prosedur",
 stimulus: "Teks prosedur memiliki ciri kebahasaan yang khas agar pembaca dapat melaksanakan langkah-langkah dengan tepat. Beberapa ciri tersebut antara lain: penggunaan kalimat imperatif (perintah) seperti \"potong\", \"aduk\", atau \"tekan\"; penggunaan konjungsi temporal seperti \"kemudian\", \"setelah itu\", dan \"selanjutnya\" untuk menunjukkan urutan langkah; penggunaan kata kerja aktif yang menyatakan tindakan konkret; penggunaan kalimat larangan yang biasanya ditandai kata \"jangan\" atau \"hindari\" untuk memberi peringatan; serta penggunaan keterangan alat, bahan, ukuran, atau waktu secara spesifik dan terukur.",
 questions: [
 {q:"Kata yang termasuk konjungsi temporal dalam teks prosedur adalah...", opts:["Karena","Kemudian","Meskipun","Walaupun","Namun"], correct:1},
 {q:"Kalimat \"Jangan menyentuh permukaan wajan yang masih panas\" merupakan contoh kalimat...", opts:["Kalimat tanya","Kalimat larangan","Kalimat berita","Kalimat pengandaian","Kalimat majemuk setara"], correct:1},
 {q:"Fungsi utama konjungsi temporal dalam teks prosedur adalah...", opts:["Menghubungkan dua kalimat yang bertentangan","Menunjukkan urutan atau tahapan pelaksanaan langkah","Menyatakan sebab akibat suatu tindakan","Menyatakan syarat sebuah tindakan","Menyatakan tujuan akhir prosedur"], correct:1},
 {q:"Manakah kalimat berikut yang menggunakan kata kerja imperatif dengan tepat?", opts:["Adonan itu diaduk oleh koki","Adonan akan diaduk hingga rata","Aduklah adonan hingga rata","Adonan telah diaduk hingga rata","Adonan sedang diaduk oleh asisten koki"], correct:2},
 {q:"Perhatikan kalimat berikut: \"Panaskan oven pada suhu 180 derajat Celsius selama sepuluh menit sebelum adonan dimasukkan.\" Unsur kebahasaan yang paling menonjol pada kalimat tersebut, selain kalimat imperatif, adalah...", opts:["Konjungsi pertentangan","Keterangan ukuran/suhu dan waktu yang spesifik dan terukur","Kalimat tanya retoris","Kata kerja pasif","Kalimat majemuk bertingkat sebab-akibat"], correct:1}
 ]
},
{
 title: "Teks 6 - Petunjuk Mengoperasikan Mesin Bubut Sederhana",
 stimulus: "Sebelum mengoperasikan mesin bubut, operator wajib memahami langkah keselamatan dan pengoperasian berikut.\n1) Kenakan alat pelindung diri berupa kacamata safety dan pakaian kerja yang pas di badan, hindari pakaian longgar yang dapat tersangkut komponen berputar.\n2) Periksa benda kerja dan pastikan tercekam kuat pada chuck sebelum mesin dinyalakan.\n3) Atur kecepatan putar (rpm) sesuai jenis material yang akan dibubut; gunakan kecepatan rendah untuk material keras dan kecepatan tinggi untuk material lunak.\n4) Nyalakan mesin dan dekatkan pahat secara perlahan ke benda kerja.\n5) Lakukan pemakanan (feeding) secara bertahap, jangan terlalu dalam agar pahat tidak patah.\n6) Setelah selesai, matikan mesin terlebih dahulu sebelum melepas benda kerja dari chuck.",
 questions: [
 {q:"Alat pelindung diri yang disebutkan dalam teks adalah...", opts:["Helm proyek","Kacamata safety","Sarung tangan karet","Masker respirator","Sepatu boots"], correct:1},
 {q:"Sebelum mesin dinyalakan, hal yang harus dipastikan operator adalah...", opts:["Kecepatan rpm sudah maksimal","Benda kerja tercekam kuat pada chuck","Pahat sudah patah","Mesin dalam keadaan mati total","Ruangan dalam keadaan gelap"], correct:1},
 {q:"Alasan pakaian longgar dilarang dikenakan saat mengoperasikan mesin bubut adalah...", opts:["Membuat operator terlihat kurang rapi","Dapat tersangkut pada komponen mesin yang berputar dan membahayakan keselamatan","Mengurangi kenyamanan gerak operator","Tidak sesuai dengan standar seragam sekolah","Menghambat proses pemakanan benda kerja"], correct:1},
 {q:"Pengaturan kecepatan putar (rpm) pada langkah ketiga bergantung pada...", opts:["Ukuran ruangan bengkel","Jenis material benda kerja","Warna benda kerja","Berat badan operator","Waktu pengerjaan yang tersedia"], correct:1},
 {q:"Mengapa mesin harus dimatikan terlebih dahulu sebelum benda kerja dilepas dari chuck?", opts:["Agar proses pelepasan lebih cepat","Untuk menghindari cedera akibat komponen mesin yang masih berputar","Karena chuck tidak dapat dibuka saat mesin menyala","Agar rpm dapat diatur ulang","Karena benda kerja akan otomatis terlepas saat mesin mati"], correct:1}
 ]
},
{
 title: "Teks 7 - Menyusun Teks Prosedur yang Baik",
 stimulus: "Sebuah teks prosedur yang baik disusun dengan struktur yang jelas, yaitu: (1) judul yang menggambarkan tujuan prosedur secara ringkas, (2) tujuan atau pengantar yang menjelaskan hasil akhir yang ingin dicapai, (3) daftar alat dan bahan (jika diperlukan), dan (4) langkah-langkah yang disusun secara runtut dan bernomor. Setiap langkah sebaiknya ditulis dengan kalimat yang singkat, jelas, dan tidak menimbulkan makna ganda. Penulis juga perlu memastikan bahwa tidak ada langkah penting yang terlewat, karena satu langkah yang hilang dapat menyebabkan pembaca gagal melaksanakan prosedur dengan benar.",
 questions: [
 {q:"Struktur teks prosedur yang disebutkan dalam teks tersebut terdiri atas empat bagian, salah satunya adalah...", opts:["Orientasi","Daftar alat dan bahan","Resolusi","Koda","Abstrak"], correct:1},
 {q:"Alasan setiap langkah dalam teks prosedur harus ditulis dengan kalimat yang tidak menimbulkan makna ganda adalah...", opts:["Agar teks terlihat lebih panjang","Supaya pembaca dapat melaksanakan langkah dengan tepat sesuai maksud penulis","Agar teks memenuhi syarat jumlah kata minimal","Supaya pembaca merasa terhibur","Agar teks dapat dikategorikan sebagai karya sastra"], correct:1},
 {q:"Akibat yang paling mungkin terjadi apabila satu langkah penting dalam teks prosedur terlewat adalah...", opts:["Pembaca akan lebih cepat menyelesaikan prosedur","Pembaca berpotensi gagal melaksanakan prosedur dengan benar","Teks menjadi lebih ringkas dan efektif","Tidak berpengaruh apa pun terhadap hasil akhir","Pembaca akan otomatis menambahkan langkah yang hilang"], correct:1},
 {q:"Seorang siswa menulis teks prosedur \"Cara Membuat Nasi Goreng\" namun langsung menuliskan langkah-langkah tanpa mencantumkan bahan yang diperlukan. Berdasarkan teks di atas, kekurangan tulisan siswa tersebut adalah...", opts:["Tidak memiliki judul","Tidak mencantumkan daftar alat dan bahan yang diperlukan sebelum langkah-langkah","Menggunakan kalimat imperatif","Langkah-langkah tidak diberi nomor","Menggunakan konjungsi temporal"], correct:1},
 {q:"Bagian yang menjelaskan hasil akhir yang ingin dicapai dalam teks prosedur disebut...", opts:["Daftar bahan","Tujuan/pengantar","Penutup","Judul","Simpulan"], correct:1}
 ]
},
{
 title: "Teks 8 - Dua Contoh Petunjuk Merakit Rak Buku (Perbandingan)",
 stimulus: "Teks A - Cara Merakit Rak Buku Knock-Down\nAlat dan bahan: obeng plus, papan rak (5 bagian), sekrup (20 buah), dowel kayu (8 buah).\nLangkah:\n1) Susun papan alas dan dua papan samping membentuk huruf U, lalu satukan menggunakan dowel kayu.\n2) Kencangkan sambungan menggunakan sekrup dan obeng plus.\n3) Pasang papan tengah sebagai sekat rak sesuai jarak yang diinginkan.\n4) Pasang papan atas sebagai penutup rak, lalu kencangkan seluruh sekrup hingga rak kokoh berdiri.\n\nTeks B - Cara Merakit Rak Buku\nSiapkan bahan-bahannya. Lalu pasang semua bagian. Kencangkan bagian yang perlu dikencangkan. Setelah itu rak sudah jadi dan siap digunakan.",
 questions: [
 {q:"Perbedaan mencolok antara Teks A dan Teks B adalah...", opts:["Teks A tidak memiliki langkah, Teks B memiliki langkah rinci","Teks A memuat langkah yang rinci dan terukur, sedangkan Teks B ditulis secara umum dan kurang jelas","Teks B mencantumkan alat dan bahan, Teks A tidak","Kedua teks sama-sama rinci dan mudah diikuti","Teks A lebih pendek daripada Teks B"], correct:1},
 {q:"Kalimat \"pasang semua bagian\" pada Teks B dinilai kurang efektif sebagai kalimat prosedur karena...", opts:["Menggunakan kalimat imperatif","Tidak menjelaskan bagian mana yang dipasang dan bagaimana cara memasangnya secara spesifik","Menggunakan konjungsi temporal","Terlalu panjang untuk dipahami","Tidak menggunakan huruf kapital di awal kalimat"], correct:1},
 {q:"Jika seseorang yang belum pernah merakit rak buku hanya diberikan Teks B, kemungkinan besar yang akan terjadi adalah...", opts:["Ia dapat merakit rak dengan sangat mudah karena instruksinya sudah lengkap","Ia akan kesulitan karena teks tidak menjelaskan alat, bahan, dan langkah secara rinci","Ia akan merakit rak lebih cepat dibandingkan menggunakan Teks A","Tidak ada perbedaan hasil rakitan antara menggunakan Teks A atau Teks B","Teks B lebih mudah dipahami karena lebih singkat"], correct:1},
 {q:"Berdasarkan perbandingan kedua teks tersebut, kesimpulan yang paling tepat mengenai kualitas sebuah teks prosedur adalah...", opts:["Semakin singkat sebuah teks prosedur, semakin baik kualitasnya","Kualitas teks prosedur ditentukan oleh kelengkapan alat/bahan serta kejelasan dan keterukuran setiap langkahnya","Teks prosedur tidak memerlukan daftar alat dan bahan","Teks prosedur yang baik tidak perlu menggunakan angka atau ukuran","Panjang pendeknya teks tidak berpengaruh pada pemahaman pembaca"], correct:1},
 {q:"Apabila Teks B ingin diperbaiki agar setara dengan kualitas Teks A, revisi yang paling tepat dilakukan adalah...", opts:["Menghapus seluruh langkah yang ada","Mengganti judul teks menjadi lebih panjang","Menambahkan daftar alat dan bahan serta merincikan setiap langkah secara spesifik dan berurutan","Mengubah seluruh kalimat menjadi kalimat tanya","Menghilangkan tanda baca pada setiap kalimat"], correct:2}
 ]
}
];

// Esai 1-5: materi "Membandingkan Teks Prosedur dengan Teks Lain (Eksplanasi)"
// Esai 6-10: materi "Evaluasi Informasi dalam Teks Prosedur"
// Setiap soal punya beberapa "konsep kunci"; tiap konsep berisi beberapa alternatif kata/frasa (OR).
// Skor esai per soal = (jumlah konsep yang ditemukan / total konsep) x 100, lalu dirata-rata dari 10 soal.
const ESSAYS = [
 { q: "Jelaskan pengertian teks eksplanasi dan bagaimana tujuannya berbeda dengan teks prosedur!",
 concepts: [["fenomena","proses alam","proses sosial","proses ilmiah"], ["sebab-akibat","sebab akibat","kausalitas"], ["memahami","paham"], ["tindakan","melakukan","diikuti"]] },
 { q: "Sebutkan struktur teks eksplanasi (3 bagian) dan jelaskan secara singkat masing-masing bagian tersebut!",
 concepts: [["pernyataan umum"], ["deretan penjelas","deret penjelas","penjelasan sebab akibat","rangkaian penjelas"], ["interpretasi","penutup"]] },
 { q: "Sebutkan minimal 3 persamaan antara teks prosedur dan teks eksplanasi!",
 concepts: [["proses","tahapan"], ["informatif"], ["faktual","fakta"], ["konjungsi"], ["sistematis"]] },
 { q: "Jelaskan perbedaan konjungsi dominan yang digunakan pada teks prosedur dan teks eksplanasi, berikan masing-masing satu contoh katanya!",
 concepts: [["temporal"], ["kausalitas"], ["kemudian","lalu","setelah itu"], ["karena","sebab","akibatnya"]] },
 { q: "Jelaskan langkah-langkah membandingkan teks prosedur dengan teks eksplanasi secara berurutan!",
 concepts: [["membaca"], ["tujuan"], ["struktur"], ["kebahasaan","bahasa"], ["simpulan","kesimpulan"]] },
 { q: "Jelaskan apa yang dimaksud dengan \"mengevaluasi informasi\" dalam teks prosedur, dan bagaimana bedanya dengan sekadar \"memahami\" isi teks!",
 concepts: [["menilai","penilaian"], ["dipercaya","layak"], ["logis","masuk akal"], ["kritis"]] },
 { q: "Sebutkan minimal 4 dari 6 kriteria evaluasi teks prosedur yang telah dipelajari!",
 concepts: [["keakuratan","akurat"], ["kelengkapan","lengkap"], ["kelogisan","logis","urutan"], ["kejelasan","jelas","ambigu"], ["kesesuaian","sesuai tujuan"], ["keselamatan","k3","kelayakan"]] },
 { q: "Jelaskan mengapa kemampuan mengevaluasi teks prosedur penting bagi siswa SMK, kaitkan dengan dunia kerja/kejuruan!",
 concepts: [["kegagalan kerja","gagal kerja"], ["kerusakan alat","rusak"], ["kecelakaan kerja","kecelakaan"], ["kesiapan kerja","job readiness"]] },
 { q: "Sebutkan langkah-langkah mengevaluasi teks prosedur secara berurutan!",
 concepts: [["membaca menyeluruh","membaca"], ["struktur"], ["kriteria"], ["temuan"], ["menyimpulkan","simpulan"], ["rekomendasi","saran perbaikan"]] },
 { q: "Perhatikan temuan berikut: sebuah teks prosedur menuliskan \"Tuang oli mesin baru sebanyak 5 liter\", padahal kapasitas oli mesin sepeda motor umumnya hanya sekitar 0,8-1,2 liter. Kriteria evaluasi apa yang dilanggar pada temuan tersebut, dan jelaskan alasannya!",
 concepts: [["keakuratan","akurat","tidak akurat"], ["spesifikasi","standar"], ["takaran","kapasitas"], ["5 liter","0,8","1,2","tidak sesuai"]] }
];
const ESSAY_MAXLEN = 500;
const PG_WEIGHT = 0.7;
const ESSAY_WEIGHT = 0.3;

function scoreEssayAnswer(answerText, concepts){
 const norm = (answerText || '').toLowerCase();
 let found = 0;
 concepts.forEach(altGroup =&gt; {
 const hit = altGroup.some(alt =&gt; norm.includes(alt.toLowerCase()));
 if(hit) found++;
 });
 return {found: found, total: concepts.length, pct: Math.round((found/concepts.length)*100)};
}

const LETTERS = ["A","B","C","D","E"];
const KKM = 75;
const MAX_ATTEMPT = 3;
let currentAbsen = null, currentNama = null, currentKelas = null, currentRecord = null;
let quizGroups = null;
let answers = {};
let essayAnswers = {};

function shuffle(arr){
 const a = arr.slice();
 for(let i=a.length-1;i&gt;0;i--){
 const j = Math.floor(Math.random()*(i+1));
 [a[i],a[j]] = [a[j],a[i]];
 }
 return a;
}

function buildShuffledQuiz(){
 const groupOrder = shuffle(GROUPS);
 return groupOrder.map(g =&gt; ({
 title: g.title,
 stimulus: g.stimulus,
 questions: shuffle(g.questions).map(q =&gt; {
 const optIdx = shuffle(q.opts.map((_,i)=&gt;i));
 return {
 q: q.q,
 opts: optIdx.map(i =&gt; q.opts[i]),
 correctLetter: LETTERS[optIdx.indexOf(q.correct)]
 };
 })
 }));
}

async function loadRecord(absen){
 try{
 const r = await window.storage.get('siswa:'+absen, true);
 return r ? JSON.parse(r.value) : null;
 }catch(e){
 return null;
 }
}
async function saveRecord(absen, record){
 try{
 await window.storage.set('siswa:'+absen, JSON.stringify(record), true);
 }catch(e){
 console.error('Gagal menyimpan data', e);
 }
}

document.getElementById('btnCekStatus').addEventListener('click', async () =&gt; {
 const absenEl = document.getElementById('absen');
 const namaEl = document.getElementById('nama');
 const kelasEl = document.getElementById('kelas');
 const absen = absenEl.value.trim();
 const nama = namaEl.value.trim();
 const kelas = kelasEl.value.trim();
 const err = document.getElementById('introErr');
 if(!absen || !nama || !kelas){
 err.style.display = 'block';
 return;
 }
 err.style.display = 'none';
 currentAbsen = absen;
 currentNama = nama;
 currentKelas = kelas;
 currentRecord = await loadRecord(absen);
 if(!currentRecord){
 currentRecord = {absen, nama, kelas, attempts: [], final: null};
 } else {
 currentRecord.nama = nama;
 currentRecord.kelas = kelas;
 }
 showStatusScreen();
});

document.getElementById('btnGanti').addEventListener('click', () =&gt; {
 document.getElementById('screen-status').classList.add('hidden');
 document.getElementById('screen-intro').classList.remove('hidden');
});

function showStatusScreen(){
 document.getElementById('screen-intro').classList.add('hidden');
 const statusScreen = document.getElementById('screen-status');
 statusScreen.classList.remove('hidden');
 document.getElementById('statusGreeting').textContent = 'Halo, ' + currentNama + ' (No. Absen ' + currentAbsen + ')';
 const body = document.getElementById('statusBody');
 const btnMulai = document.getElementById('btnMulai');
 const usedAttempts = currentRecord.attempts.length;
 const sisa = MAX_ATTEMPT - usedAttempts;

 const btnUnduhStatus = document.getElementById('btnUnduhStatus');
 if(currentRecord.final){
 const f = currentRecord.final;
 body.innerHTML =
 '&lt;p style="font-size:14px;"&gt;Nilai kamu sudah tersimpan sebagai nilai akhir.&lt;/p&gt;' +
 '&lt;div class="result-box ' + (f.score &gt;= KKM ? 'pass-bg' : 'fail-bg') + '" style="margin-top:10px;"&gt;' +
 '&lt;div style="font-size:13px;color:var(--ink-soft);"&gt;Nilai akhir tersimpan&lt;/div&gt;' +
 '&lt;div class="result-score ' + (f.score &gt;= KKM ? 'pass' : 'fail') + '"&gt;' + f.score + '&lt;/div&gt;' +
 '&lt;div style="font-size:13px;"&gt;' + (f.score &gt;= KKM ? 'Mencapai KKM (75)' : 'Nilai tertinggi dari 3 percobaan (belum mencapai KKM)') + '&lt;/div&gt;' +
 '&lt;div style="font-size:12px;color:var(--ink-soft);margin-top:6px;"&gt;Skor PG ' + f.pgScore + ' (bobot 70%) - Skor Esai ' + f.essayScorePct + ' (bobot 30%)&lt;/div&gt;' +
 '&lt;/div&gt;' +
 renderAttemptListHTML(currentRecord.attempts);
 btnMulai.classList.add('hidden');
 btnUnduhStatus.classList.remove('hidden');
 document.getElementById('instruksiStatus').classList.remove('hidden');
 } else if(sisa &lt;= 0){
 body.innerHTML = '&lt;p style="font-size:14px;"&gt;Kesempatanmu sudah habis. Sistem akan segera mencatat nilai tertinggimu.&lt;/p&gt;';
 btnMulai.classList.add('hidden');
 btnUnduhStatus.classList.add('hidden');
 document.getElementById('instruksiStatus').classList.add('hidden');
 } else {
 btnUnduhStatus.classList.add('hidden');
 document.getElementById('instruksiStatus').classList.add('hidden');
 body.innerHTML =
 '&lt;p style="font-size:14px;"&gt;Sisa kesempatan mengerjakan: &lt;b&gt;' + sisa + ' dari ' + MAX_ATTEMPT + '&lt;/b&gt;.&lt;/p&gt;' +
 (usedAttempts &gt; 0 ? renderAttemptListHTML(currentRecord.attempts) : '');
 btnMulai.classList.remove('hidden');
 btnMulai.textContent = usedAttempts === 0 ? 'Mulai Mengerjakan' : 'Coba Lagi (Percobaan ke-' + (usedAttempts+1) + ')';
 }
}

function renderAttemptListHTML(attempts){
 if(!attempts.length) return '';
 let html = '&lt;div class="attempt-log"&gt;&lt;b style="font-size:13px;"&gt;Riwayat percobaan:&lt;/b&gt;';
 attempts.forEach((a,i) =&gt; {
 html += '&lt;div&gt;&lt;span&gt;Percobaan ' + (i+1) + ' (PG ' + a.pgScore + ' - Esai ' + a.essayScorePct + ')&lt;/span&gt;&lt;span&gt;' + a.score + ' poin&lt;/span&gt;&lt;/div&gt;';
 });
 html += '&lt;/div&gt;';
 return html;
}

document.getElementById('btnMulai').addEventListener('click', startQuiz);

function startQuiz(){
 answers = {};
 essayAnswers = {};
 quizGroups = buildShuffledQuiz();
 document.getElementById('screen-status').classList.add('hidden');
 document.getElementById('screen-result').classList.add('hidden');
 document.getElementById('screen-quiz').classList.remove('hidden');
 renderQuiz();
 window.scrollTo({top:0, behavior:'smooth'});
}

function renderQuiz(){
 const body = document.getElementById('quizBody');
 let html = '';
 let counter = 0;
 quizGroups.forEach((g, gi) =&gt; {
 html += '&lt;div class="qgroup"&gt;&lt;div class="stimulus"&gt;&lt;div class="st-title"&gt;' + esc(g.title) + '&lt;/div&gt;' + esc(g.stimulus) + '&lt;/div&gt;';
 g.questions.forEach((q, qi) =&gt; {
 counter++;
 const qKey = gi + '-' + qi;
 html += '&lt;div class="q" data-qkey="' + qKey + '"&gt;';
 html += '&lt;div class="q-num"&gt;Soal ' + counter + '&lt;/div&gt;';
 html += '&lt;div class="q-text"&gt;' + esc(q.q) + '&lt;/div&gt;';
 q.opts.forEach((opt, oi) =&gt; {
 const letter = LETTERS[oi];
 html += '&lt;label class="opt" data-qkey="' + qKey + '" data-letter="' + letter + '"&gt;' +
 '&lt;input type="radio" name="q-' + qKey + '" value="' + letter + '"&gt;' +
 '&lt;span&gt;&lt;b&gt;' + letter + '.&lt;/b&gt; ' + esc(opt) + '&lt;/span&gt;&lt;/label&gt;';
 });
 html += '&lt;/div&gt;';
 });
 html += '&lt;/div&gt;';
 });

 html += '&lt;div class="sectionLabel"&gt;Bagian II - Esai (10 soal, dinilai otomatis berdasarkan kesesuaian konsep kunci jawabanmu - bobot Esai 30% dari nilai akhir - maksimal ' + ESSAY_MAXLEN + ' karakter per soal - jawaban wajib diketik sendiri, tempel/paste dinonaktifkan)&lt;/div&gt;';
 html += '&lt;div class="essaySection"&gt;';
 ESSAYS.forEach((item, ei) =&gt; {
 html += '&lt;div class="essayQ" data-ekey="' + ei + '"&gt;';
 html += '&lt;div class="essayQ-num"&gt;Esai ' + (ei+1) + '&lt;/div&gt;';
 html += '&lt;div class="essayQ-text"&gt;' + esc(item.q) + '&lt;/div&gt;';
 html += '&lt;textarea class="essayInput" data-ekey="' + ei + '" maxlength="' + ESSAY_MAXLEN + '" placeholder="Ketik jawabanmu di sini (tempel/paste tidak diperbolehkan)..."&gt;&lt;/textarea&gt;';
 html += '&lt;div class="charCount" data-ekey="' + ei + '"&gt;0 / ' + ESSAY_MAXLEN + '&lt;/div&gt;';
 html += '&lt;div class="pasteWarn" data-ekey="' + ei + '"&gt;Menempel (paste) tidak diperbolehkan. Silakan ketik sendiri jawabanmu.&lt;/div&gt;';
 html += '&lt;/div&gt;';
 });
 html += '&lt;/div&gt;';

 body.innerHTML = html;

 body.querySelectorAll('textarea.essayInput').forEach(ta =&gt; {
 ta.addEventListener('input', () =&gt; {
 const ekey = ta.getAttribute('data-ekey');
 essayAnswers[ekey] = ta.value;
 const counterEl = body.querySelector('.charCount[data-ekey="' + ekey + '"]');
 const len = ta.value.length;
 counterEl.textContent = len + ' / ' + ESSAY_MAXLEN;
 counterEl.classList.toggle('over', len &gt;= ESSAY_MAXLEN);
 updateProgress();
 });

 const showPasteWarn = () =&gt; {
 const ekey = ta.getAttribute('data-ekey');
 const warnEl = body.querySelector('.pasteWarn[data-ekey="' + ekey + '"]');
 if(!warnEl) return;
 warnEl.classList.add('show');
 clearTimeout(warnEl._hideTimer);
 warnEl._hideTimer = setTimeout(() =&gt; warnEl.classList.remove('show'), 3500);
 };

 ta.addEventListener('paste', (e) =&gt; { e.preventDefault(); showPasteWarn(); });
 ta.addEventListener('drop', (e) =&gt; { e.preventDefault(); showPasteWarn(); });
 ta.addEventListener('dragover', (e) =&gt; { e.preventDefault(); });
 ta.addEventListener('contextmenu', (e) =&gt; { e.preventDefault(); showPasteWarn(); });
 ta.addEventListener('keydown', (e) =&gt; {
 const key = (e.key || '').toLowerCase();
 const pasteCombo = (e.ctrlKey || e.metaKey) &amp;&amp; key === 'v';
 const shiftInsert = e.shiftKey &amp;&amp; key === 'insert';
 if(pasteCombo || shiftInsert){
 e.preventDefault();
 showPasteWarn();
 }
 });
 });

 body.querySelectorAll('.opt').forEach(optEl =&gt; {
 optEl.addEventListener('click', () =&gt; {
 const qKey = optEl.getAttribute('data-qkey');
 const letter = optEl.getAttribute('data-letter');
 answers[qKey] = letter;
 document.querySelectorAll('.opt[data-qkey="' + qKey + '"]').forEach(o =&gt; o.classList.remove('selected'));
 optEl.classList.add('selected');
 optEl.querySelector('input').checked = true;
 updateProgress();
 });
 });
 updateProgress();
}

function esc(s){
 const d = document.createElement('div');
 d.textContent = s;
 return d.innerHTML;
}

function totalPGQuestions(){
 return quizGroups.reduce((sum,g) =&gt; sum + g.questions.length, 0);
}

function totalQuestions(){
 return totalPGQuestions() + ESSAYS.length;
}

function essayAnsweredCount(){
 return ESSAYS.reduce((n,_,ei) =&gt; n + (essayAnswers[ei] &amp;&amp; essayAnswers[ei].trim() ? 1 : 0), 0);
}

function updateProgress(){
 const total = totalQuestions();
 const answered = Object.keys(answers).length + essayAnsweredCount();
 document.getElementById('progressFill').style.width = (answered/total*100) + '%';
 document.getElementById('progressText').textContent = answered + ' dari ' + total + ' soal terjawab (40 PG + 10 esai)';
}

document.getElementById('btnKirim').addEventListener('click', async () =&gt; {
 const total = totalQuestions();
 const answered = Object.keys(answers).length + essayAnsweredCount();
 const errEl = document.getElementById('quizErr');
 if(answered &lt; total){
 errEl.style.display = 'block';
 let target = null;
 const qEls = document.querySelectorAll('.q');
 for(let i=0;i&lt;qEls.length;i++){
 const qk = qEls[i].getAttribute('data-qkey');
 if(!answers[qk]){ target = qEls[i]; break; }
 }
 if(!target){
 const eEls = document.querySelectorAll('.essayQ');
 for(let i=0;i&lt;eEls.length;i++){
 const ek = eEls[i].getAttribute('data-ekey');
 if(!essayAnswers[ek] || !essayAnswers[ek].trim()){ target = eEls[i]; break; }
 }
 }
 if(target) target.scrollIntoView({behavior:'smooth', block:'center'});
 return;
 }
 errEl.style.display = 'none';

 let correctCount = 0;
 quizGroups.forEach((g, gi) =&gt; {
 g.questions.forEach((q, qi) =&gt; {
 const qKey = gi + '-' + qi;
 if(answers[qKey] === q.correctLetter) correctCount++;
 });
 });
 const pgScore = Math.round(correctCount * (100 / totalPGQuestions()));

 const essaySnapshot = ESSAYS.map((item, ei) =&gt; {
 const ans = (essayAnswers[ei] || '').trim();
 const result = scoreEssayAnswer(ans, item.concepts);
 return {q: item.q, a: ans, found: result.found, total: result.total, pct: result.pct};
 });
 const essayScorePct = Math.round(essaySnapshot.reduce((s,e) =&gt; s + e.pct, 0) / essaySnapshot.length);
 const score = Math.round(pgScore * PG_WEIGHT + essayScorePct * ESSAY_WEIGHT);

 currentRecord.attempts.push({score: score, pgScore: pgScore, essayScorePct: essayScorePct, essay: essaySnapshot, timestamp: new Date().toISOString()});
 const usedAttempts = currentRecord.attempts.length;

 if(score &gt;= KKM){
 currentRecord.final = {score: score, pgScore: pgScore, essayScorePct: essayScorePct, essay: essaySnapshot, source: 'kkm', attemptsUsed: usedAttempts, timestamp: new Date().toISOString()};
 } else if(usedAttempts &gt;= MAX_ATTEMPT){
 let best = currentRecord.attempts[0];
 currentRecord.attempts.forEach(a =&gt; { if(a.score &gt; best.score) best = a; });
 currentRecord.final = {score: best.score, pgScore: best.pgScore, essayScorePct: best.essayScorePct, essay: best.essay, source: 'tertinggi', attemptsUsed: usedAttempts, timestamp: new Date().toISOString()};
 }

 await saveRecord(currentAbsen, currentRecord);
 showResult(score, pgScore, essayScorePct);
});

function showResult(score, pgScore, essayScorePct){
 document.getElementById('screen-quiz').classList.add('hidden');
 const resultScreen = document.getElementById('screen-result');
 resultScreen.classList.remove('hidden');

 const passedNow = score &gt;= KKM;
 const outer = document.getElementById('resultBoxOuter');
 const usedAttempts = currentRecord.attempts.length;
 const sisa = MAX_ATTEMPT - usedAttempts;

 let statusLine;
 if(currentRecord.final &amp;&amp; currentRecord.final.source === 'kkm'){
 statusLine = 'Selamat! Nilai ini sudah mencapai KKM dan tersimpan sebagai nilai akhir.';
 } else if(currentRecord.final &amp;&amp; currentRecord.final.source === 'tertinggi'){
 statusLine = 'Kesempatan sudah habis. Nilai tertinggi dari 3 percobaanmu (' + currentRecord.final.score + ') tersimpan sebagai nilai akhir.';
 } else {
 statusLine = 'Nilai belum mencapai KKM (75). Sisa kesempatan: ' + sisa + '.';
 }

 outer.innerHTML =
 '&lt;div class="result-box ' + (passedNow ? 'pass-bg' : 'fail-bg') + '"&gt;' +
 '&lt;div style="font-size:13px;color:var(--ink-soft);"&gt;Nilai akhir percobaan ini&lt;/div&gt;' +
 '&lt;div class="result-score ' + (passedNow ? 'pass' : 'fail') + '"&gt;' + score + ' / 100&lt;/div&gt;' +
 '&lt;div style="font-size:12px;color:var(--ink-soft);margin-bottom:6px;"&gt;Skor PG ' + pgScore + ' (bobot 70%) + Skor Esai ' + essayScorePct + ' (bobot 30%)&lt;/div&gt;' +
 '&lt;div style="font-size:14px;"&gt;' + statusLine + '&lt;/div&gt;' +
 '&lt;/div&gt;';

 document.getElementById('attemptLog').innerHTML = renderAttemptListHTML(currentRecord.attempts);

 const btnCoba = document.getElementById('btnCobaLagi');
 const btnUnduhHasil = document.getElementById('btnUnduhHasil');
 if(!currentRecord.final &amp;&amp; sisa &gt; 0){
 btnCoba.classList.remove('hidden');
 } else {
 btnCoba.classList.add('hidden');
 }
 if(currentRecord.final){
 btnUnduhHasil.classList.remove('hidden');
 document.getElementById('instruksiHasil').classList.remove('hidden');
 } else {
 btnUnduhHasil.classList.add('hidden');
 document.getElementById('instruksiHasil').classList.add('hidden');
 }
 window.scrollTo({top:0, behavior:'smooth'});
}

document.getElementById('btnCobaLagi').addEventListener('click', startQuiz);

document.getElementById('btnSelesai').addEventListener('click', () =&gt; {
 document.getElementById('screen-result').classList.add('hidden');
 document.getElementById('screen-intro').classList.remove('hidden');
 document.getElementById('absen').value = '';
 document.getElementById('nama').value = '';
 document.getElementById('kelas').value = '';
});

function generatePrintArea(){
 const f = currentRecord.final;
 if(!f) return;
 const tgl = new Date(f.timestamp || Date.now()).toLocaleDateString('id-ID', {day:'numeric', month:'long', year:'numeric'});
 const statusTxt = f.score &gt;= KKM
 ? 'Mencapai KKM (75) pada percobaan ke-' + f.attemptsUsed
 : 'Nilai tertinggi dari 3 kali percobaan (belum mencapai KKM 75)';

 let html = '';
 html += '&lt;div class="pf-kop noBreak"&gt;';
 html += '&lt;h2&gt;Bukti Mengerjakan Ulangan Harian 1 - Petunjuk Kerja&lt;/h2&gt;';
 html += '&lt;p&gt;Mata Pelajaran Bahasa Indonesia - Kelas XI SMK - 40 Soal Pilihan Ganda + 10 Soal Esai - KKM 75&lt;/p&gt;';
 html += '&lt;/div&gt;';

 html += '&lt;table class="pf-identitas noBreak"&gt;';
 html += '&lt;tr&gt;&lt;td class="lbl"&gt;Nama Lengkap&lt;/td&gt;&lt;td&gt;: ' + esc(currentRecord.nama || '') + '&lt;/td&gt;' +
 '&lt;td class="lbl"&gt;No. Absen&lt;/td&gt;&lt;td&gt;: ' + esc(currentRecord.absen || '') + '&lt;/td&gt;&lt;/tr&gt;';
 html += '&lt;tr&gt;&lt;td class="lbl"&gt;Kelas&lt;/td&gt;&lt;td&gt;: ' + esc(currentRecord.kelas || '') + '&lt;/td&gt;' +
 '&lt;td class="lbl"&gt;Tanggal&lt;/td&gt;&lt;td&gt;: ' + tgl + '&lt;/td&gt;&lt;/tr&gt;';
 html += '&lt;/table&gt;';

 html += '&lt;div class="pf-skorbox noBreak"&gt;';
 html += '&lt;div class="pf-skoritem"&gt;Skor Pilihan Ganda (70%)&lt;b&gt;' + f.pgScore + ' / 100&lt;/b&gt;&lt;/div&gt;';
 html += '&lt;div class="pf-skoritem"&gt;Skor Esai Otomatis (30%)&lt;b&gt;' + f.essayScorePct + ' / 100&lt;/b&gt;&lt;/div&gt;';
 html += '&lt;div class="pf-skoritem"&gt;Nilai Akhir&lt;b&gt;' + f.score + ' / 100&lt;/b&gt;&lt;/div&gt;';
 html += '&lt;div class="pf-skoritem"&gt;Status&lt;b style="font-size:13px;"&gt;' + statusTxt + '&lt;/b&gt;&lt;/div&gt;';
 html += '&lt;/div&gt;';

 html += '&lt;div class="pf-kop noBreak" style="border-top:1px solid #000;border-bottom:none;padding-top:8px;margin-top:6px;"&gt;&lt;h2 style="font-size:14px;"&gt;Jawaban Esai (skor otomatis berdasarkan cakupan konsep kunci)&lt;/h2&gt;&lt;/div&gt;';

 f.essay.forEach((item, i) =&gt; {
 const breakClass = (i === 4 || i === 8) ? ' pbreak' : '';
 html += '&lt;div class="noBreak' + breakClass + '" style="margin-bottom:10px;"&gt;';
 html += '&lt;div class="pf-essay-q"&gt;' + (i+1) + '. ' + esc(item.q) + ' &lt;span style="font-weight:400;color:#555;"&gt;(cakupan konsep: ' + item.found + '/' + item.total + ' - skor ' + item.pct + ')&lt;/span&gt;&lt;/div&gt;';
 html += '&lt;div class="pf-essay-a"&gt;' + esc(item.a || '(tidak dijawab)') + '&lt;/div&gt;';
 html += '&lt;/div&gt;';
 });

 html += '&lt;div class="pf-ttd noBreak"&gt;';
 html += '&lt;div&gt;Peserta Didik&lt;div class="garis"&gt;' + esc(currentRecord.nama || '') + '&lt;/div&gt;&lt;/div&gt;';
 html += '&lt;div&gt;Guru Mata Pelajaran&lt;div class="garis"&gt;.............................&lt;/div&gt;&lt;/div&gt;';
 html += '&lt;/div&gt;';
 html += '&lt;p class="pf-note"&gt;&lt;b&gt;Dokumen ini wajib dicetak dan diserahkan kepada guru mata pelajaran Bahasa Indonesia&lt;/b&gt; sebagai bukti fisik pengerjaan ulangan. Nilai akhir = (Skor Pilihan Ganda x 70%) + (Skor Esai Otomatis x 30%). Skor esai dihitung berdasarkan cakupan konsep kunci pada jawaban, sehingga guru tetap disarankan meninjau ulang jawaban esai untuk memastikan kualitas dan kejujuran akademik.&lt;/p&gt;';

 document.getElementById('printArea').innerHTML = html;
}

function downloadProof(){
 if(!currentRecord.final){
 alert('Bukti PDF hanya tersedia setelah nilai akhir tersimpan (mencapai KKM atau kesempatan sudah habis).');
 return;
 }
 generatePrintArea();
 setTimeout(() =&gt; window.print(), 100);
}

document.getElementById('btnUnduhStatus').addEventListener('click', downloadProof);
document.getElementById('btnUnduhHasil').addEventListener('click', downloadProof);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/ulangan-harian-1-petunjuk-kerja.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-5290013737713810938</guid><pubDate>Fri, 04 Sep 2026 01:41:45 +0000</pubDate><atom:updated>2026-09-04T08:46:30.437+07:00</atom:updated><title>Latihan Soal Tipe AKM: Pokok Bahasan Petunjuk Kerja</title><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&amp;family=Source+Sans+3:wght@400;500;600;700&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;display=swap');
.epb{
  --blueprint:#0F2A3D;
  --blueprint-deep:#0A1E2C;
  --panel:#4A2E12;
  --paper:#F3F0E6;
  --ink:#132029;
  --amber:#F5A623;
  --amber-deep:#C97F12;
  --mint:#6EC6CA;
  --line:rgba(234,242,245,0.16);
  --off-white:#EAF2F5;
  --muted:#9FB4C2;
}
.epb *{box-sizing:border-box;}
.epb{scroll-behavior:smooth; background:#0A1F2E;}
.epb{
  margin:0;
  position:relative;
  overflow:hidden;
  background:var(--blueprint);
  color:var(--off-white);
  font-family:'Source Sans 3',sans-serif;
  line-height:1.65;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 34px 34px;
}
.epb h1, .epb h2, .epb h3, .epb h4{font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.02em; margin:0 0 0.5em;}
.epb .mono{font-family:'IBM Plex Mono',monospace;}
.epb a{color:var(--amber);}
.epb .crop{position:absolute; width:22px; height:22px; z-index:5; opacity:.55; pointer-events:none;}
.epb .crop::before, .epb .crop::after{content:"";position:absolute;background:var(--mint);}
.epb .crop::before{width:100%;height:1px;top:50%;left:0;}
.epb .crop::after{width:1px;height:100%;left:50%;top:0;}
.epb .crop.tl{top:14px;left:14px;}
.epb .crop.tr{top:14px;right:14px;}
.epb .crop.bl{bottom:14px;left:14px;}
.epb .crop.br{bottom:14px;right:14px;}
.epb header.cover{
  position:relative;
  padding:40px 24px 36px;
  border-bottom:1px solid var(--line);
  overflow:hidden;
}
.epb .doc-code{font-family:'IBM Plex Mono',monospace; color:var(--amber); letter-spacing:0.15em; font-size:0.78rem; text-transform:uppercase; margin-bottom:18px; display:flex; gap:10px; align-items:center;}
.epb .doc-code::before{content:"◆"; color:var(--amber);}
.epb .cover h1{font-size:clamp(1.6rem,7vw,2.5rem); color:var(--off-white); max-width:16ch; line-height:1.05;}
.epb .cover .subtitle{color:var(--muted); font-size:1.05rem; max-width:60ch; margin-top:14px;}
.epb .meta-strip{
  margin-top:38px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border-top:1px dashed var(--line); border-bottom:1px dashed var(--line);
}
.epb .meta-strip div{padding:14px 16px; border-right:1px dashed var(--line);}
.epb .meta-strip div:last-child{border-right:none;}
.epb .meta-strip .k{font-family:'IBM Plex Mono',monospace; font-size:0.68rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.1em;}
.epb .meta-strip .v{font-size:0.98rem; color:var(--off-white); margin-top:4px; font-weight:600;}
.epb .stamp{
  position:absolute; top:40px; right:20px; width:104px; height:104px;
  border:2.5px solid var(--amber); border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  transform:rotate(-11deg);
  color:var(--amber); font-family:'IBM Plex Mono',monospace;
  text-align:center; font-size:0.62rem; letter-spacing:0.08em; text-transform:uppercase;
  opacity:0.9;
}
.epb .stamp .ring{position:absolute; inset:8px; border:1px dashed var(--amber); border-radius:50%;}
.epb .stamp b{display:block; font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:0.06em; margin-top:4px;}

@media (max-width:760px){.epb .stamp{display:none;}
.epb }


.epb main{max-width:920px; margin:0 auto; padding:0 20px 60px;}
.epb .section{padding-top:64px;}
.epb .eyebrow{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase; margin-bottom:10px; display:flex; align-items:center; gap:10px;}
.epb .eyebrow::after{content:""; flex:1; height:1px; background:var(--line);}
.epb h2.section-title{font-size:1.7rem; color:var(--off-white);}
.epb p{color:#DDE7EC;}
.epb .lead{color:var(--muted); font-size:1.02rem; max-width:72ch;}
.epb .panel{
  background:var(--panel); border:1px solid var(--line); border-radius:2px;
  padding:26px 28px; margin:22px 0;
}
.epb .panel.tp{border-left:4px solid var(--mint);}
.epb .panel.warn{border-left:4px solid var(--amber);}
.epb .tp-box{display:grid; gap:14px; margin-top:18px;}
.epb .tp-item{display:flex; gap:14px; align-items:flex-start;}
.epb .tp-item .idx{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; min-width:34px;}
.epb .flow{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:20px;}
.epb .flow .step{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px; position:relative;}
.epb .flow .step .tag{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;}
.epb .flow .step h4{font-size:1rem; margin-top:8px; color:var(--off-white);}
.epb .flow .step .time{position:absolute; top:16px; right:16px; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; color:var(--amber);}
.epb .grid-3{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-top:16px;}
.epb .card{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px;}
.epb .card h4{color:var(--amber); font-size:0.95rem;}
.epb .criteria{display:grid; gap:16px; margin-top:20px;}
.epb .crit{
  background:var(--blueprint-deep); border:1px solid var(--line);
  display:grid; grid-template-columns:64px 1fr; gap:0;
}
.epb .crit .num{
  background:var(--amber); color:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace;
  font-weight:700; display:flex; align-items:center; justify-content:center; font-size:1.05rem;
}
.epb .crit .body{padding:18px 20px;}
.epb .crit h4{color:var(--off-white); font-size:1.02rem; margin-bottom:6px;}
.epb .crit .q{margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); font-family:'IBM Plex Mono',monospace; font-size:0.86rem; color:var(--amber);}
.epb .timeline{margin-top:24px; position:relative; padding-left:34px;}
.epb .timeline::before{content:""; position:absolute; left:11px; top:6px; bottom:6px; width:2px; background:var(--line);}
.epb .tl-item{position:relative; padding-bottom:26px;}
.epb .tl-item:last-child{padding-bottom:0;}
.epb .tl-item::before{content:""; position:absolute; left:-34px; top:2px; width:22px; height:22px; border-radius:50%; background:var(--blueprint); border:2px solid var(--amber);}
.epb .tl-item h4{color:var(--off-white); font-size:1rem; margin-bottom:4px;}
.epb .doc-sample{
  background:var(--paper); color:var(--ink); border-radius:2px; padding:0; margin-top:22px;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .doc-sample .doc-head{background:var(--ink); color:var(--paper); padding:12px 22px; font-family:'IBM Plex Mono',monospace; font-size:0.75rem; letter-spacing:0.1em; text-transform:uppercase; display:flex; justify-content:space-between;}
.epb .doc-sample .doc-body{padding:26px 28px 30px;}
.epb .doc-sample h3{font-family:'Oswald',sans-serif; color:var(--ink); font-size:1.25rem; text-transform:none; letter-spacing:0;}
.epb .doc-sample ol{padding-left:22px;}
.epb .doc-sample li{margin-bottom:9px;}
.epb .flag{
  display:inline-block; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; font-weight:600;
  background:#D94E2A; color:#fff; padding:1px 7px; border-radius:2px; margin-left:6px; vertical-align:middle;
}
.epb .doc-sample .note-margin{margin-top:6px; font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:#8A3A1F; padding-left:8px; border-left:2px solid #D94E2A;}
.epb .legend{display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:16px;}
.epb .legend span{font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:var(--muted); display:flex; align-items:center; gap:8px;}
.epb .legend .dot{width:10px; height:10px; border-radius:50%; display:inline-block;}
.epb table{width:100%; border-collapse:collapse; margin-top:18px; font-size:0.94rem;}
.epb th, .epb td{border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top;}
.epb th{background:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace; font-size:0.75rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--amber);}
.epb .summary-box{
  border:1px solid var(--amber); background:linear-gradient(180deg, rgba(245,166,35,0.08), transparent);
  padding:24px 26px; margin-top:24px;
}
.epb .summary-box ul{margin:10px 0 0; padding-left:20px;}
.epb .summary-box li{margin-bottom:8px;}
.epb .task-header{
  background:var(--amber); color:var(--blueprint-deep); padding:22px 26px; margin-top:20px;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
}
.epb .task-header h2{color:var(--blueprint-deep); font-size:1.4rem; margin:0;}
.epb .task-header .badge{font-family:'IBM Plex Mono',monospace; font-size:0.8rem; background:var(--blueprint-deep); color:var(--amber); padding:6px 12px; border-radius:2px;}
.epb .steps-num{counter-reset:step; margin-top:18px; list-style:none; padding:0;}
.epb .steps-num li{counter-increment:step; position:relative; padding-left:44px; margin-bottom:16px;}
.epb .steps-num li::before{content:counter(step,decimal-leading-zero); position:absolute; left:0; top:0; font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; font-size:0.95rem; border:1px solid var(--amber); width:30px; height:26px; display:flex; align-items:center; justify-content:center;}
.epb .rubric-scale{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px;}
.epb .rubric-scale div{background:var(--blueprint-deep); border:1px solid var(--line); padding:12px; text-align:center;}
.epb .rubric-scale .n{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:1.3rem; font-weight:700;}
.epb .rubric-scale .l{font-size:0.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:0.05em;}
.epb .notebook{
  background:repeating-linear-gradient(var(--paper), var(--paper) 33px, #D8D3C2 34px);
  color:var(--ink); border-radius:2px; padding:28px 30px; margin-top:20px; position:relative;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .notebook::before{content:""; position:absolute; left:46px; top:0; bottom:0; width:1.5px; background:#C0453A; opacity:0.5;}
.epb .notebook .content{padding-left:24px;}
.epb .notebook h3{color:var(--ink); font-family:'Oswald',sans-serif; letter-spacing:0.02em; margin-bottom:10px;}
.epb .notebook ul{padding-left:20px;}
.epb footer{border-top:1px solid var(--line); padding:24px 20px 40px; color:var(--muted); font-size:0.86rem;}
.epb footer .doc-code{margin-bottom:10px;}
.epb .divider-dash{border:none; border-top:1px dashed var(--line); margin:44px 0 0;}
.epb::selection{background:var(--amber); color:var(--blueprint-deep);}

&lt;/style&gt;
&lt;div class="epb"&gt;
&lt;div class="crop tl"&gt;&lt;/div&gt;&lt;div class="crop tr"&gt;&lt;/div&gt;&lt;div class="crop bl"&gt;&lt;/div&gt;&lt;div class="crop br"&gt;&lt;/div&gt;

&lt;header class="cover"&gt;
  &lt;div class="stamp"&gt;&lt;div class="ring"&gt;&lt;/div&gt;&lt;span&gt;Latihan Soal&lt;b&gt;Tipe AKM&lt;/b&gt;Fase F&lt;/span&gt;&lt;/div&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-AKM — Latihan Soal · 50 Butir&lt;/div&gt;
  &lt;h1&gt;Latihan Soal Tipe AKM: Pokok Bahasan Petunjuk Kerja&lt;/h1&gt;
  &lt;p class="subtitle"&gt;Latihan soal literasi membaca bertipe Asesmen Kompetensi Minimum (AKM) untuk Bahasa Indonesia Kelas XI SMK/MAK, mencakup seluruh materi pokok bahasan Petunjuk Kerja: evaluasi informasi, perbandingan teks, kaidah kebahasaan, serta penyusunan dan penyajian teks prosedur.&lt;/p&gt;

  &lt;div class="meta-strip"&gt;
    &lt;div&gt;&lt;div class="k"&gt;Mata Pelajaran&lt;/div&gt;&lt;div class="v"&gt;Bahasa Indonesia&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK/MAK — Kelas XI&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jumlah Soal&lt;/div&gt;&lt;div class="v"&gt;50 Butir · 5 Opsi&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;KKM&lt;/div&gt;&lt;div class="v"&gt;75 · 3 Kali Kesempatan&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;section class="section" id="petunjuk"&gt;
    &lt;div class="eyebrow"&gt;01 — Petunjuk Pengerjaan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Sebelum Mengerjakan, Baca Dahulu&lt;/h2&gt;

    &lt;div class="panel tp"&gt;
      &lt;p style="margin:0;"&gt;Soal berikut disusun mengikuti pola &lt;b style="color:var(--off-white);"&gt;Asesmen Kompetensi Minimum (AKM)&lt;/b&gt;: setiap kelompok soal diawali sebuah &lt;b style="color:var(--off-white);"&gt;teks stimulus&lt;/b&gt; (teks prosedur atau teks eksplanasi), lalu diikuti beberapa pertanyaan yang menguji kemampuan &lt;b style="color:var(--off-white);"&gt;menemukan informasi, menginterpretasi, membandingkan, dan mengevaluasi&lt;/b&gt; isi teks tersebut — bukan sekadar menghafal definisi.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;50 Soal &amp;amp; 5 Opsi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;20 soal mudah, 21 soal sedang, 9 soal sulit — pilihan jawaban A sampai E.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;KKM = 75&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Skor dihitung otomatis dari 50 soal (setiap soal bernilai 2 poin, maksimal 100).&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;3 Kali Kesempatan&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Jika belum mencapai KKM, kamu dapat mencoba lagi hingga maksimal 3 kali percobaan.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="panel warn" style="margin-top:20px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Aturan pengiriman nilai:&lt;/b&gt; Begitu skor kamu mencapai atau melebihi KKM (75), nilai tersebut langsung dikirim dan tercatat. Jika hingga percobaan ke-3 belum ada yang mencapai KKM, sistem akan otomatis mengirim &lt;b style="color:var(--off-white);"&gt;nilai tertinggi&lt;/b&gt; dari ketiga percobaanmu. Isi No. Absen dengan angka yang sama di setiap percobaan agar sistem dapat menghitung kesempatanmu dengan benar.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ PETUNJUK MENGERJAKAN ============ --&gt;
  &lt;section class="section" id="cara-mengerjakan"&gt;
    &lt;div class="eyebrow"&gt;02 — Langkah Pengerjaan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Cara Mengerjakan Latihan Ini&lt;/h2&gt;

    &lt;ol class="steps-num"&gt;
      &lt;li&gt;&lt;b&gt;Isi No. Absen dan Nama Lengkap&lt;/b&gt; pada kolom yang tersedia sebelum mulai menjawab. Gunakan No. Absen yang sama setiap kali mencoba, karena sistem memakainya untuk menghitung sisa kesempatan.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Baca teks stimulus&lt;/b&gt; (teks prosedur atau teks eksplanasi) yang muncul sebelum setiap kelompok soal dengan saksama, sebelum menjawab pertanyaan di bawahnya.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Jawab seluruh 50 soal&lt;/b&gt; dengan memilih salah satu opsi A–E. Perhatikan label tingkat kesulitan (Mudah/Sedang/Sulit) pada tiap soal sebagai gambaran bobotnya.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Tekan tombol "Kirim Jawaban"&lt;/b&gt; setelah semua soal terjawab. Jika masih ada yang kosong, sistem akan menunjukkan nomor yang belum dijawab.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Lihat skor yang muncul.&lt;/b&gt; Jika skor sudah mencapai KKM (75), nilai otomatis terkirim dan latihan selesai.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Jika skor belum mencapai KKM&lt;/b&gt;, tekan tombol "Coba Lagi" untuk mengulang (maksimal 3 kali percobaan). Jawaban akan direset, tetapi teks stimulus dan soal tetap sama.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Setelah selesai&lt;/b&gt; (baik karena sudah mencapai KKM maupun kesempatan sudah habis), tunjukkan skor yang tertera di layar kepada guru sebagai bukti pengerjaan.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;section class="section" id="kuis"&gt;
    &lt;div class="eyebrow"&gt;03 — Lembar Soal&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kerjakan 50 Soal Berikut&lt;/h2&gt;

    &lt;div class="panel" id="epbq-form-wrap" style="margin-top:20px;"&gt;
      &lt;div style="display:grid; grid-template-columns:1fr 2fr; gap:14px; margin-bottom:10px;"&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;No. Absen&lt;/label&gt;
          &lt;input id="epbq-absen" type="text" inputmode="numeric" placeholder="Contoh: 12" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;Nama Lengkap&lt;/label&gt;
          &lt;input id="epbq-nama" type="text" placeholder="Tulis nama lengkap" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;p id="epbq-attempt-info" class="mono" style="font-size:0.8rem; color:var(--muted); margin:4px 0 18px;"&gt;Masukkan No. Absen untuk melihat sisa kesempatan.&lt;/p&gt;

      &lt;div id="epbq-questions"&gt;&lt;/div&gt;

      &lt;div style="margin-top:24px; display:flex; align-items:center; gap:16px; flex-wrap:wrap;"&gt;
        &lt;button id="epbq-submit" type="button" style="background:var(--amber); color:var(--blueprint-deep); border:none; padding:12px 26px; font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.05em; font-weight:600; border-radius:2px; cursor:pointer; font-size:0.95rem;"&gt;Kirim Jawaban&lt;/button&gt;
        &lt;button id="epbq-retry" type="button" style="display:none; background:transparent; color:var(--amber); border:1px solid var(--amber); padding:12px 26px; font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.05em; font-weight:600; border-radius:2px; cursor:pointer; font-size:0.95rem;"&gt;Coba Lagi&lt;/button&gt;
        &lt;span id="epbq-status" class="mono" style="font-size:0.85rem; color:var(--muted);"&gt;&lt;/span&gt;
      &lt;/div&gt;

      &lt;div id="epbq-result" style="display:none; margin-top:20px; padding:18px 20px; border:1px solid var(--amber); background:rgba(245,166,35,0.08);"&gt;
        &lt;p style="margin:0; font-size:1.05rem;"&gt;Skor percobaan ini: &lt;b id="epbq-score" style="color:var(--amber); font-size:1.3rem;"&gt;&lt;/b&gt; / 100&lt;/p&gt;
        &lt;p id="epbq-detail" style="margin:8px 0 0; font-size:0.9rem; color:var(--muted);"&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-AKM — Latihan Soal Tipe AKM, 50 Butir, Pokok Bahasan Petunjuk Kerja&lt;/div&gt;
  &lt;p style="margin:0;"&gt;Referensi: Kurikulum Merdeka — Capaian Pembelajaran Bahasa Indonesia Fase F; Pusat Asesmen dan Pembelajaran Kemendikbudristek — format Asesmen Kompetensi Minimum (AKM) Literasi Membaca.&lt;/p&gt;
&lt;/footer&gt;

&lt;script&gt;
(function(){
  var EPBQ_ENDPOINT = "https://script.google.com/macros/s/AKfycbzM7t2qgAENzxQJXzSYJYL28R6nb3TxJVELLL3CopyEXb51t_gRtrkPOxTpI5mq6VCEKw/exec";
  var EPBQ_MATERI = "Latihan Soal AKM - Pokok Bahasan Petunjuk Kerja (50 Soal)";
  var KKM = 75;
  var MAX_ATTEMPTS = 3;

  var stimuli = [{"id": "A", "judul": "Cara Membuat Teh Hangat", "jenis": "Teks Prosedur", "teks": "Teh hangat adalah minuman yang mudah dibuat dan cocok dinikmati kapan saja. Berikut langkah membuatnya. Pertama, siapkan gelas dan satu kantong teh. Kedua, panaskan air hingga mendidih. Ketiga, masukkan kantong teh ke dalam gelas, lalu tuangkan air panas ke dalamnya. Setelah itu, tambahkan gula sesuai selera. Aduk hingga rata, dan teh hangat siap dinikmati."}, {"id": "B", "judul": "Prosedur Mengganti Baterai Remote TV", "jenis": "Teks Prosedur", "teks": "Remote TV yang tidak merespons biasanya disebabkan baterai yang sudah lemah. Berikut cara menggantinya. Buka penutup baterai di bagian belakang remote dengan menggeser atau menekannya sesuai petunjuk. Keluarkan baterai lama, lalu perhatikan tanda kutub positif (+) dan negatif (–) pada dudukan baterai. Pasang baterai baru sesuai posisi kutub tersebut. Tutup kembali penutup baterai hingga rapat, lalu coba tekan salah satu tombol untuk memastikan remote berfungsi."}, {"id": "C", "judul": "Proses Terjadinya Karat pada Besi", "jenis": "Teks Eksplanasi", "teks": "Karat adalah lapisan berwarna cokelat kemerahan yang muncul pada permukaan besi. Karat terjadi karena besi bereaksi dengan oksigen dan air melalui proses yang disebut oksidasi. Ketika permukaan besi terkena udara lembap dalam waktu lama, oksigen akan berikatan dengan atom besi membentuk senyawa besi oksida. Semakin lama besi terpapar kelembapan, semakin tebal lapisan karat yang terbentuk. Oleh karena itu, besi yang disimpan di tempat lembap akan lebih cepat berkarat dibandingkan besi yang disimpan di tempat kering."}, {"id": "D", "judul": "Prosedur Menyalakan Genset Portabel", "jenis": "Teks Prosedur", "teks": "Genset portabel berguna sebagai sumber listrik cadangan saat listrik padam. Berikut langkah menyalakannya. Pertama, letakkan genset di ruangan tertutup agar terhindar dari hujan. Kedua, periksa jumlah bahan bakar pada tangki genset. Ketiga, tekan tombol starter hingga mesin menyala. Keempat, tunggu beberapa menit sebelum menyambungkan kabel listrik ke genset. Genset kini siap digunakan untuk menyalakan peralatan listrik di rumah."}, {"id": "E", "judul": "Prosedur Membersihkan Filter AC Rumah secara Mandiri", "jenis": "Teks Prosedur", "teks": "Filter AC yang kotor dapat menurunkan kualitas udara dan kinerja pendinginan. Berikut cara membersihkannya. Matikan AC dan cabut sumber listriknya terlebih dahulu. Buka penutup unit indoor AC, lalu lepaskan filter udara secara perlahan. Cuci filter menggunakan air mengalir hingga debu dan kotoran luruh. Keringkan filter di tempat teduh, jangan di bawah sinar matahari langsung agar filter tidak melengkung. Pasang kembali filter setelah benar-benar kering, lalu nyalakan kembali AC seperti biasa."}, {"id": "F", "judul": "Proses Terjadinya Embun di Pagi Hari", "jenis": "Teks Eksplanasi", "teks": "Embun adalah titik-titik air yang muncul pada permukaan benda di pagi hari. Embun terbentuk karena udara di malam hari mengandung uap air yang mendingin seiring turunnya suhu. Ketika suhu udara turun hingga mencapai titik embun, uap air akan mengembun menjadi butiran air kecil pada permukaan benda seperti daun atau rumput. Proses ini biasanya terjadi pada malam hari yang cerah tanpa awan, karena panas bumi lebih cepat terlepas ke atmosfer. Dengan demikian, embun paling sering muncul pada pagi hari yang dingin dan cerah."}, {"id": "G", "judul": "Prosedur Mendaftar Akun Email Baru", "jenis": "Teks Prosedur", "teks": "Memiliki akun email sangat penting untuk berbagai keperluan digital. Berikut langkah mendaftarnya. Buka situs penyedia layanan email, lalu pilih menu 'Buat Akun Baru'. Isi formulir pendaftaran dengan nama lengkap, tanggal lahir, dan nomor telepon aktif. Selanjutnya, buatlah kata sandi yang kuat dengan kombinasi huruf, angka, dan simbol. Perlu diperhatikan, jangan gunakan kata sandi yang sama dengan akun media sosial lain agar lebih aman. Setelah semua data terisi, klik tombol 'Daftar' dan verifikasi akun melalui kode yang dikirim ke nomor telepon."}, {"id": "H", "judul": "Memilah Sampah Rumah Tangga (Sepasang Teks)", "jenis": "Teks Prosedur &amp; Teks Eksplanasi", "teks": "&lt;b&gt;Teks 1 — Prosedur Memilah Sampah Rumah Tangga:&lt;/b&gt; Memilah sampah bertujuan memudahkan proses daur ulang. Sediakan tiga wadah berbeda untuk sampah organik, anorganik, dan B3 (bahan berbahaya beracun). Pisahkan sisa makanan dan daun ke wadah organik. Masukkan plastik, kertas, dan logam ke wadah anorganik. Simpan baterai bekas dan lampu pecah pada wadah B3 secara terpisah. Buang sampah organik setiap hari, sedangkan sampah anorganik dapat dikumpulkan hingga penuh sebelum dibawa ke bank sampah.&lt;br&gt;&lt;br&gt;&lt;b&gt;Teks 2 — Proses Terjadinya Pencemaran akibat Sampah yang Tidak Dipilah:&lt;/b&gt; Sampah yang tidak dipilah akan bercampur antara bahan organik dan anorganik, sehingga proses penguraiannya menjadi lebih lambat. Sampah anorganik seperti plastik membutuhkan waktu ratusan tahun untuk terurai, sehingga menumpuk di tempat pembuangan akhir. Akibatnya, lahan yang tersedia untuk menampung sampah semakin berkurang. Selain itu, zat kimia dari sampah B3 yang tercampur dapat meresap ke dalam tanah dan mencemari sumber air di sekitarnya. Oleh karena itu, pemilahan sampah sejak dari rumah tangga menjadi langkah penting untuk mengurangi dampak pencemaran lingkungan."}];
  var questions = [{"stim": "A", "lvl": "Mudah", "q": "Apa tujuan utama teks prosedur tersebut?", "opts": ["Menjelaskan sejarah teh", "Membuat teh hangat siap diminum", "Membandingkan jenis teh", "Menceritakan pengalaman minum teh", "Menjual produk teh"], "correct": 1}, {"stim": "A", "lvl": "Mudah", "q": "Alat/bahan pertama yang disiapkan dalam teks adalah...", "opts": ["Gula dan sendok", "Air dan panci", "Gelas dan kantong teh", "Termos dan cangkir", "Susu dan kopi"], "correct": 2}, {"stim": "A", "lvl": "Mudah", "q": "Kata “setelah itu” pada teks berfungsi sebagai...", "opts": ["Konjungsi kausalitas", "Konjungsi temporal", "Konjungsi pertentangan", "Konjungsi pilihan", "Konjungsi penjumlahan"], "correct": 1}, {"stim": "A", "lvl": "Mudah", "q": "Kalimat “Aduk hingga rata” termasuk kalimat...", "opts": ["Deklaratif", "Interogatif", "Imperatif", "Persuasif", "Naratif"], "correct": 2}, {"stim": "B", "lvl": "Mudah", "q": "Menurut teks, apa penyebab remote TV tidak merespons?", "opts": ["Remote rusak permanen", "Baterai yang sudah lemah", "TV mati total", "Sinyal remote terganggu", "Remote basah"], "correct": 1}, {"stim": "B", "lvl": "Mudah", "q": "Hal yang harus diperhatikan saat memasang baterai baru adalah...", "opts": ["Warna baterai", "Ukuran remote", "Posisi kutub positif dan negatif", "Merek baterai", "Suhu ruangan"], "correct": 2}, {"stim": "B", "lvl": "Sedang", "q": "Langkah terakhir dalam prosedur tersebut adalah...", "opts": ["Membuka penutup baterai", "Mengeluarkan baterai lama", "Menutup penutup baterai", "Menekan tombol untuk memastikan remote berfungsi", "Membeli baterai baru"], "correct": 3}, {"stim": "B", "lvl": "Sedang", "q": "Mengapa penting memperhatikan tanda kutub baterai saat memasang?", "opts": ["Agar baterai terlihat rapi", "Agar remote berfungsi dengan benar", "Agar baterai lebih awet warnanya", "Karena aturan pabrik semata", "Tidak ada alasan khusus"], "correct": 1}, {"stim": "C", "lvl": "Mudah", "q": "Apa penyebab utama terjadinya karat pada besi menurut teks?", "opts": ["Suhu udara yang panas", "Reaksi besi dengan oksigen dan air", "Sinar matahari langsung", "Getaran mekanis", "Perubahan warna alami"], "correct": 1}, {"stim": "C", "lvl": "Sedang", "q": "Teks tersebut termasuk jenis teks eksplanasi karena...", "opts": ["Berisi langkah-langkah tindakan", "Menjelaskan proses terjadinya suatu fenomena", "Berisi cerita fiksi", "Berisi opini penulis", "Berisi iklan produk"], "correct": 1}, {"stim": "C", "lvl": "Sedang", "q": "Konjungsi “oleh karena itu” pada akhir teks berfungsi sebagai penanda...", "opts": ["Urutan", "Penambahan", "Penekanan", "Simpulan", "Pertentangan"], "correct": 3}, {"stim": "C", "lvl": "Mudah", "q": "Berdasarkan teks, besi akan lebih cepat berkarat jika disimpan di tempat...", "opts": ["Kering", "Lembap", "Dingin", "Bersuhu tinggi", "Tertutup rapat"], "correct": 1}, {"stim": "C", "lvl": "Sedang", "q": "Perbedaan mendasar teks ini dengan teks prosedur adalah...", "opts": ["Teks ini lebih pendek", "Teks ini bertujuan membuat pembaca memahami, bukan melakukan tindakan", "Teks ini tidak memiliki struktur", "Teks ini tidak menggunakan konjungsi", "Teks ini tidak informatif"], "correct": 1}, {"stim": "C", "lvl": "Sedang", "q": "Jika besi disimpan di tempat kering, berdasarkan informasi teks, proses karat akan...", "opts": ["Berlangsung lebih cepat", "Berlangsung lebih lambat", "Tidak berpengaruh sama sekali", "Terjadi secara instan", "Berubah menjadi proses lain"], "correct": 1}, {"stim": "D", "lvl": "Mudah", "q": "Apa tujuan dari prosedur tersebut?", "opts": ["Mematikan genset", "Menyalakan genset sebagai sumber listrik cadangan", "Memperbaiki genset rusak", "Menjual genset", "Menyimpan genset"], "correct": 1}, {"stim": "D", "lvl": "Mudah", "q": "Berapa langkah yang dijelaskan dalam prosedur tersebut?", "opts": ["2 langkah", "3 langkah", "4 langkah", "5 langkah", "6 langkah"], "correct": 2}, {"stim": "D", "lvl": "Sulit", "q": "Instruksi meletakkan genset di ruangan tertutup berpotensi membahayakan karena...", "opts": ["Genset akan cepat rusak", "Risiko keracunan gas karbon monoksida", "Suara genset menjadi lebih keras", "Genset akan kepanasan lebih cepat", "Bahan bakar lebih boros"], "correct": 1}, {"stim": "D", "lvl": "Sulit", "q": "Kekeliruan pada langkah pertama tersebut melanggar kriteria evaluasi teks prosedur, yaitu...", "opts": ["Keakuratan istilah", "Kelengkapan alat", "Keselamatan dan kelayakan praktik", "Kejelasan bahasa", "Kesesuaian judul"], "correct": 2}, {"stim": "D", "lvl": "Sulit", "q": "Rekomendasi perbaikan yang paling tepat untuk langkah pertama adalah...", "opts": ["Genset diletakkan di ruang terbuka atau berventilasi baik", "Genset dinyalakan tanpa bahan bakar", "Genset diletakkan di dalam lemari", "Genset dinyalakan di dalam kamar tidur", "Tidak perlu ada perubahan"], "correct": 0}, {"stim": "D", "lvl": "Mudah", "q": "Kalimat “Periksa jumlah bahan bakar pada tangki genset” termasuk kalimat...", "opts": ["Deklaratif", "Interogatif", "Imperatif", "Persuasif", "Naratif"], "correct": 2}, {"stim": "D", "lvl": "Sedang", "q": "Apakah urutan langkah dalam teks tersebut sudah logis?", "opts": ["Sudah, karena seluruh langkah aman dan berurutan", "Belum, karena langkah pertama membahayakan keselamatan meskipun urutan waktunya runtut", "Sudah, karena tidak ada langkah yang hilang", "Belum, karena tidak menggunakan bahasa baku", "Sudah, karena menggunakan konjungsi temporal"], "correct": 1}, {"stim": "D", "lvl": "Sedang", "q": "Selain keselamatan, aspek apa yang juga perlu diperiksa ulang agar prosedur ini benar-benar aman diikuti pembaca?", "opts": ["Kelengkapan langkah, misalnya instruksi soal ventilasi ruangan", "Jumlah huruf dalam judul", "Warna genset yang digunakan", "Harga bahan bakar", "Merek genset yang disebutkan"], "correct": 0}, {"stim": "E", "lvl": "Mudah", "q": "Apa tujuan prosedur membersihkan filter AC tersebut?", "opts": ["Mengganti unit AC", "Menjaga kualitas udara dan kinerja pendinginan", "Menghemat listrik semata", "Mengecat unit AC", "Memindahkan posisi AC"], "correct": 1}, {"stim": "E", "lvl": "Sedang", "q": "Mengapa filter harus dikeringkan di tempat teduh, bukan di bawah sinar matahari langsung?", "opts": ["Agar warnanya tidak pudar", "Agar filter tidak melengkung atau rusak", "Agar proses lebih cepat", "Karena aturan pabrik tanpa alasan teknis", "Agar debu tidak menempel"], "correct": 1}, {"stim": "E", "lvl": "Mudah", "q": "Kata “unit indoor” dan “filter” pada teks termasuk...", "opts": ["Konjungsi", "Kata teknis", "Kata ganti", "Kata sifat", "Kata seru"], "correct": 1}, {"stim": "E", "lvl": "Sedang", "q": "Kalimat “Matikan AC dan cabut sumber listriknya terlebih dahulu” termasuk kalimat perintah jenis...", "opts": ["Larangan", "Ajakan", "Perintah biasa", "Permintaan", "Persuasif"], "correct": 2}, {"stim": "E", "lvl": "Sedang", "q": "Manakah langkah yang menunjukkan alasan keselamatan sebelum membersihkan filter?", "opts": ["Mencuci filter dengan air mengalir", "Mematikan AC dan mencabut sumber listrik", "Mengeringkan filter di tempat teduh", "Memasang kembali filter", "Menyalakan kembali AC"], "correct": 1}, {"stim": "E", "lvl": "Mudah", "q": "Kalimat “Filter AC yang kotor dapat menurunkan kualitas udara...” termasuk bagian struktur...", "opts": ["Langkah-langkah", "Tujuan", "Alat dan bahan", "Penutup", "Interpretasi"], "correct": 1}, {"stim": "F", "lvl": "Mudah", "q": "Apa yang menyebabkan terbentuknya embun menurut teks?", "opts": ["Hujan yang turun di malam hari", "Penurunan suhu udara hingga titik embun", "Angin kencang di pagi hari", "Sinar matahari pagi", "Kelembapan tanah"], "correct": 1}, {"stim": "F", "lvl": "Sedang", "q": "Penanda wacana “dengan demikian” pada akhir teks berfungsi sebagai penanda...", "opts": ["Urutan", "Penambahan", "Penekanan", "Simpulan", "Pertentangan"], "correct": 3}, {"stim": "F", "lvl": "Mudah", "q": "Berdasarkan teks, embun paling sering muncul pada kondisi cuaca...", "opts": ["Berawan tebal", "Hujan deras", "Cerah tanpa awan", "Berkabut", "Berangin kencang"], "correct": 2}, {"stim": "F", "lvl": "Sedang", "q": "Konjungsi “karena” dalam teks tersebut menunjukkan hubungan...", "opts": ["Pertentangan", "Sebab-akibat", "Pilihan", "Waktu", "Penjumlahan"], "correct": 1}, {"stim": "F", "lvl": "Sedang", "q": "Apa perbedaan fungsi konjungsi kausalitas pada teks ini dengan konjungsi temporal pada teks prosedur?", "opts": ["Keduanya memiliki fungsi yang sama persis", "Kausalitas menjelaskan sebab-akibat proses alami, temporal menandai urutan langkah tindakan", "Kausalitas hanya dipakai dalam teks prosedur", "Temporal hanya dipakai dalam teks eksplanasi", "Keduanya tidak memiliki fungsi apa pun"], "correct": 1}, {"stim": "F", "lvl": "Sulit", "q": "Jika judul teks diubah menjadi “Cara Membuat Embun Buatan”, jenis teks tersebut kemungkinan besar akan berubah menjadi...", "opts": ["Teks deskripsi", "Teks prosedur", "Teks narasi", "Teks anekdot", "Tetap teks eksplanasi"], "correct": 1}, {"stim": "G", "lvl": "Mudah", "q": "Apa tujuan dari prosedur tersebut?", "opts": ["Menghapus akun email", "Mendaftar akun email baru", "Mengganti kata sandi", "Mengirim email", "Menutup akun media sosial"], "correct": 1}, {"stim": "G", "lvl": "Sedang", "q": "Frasa “perlu diperhatikan” pada teks berfungsi sebagai penanda wacana jenis...", "opts": ["Urutan", "Penambahan", "Penekanan", "Simpulan", "Pertentangan"], "correct": 2}, {"stim": "G", "lvl": "Mudah", "q": "Kata “selanjutnya” pada teks menandai...", "opts": ["Sebab-akibat", "Urutan langkah", "Pertentangan", "Pilihan", "Penekanan"], "correct": 1}, {"stim": "G", "lvl": "Sedang", "q": "Mengapa penulis menyarankan agar tidak menggunakan kata sandi yang sama dengan akun lain?", "opts": ["Agar mudah diingat", "Demi keamanan akun", "Agar proses pendaftaran lebih cepat", "Karena aturan pabrik", "Tidak ada alasan khusus"], "correct": 1}, {"stim": "G", "lvl": "Sulit", "q": "Jika seseorang mengikuti prosedur tersebut namun melewatkan langkah verifikasi kode, apa kemungkinan yang terjadi?", "opts": ["Akun langsung terhapus", "Akun belum aktif sepenuhnya", "Tidak terjadi apa-apa", "Kata sandi otomatis berubah", "Proses pendaftaran diulang dari awal secara otomatis"], "correct": 1}, {"stim": "G", "lvl": "Sedang", "q": "Bagian manakah dari teks yang termasuk kalimat persuasif?", "opts": ["“Buka situs penyedia layanan email”", "“Isi formulir pendaftaran dengan nama lengkap”", "“Perlu diperhatikan, jangan gunakan kata sandi yang sama dengan akun media sosial lain agar lebih aman”", "“Klik tombol Daftar”", "“Verifikasi akun melalui kode”"], "correct": 2}, {"stim": "H", "lvl": "Sedang", "q": "Apa persamaan mendasar antara kedua teks tersebut?", "opts": ["Keduanya bersifat fiksi", "Keduanya sama-sama menjelaskan proses/tahapan terkait sampah", "Keduanya tidak memiliki struktur", "Keduanya ditulis dalam bentuk puisi", "Keduanya tidak menggunakan konjungsi"], "correct": 1}, {"stim": "H", "lvl": "Sedang", "q": "Apa perbedaan tujuan utama kedua teks tersebut?", "opts": ["Teks 1 menjelaskan proses, Teks 2 mengarahkan tindakan", "Teks 1 mengarahkan tindakan, Teks 2 menjelaskan proses/dampak", "Keduanya bertujuan menghibur", "Keduanya bertujuan mempromosikan produk", "Keduanya tidak memiliki tujuan jelas"], "correct": 1}, {"stim": "H", "lvl": "Mudah", "q": "Manakah kalimat pada Teks 1 yang merupakan kalimat perintah?", "opts": ["“Memilah sampah bertujuan memudahkan proses daur ulang.”", "“Pisahkan sisa makanan dan daun ke wadah organik.”", "“Sampah yang tidak dipilah akan bercampur.”", "“Plastik membutuhkan waktu ratusan tahun untuk terurai.”", "“Pemilahan sampah menjadi langkah penting.”"], "correct": 1}, {"stim": "H", "lvl": "Sedang", "q": "Konjungsi “sehingga” pada Teks 2 menunjukkan hubungan...", "opts": ["Pertentangan", "Sebab-akibat", "Pilihan", "Waktu", "Penambahan"], "correct": 1}, {"stim": "H", "lvl": "Sedang", "q": "Berdasarkan Teks 2, apa dampak jangka panjang jika sampah tidak dipilah dari rumah tangga?", "opts": ["Sampah otomatis berkurang", "Lahan TPA berkurang dan sumber air tercemar", "Tidak ada dampak apa pun", "Sampah berubah menjadi kompos secara alami", "Proses daur ulang menjadi lebih cepat"], "correct": 1}, {"stim": "H", "lvl": "Sulit", "q": "Jika Teks 1 diikuti dengan benar oleh masyarakat, dampak yang dijelaskan pada Teks 2 kemungkinan akan...", "opts": ["Semakin parah", "Tidak berubah sama sekali", "Berkurang atau dapat dicegah", "Berubah menjadi masalah baru", "Tidak ada hubungannya sama sekali"], "correct": 2}, {"stim": "H", "lvl": "Sulit", "q": "Manakah pernyataan yang paling tepat menggambarkan hubungan antara kedua teks?", "opts": ["Teks 1 adalah solusi/tindakan pencegahan atas masalah yang dijelaskan Teks 2", "Teks 2 adalah solusi atas Teks 1", "Kedua teks membahas topik yang sama sekali berbeda", "Teks 1 dan Teks 2 saling bertentangan", "Teks 1 tidak berkaitan dengan Teks 2"], "correct": 0}, {"stim": "H", "lvl": "Mudah", "q": "Kata “B3” pada Teks 1 merupakan contoh dari...", "opts": ["Konjungsi", "Kata teknis/istilah khusus", "Kata ganti", "Kata sifat", "Kata seru"], "correct": 1}, {"stim": "H", "lvl": "Sulit", "q": "Apabila ingin mengevaluasi kelengkapan Teks 1, aspek apa yang paling perlu diperiksa?", "opts": ["Apakah seluruh jenis sampah rumah tangga sudah tercakup dalam tiga kategori wadah tersebut", "Apakah judul teks menarik", "Apakah teks menggunakan huruf kapital", "Apakah teks memiliki gambar", "Apakah teks ditulis dengan rapi"], "correct": 0}, {"stim": "H", "lvl": "Sulit", "q": "Berdasarkan kedua teks, simpulan yang paling tepat tentang pentingnya teks prosedur dalam menyelesaikan masalah lingkungan adalah...", "opts": ["Teks prosedur tidak ada kaitannya dengan masalah lingkungan", "Teks prosedur berperan sebagai panduan tindakan nyata untuk mencegah dampak negatif yang dijelaskan dalam teks eksplanasi", "Teks eksplanasi lebih penting daripada teks prosedur", "Teks prosedur hanya berguna untuk keperluan akademik", "Kedua jenis teks tidak memiliki hubungan sama sekali"], "correct": 1}];

  var optLabels = ["A","B","C","D","E"];
  var lvlColor = {"Mudah":"#6EC6CA","Sedang":"#F5A623","Sulit":"#D94E2A"};

  var container = document.getElementById("epbq-questions");
  var currentStim = null;
  var qCounter = 0;

  questions.forEach(function(item, idx){
    if(item.stim !== currentStim){
      currentStim = item.stim;
      var stimObj = stimuli.filter(function(s){ return s.id === currentStim; })[0];
      if(stimObj){
        var docSample = document.createElement("div");
        docSample.className = "doc-sample";
        docSample.style.margin = "24px 0 18px";
        docSample.innerHTML =
          '&lt;div class="doc-head"&gt;&lt;span&gt;Teks Stimulus \u00b7 ' + stimObj.jenis + '&lt;/span&gt;&lt;span&gt;Stimulus ' + stimObj.id + '&lt;/span&gt;&lt;/div&gt;' +
          '&lt;div class="doc-body"&gt;&lt;h3 style="color:#132029 !important;"&gt;' + stimObj.judul + '&lt;/h3&gt;' +
          '&lt;p style="color:#132029 !important; margin:8px 0 0;"&gt;' + stimObj.teks + '&lt;/p&gt;&lt;/div&gt;';
        container.appendChild(docSample);
      }
    }

    qCounter++;
    var block = document.createElement("div");
    block.style.marginBottom = "20px";
    block.style.paddingBottom = "16px";
    block.style.borderBottom = "1px dashed rgba(234,242,245,0.16)";

    var tag = document.createElement("span");
    tag.textContent = item.lvl;
    tag.style.display = "inline-block";
    tag.style.fontFamily = "'IBM Plex Mono', monospace";
    tag.style.fontSize = "0.68rem";
    tag.style.letterSpacing = "0.08em";
    tag.style.textTransform = "uppercase";
    tag.style.setProperty("color", lvlColor[item.lvl] || "#9FB4C2", "important");
    tag.style.setProperty("border", "1px solid " + (lvlColor[item.lvl] || "#9FB4C2"), "important");
    tag.style.padding = "2px 8px";
    tag.style.marginBottom = "6px";
    block.appendChild(tag);

    var qEl = document.createElement("p");
    qEl.style.setProperty("color", "#EAF2F5", "important");
    qEl.style.fontWeight = "600";
    qEl.style.margin = "6px 0 8px";
    qEl.textContent = qCounter + ". " + item.q;
    block.appendChild(qEl);

    item.opts.forEach(function(opt, oi){
      var label = document.createElement("label");
      label.style.display = "block";
      label.style.setProperty("color", "#DDE7EC", "important");
      label.style.fontSize = "0.92rem";
      label.style.margin = "4px 0";
      label.style.cursor = "pointer";

      var radio = document.createElement("input");
      radio.type = "radio";
      radio.name = "epbq-q" + idx;
      radio.value = oi;
      radio.style.marginRight = "8px";

      label.appendChild(radio);
      label.appendChild(document.createTextNode(optLabels[oi] + ". " + opt));
      block.appendChild(label);
    });

    container.appendChild(block);
  });

  function stateKey(absen){ return "epbq_akm_" + absen; }
  function loadState(absen){
    try{
      var raw = localStorage.getItem(stateKey(absen));
      if(!raw) return {attempts:0, bestScore:0, sent:false};
      return JSON.parse(raw);
    }catch(e){ return {attempts:0, bestScore:0, sent:false}; }
  }
  function saveState(absen, state){
    try{ localStorage.setItem(stateKey(absen), JSON.stringify(state)); }catch(e){}
  }

  var absenInput = document.getElementById("epbq-absen");
  var attemptInfo = document.getElementById("epbq-attempt-info");
  var submitBtn = document.getElementById("epbq-submit");
  var retryBtn = document.getElementById("epbq-retry");

  function refreshAttemptInfo(){
    var absen = absenInput.value.trim();
    if(!absen){
      attemptInfo.textContent = "Masukkan No. Absen untuk melihat sisa kesempatan.";
      submitBtn.style.display = "inline-block";
      retryBtn.style.display = "none";
      return;
    }
    var st = loadState(absen);
    if(st.sent){
      attemptInfo.textContent = "No. Absen " + absen + " sudah menyelesaikan latihan ini. Nilai tercatat: " + st.bestScore + ".";
      submitBtn.style.display = "none";
      retryBtn.style.display = "none";
    } else {
      attemptInfo.textContent = "No. Absen " + absen + " — kesempatan tersisa: " + (MAX_ATTEMPTS - st.attempts) + " dari " + MAX_ATTEMPTS + ".";
      submitBtn.style.display = "inline-block";
      retryBtn.style.display = "none";
    }
  }
  absenInput.addEventListener("input", refreshAttemptInfo);
  refreshAttemptInfo();

  function resetAnswers(){
    var radios = container.querySelectorAll('input[type="radio"]');
    radios.forEach(function(r){ r.checked = false; });
    window.scrollTo({top: document.getElementById("epbq-questions").offsetTop - 100, behavior:"smooth"});
  }

  retryBtn.addEventListener("click", function(){
    resetAnswers();
    document.getElementById("epbq-result").style.display = "none";
    retryBtn.style.display = "none";
    submitBtn.style.display = "inline-block";
    document.getElementById("epbq-status").textContent = "";
  });

  submitBtn.addEventListener("click", function(){
    var absen = absenInput.value.trim();
    var nama = document.getElementById("epbq-nama").value.trim();
    var statusEl = document.getElementById("epbq-status");

    if(!absen || !nama){
      statusEl.textContent = "Isi No. Absen dan Nama terlebih dahulu.";
      statusEl.style.color = "#F5A623";
      return;
    }

    var st = loadState(absen);
    if(st.sent){
      statusEl.textContent = "No. Absen ini sudah menyelesaikan latihan dan nilainya sudah tercatat.";
      statusEl.style.color = "#F5A623";
      return;
    }
    if(st.attempts &gt;= MAX_ATTEMPTS){
      statusEl.textContent = "Kesempatan sudah habis.";
      statusEl.style.color = "#F5A623";
      return;
    }

    var belumDijawab = [];
    var benar = 0;
    questions.forEach(function(item, idx){
      var checked = document.querySelector('input[name="epbq-q' + idx + '"]:checked');
      if(!checked){
        belumDijawab.push(idx+1);
      } else if(parseInt(checked.value,10) === item.correct){
        benar++;
      }
    });

    if(belumDijawab.length &gt; 0){
      statusEl.textContent = "Masih ada " + belumDijawab.length + " soal yang belum dijawab.";
      statusEl.style.color = "#F5A623";
      return;
    }

    var skor = benar * 2;
    st.attempts += 1;
    st.bestScore = Math.max(st.bestScore, skor);
    saveState(absen, st);

    document.getElementById("epbq-score").textContent = skor;
    document.getElementById("epbq-result").style.display = "block";

    var sisa = MAX_ATTEMPTS - st.attempts;

    if(skor &gt;= KKM){
      document.getElementById("epbq-detail").textContent = "Menjawab benar " + benar + " dari 50 soal. Skor mencapai KKM (75) \u2014 nilai ini akan dikirim ke guru.";
      kirimNilai(absen, nama, skor);
      st.sent = true;
      saveState(absen, st);
      submitBtn.style.display = "none";
      retryBtn.style.display = "none";
    } else if(sisa &gt; 0){
      document.getElementById("epbq-detail").textContent = "Menjawab benar " + benar + " dari 50 soal. Skor belum mencapai KKM (75). Kesempatan tersisa: " + sisa + ".";
      submitBtn.style.display = "none";
      retryBtn.style.display = "inline-block";
      statusEl.textContent = "";
    } else {
      document.getElementById("epbq-detail").textContent = "Menjawab benar " + benar + " dari 50 soal. Kesempatan telah habis. Nilai tertinggi dari 3 percobaan (" + st.bestScore + ") akan dikirim ke guru.";
      kirimNilai(absen, nama, st.bestScore);
      st.sent = true;
      saveState(absen, st);
      submitBtn.style.display = "none";
      retryBtn.style.display = "none";
    }
    refreshAttemptInfo();
  });

  function kirimNilai(absen, nama, skor){
    var statusEl = document.getElementById("epbq-status");
    statusEl.textContent = "Mengirim hasil...";
    statusEl.style.color = "#9FB4C2";

    var payload = new URLSearchParams();
    payload.append("noAbsen", absen);
    payload.append("nama", nama);
    payload.append("skor", skor);
    payload.append("materi", EPBQ_MATERI);
    payload.append("waktu", new Date().toISOString());

    fetch(EPBQ_ENDPOINT, {
      method: "POST",
      mode: "no-cors",
      headers: {"Content-Type":"application/x-www-form-urlencoded"},
      body: payload.toString()
    }).then(function(){
      statusEl.textContent = "Hasil berhasil dikirim ke guru.";
      statusEl.style.color = "#6EC6CA";
    }).catch(function(){
      statusEl.textContent = "Nilai tercatat di perangkat ini, namun pengiriman gagal. Tunjukkan skor ini ke guru.";
      statusEl.style.color = "#F5A623";
    });
  }
})();
&lt;/script&gt;
&lt;/div&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/latihan-soal-tipe-akm-pokok-bahasan.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-5495090412156498845</guid><pubDate>Tue, 01 Sep 2026 00:34:08 +0000</pubDate><atom:updated>2026-09-01T07:40:10.978+07:00</atom:updated><title>Pencarian Informasi Digital &amp; Kolaborasi Daring</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Pencarian Informasi Digital &amp; Kolaborasi Daring — Informatika Kelas X&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&amp;family=IBM+Plex+Sans:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;style&gt;
  :root{
    --ink: #1F2430;
    --ink-soft: #57606F;
    --paper: #FFFFFF;
    --surface: #F4F6FA;
    --line: #DEE3EA;
    --accent: #2F5DA8;
    --accent-dark: #1E3E75;
    --amber: #E8940C;
    --teal: #0F9D8C;
    --red: #D8503C;
    --radius: 6px;
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{ font-family:'IBM Plex Sans', sans-serif; background:#FFFFFF; color: var(--ink); line-height:1.6; }
  .mono{font-family:'IBM Plex Mono', monospace;}

  .page-shell{
    max-width: 900px; margin: 16px auto; background:#FFFFFF; border-radius:16px; overflow:hidden;
    box-shadow: 0 8px 32px rgba(20,30,50,0.12), 0 1px 3px rgba(20,30,50,0.08);
    border: 1px solid var(--line);
  }

  /* ===== Browser-chrome hero ===== */
  .browser-hero{ background:#FFFFFF; }
  .tabbar{
    display:flex; align-items:flex-end; gap:4px; padding: 14px 5% 0; background: var(--surface); border-bottom:1px solid var(--line);
  }
  .tabbar .tab{
    background:#FFFFFF; border:1px solid var(--line); border-bottom:none; border-radius:8px 8px 0 0;
    padding:8px 16px; font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--ink-soft);
  }
  .tabbar .tab.active{ color: var(--accent); font-weight:600; }
  .addressbar{
    margin: 0 5%; margin-top:-1px; background:#FFFFFF; border:1px solid var(--line); border-radius:0 0 8px 8px;
    padding:10px 16px; display:flex; align-items:center; gap:10px; font-family:'IBM Plex Mono', monospace; font-size:0.78rem; color: var(--ink-soft);
  }
  .addressbar .lock{ color: var(--teal); }

  .hero-body{ padding: 32px 5% 44px; }
  .eyebrow{
    font-family:'IBM Plex Mono', monospace; font-size:0.78rem; letter-spacing:0.16em; text-transform:uppercase;
    color: var(--accent); display:flex; align-items:center; gap:10px; margin-bottom:20px;
  }
  .eyebrow::before{ content:""; width:10px; height:10px; border:1.5px solid var(--accent); border-radius:50%; }
  h1.title{
    font-family:'IBM Plex Mono', monospace; font-weight:700;
    font-size: clamp(1.85rem, 4vw, 3.2rem); line-height:1.16; max-width: 21ch; color: var(--ink);
  }
  h1.title span{ color: var(--accent); }
  h1.title mark{ background: linear-gradient(180deg, transparent 62%, #FCE3A8 62%); color:var(--ink); }
  .hero-sub{ margin-top:18px; max-width: 66ch; font-size:1.04rem; color: var(--ink-soft); }
  .meta-strip{
    margin-top:36px; display:grid; grid-template-columns: repeat(auto-fit,minmax(160px,1fr)); gap:1px;
    background: var(--line); border:1px solid var(--line); max-width: 940px;
  }
  .meta-cell{ background: var(--surface); padding:14px 16px; }
  .meta-cell .k{ font-family:'IBM Plex Mono', monospace; font-size:0.66rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--accent); }
  .meta-cell .v{ margin-top:6px; font-size:0.94rem; font-weight:600; color: var(--ink); }

  /* ===== Content ===== */
  main{ background: var(--paper); padding: 8px 0 0; }
  .section{ padding: 40px 5%; max-width: 1180px; margin: 0 auto; border-bottom:1px solid #ECEFF3; }
  .section:last-of-type{border-bottom:none;}
  .section-tag{
    font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.14em; text-transform:uppercase;
    color: var(--ink-soft); display:flex; align-items:center; gap:10px; margin-bottom:10px;
  }
  .section-tag .num{ color:#fff; background: var(--accent); padding:3px 8px; border-radius:3px; font-weight:600; }
  h2.section-title{ font-family:'IBM Plex Mono', monospace; font-size: clamp(1.35rem, 2.3vw, 1.9rem); font-weight:700; color: var(--ink); margin-bottom: 22px; max-width: 34ch; }
  h3.sub-title{ font-family:'IBM Plex Mono', monospace; font-size:1.06rem; font-weight:600; color: var(--ink); margin: 26px 0 12px; display:flex; align-items:center; gap:10px; }
  h3.sub-title::before{ content:""; width:8px;height:8px; background: var(--amber); display:inline-block; border-radius:1px; }
  p{ color:#3A4453; max-width: 74ch; margin-bottom: 14px;}
  strong{color:var(--ink);}
  ul, ol{ margin: 8px 0 18px 1.3em; max-width: 74ch;}
  li{margin-bottom:8px; color:#3A4453;}

  .callout{ border-left: 3px solid var(--accent); background:#EDF2FA; padding: 16px 20px; border-radius: 0 6px 6px 0; margin: 18px 0; max-width: 74ch; }
  .callout .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--accent-dark); font-weight:700; margin-bottom:6px; }
  .callout.warn{ border-left-color: var(--red); background:#FBEAE6; }
  .callout.warn .lbl{ color:#A5402C; }
  .callout.secure{ border-left-color: var(--teal); background:#E8F6F3; }
  .callout.secure .lbl{ color:#0C7A6C; }

  /* ===== Cards ===== */
  .card-grid{ display:grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 16px; margin: 20px 0 8px; }
  .card{ background: var(--paper); border: 1.5px solid var(--line); border-radius: var(--radius); padding: 20px; box-shadow: 0 2px 10px rgba(20,30,50,0.05); }
  .card .tag{ font-family:'IBM Plex Mono', monospace; font-size:0.66rem; letter-spacing:0.1em; text-transform:uppercase; color:#fff; background: var(--accent); padding:3px 8px; border-radius:3px; display:inline-block; margin-bottom:12px; }
  .card h4{ font-family:'IBM Plex Mono', monospace; font-size:0.98rem; margin-bottom:8px; color:var(--ink); }
  .card p{font-size:0.89rem; margin-bottom:0;}
  .card code{ font-family:'IBM Plex Mono', monospace; background:var(--surface); padding:1px 6px; border-radius:3px; font-size:0.85em; color: var(--accent-dark); }

  .table-scroll{ overflow-x:auto; margin:18px 0; -webkit-overflow-scrolling:touch; }
  .table-scroll table{ margin:0; }
  table.compare{ width:100%; border-collapse:collapse; font-size:0.9rem; min-width:480px; }
  table.compare th, table.compare td{ border:1px solid var(--line); padding:11px 14px; text-align:left; }
  table.compare th{ background: var(--accent); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.74rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.compare tr:nth-child(even) td{ background: var(--surface); }

  /* ===== Diagram ===== */
  .diagram-frame{ margin: 26px 0; background: var(--surface); border-radius: 8px; padding: 18px; border: 1px solid var(--line); }
  .diagram-frame svg{width:100%; height:auto; display:block;}
  .diagram-caption{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--ink-soft); text-align:center; margin-top:10px; letter-spacing:0.03em; }
  .signal{ stroke-dasharray: 6 8; animation: flow 1.6s linear infinite; }
  @keyframes flow{ to{ stroke-dashoffset:-56; } }
  @media (prefers-reduced-motion: reduce){ .signal{animation:none;} }

  /* ===== Summary ===== */
  .summary-box{ background: var(--accent-dark); color: #fff; border-radius: 8px; padding: 26px 28px; margin-top: 10px; }
  .summary-box h4{ font-family:'IBM Plex Mono', monospace; color:#FCD98A; font-size:0.85rem; letter-spacing:0.08em; text-transform:uppercase; margin-bottom:14px; }
  .summary-box ul{ margin:0 0 0 1.1em; max-width:none; }
  .summary-box li{ color:#E6ECF7; margin-bottom:8px; }

  /* ===== Tugas kelompok ===== */
  .task-panel{ border: 1.5px dashed var(--accent); border-radius: 8px; padding: 26px 28px; background: repeating-linear-gradient(135deg, #FFFFFF, #FFFFFF 18px, var(--surface) 18px, var(--surface) 19px); }
  .task-head{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:12px; }
  .task-head .badge{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.08em; text-transform:uppercase; background: var(--teal); color:#fff; padding:4px 10px; border-radius:3px; font-weight:700;}
  .task-panel h3{ font-family:'IBM Plex Mono', monospace; font-size:1.22rem; color: var(--ink); }
  .steps-num{ counter-reset: step; margin:16px 0; max-width:78ch; }
  .steps-num li{ counter-increment: step; list-style:none; position:relative; padding-left:34px; margin-bottom:14px; }
  .steps-num li::before{ content: counter(step); position:absolute; left:0; top:0; font-family:'IBM Plex Mono', monospace; font-weight:700; color:#fff; background: var(--accent); width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:0.8rem; }
  table.rubrik{ width:100%; border-collapse:collapse; margin:18px 0 0; font-size:0.88rem; min-width:520px; }
  table.rubrik th, table.rubrik td{ border:1px solid #C9CFD6; padding:10px 12px; text-align:left; }
  table.rubrik th{ background: var(--accent-dark); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.75rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.rubrik tr:nth-child(even) td{ background: var(--surface); }

  .closing-task{ margin-top:22px; background: #FFF6E6; border:1.5px solid var(--amber); border-radius:8px; padding:20px 22px; }
  .closing-task .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.1em; text-transform:uppercase; color:#8A5A0A; font-weight:700; margin-bottom:8px; }

  /* ===== Quiz ===== */
  .quiz-panel{ background: var(--surface); border:1px solid var(--line); border-radius: 10px; padding: 30px 28px; color: var(--ink); }
  .quiz-panel h3.sub-title{ color: var(--ink); }
  .quiz-note{ font-size:0.88rem; color: var(--ink-soft); max-width:74ch; margin-bottom:18px;}
  .student-info{ display:grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap:14px; margin: 18px 0 30px; }
  .field label{ display:block; font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.06em; text-transform:uppercase; color: var(--accent-dark); margin-bottom:6px; }
  .field input, .field select{
    width:100%; padding:10px 12px; border-radius:5px; border:1px solid var(--line); background:#FFFFFF; color: var(--ink); font-family:'IBM Plex Sans', sans-serif; font-size:0.94rem;
  }
  .field select{ cursor:pointer; }
  .field input:focus, .field select:focus{ outline:2px solid var(--accent); }

  .q-card{ background:#FFFFFF; border:1px solid var(--line); border-radius:8px; padding:18px 20px; margin-bottom:14px; }
  .q-card .q-num{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--accent); letter-spacing:0.08em; margin-bottom:6px; }
  .q-card .q-text{ font-size:0.98rem; color: var(--ink); margin-bottom:12px; font-weight:500; }
  .options{ display:flex; flex-direction:column; gap:8px; }
  .opt{ display:flex; align-items:flex-start; gap:10px; padding:9px 12px; border:1px solid var(--line); border-radius:5px; cursor:pointer; transition: border-color .15s, background .15s; }
  .opt:hover{ border-color: var(--accent); }
  .opt input{ margin-top:3px; accent-color: var(--accent); }
  .opt span{ font-size:0.9rem; color:#33414F; }
  .opt.selected{ border-color: var(--accent); background: rgba(47,93,168,0.07); }

  .quiz-actions{ margin-top:24px; display:flex; align-items:center; gap:16px; flex-wrap:wrap; }
  #btnHitung, #btnKirim{
    font-family:'IBM Plex Mono', monospace; font-weight:600; font-size:0.85rem; letter-spacing:0.04em;
    padding: 12px 22px; border-radius:6px; border:none; cursor:pointer;
  }
  #btnHitung{ background: var(--accent); color:#fff; }
  #btnHitung:hover{ filter:brightness(1.08); }
  #btnKirim{ background: var(--teal); color:#fff; display:none; }
  #btnKirim:hover{ filter:brightness(1.08); }
  #btnKirim:disabled{ opacity:0.6; cursor:not-allowed; }
  #quizMsg{ font-family:'IBM Plex Mono', monospace; font-size:0.85rem; color:#B4791C; }

  .result-panel{ display:none; margin-top:22px; background:#FFFFFF; border:1.5px solid var(--teal); border-radius:8px; padding:22px 24px; }
  .result-panel .score{ font-family:'IBM Plex Mono', monospace; font-size:2.4rem; font-weight:700; color: #0C7A6C; }
  .result-panel .score-lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--ink-soft); }
  .result-panel p{ color:#33414F; font-size:0.9rem; margin-top:10px; margin-bottom:0; }

  footer{ background: var(--surface); color: var(--ink-soft); text-align:center; padding: 24px 5% 32px; font-family:'IBM Plex Mono', monospace; font-size:0.75rem; letter-spacing:0.04em; border-top:1px solid var(--line); }

  @media (max-width: 700px){
    .card-grid{grid-template-columns:1fr;}
    .hero-body{padding:26px 5% 34px;}
    .section{padding:28px 5%;}
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="page-shell"&gt;
&lt;div class="browser-hero"&gt;
  &lt;div class="tabbar"&gt;
    &lt;div class="tab active"&gt;&#128269; Pencarian Informasi&lt;/div&gt;
    &lt;div class="tab"&gt;&#129309; Kolaborasi Daring&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="addressbar"&gt;&lt;span class="lock"&gt;&#128274;&lt;/span&gt; https://belajar-informatika.sekolah.id/pencarian-kolaborasi-daring&lt;/div&gt;

  &lt;div class="hero-body"&gt;
    &lt;div class="eyebrow"&gt;Informatika · Fase E · Kelas X SMK&lt;/div&gt;
    &lt;h1 class="title"&gt;Pencarian Informasi Digital &amp; &lt;mark&gt;Kolaborasi&lt;/mark&gt; &lt;span&gt;Daring&lt;/span&gt;&lt;/h1&gt;
    &lt;p class="hero-sub"&gt;Materi ini membahas cara memanfaatkan mesin pencari dan peramban secara efektif, menggunakan layanan komunikasi digital dengan tepat, berkolaborasi lewat media daring, serta menerapkan etika dan keamanan digital yang bertanggung jawab.&lt;/p&gt;

    &lt;div class="meta-strip"&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Elemen CP&lt;/div&gt;&lt;div class="v"&gt;Pencarian &amp; Kolaborasi Daring&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK Kelas X&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;1 Pertemuan · 4 JP (180 menit)&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Model&lt;/div&gt;&lt;div class="v"&gt;Praktik, Kerja Kelompok &amp; Kuis&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;main&gt;

  &lt;!-- ===================== TUJUAN ===================== --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;00&lt;/span&gt; Capaian &amp; Tujuan Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Ke Mana Materi Ini Menuju&lt;/h2&gt;

    &lt;h3 class="sub-title"&gt;Capaian Pembelajaran&lt;/h3&gt;
    &lt;p&gt;Murid mampu memanfaatkan mesin pencari, peramban, layanan komunikasi digital, dan media kolaborasi daring secara efektif, aman, dan bertanggung jawab.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Tujuan Pembelajaran&lt;/h3&gt;
    &lt;ol&gt;
      &lt;li&gt;Menjelaskan cara kerja mesin pencari dan menerapkan strategi pencarian informasi yang efektif.&lt;/li&gt;
      &lt;li&gt;Menjelaskan fungsi dan fitur-fitur penting peramban (browser) dalam mengakses informasi digital.&lt;/li&gt;
      &lt;li&gt;Memanfaatkan layanan komunikasi digital (email, pesan instan, video conference) secara tepat dan sopan.&lt;/li&gt;
      &lt;li&gt;Memanfaatkan media kolaborasi daring untuk bekerja sama menyelesaikan tugas kelompok.&lt;/li&gt;
      &lt;li&gt;Menerapkan etika berinternet (netiket), verifikasi informasi, dan keamanan/privasi digital.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 class="sub-title"&gt;Rincian Kegiatan (4 JP × 45 menit)&lt;/h3&gt;
    &lt;div class="table-scroll"&gt;&lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Tahap&lt;/th&gt;&lt;th&gt;Kegiatan&lt;/th&gt;&lt;th&gt;Waktu&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pendahuluan&lt;/td&gt;&lt;td&gt;Apersepsi ("Bagaimana caramu memastikan informasi yang kamu temukan di internet itu benar?"), penyampaian tujuan pembelajaran&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Eksplorasi Konsep&lt;/td&gt;&lt;td&gt;Penjelasan mesin pencari, peramban, komunikasi digital, kolaborasi daring, dan etika/keamanan digital&lt;/td&gt;&lt;td&gt;55 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Kerja Kelompok&lt;/td&gt;&lt;td&gt;Diskusi dan pengerjaan tugas kelompok riset &amp; kolaborasi dokumen daring&lt;/td&gt;&lt;td&gt;40 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Presentasi&lt;/td&gt;&lt;td&gt;Presentasi singkat tiap kelompok dan tanggapan guru&lt;/td&gt;&lt;td&gt;20 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Kuis Individu&lt;/td&gt;&lt;td&gt;Mengerjakan 25 soal pilihan ganda secara mandiri melalui halaman ini&lt;/td&gt;&lt;td&gt;35 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penutup&lt;/td&gt;&lt;td&gt;Refleksi, penguatan konsep, menulis kesimpulan ringkas di buku catatan&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== A. MESIN PENCARI ===================== --&gt;
  &lt;section class="section" id="mesin-pencari"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;01&lt;/span&gt; Menemukan Informasi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mesin Pencari (Search Engine)&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Mesin pencari&lt;/strong&gt; adalah layanan yang membantu pengguna menemukan informasi di internet berdasarkan kata kunci yang dimasukkan. Contohnya Google, Bing, dan DuckDuckGo. Secara sederhana, mesin pencari bekerja melalui tiga tahap: &lt;strong&gt;crawling&lt;/strong&gt; (menjelajahi halaman-halaman web), &lt;strong&gt;indexing&lt;/strong&gt; (menyimpan dan mengelompokkan informasi halaman tersebut), dan &lt;strong&gt;ranking&lt;/strong&gt; (mengurutkan hasil yang paling relevan dengan kata kunci pencarian).&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Operator Pencarian agar Hasil Lebih Tepat&lt;/h3&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Frasa Persis&lt;/span&gt;&lt;h4&gt;Tanda Kutip " "&lt;/h4&gt;&lt;p&gt;Mencari frasa yang harus muncul persis sama. Contoh: &lt;code&gt;"kurikulum merdeka"&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Mengecualikan&lt;/span&gt;&lt;h4&gt;Tanda Minus -&lt;/h4&gt;&lt;p&gt;Mengeluarkan kata tertentu dari hasil pencarian. Contoh: &lt;code&gt;jaguar -mobil&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Batasi Situs&lt;/span&gt;&lt;h4&gt;site:&lt;/h4&gt;&lt;p&gt;Membatasi hasil hanya dari satu situs tertentu. Contoh: &lt;code&gt;site:kemdikbud.go.id&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Format File&lt;/span&gt;&lt;h4&gt;filetype:&lt;/h4&gt;&lt;p&gt;Mencari file dengan format tertentu. Contoh: &lt;code&gt;modul ajar filetype:pdf&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Kata Alternatif&lt;/span&gt;&lt;h4&gt;OR&lt;/h4&gt;&lt;p&gt;Mencari salah satu dari beberapa kata. Contoh: &lt;code&gt;SMK OR SMA jurusan TKJ&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Kata Hilang&lt;/span&gt;&lt;h4&gt;Tanda Bintang *&lt;/h4&gt;&lt;p&gt;Sebagai pengganti kata yang belum diketahui dalam sebuah frasa. Contoh: &lt;code&gt;ibu kota * adalah Jakarta&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Mengevaluasi Kredibilitas Sumber&lt;/h3&gt;
    &lt;p&gt;Tidak semua informasi di internet dapat dipercaya begitu saja. Sebelum menggunakan sebuah sumber, periksa hal-hal berikut:&lt;/p&gt;
    &lt;div class="table-scroll"&gt;&lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Aspek&lt;/th&gt;&lt;th&gt;Pertanyaan Kunci&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penulis/Penerbit&lt;/td&gt;&lt;td&gt;Siapa yang menulis atau menerbitkan informasi ini? Apakah kredibel di bidangnya?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Waktu Publikasi&lt;/td&gt;&lt;td&gt;Kapan informasi ini dipublikasikan? Apakah masih relevan/terkini?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Tujuan Konten&lt;/td&gt;&lt;td&gt;Apakah bertujuan memberi informasi, atau justru mempengaruhi opini/menjual sesuatu?&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Bukti Pendukung&lt;/td&gt;&lt;td&gt;Apakah klaim dalam konten didukung data, fakta, atau referensi yang jelas?&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== B. PERAMBAN ===================== --&gt;
  &lt;section class="section" id="peramban"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;02&lt;/span&gt; Alat Menjelajah&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Peramban (Browser)&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Peramban (browser)&lt;/strong&gt; adalah perangkat lunak yang digunakan untuk mengakses dan menampilkan halaman web, seperti Google Chrome, Mozilla Firefox, Microsoft Edge, dan Safari.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Fitur-Fitur Penting Peramban&lt;/h3&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Navigasi&lt;/span&gt;&lt;h4&gt;Tab&lt;/h4&gt;&lt;p&gt;Membuka beberapa halaman sekaligus dalam satu jendela peramban.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Simpan Cepat&lt;/span&gt;&lt;h4&gt;Bookmark&lt;/h4&gt;&lt;p&gt;Menyimpan alamat situs favorit agar mudah diakses kembali di kemudian hari.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Jejak Digital&lt;/span&gt;&lt;h4&gt;Riwayat (History)&lt;/h4&gt;&lt;p&gt;Mencatat daftar situs yang pernah dikunjungi.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Privasi&lt;/span&gt;&lt;h4&gt;Mode Incognito/Private&lt;/h4&gt;&lt;p&gt;Menjelajah tanpa menyimpan riwayat, cookie, dan data formulir setelah jendela ditutup.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Tambahan Fungsi&lt;/span&gt;&lt;h4&gt;Ekstensi/Add-on&lt;/h4&gt;&lt;p&gt;Program tambahan yang memperluas fungsi peramban, mis. pemblokir iklan atau kamus.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Keamanan&lt;/span&gt;&lt;h4&gt;Indikator HTTPS&lt;/h4&gt;&lt;p&gt;Ikon gembok pada address bar menandakan koneksi ke situs sudah terenkripsi dan lebih aman.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== C. KOMUNIKASI DIGITAL ===================== --&gt;
  &lt;section class="section" id="komunikasi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;03&lt;/span&gt; Terhubung Secara Digital&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Layanan Komunikasi Digital&lt;/h2&gt;
    &lt;p&gt;Komunikasi digital memungkinkan kita bertukar pesan, ide, dan informasi tanpa harus bertatap muka langsung.&lt;/p&gt;
    &lt;div class="table-scroll"&gt;&lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Layanan&lt;/th&gt;&lt;th&gt;Contoh&lt;/th&gt;&lt;th&gt;Etika Penggunaan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Email&lt;/td&gt;&lt;td&gt;Gmail, Outlook&lt;/td&gt;&lt;td&gt;Gunakan subjek yang jelas, salam pembuka/penutup, bahasa sopan, dan periksa ulang sebelum mengirim.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pesan Instan (Chat)&lt;/td&gt;&lt;td&gt;WhatsApp, Telegram&lt;/td&gt;&lt;td&gt;Kirim pesan pada jam wajar, hindari pesan berantai/spam, gunakan bahasa yang jelas dan sopan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Video Conference&lt;/td&gt;&lt;td&gt;Google Meet, Zoom&lt;/td&gt;&lt;td&gt;Bergabung tepat waktu, matikan mikrofon saat tidak berbicara, berpakaian dan berlatar belakang pantas.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== D. KOLABORASI DARING ===================== --&gt;
  &lt;section class="section" id="kolaborasi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;04&lt;/span&gt; Bekerja Bersama&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Media Kolaborasi Daring&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Media kolaborasi daring&lt;/strong&gt; memungkinkan beberapa orang menyunting satu dokumen, spreadsheet, atau presentasi secara bersamaan (real-time) melalui internet — tanpa perlu bertemu di tempat yang sama. Contoh: Google Docs, Google Sheets, Google Slides, dan Google Drive.&lt;/p&gt;

    &lt;div class="diagram-frame"&gt;
      &lt;svg viewBox="0 0 800 260" xmlns="http://www.w3.org/2000/svg"&gt;
        &lt;text x="400" y="26" text-anchor="middle" fill="#1E3E75" font-family="IBM Plex Mono, monospace" font-size="12" letter-spacing="2"&gt;KOLABORASI DOKUMEN REAL-TIME&lt;/text&gt;

        &lt;rect x="330" y="60" width="140" height="110" rx="6" fill="none" stroke="#0F9D8C" stroke-width="2"/&gt;
        &lt;text x="400" y="90" text-anchor="middle" fill="#0F9D8C" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="11"&gt;DOKUMEN&lt;/text&gt;
        &lt;text x="400" y="105" text-anchor="middle" fill="#0F9D8C" font-family="IBM Plex Mono, monospace" font-size="10"&gt;BERSAMA&lt;/text&gt;
        &lt;line x1="345" y1="120" x2="455" y2="120" stroke="#DEE3EA" stroke-width="2"/&gt;
        &lt;line x1="345" y1="135" x2="455" y2="135" stroke="#DEE3EA" stroke-width="2"/&gt;
        &lt;line x1="345" y1="150" x2="425" y2="150" stroke="#DEE3EA" stroke-width="2"/&gt;

        &lt;circle cx="120" cy="60" r="26" fill="none" stroke="#2F5DA8" stroke-width="2"/&gt;
        &lt;text x="120" y="65" text-anchor="middle" fill="#2F5DA8" font-family="IBM Plex Mono, monospace" font-size="10"&gt;Murid A&lt;/text&gt;
        &lt;circle cx="120" cy="200" r="26" fill="none" stroke="#E8940C" stroke-width="2"/&gt;
        &lt;text x="120" y="205" text-anchor="middle" fill="#E8940C" font-family="IBM Plex Mono, monospace" font-size="10"&gt;Murid B&lt;/text&gt;
        &lt;circle cx="680" cy="60" r="26" fill="none" stroke="#D8503C" stroke-width="2"/&gt;
        &lt;text x="680" y="65" text-anchor="middle" fill="#D8503C" font-family="IBM Plex Mono, monospace" font-size="10"&gt;Murid C&lt;/text&gt;
        &lt;circle cx="680" cy="200" r="26" fill="none" stroke="#0F9D8C" stroke-width="2"/&gt;
        &lt;text x="680" y="205" text-anchor="middle" fill="#0F9D8C" font-family="IBM Plex Mono, monospace" font-size="10"&gt;Guru&lt;/text&gt;

        &lt;line class="signal" x1="145" y1="72" x2="330" y2="95" stroke="#2F5DA8" stroke-width="2"/&gt;
        &lt;line class="signal" x1="145" y1="188" x2="330" y2="150" stroke="#E8940C" stroke-width="2"/&gt;
        &lt;line class="signal" x1="655" y1="72" x2="470" y2="95" stroke="#D8503C" stroke-width="2"/&gt;
        &lt;line class="signal" x1="655" y1="188" x2="470" y2="150" stroke="#0F9D8C" stroke-width="2"/&gt;
      &lt;/svg&gt;
      &lt;div class="diagram-caption"&gt;Semua peserta dapat menyunting dokumen yang sama secara bersamaan — perubahan setiap orang langsung terlihat oleh yang lain.&lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Tingkat Akses Berbagi (Sharing Permission)&lt;/h3&gt;
    &lt;div class="table-scroll"&gt;&lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Tingkat Akses&lt;/th&gt;&lt;th&gt;Yang Dapat Dilakukan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Viewer (Melihat)&lt;/td&gt;&lt;td&gt;Hanya dapat membaca/melihat isi dokumen, tidak dapat mengubah apa pun.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Commenter (Mengomentari)&lt;/td&gt;&lt;td&gt;Dapat melihat dan menambahkan komentar/masukan tanpa mengubah isi asli.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Editor (Menyunting)&lt;/td&gt;&lt;td&gt;Dapat melihat, mengedit, dan mengubah langsung isi dokumen.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;&lt;/div&gt;
    &lt;p&gt;Fitur &lt;strong&gt;version history (riwayat versi)&lt;/strong&gt; pada Google Docs memungkinkan kita melihat kembali dan mengembalikan perubahan dokumen dari waktu ke waktu — sangat berguna jika terjadi kesalahan saat berkolaborasi.&lt;/p&gt;
  &lt;/section&gt;

  &lt;!-- ===================== E. ETIKA &amp; KEAMANAN ===================== --&gt;
  &lt;section class="section" id="etika-keamanan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;05&lt;/span&gt; Bertanggung Jawab&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Etika &amp; Keamanan Digital&lt;/h2&gt;

    &lt;h3 class="sub-title"&gt;Netiket (Etika Berinternet)&lt;/h3&gt;
    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Perilaku yang Dianjurkan&lt;/div&gt;
      &lt;ul style="margin:0 0 0 1.1em;"&gt;
        &lt;li&gt;Berkomunikasi dengan sopan dan menghargai pendapat orang lain, meski berbeda pandangan.&lt;/li&gt;
        &lt;li&gt;Mencantumkan sumber saat mengutip atau menggunakan karya orang lain (menghindari plagiarisme).&lt;/li&gt;
        &lt;li&gt;Tidak menyebarkan konten SARA, ujaran kebencian, atau informasi yang belum diverifikasi.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Verifikasi Informasi &amp; Hoaks&lt;/h3&gt;
    &lt;div class="callout warn"&gt;
      &lt;div class="lbl"&gt;Waspadai Hoaks&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Hoaks&lt;/strong&gt; adalah informasi yang sengaja dibuat menyesatkan dan tidak berdasarkan fakta. Sebelum membagikan sebuah informasi, bandingkan dengan beberapa sumber terpercaya lain, periksa tanggal publikasi, dan jangan hanya menilai dari judul yang bersifat clickbait.&lt;/p&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Keamanan &amp; Privasi&lt;/h3&gt;
    &lt;div class="callout secure"&gt;
      &lt;div class="lbl"&gt;Langkah Perlindungan&lt;/div&gt;
      &lt;ul style="margin:0 0 0 1.1em;"&gt;
        &lt;li&gt;Atur pengaturan berbagi (sharing) dokumen daring hanya untuk orang/kelompok yang dituju, sesuai kebutuhan akses.&lt;/li&gt;
        &lt;li&gt;Jangan membagikan data pribadi (kata sandi, nomor identitas) melalui email/chat, apalagi kepada pihak tak dikenal.&lt;/li&gt;
        &lt;li&gt;Waspadai pesan atau email &lt;strong&gt;phishing&lt;/strong&gt; yang meminta data pribadi secara mendesak melalui tautan mencurigakan.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== F. HUBUNGAN ===================== --&gt;
  &lt;section class="section" id="hubungan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;06&lt;/span&gt; Keterkaitan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Hubungan Antar Konsep&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Mesin pencari&lt;/strong&gt; membantu menemukan informasi, sedangkan &lt;strong&gt;peramban&lt;/strong&gt; adalah alat yang digunakan untuk mengaksesnya.&lt;/li&gt;
      &lt;li&gt;Informasi yang ditemukan perlu dievaluasi kredibilitasnya sebelum digunakan atau dibagikan lewat &lt;strong&gt;layanan komunikasi digital&lt;/strong&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Media kolaborasi daring&lt;/strong&gt; memungkinkan hasil pencarian dan diskusi diolah bersama menjadi karya kelompok.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Etika dan keamanan digital&lt;/strong&gt; menjadi payung yang melandasi seluruh aktivitas di atas agar dilakukan secara aman dan bertanggung jawab.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;!-- ===================== G. RANGKUMAN ===================== --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;07&lt;/span&gt; Penguatan Konsep&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Materi&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;h4&gt;Poin-Poin Kunci&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Mesin pencari bekerja melalui crawling, indexing, dan ranking; gunakan operator pencarian untuk hasil lebih tepat.&lt;/li&gt;
        &lt;li&gt;Evaluasi kredibilitas sumber dengan memeriksa penulis, waktu publikasi, tujuan, dan bukti pendukung.&lt;/li&gt;
        &lt;li&gt;Peramban memiliki fitur tab, bookmark, riwayat, mode incognito, ekstensi, dan indikator keamanan HTTPS.&lt;/li&gt;
        &lt;li&gt;Layanan komunikasi digital (email, chat, video conference) masing-masing punya etika penggunaannya sendiri.&lt;/li&gt;
        &lt;li&gt;Media kolaborasi daring memungkinkan penyuntingan dokumen bersama secara real-time dengan pengaturan akses viewer/commenter/editor.&lt;/li&gt;
        &lt;li&gt;Netiket, verifikasi hoaks, dan keamanan/privasi data adalah dasar berinternet secara bertanggung jawab.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== TUGAS KELOMPOK ===================== --&gt;
  &lt;section class="section" id="tugas"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;08&lt;/span&gt; Aktivitas Belajar&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tugas Kelompok&lt;/h2&gt;

    &lt;div class="task-panel"&gt;
      &lt;div class="task-head"&gt;
        &lt;span class="badge"&gt;Kerja Kelompok · 4–5 orang&lt;/span&gt;
        &lt;span class="badge" style="background:var(--accent-dark); color:#fff;"&gt;40 menit diskusi + 20 menit presentasi&lt;/span&gt;
      &lt;/div&gt;
      &lt;h3&gt;Riset &amp; Kolaborasi: Menyusun Artikel Digital Menggunakan Mesin Pencari dan Google Docs&lt;/h3&gt;
      &lt;p&gt;Setiap kelompok melakukan riset singkat tentang sebuah topik teknologi terkini, lalu menyusun hasilnya bersama-sama dalam satu dokumen kolaboratif secara real-time.&lt;/p&gt;

      &lt;ol class="steps-num"&gt;
        &lt;li&gt;&lt;strong&gt;Bentuk kelompok&lt;/strong&gt; beranggotakan 4–5 orang dan tentukan satu topik riset (mis. "Perkembangan Kecerdasan Buatan di Indonesia" atau topik lain yang disetujui guru).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Gunakan mesin pencari&lt;/strong&gt; dengan minimal 2 operator pencarian berbeda (mis. tanda kutip dan site:) untuk menemukan sumber informasi yang relevan.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Evaluasi kredibilitas&lt;/strong&gt; minimal 3 sumber yang ditemukan berdasarkan penulis, waktu publikasi, dan tujuan konten.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Buat satu dokumen Google Docs&lt;/strong&gt; bersama, atur pengaturan berbagi agar seluruh anggota kelompok memiliki akses Editor.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Susun artikel ringkas&lt;/strong&gt; hasil riset secara kolaboratif — seluruh anggota menyunting dokumen yang sama secara bersamaan, lengkap dengan daftar sumber yang digunakan.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Presentasikan&lt;/strong&gt; hasil artikel dan proses kolaborasi kelompok di depan kelas selama maksimal 5 menit per kelompok.&lt;/li&gt;
      &lt;/ol&gt;

      &lt;h3 class="sub-title" style="margin-top:26px;"&gt;Format Laporan&lt;/h3&gt;
      &lt;p&gt;Dokumen memuat: (1) judul &amp; anggota kelompok, (2) daftar kata kunci/operator pencarian yang digunakan, (3) tabel evaluasi kredibilitas 3 sumber, (4) isi artikel ringkas beserta daftar sumber, (5) tautan (link) dokumen Google Docs kelompok.&lt;/p&gt;

      &lt;h3 class="sub-title"&gt;Rubrik Penilaian&lt;/h3&gt;
      &lt;div class="table-scroll"&gt;&lt;table class="rubrik"&gt;
        &lt;tr&gt;&lt;th&gt;Aspek&lt;/th&gt;&lt;th&gt;Indikator&lt;/th&gt;&lt;th&gt;Skor Maks.&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Strategi Pencarian&lt;/td&gt;&lt;td&gt;Operator pencarian digunakan dengan tepat dan efektif menemukan sumber relevan&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Evaluasi Kredibilitas&lt;/td&gt;&lt;td&gt;Evaluasi sumber logis dan sesuai kriteria (penulis, waktu, tujuan, bukti)&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kualitas Artikel&lt;/td&gt;&lt;td&gt;Isi artikel jelas, runtut, dan didukung sumber yang valid&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Bukti Kolaborasi&lt;/td&gt;&lt;td&gt;Dokumen menunjukkan kontribusi nyata seluruh anggota secara real-time&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kerja Sama &amp; Presentasi&lt;/td&gt;&lt;td&gt;Seluruh anggota berkontribusi; presentasi jelas dan percaya diri&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td colspan="2" style="text-align:right; font-weight:600;"&gt;Total&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="closing-task"&gt;
      &lt;div class="lbl"&gt;Penutup Pembelajaran · Tugas Individu&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Tulislah satu kesimpulan ringkas (5–7 kalimat) di buku catatan kalian masing-masing&lt;/strong&gt;, yang merangkum keseluruhan materi hari ini: cara kerja mesin pencari dan strategi pencariannya, fitur-fitur peramban, etika layanan komunikasi digital, cara kerja media kolaborasi daring, serta pentingnya netiket dan keamanan digital. Tulis dengan bahasa dan pemahaman kalian sendiri, bukan menyalin ulang materi.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== KUIS INDIVIDU ===================== --&gt;
  &lt;section class="section" id="kuis"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;09&lt;/span&gt; Evaluasi Individu&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kuis Pilihan Ganda (25 Soal)&lt;/h2&gt;
    &lt;p&gt;Kerjakan seluruh soal berikut secara mandiri. Isi identitas kalian dengan benar — begitu tombol "Hitung &amp; Lihat Skor" ditekan, skor akan otomatis dihitung dan langsung terkirim ke guru.&lt;/p&gt;

    &lt;div class="quiz-panel"&gt;
      &lt;h3 class="sub-title"&gt;Identitas Peserta&lt;/h3&gt;
      &lt;p class="quiz-note"&gt;Pastikan No. Absen, Nama, dan Kelas diisi sesuai data sekolah agar skor tercatat dengan benar.&lt;/p&gt;
      &lt;div class="student-info"&gt;
        &lt;div class="field"&gt;&lt;label for="noAbsen"&gt;No. Absen&lt;/label&gt;&lt;input type="number" id="noAbsen" min="1" placeholder="mis. 12"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="nama"&gt;Nama Lengkap&lt;/label&gt;&lt;input type="text" id="nama" placeholder="Nama sesuai absensi"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="kelas"&gt;Kelas&lt;/label&gt;
          &lt;select id="kelas"&gt;
            &lt;option value=""&gt;-- Pilih Kelas --&lt;/option&gt;
            &lt;option value="X TB1"&gt;X TB1&lt;/option&gt;
            &lt;option value="X TB2"&gt;X TB2&lt;/option&gt;
            &lt;option value="X TO1"&gt;X TO1&lt;/option&gt;
            &lt;option value="X TO2"&gt;X TO2&lt;/option&gt;
            &lt;option value="X TJKT1"&gt;X TJKT1&lt;/option&gt;
            &lt;option value="X TJKT2"&gt;X TJKT2&lt;/option&gt;
          &lt;/select&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;h3 class="sub-title"&gt;Soal&lt;/h3&gt;
      &lt;div id="quizContainer"&gt;&lt;/div&gt;

      &lt;div class="quiz-actions"&gt;
        &lt;button id="btnHitung"&gt;Hitung &amp; Lihat Skor&lt;/button&gt;
        &lt;button id="btnKirim"&gt;Kirim Ulang ke Guru&lt;/button&gt;
        &lt;span id="quizMsg"&gt;&lt;/span&gt;
      &lt;/div&gt;

      &lt;div class="result-panel" id="resultPanel"&gt;
        &lt;div class="score-lbl"&gt;Skor Kamu&lt;/div&gt;
        &lt;div class="score" id="scoreValue"&gt;0&lt;/div&gt;
        &lt;p id="resultDetail"&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  INFORMATIKA · PENCARIAN INFORMASI DIGITAL &amp; KOLABORASI DARING · FASE E KELAS X SMK
&lt;/footer&gt;
&lt;/div&gt;

&lt;script&gt;
  // ============================================================
  // KONFIGURASI PENGIRIMAN SKOR KE GOOGLE SHEETS
  // ------------------------------------------------------------
  // Terhubung ke Google Apps Script Web App yang sudah di-deploy.
  // Kolom yang dikirim: no absen, nama, kelas, skor, judul materi.
  // Pastikan skrip doPost() di Apps Script sudah diperbarui agar
  // menerima 5 kolom tersebut (lihat instruksi terpisah).
  // ============================================================
  const GAS_ENDPOINT = "https://script.google.com/macros/s/AKfycbwKp7DrBTALJMlw8crjK7RgXIO8LVcU4yVEd9WJNs_vgSXkVxfw7fwkGbOT2IBNOjg3uQ/exec";
  const JUDUL_MATERI = "Pencarian Informasi Digital dan Kolaborasi Daring";

  const QUESTIONS = [
    { q: "Program/layanan yang berfungsi mencari informasi di internet berdasarkan kata kunci yang dimasukkan pengguna disebut...",
      opts: ["Peramban", "Mesin pencari", "Server", "Cloud storage", "Protokol"], correct: 1 },
    { q: "Proses mesin pencari menjelajahi dan mengumpulkan halaman-halaman web di internet disebut...",
      opts: ["Indexing", "Ranking", "Crawling", "Caching", "Rendering"], correct: 2 },
    { q: "Untuk mencari frasa yang harus muncul persis sama di hasil pencarian, kita dapat menggunakan operator pencarian berupa...",
      opts: ["Tanda minus (-)", "Tanda kutip (\" \")", "Tanda bintang (*)", "site:", "filetype:"], correct: 1 },
    { q: "Operator pencarian \"site:\" digunakan untuk...",
      opts: ["Mencari file dengan format tertentu", "Mengecualikan kata tertentu dari hasil pencarian", "Membatasi hasil pencarian hanya dari satu situs tertentu", "Mencari sinonim kata", "Menyorot kata kunci"], correct: 2 },
    { q: "Ketika mengevaluasi kredibilitas sebuah sumber informasi di internet, hal yang paling penting diperiksa adalah...",
      opts: ["Warna tampilan situs", "Penulis, sumber, dan waktu publikasi", "Jumlah iklan di halaman", "Panjang artikel", "Jumlah gambar dalam artikel"], correct: 1 },
    { q: "Perangkat lunak yang digunakan untuk mengakses dan menampilkan halaman web disebut...",
      opts: ["Mesin pencari", "Peramban (browser)", "Server", "Router", "Sistem operasi"], correct: 1 },
    { q: "Fitur peramban yang memungkinkan pengguna membuka banyak halaman dalam satu jendela sekaligus disebut...",
      opts: ["Bookmark", "Riwayat (history)", "Tab", "Ekstensi", "Cache"], correct: 2 },
    { q: "Mode penjelajahan pada peramban yang tidak menyimpan riwayat, cookie, dan data formulir setelah jendela ditutup disebut...",
      opts: ["Mode offline", "Mode incognito/private browsing", "Mode hemat data", "Mode pengembang", "Mode baca"], correct: 1 },
    { q: "Fitur peramban yang digunakan untuk menyimpan alamat situs favorit agar mudah diakses kembali disebut...",
      opts: ["Cache", "Bookmark", "Cookie", "Plugin", "Riwayat"], correct: 1 },
    { q: "Layanan komunikasi digital yang paling umum digunakan untuk mengirim surat elektronik formal, misalnya melamar kerja, adalah...",
      opts: ["Instant messaging", "Video conference", "Email", "Forum diskusi", "Media sosial"], correct: 2 },
    { q: "Etika menulis email yang baik antara lain...",
      opts: ["Menggunakan subjek email yang jelas dan relevan", "Menulis tanpa salam pembuka maupun penutup", "Menggunakan huruf kapital semua agar terlihat tegas", "Mengirim email tanpa memeriksa ulang isi pesan", "Menuliskan emoji berlebihan di setiap kalimat"], correct: 0 },
    { q: "Layanan yang memungkinkan pengguna melakukan pertemuan tatap muka secara daring melalui audio dan video disebut...",
      opts: ["Email", "Cloud storage", "Video conference", "Forum online", "Mesin pencari"], correct: 2 },
    { q: "Saat mengikuti video conference untuk keperluan sekolah, sikap yang tepat adalah...",
      opts: ["Mematikan mikrofon saat tidak berbicara agar tidak mengganggu", "Menyalakan mikrofon terus-menerus", "Bergabung tanpa memberi salam", "Mengabaikan instruksi moderator", "Membuka banyak aplikasi lain saat presentasi berlangsung"], correct: 0 },
    { q: "Layanan yang memungkinkan beberapa orang menyunting satu dokumen secara bersamaan dan real-time melalui internet disebut...",
      opts: ["Aplikasi pengolah kata offline", "Media kolaborasi daring, mis. Google Docs", "Peramban", "Mesin pencari", "Antivirus"], correct: 1 },
    { q: "Pada Google Docs, pengaturan akses \"Editor\" berarti pengguna yang diberi akses dapat...",
      opts: ["Hanya melihat dokumen", "Melihat dan memberi komentar saja", "Melihat, mengedit, dan mengubah isi dokumen", "Hanya mengunduh dokumen", "Menghapus akun pemilik dokumen"], correct: 2 },
    { q: "Salah satu manfaat utama media kolaborasi daring dalam kerja kelompok adalah...",
      opts: ["Mengharuskan semua anggota bertemu di tempat yang sama", "Memungkinkan anggota kelompok bekerja bersama tanpa harus bertemu langsung", "Menghilangkan kebutuhan untuk berdiskusi", "Membatasi jumlah anggota yang dapat mengakses dokumen", "Hanya dapat digunakan oleh satu orang dalam satu waktu"], correct: 1 },
    { q: "Fitur pada Google Docs yang memungkinkan pengguna melihat dan mengembalikan perubahan dokumen dari waktu ke waktu disebut...",
      opts: ["Version history/riwayat versi", "Mode incognito", "Bookmark", "Cache", "Filter pencarian"], correct: 0 },
    { q: "Etika berinternet yang baik, atau sering disebut \"netiket\", antara lain...",
      opts: ["Menyebarkan informasi tanpa memeriksa kebenarannya", "Berkomentar dengan sopan dan menghargai pendapat orang lain", "Menyalin karya orang lain tanpa mencantumkan sumber", "Membagikan data pribadi orang lain tanpa izin", "Mengirim pesan berantai tanpa verifikasi"], correct: 1 },
    { q: "Berita atau informasi yang sengaja dibuat menyesatkan dan tidak berdasarkan fakta disebut...",
      opts: ["Opini", "Hoaks", "Editorial", "Testimoni", "Riset ilmiah"], correct: 1 },
    { q: "Langkah paling tepat untuk memverifikasi kebenaran sebuah informasi yang beredar di internet adalah...",
      opts: ["Langsung membagikannya jika judulnya menarik", "Membandingkan dengan beberapa sumber terpercaya lain", "Mempercayainya karena dibagikan banyak orang", "Mengabaikan tanggal publikasinya", "Hanya membaca judul tanpa membaca isi berita"], correct: 1 },
    { q: "Tindakan yang sebaiknya dihindari saat berkolaborasi menggunakan dokumen daring bersama adalah...",
      opts: ["Memberi komentar yang membangun", "Menghapus atau mengubah pekerjaan anggota lain tanpa izin", "Menyimpan dokumen secara berkala", "Membagi tugas dengan jelas", "Berdiskusi melalui kolom komentar"], correct: 1 },
    { q: "Untuk menjaga privasi saat membagikan dokumen daring, sebaiknya pengaturan berbagi (sharing) diatur agar...",
      opts: ["Semua orang di internet dapat mengedit tanpa batasan", "Hanya orang/kelompok yang dituju yang memiliki akses sesuai kebutuhan", "Tidak perlu diatur karena internet selalu aman", "Dibagikan ke sebanyak mungkin orang agar cepat selesai", "Selalu diberi akses sebagai Editor untuk siapa pun"], correct: 1 },
    { q: "Ciri email atau pesan phishing yang patut diwaspadai antara lain...",
      opts: ["Dikirim dari alamat resmi yang dikenal dan terverifikasi", "Meminta data pribadi/kata sandi secara mendesak melalui tautan mencurigakan", "Tidak menyertakan tautan apa pun", "Berisi informasi resmi dari sekolah yang telah diverifikasi", "Menggunakan bahasa formal dan tidak terburu-buru"], correct: 1 },
    { q: "Sikap yang tepat ketika menemukan konten SARA atau ujaran kebencian saat berselancar atau berkolaborasi daring adalah...",
      opts: ["Ikut menyebarkannya agar viral", "Membalasnya dengan komentar yang sama kasarnya", "Tidak menyebarkan, dan melaporkan konten tersebut sesuai mekanisme platform", "Mengabaikannya tanpa melakukan apa pun", "Mengunduh dan menyimpannya untuk koleksi pribadi"], correct: 2 },
    { q: "Manfaat menggunakan operator dan strategi pencarian yang tepat pada mesin pencari adalah...",
      opts: ["Memperlambat proses pencarian", "Menghasilkan informasi yang lebih relevan dan sesuai kebutuhan", "Menyembunyikan seluruh hasil pencarian", "Menghapus riwayat pencarian secara otomatis", "Membuat peramban berhenti berfungsi"], correct: 1 }
  ];

  const LETTERS = ["A","B","C","D","E"];
  const container = document.getElementById('quizContainer');

  QUESTIONS.forEach((item, qi) =&gt; {
    const card = document.createElement('div');
    card.className = 'q-card';
    const num = document.createElement('div');
    num.className = 'q-num';
    num.textContent = 'SOAL ' + (qi+1) + ' / ' + QUESTIONS.length;
    const text = document.createElement('div');
    text.className = 'q-text';
    text.textContent = (qi+1) + '. ' + item.q;
    const opts = document.createElement('div');
    opts.className = 'options';

    item.opts.forEach((optText, oi) =&gt; {
      const label = document.createElement('label');
      label.className = 'opt';
      const input = document.createElement('input');
      input.type = 'radio';
      input.name = 'q' + qi;
      input.value = oi;
      input.addEventListener('change', () =&gt; {
        opts.querySelectorAll('.opt').forEach(o =&gt; o.classList.remove('selected'));
        label.classList.add('selected');
      });
      const span = document.createElement('span');
      span.textContent = LETTERS[oi] + '. ' + optText;
      label.appendChild(input);
      label.appendChild(span);
      opts.appendChild(label);
    });

    card.appendChild(num);
    card.appendChild(text);
    card.appendChild(opts);
    container.appendChild(card);
  });

  let finalScore = null;

  document.getElementById('btnHitung').addEventListener('click', () =&gt; {
    const noAbsen = document.getElementById('noAbsen').value.trim();
    const nama = document.getElementById('nama').value.trim();
    const kelas = document.getElementById('kelas').value.trim();
    const msg = document.getElementById('quizMsg');

    if (!noAbsen || !nama || !kelas) {
      msg.textContent = 'Lengkapi No. Absen, Nama, dan Kelas terlebih dahulu.';
      return;
    }

    let answered = 0, correct = 0;
    QUESTIONS.forEach((item, qi) =&gt; {
      const picked = document.querySelector('input[name="q' + qi + '"]:checked');
      if (picked) {
        answered++;
        if (parseInt(picked.value) === item.correct) correct++;
      }
    });

    if (answered &lt; QUESTIONS.length) {
      msg.textContent = 'Masih ada ' + (QUESTIONS.length - answered) + ' soal yang belum dijawab.';
      return;
    }

    msg.textContent = '';
    finalScore = Math.round((correct / QUESTIONS.length) * 100);

    document.getElementById('scoreValue').textContent = finalScore;
    document.getElementById('resultDetail').textContent =
      'Jawaban benar: ' + correct + ' dari ' + QUESTIONS.length + ' soal. Skor sedang dikirim ke guru...';
    document.getElementById('resultPanel').style.display = 'block';

    kirimSkor(noAbsen, nama, kelas, finalScore);
  });

  function kirimSkor(noAbsen, nama, kelas, skor) {
    const msg = document.getElementById('quizMsg');
    const btnKirim = document.getElementById('btnKirim');
    const resultDetail = document.getElementById('resultDetail');

    if (GAS_ENDPOINT.indexOf('GANTI_DENGAN_URL_WEB_APP_ANDA') !== -1) {
      msg.textContent = 'Pengiriman belum aktif — guru perlu memasang URL Apps Script terlebih dahulu.';
      btnKirim.style.display = 'inline-block';
      return;
    }

    btnKirim.disabled = true;
    msg.textContent = 'Mengirim skor...';

    fetch(GAS_ENDPOINT, {
      method: 'POST',
      mode: 'no-cors',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ noAbsen: noAbsen, nama: nama, kelas: kelas, skor: skor, judulMateri: JUDUL_MATERI })
    }).then(() =&gt; {
      msg.textContent = 'Jawaban terkirim otomatis ke guru.';
      resultDetail.textContent = 'Jawaban benar: ' + Math.round(skor * QUESTIONS.length / 100) + ' dari ' + QUESTIONS.length + ' soal. Skor sudah terkirim ke guru.';
      btnKirim.style.display = 'none';
      btnKirim.disabled = false;
    }).catch(() =&gt; {
      msg.textContent = 'Gagal mengirim otomatis — klik "Kirim Ulang ke Guru", atau foto layar skor ini.';
      btnKirim.style.display = 'inline-block';
      btnKirim.disabled = false;
    });
  }

  document.getElementById('btnKirim').addEventListener('click', () =&gt; {
    const noAbsen = document.getElementById('noAbsen').value.trim();
    const nama = document.getElementById('nama').value.trim();
    const kelas = document.getElementById('kelas').value.trim();
    if (finalScore === null) return;
    kirimSkor(noAbsen, nama, kelas, finalScore);
  });
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/09/pencarian-informasi-digital-kolaborasi.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-863962356719859888</guid><pubDate>Fri, 21 Aug 2026 02:35:33 +0000</pubDate><atom:updated>2026-08-21T09:35:33.055+07:00</atom:updated><title>Menyajikan Teks Prosedur &amp; Rangkuman Materi Petunjuk Kerja</title><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&amp;family=Source+Sans+3:wght@400;500;600;700&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;display=swap');
.epb{
  --blueprint:#0F2A3D;
  --blueprint-deep:#0A1E2C;
  --panel:#4A2E12;
  --paper:#F3F0E6;
  --ink:#132029;
  --amber:#F5A623;
  --amber-deep:#C97F12;
  --mint:#6EC6CA;
  --line:rgba(234,242,245,0.16);
  --off-white:#EAF2F5;
  --muted:#9FB4C2;
}
.epb *{box-sizing:border-box;}
.epb{scroll-behavior:smooth; background:#0A1F2E;}
.epb{
  margin:0;
  position:relative;
  overflow:hidden;
  background:var(--blueprint);
  color:var(--off-white);
  font-family:'Source Sans 3',sans-serif;
  line-height:1.65;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 34px 34px;
}
.epb h1, .epb h2, .epb h3, .epb h4{font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.02em; margin:0 0 0.5em;}
.epb .mono{font-family:'IBM Plex Mono',monospace;}
.epb a{color:var(--amber);}
.epb .crop{position:absolute; width:22px; height:22px; z-index:5; opacity:.55; pointer-events:none;}
.epb .crop::before, .epb .crop::after{content:"";position:absolute;background:var(--mint);}
.epb .crop::before{width:100%;height:1px;top:50%;left:0;}
.epb .crop::after{width:1px;height:100%;left:50%;top:0;}
.epb .crop.tl{top:14px;left:14px;}
.epb .crop.tr{top:14px;right:14px;}
.epb .crop.bl{bottom:14px;left:14px;}
.epb .crop.br{bottom:14px;right:14px;}
.epb header.cover{
  position:relative;
  padding:40px 24px 36px;
  border-bottom:1px solid var(--line);
  overflow:hidden;
}
.epb .doc-code{font-family:'IBM Plex Mono',monospace; color:var(--amber); letter-spacing:0.15em; font-size:0.78rem; text-transform:uppercase; margin-bottom:18px; display:flex; gap:10px; align-items:center;}
.epb .doc-code::before{content:"◆"; color:var(--amber);}
.epb .cover h1{font-size:clamp(1.6rem,7vw,2.5rem); color:var(--off-white); max-width:16ch; line-height:1.05;}
.epb .cover .subtitle{color:var(--muted); font-size:1.05rem; max-width:60ch; margin-top:14px;}
.epb .meta-strip{
  margin-top:38px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border-top:1px dashed var(--line); border-bottom:1px dashed var(--line);
}
.epb .meta-strip div{padding:14px 16px; border-right:1px dashed var(--line);}
.epb .meta-strip div:last-child{border-right:none;}
.epb .meta-strip .k{font-family:'IBM Plex Mono',monospace; font-size:0.68rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.1em;}
.epb .meta-strip .v{font-size:0.98rem; color:var(--off-white); margin-top:4px; font-weight:600;}
.epb .stamp{
  position:absolute; top:40px; right:20px; width:104px; height:104px;
  border:2.5px solid var(--amber); border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  transform:rotate(-11deg);
  color:var(--amber); font-family:'IBM Plex Mono',monospace;
  text-align:center; font-size:0.62rem; letter-spacing:0.08em; text-transform:uppercase;
  opacity:0.9;
}
.epb .stamp .ring{position:absolute; inset:8px; border:1px dashed var(--amber); border-radius:50%;}
.epb .stamp b{display:block; font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:0.06em; margin-top:4px;}

@media (max-width:760px){.epb .stamp{display:none;}
.epb }


.epb main{max-width:920px; margin:0 auto; padding:0 20px 60px;}
.epb .section{padding-top:64px;}
.epb .eyebrow{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase; margin-bottom:10px; display:flex; align-items:center; gap:10px;}
.epb .eyebrow::after{content:""; flex:1; height:1px; background:var(--line);}
.epb h2.section-title{font-size:1.7rem; color:var(--off-white);}
.epb p{color:#DDE7EC;}
.epb .lead{color:var(--muted); font-size:1.02rem; max-width:72ch;}
.epb .panel{
  background:var(--panel); border:1px solid var(--line); border-radius:2px;
  padding:26px 28px; margin:22px 0;
}
.epb .panel.tp{border-left:4px solid var(--mint);}
.epb .panel.warn{border-left:4px solid var(--amber);}
.epb .tp-box{display:grid; gap:14px; margin-top:18px;}
.epb .tp-item{display:flex; gap:14px; align-items:flex-start;}
.epb .tp-item .idx{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; min-width:34px;}
.epb .flow{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:20px;}
.epb .flow .step{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px; position:relative;}
.epb .flow .step .tag{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;}
.epb .flow .step h4{font-size:1rem; margin-top:8px; color:var(--off-white);}
.epb .flow .step .time{position:absolute; top:16px; right:16px; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; color:var(--amber);}
.epb .grid-3{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-top:16px;}
.epb .card{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px;}
.epb .card h4{color:var(--amber); font-size:0.95rem;}
.epb .criteria{display:grid; gap:16px; margin-top:20px;}
.epb .crit{
  background:var(--blueprint-deep); border:1px solid var(--line);
  display:grid; grid-template-columns:64px 1fr; gap:0;
}
.epb .crit .num{
  background:var(--amber); color:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace;
  font-weight:700; display:flex; align-items:center; justify-content:center; font-size:1.05rem;
}
.epb .crit .body{padding:18px 20px;}
.epb .crit h4{color:var(--off-white); font-size:1.02rem; margin-bottom:6px;}
.epb .crit .q{margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); font-family:'IBM Plex Mono',monospace; font-size:0.86rem; color:var(--amber);}
.epb .timeline{margin-top:24px; position:relative; padding-left:34px;}
.epb .timeline::before{content:""; position:absolute; left:11px; top:6px; bottom:6px; width:2px; background:var(--line);}
.epb .tl-item{position:relative; padding-bottom:26px;}
.epb .tl-item:last-child{padding-bottom:0;}
.epb .tl-item::before{content:""; position:absolute; left:-34px; top:2px; width:22px; height:22px; border-radius:50%; background:var(--blueprint); border:2px solid var(--amber);}
.epb .tl-item h4{color:var(--off-white); font-size:1rem; margin-bottom:4px;}
.epb .doc-sample{
  background:var(--paper); color:var(--ink); border-radius:2px; padding:0; margin-top:22px;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .doc-sample .doc-head{background:var(--ink); color:var(--paper); padding:12px 22px; font-family:'IBM Plex Mono',monospace; font-size:0.75rem; letter-spacing:0.1em; text-transform:uppercase; display:flex; justify-content:space-between;}
.epb .doc-sample .doc-body{padding:26px 28px 30px;}
.epb .doc-sample h3{font-family:'Oswald',sans-serif; color:var(--ink); font-size:1.25rem; text-transform:none; letter-spacing:0;}
.epb .doc-sample ol{padding-left:22px;}
.epb .doc-sample li{margin-bottom:9px;}
.epb .flag{
  display:inline-block; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; font-weight:600;
  background:#D94E2A; color:#fff; padding:1px 7px; border-radius:2px; margin-left:6px; vertical-align:middle;
}
.epb .doc-sample .note-margin{margin-top:6px; font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:#8A3A1F; padding-left:8px; border-left:2px solid #D94E2A;}
.epb .legend{display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:16px;}
.epb .legend span{font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:var(--muted); display:flex; align-items:center; gap:8px;}
.epb .legend .dot{width:10px; height:10px; border-radius:50%; display:inline-block;}
.epb table{width:100%; border-collapse:collapse; margin-top:18px; font-size:0.94rem;}
.epb th, .epb td{border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top;}
.epb th{background:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace; font-size:0.75rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--amber);}
.epb .summary-box{
  border:1px solid var(--amber); background:linear-gradient(180deg, rgba(245,166,35,0.08), transparent);
  padding:24px 26px; margin-top:24px;
}
.epb .summary-box ul{margin:10px 0 0; padding-left:20px;}
.epb .summary-box li{margin-bottom:8px;}
.epb .task-header{
  background:var(--amber); color:var(--blueprint-deep); padding:22px 26px; margin-top:20px;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
}
.epb .task-header h2{color:var(--blueprint-deep); font-size:1.4rem; margin:0;}
.epb .task-header .badge{font-family:'IBM Plex Mono',monospace; font-size:0.8rem; background:var(--blueprint-deep); color:var(--amber); padding:6px 12px; border-radius:2px;}
.epb .steps-num{counter-reset:step; margin-top:18px; list-style:none; padding:0;}
.epb .steps-num li{counter-increment:step; position:relative; padding-left:44px; margin-bottom:16px;}
.epb .steps-num li::before{content:counter(step,decimal-leading-zero); position:absolute; left:0; top:0; font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; font-size:0.95rem; border:1px solid var(--amber); width:30px; height:26px; display:flex; align-items:center; justify-content:center;}
.epb .rubric-scale{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px;}
.epb .rubric-scale div{background:var(--blueprint-deep); border:1px solid var(--line); padding:12px; text-align:center;}
.epb .rubric-scale .n{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:1.3rem; font-weight:700;}
.epb .rubric-scale .l{font-size:0.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:0.05em;}
.epb .notebook{
  background:repeating-linear-gradient(var(--paper), var(--paper) 33px, #D8D3C2 34px);
  color:var(--ink); border-radius:2px; padding:28px 30px; margin-top:20px; position:relative;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .notebook::before{content:""; position:absolute; left:46px; top:0; bottom:0; width:1.5px; background:#C0453A; opacity:0.5;}
.epb .notebook .content{padding-left:24px;}
.epb .notebook h3{color:var(--ink); font-family:'Oswald',sans-serif; letter-spacing:0.02em; margin-bottom:10px;}
.epb .notebook ul{padding-left:20px;}
.epb footer{border-top:1px solid var(--line); padding:24px 20px 40px; color:var(--muted); font-size:0.86rem;}
.epb footer .doc-code{margin-bottom:10px;}
.epb .divider-dash{border:none; border-top:1px dashed var(--line); margin:44px 0 0;}
.epb::selection{background:var(--amber); color:var(--blueprint-deep);}

&lt;/style&gt;
&lt;div class="epb"&gt;
&lt;div class="crop tl"&gt;&lt;/div&gt;&lt;div class="crop tr"&gt;&lt;/div&gt;&lt;div class="crop bl"&gt;&lt;/div&gt;&lt;div class="crop br"&gt;&lt;/div&gt;

&lt;header class="cover"&gt;
  &lt;div class="stamp"&gt;&lt;div class="ring"&gt;&lt;/div&gt;&lt;span&gt;Modul Ajar&lt;b&gt;Terverifikasi&lt;/b&gt;Fase F&lt;/span&gt;&lt;/div&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-SAJIKAN — 3 JP · 1 Pertemuan&lt;/div&gt;
  &lt;h1&gt;Menyajikan Teks Prosedur &amp;amp; Rangkuman Materi Petunjuk Kerja&lt;/h1&gt;
  &lt;p class="subtitle"&gt;Materi Bahasa Indonesia Kelas XI SMK/MAK — melatih murid menyajikan teks prosedur secara lisan/tulisan sekaligus mereview seluruh materi pokok bahasan Petunjuk Kerja.&lt;/p&gt;

  &lt;div class="meta-strip"&gt;
    &lt;div&gt;&lt;div class="k"&gt;Mata Pelajaran&lt;/div&gt;&lt;div class="v"&gt;Bahasa Indonesia&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK/MAK — Kelas XI&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Elemen&lt;/div&gt;&lt;div class="v"&gt;Berbicara, Menulis &amp;amp; Memirsa&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;3 JP (3 × 45 menit)&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;!-- ============ TUJUAN PEMBELAJARAN ============ --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="eyebrow"&gt;01 — Identitas Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Capaian &amp;amp; Tujuan Pembelajaran&lt;/h2&gt;

    &lt;div class="panel tp"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Capaian Pembelajaran (Elemen Berbicara, Menulis &amp;amp; Memirsa)&lt;/div&gt;
      &lt;p&gt;Murid mampu menyajikan gagasan dan hasil karya berupa teks prosedur secara lisan maupun tulisan dengan struktur dan kaidah kebahasaan yang tepat, serta mampu mereview pemahamannya terhadap materi yang telah dipelajari.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="panel"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Tujuan Pembelajaran&lt;/div&gt;
      &lt;p style="font-size:1.05rem; color:var(--off-white); font-weight:600;"&gt;Murid mampu menyajikan teks prosedur yang telah dibuat secara lisan/tulisan dan mereview seluruh materi pokok bahasan petunjuk kerja.&lt;/p&gt;

      &lt;div class="tp-box"&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.1&lt;/span&gt;&lt;p&gt;Murid dapat menyajikan teks prosedur secara lisan dengan intonasi, artikulasi, dan sikap yang tepat.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.2&lt;/span&gt;&lt;p&gt;Murid dapat menyajikan teks prosedur secara tulisan dengan struktur dan kaidah kebahasaan yang benar.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.3&lt;/span&gt;&lt;p&gt;Murid dapat mereview kembali materi evaluasi informasi, perbandingan teks, dan kaidah kebahasaan teks prosedur.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.4&lt;/span&gt;&lt;p&gt;Murid dapat menjawab pertanyaan reviu materi pokok bahasan petunjuk kerja secara mandiri.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="eyebrow" style="margin-top:26px; margin-bottom:6px;"&gt;8 Profil Lulusan yang Dikembangkan&lt;/div&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Komunikasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyajikan teks prosedur secara lisan dan tulisan dengan jelas.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kemandirian&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Mengerjakan reviu materi secara mandiri.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kolaborasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Bekerja sama menyiapkan dan menyajikan teks prosedur kelompok.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penalaran Kritis&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Mereview dan menghubungkan seluruh materi yang telah dipelajari.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI A: RECAP SELURUH UNIT ============ --&gt;
  &lt;section class="section" id="materi-a"&gt;
    &lt;div class="eyebrow"&gt;02 — Materi Inti A&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengingat Kembali Materi Pokok Bahasan "Petunjuk Kerja"&lt;/h2&gt;
    &lt;p class="lead"&gt;Sebelum menyajikan teks prosedur, mari mengingat kembali seluruh materi yang telah dipelajari pada pokok bahasan Petunjuk Kerja.&lt;/p&gt;

    &lt;div class="timeline"&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;01 · Evaluasi Informasi dalam Teks Prosedur&lt;/h4&gt;&lt;p&gt;Menilai keakuratan, kelengkapan, kelogisan urutan, kejelasan bahasa, kesesuaian tujuan, dan keselamatan sebuah teks prosedur.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;02 · Membandingkan Teks Prosedur dengan Teks Lain&lt;/h4&gt;&lt;p&gt;Menemukan persamaan dan perbedaan teks prosedur dengan teks eksplanasi berdasarkan tujuan, struktur, dan kebahasaan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;03 · Kaidah Kebahasaan Teks Prosedur (Bagian 1)&lt;/h4&gt;&lt;p&gt;Mengidentifikasi kalimat imperatif, deklaratif, persuasif, dan konjungsi temporal.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;04 · Kaidah Kebahasaan (Bagian 2) &amp;amp; Menyusun Teks Prosedur&lt;/h4&gt;&lt;p&gt;Menganalisis kalimat perintah, kata teknis, penanda wacana, serta menyusun teks prosedur baru.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;05 · Menyajikan Teks Prosedur (Materi Hari Ini)&lt;/h4&gt;&lt;p&gt;Menyajikan teks prosedur yang telah disusun secara lisan maupun tulisan kepada audiens.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI B: MENYAJIKAN LISAN ============ --&gt;
  &lt;section class="section" id="materi-b"&gt;
    &lt;div class="eyebrow"&gt;03 — Materi Inti B&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Menyajikan Teks Prosedur secara Lisan&lt;/h2&gt;
    &lt;p class="lead"&gt;Menyajikan teks prosedur secara lisan berarti menyampaikan langkah-langkah tersebut secara langsung di hadapan pendengar.&lt;/p&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Intonasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Naik-turunnya nada suara untuk menekankan bagian penting.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Artikulasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Kejelasan pelafalan setiap kata agar mudah dipahami pendengar.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Sikap &amp;amp; Kepercayaan Diri&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Berdiri tegak, tenang, dan yakin saat menyajikan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kontak Mata&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Memandang audiens secara merata, tidak hanya membaca naskah.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kecepatan Bicara&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Tidak terlalu cepat maupun terlalu lambat.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Bahasa Tubuh&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Gestur yang mendukung penjelasan, bukan mengganggu.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI C: MENYAJIKAN TULISAN ============ --&gt;
  &lt;section class="section" id="materi-c"&gt;
    &lt;div class="eyebrow"&gt;04 — Materi Inti C&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Menyajikan Teks Prosedur secara Tulisan&lt;/h2&gt;
    &lt;p class="lead"&gt;Menyajikan teks prosedur secara tulisan berarti menuangkan langkah-langkah dalam bentuk teks yang dapat dibaca, seperti artikel, poster, atau infografis.&lt;/p&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kerapian Struktur&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Tujuan, alat/bahan, dan langkah tersusun jelas dan berurutan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Ejaan &amp;amp; Tanda Baca&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Penulisan sesuai kaidah bahasa Indonesia yang baku.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kejelasan Langkah&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Setiap langkah ditulis ringkas namun tidak ambigu.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Media Visual Pendukung&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Dapat disertai gambar, diagram, atau foto agar lebih mudah dipahami.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI D: PERBEDAAN LISAN &amp; TULISAN ============ --&gt;
  &lt;section class="section" id="materi-d"&gt;
    &lt;div class="eyebrow"&gt;05 — Materi Inti D&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Perbedaan Menyajikan secara Lisan dan Tulisan&lt;/h2&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Aspek&lt;/th&gt;&lt;th&gt;Penyajian Lisan&lt;/th&gt;&lt;th&gt;Penyajian Tulisan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Media&lt;/td&gt;&lt;td&gt;Suara dan bahasa tubuh&lt;/td&gt;&lt;td&gt;Teks dan visual pendukung&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kelebihan&lt;/td&gt;&lt;td&gt;Interaktif, bisa tanya jawab langsung&lt;/td&gt;&lt;td&gt;Dapat dibaca ulang dan disimpan lama&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kekurangan&lt;/td&gt;&lt;td&gt;Sulit diulang, bergantung pada memori pembicara&lt;/td&gt;&lt;td&gt;Tidak ada interaksi langsung dengan audiens&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penilaian Utama&lt;/td&gt;&lt;td&gt;Intonasi, artikulasi, sikap, kontak mata&lt;/td&gt;&lt;td&gt;Struktur, ejaan, kejelasan langkah&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI E: LANGKAH MENYAJIKAN ============ --&gt;
  &lt;section class="section" id="materi-e"&gt;
    &lt;div class="eyebrow"&gt;06 — Materi Inti E&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Langkah-Langkah Menyajikan Teks Prosedur&lt;/h2&gt;

    &lt;div class="timeline"&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;01 · Memahami Isi Teks&lt;/h4&gt;&lt;p&gt;Membaca ulang teks prosedur yang akan disajikan agar benar-benar dipahami.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;02 · Menyiapkan Media Bantu&lt;/h4&gt;&lt;p&gt;Menyiapkan alat peraga, gambar, atau catatan poin penting bila diperlukan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;03 · Berlatih Menyajikan&lt;/h4&gt;&lt;p&gt;Berlatih menyampaikan secara lisan dengan intonasi dan kecepatan yang tepat.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;04 · Menyajikan di Depan Audiens&lt;/h4&gt;&lt;p&gt;Menyampaikan teks prosedur dengan percaya diri, jelas, dan runtut.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;05 · Menerima Umpan Balik&lt;/h4&gt;&lt;p&gt;Menerima masukan dari pendengar untuk perbaikan penyajian berikutnya.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI F: TABEL RANGKUMAN SELURUH UNIT ============ --&gt;
  &lt;section class="section" id="materi-f"&gt;
    &lt;div class="eyebrow"&gt;07 — Materi Inti F&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Seluruh Materi Pokok Bahasan "Petunjuk Kerja"&lt;/h2&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:26%;"&gt;Sub-Materi&lt;/th&gt;&lt;th&gt;Poin Kunci&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Evaluasi Informasi&lt;/td&gt;&lt;td&gt;6 kriteria: keakuratan, kelengkapan, kelogisan urutan, kejelasan bahasa, kesesuaian tujuan, keselamatan/kelayakan&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Membandingkan Teks&lt;/td&gt;&lt;td&gt;Teks prosedur mengarahkan tindakan; teks eksplanasi menjelaskan proses agar dipahami&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kaidah Kebahasaan (1)&lt;/td&gt;&lt;td&gt;Kalimat imperatif, deklaratif, persuasif, dan konjungsi temporal&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kaidah Kebahasaan (2) &amp;amp; Menyusun&lt;/td&gt;&lt;td&gt;Kalimat perintah, kata teknis, penanda wacana, dan 5 langkah menyusun teks prosedur&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Menyajikan Teks Prosedur&lt;/td&gt;&lt;td&gt;Penyajian lisan (intonasi, artikulasi, sikap) dan tulisan (struktur, ejaan, kejelasan)&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ PEMODELAN ============ --&gt;
  &lt;section class="section" id="contoh"&gt;
    &lt;div class="eyebrow"&gt;08 — Pemodelan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Contoh Penerapan: Cuplikan Naskah Penyajian Lisan&lt;/h2&gt;
    &lt;p class="lead"&gt;Guru membacakan dan membahas bersama cuplikan berikut sebagai model penyajian sebelum murid berlatih dalam kelompok.&lt;/p&gt;

    &lt;div class="doc-sample"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Cuplikan Naskah Presentasi&lt;/span&gt;&lt;span&gt;Dokumen-01&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Menyajikan Prosedur "Mengisi Daya Ponsel dengan Aman"&lt;/h3&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;&lt;i&gt;"Selamat pagi, teman-teman. Pada kesempatan ini, kelompok kami akan menyajikan teks prosedur berjudul 'Mengisi Daya Ponsel dengan Aman'."&lt;/i&gt; &lt;b&gt;(pembukaan — kontak mata ke seluruh audiens)&lt;/b&gt;&lt;/p&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;&lt;i&gt;"Tujuan dari prosedur ini adalah agar pengisian daya ponsel dilakukan dengan aman dan tidak merusak baterai."&lt;/i&gt; &lt;b&gt;(kalimat deklaratif — disampaikan dengan intonasi datar dan jelas)&lt;/b&gt;&lt;/p&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;&lt;i&gt;"Pertama, pastikan menggunakan kabel dan adaptor asli sesuai spesifikasi ponsel."&lt;/i&gt; &lt;b&gt;(kalimat perintah dengan konjungsi temporal — intonasi naik pada kata "pertama")&lt;/b&gt;&lt;/p&gt;
        &lt;p style="margin:10px 0 0; color:#132029 !important;"&gt;&lt;i&gt;"Dengan demikian, ponsel akan lebih awet dan aman digunakan dalam jangka panjang. Terima kasih atas perhatiannya."&lt;/i&gt; &lt;b&gt;(penutup — kecepatan bicara diperlambat, sikap tenang)&lt;/b&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="panel" style="margin-top:22px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Simpulan model penyajian:&lt;/b&gt; Naskah di atas menunjukkan pembukaan yang jelas, penekanan intonasi pada kata kunci ("pertama", "dengan demikian"), serta penutup yang tenang dan sopan — semua ini mendukung penyampaian yang mudah dipahami audiens.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN ============ --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="eyebrow"&gt;09 — Ringkasan Materi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Poin-Poin Penting&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;ul&gt;
        &lt;li&gt;Menyajikan teks prosedur secara lisan menekankan intonasi, artikulasi, sikap, kontak mata, kecepatan bicara, dan bahasa tubuh.&lt;/li&gt;
        &lt;li&gt;Menyajikan teks prosedur secara tulisan menekankan kerapian struktur, ejaan, kejelasan langkah, dan media visual pendukung.&lt;/li&gt;
        &lt;li&gt;Penyajian lisan bersifat interaktif namun sulit diulang, sedangkan penyajian tulisan dapat dibaca ulang namun tidak interaktif.&lt;/li&gt;
        &lt;li&gt;Seluruh materi pokok bahasan Petunjuk Kerja mencakup evaluasi informasi, perbandingan teks, kaidah kebahasaan, penyusunan, dan penyajian teks prosedur.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS KELOMPOK ============ --&gt;
  &lt;section class="section" id="tugas-kelompok"&gt;
    &lt;div class="eyebrow"&gt;10 — Lembar Kerja&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Kelompok: Menyajikan Teks Prosedur Hasil Karya Kelompok&lt;/h2&gt;
      &lt;span class="badge"&gt;Durasi ± 60 menit&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Tujuan tugas:&lt;/b&gt; Murid secara berkelompok menyajikan teks prosedur yang telah disusun pada pertemuan sebelumnya secara lisan di depan kelas, dengan memperhatikan intonasi, artikulasi, dan sikap penyajian yang tepat.&lt;/p&gt;

    &lt;h4 style="color:var(--off-white); margin-top:24px;"&gt;Petunjuk Pengerjaan&lt;/h4&gt;
    &lt;ol class="steps-num"&gt;
      &lt;li&gt;&lt;b&gt;Berkumpul dalam kelompok&lt;/b&gt; yang sama seperti saat menyusun teks prosedur pada pertemuan sebelumnya.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Baca ulang teks prosedur&lt;/b&gt; yang telah disusun kelompok, lalu tentukan pembagian bagian yang akan disampaikan tiap anggota.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Siapkan media bantu&lt;/b&gt; sederhana jika diperlukan (poin penting, gambar, atau alat peraga).&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Berlatih menyajikan&lt;/b&gt; secara lisan dalam kelompok sebelum tampil di depan kelas.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Sajikan teks prosedur&lt;/b&gt; di depan kelas selama maksimal 5 menit per kelompok, dilanjutkan umpan balik singkat dari guru dan kelompok lain.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Lembar Persiapan Penyajian&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:26%;"&gt;Bagian&lt;/th&gt;&lt;th&gt;Catatan Persiapan Kelompok&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Judul Teks Prosedur&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pembagian Penyaji&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Media Bantu yang Digunakan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Bagian yang Perlu Ditekankan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Rubrik Penilaian Presentasi Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Aspek Penilaian&lt;/th&gt;&lt;th&gt;Skor 4 (Sangat Baik)&lt;/th&gt;&lt;th&gt;Skor 3 (Baik)&lt;/th&gt;&lt;th&gt;Skor 2 (Cukup)&lt;/th&gt;&lt;th&gt;Skor 1 (Kurang)&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Intonasi &amp;amp; Artikulasi&lt;/td&gt;&lt;td&gt;Jelas, tepat, mudah dipahami&lt;/td&gt;&lt;td&gt;Jelas namun kurang bervariasi&lt;/td&gt;&lt;td&gt;Kurang jelas di beberapa bagian&lt;/td&gt;&lt;td&gt;Sulit dipahami&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Sikap &amp;amp; Kontak Mata&lt;/td&gt;&lt;td&gt;Percaya diri, kontak mata merata&lt;/td&gt;&lt;td&gt;Cukup percaya diri&lt;/td&gt;&lt;td&gt;Kurang percaya diri, jarang kontak mata&lt;/td&gt;&lt;td&gt;Gugup, tidak ada kontak mata&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kejelasan Isi&lt;/td&gt;&lt;td&gt;Isi runtut dan mudah diikuti&lt;/td&gt;&lt;td&gt;Isi cukup runtut&lt;/td&gt;&lt;td&gt;Ada bagian yang membingungkan&lt;/td&gt;&lt;td&gt;Isi tidak runtut&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kekompakan Kelompok&lt;/td&gt;&lt;td&gt;Seluruh anggota berperan aktif&lt;/td&gt;&lt;td&gt;Sebagian besar anggota aktif&lt;/td&gt;&lt;td&gt;Hanya sebagian kecil anggota aktif&lt;/td&gt;&lt;td&gt;Didominasi satu orang&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS INDIVIDU: KUIS 25 PERTANYAAN ============ --&gt;
  &lt;section class="section" id="tugas-individu"&gt;
    &lt;div class="eyebrow"&gt;11 — Penutup Pembelajaran&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Individu: Reviu 25 Pertanyaan Materi Petunjuk Kerja&lt;/h2&gt;
      &lt;span class="badge"&gt;Dikerjakan Mandiri · Otomatis Bernilai&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Petunjuk:&lt;/b&gt; Isi No. Absen dan Nama, lalu jawab 25 pertanyaan pilihan ganda (5 opsi) berikut yang mereviu seluruh materi pokok bahasan Petunjuk Kerja — terdiri atas 10 soal tingkat mudah, 10 soal tingkat sedang, dan 5 soal tingkat sulit. Skor akan muncul otomatis dan hasilnya tercatat otomatis.&lt;/p&gt;

    &lt;div class="panel" id="epbq-form-wrap" style="margin-top:20px;"&gt;
      &lt;div style="display:grid; grid-template-columns:1fr 2fr; gap:14px; margin-bottom:22px;"&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;No. Absen&lt;/label&gt;
          &lt;input id="epbq-absen" type="text" inputmode="numeric" placeholder="Contoh: 12" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;Nama Lengkap&lt;/label&gt;
          &lt;input id="epbq-nama" type="text" placeholder="Tulis nama lengkap" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div id="epbq-questions"&gt;&lt;/div&gt;

      &lt;div style="margin-top:24px; display:flex; align-items:center; gap:16px; flex-wrap:wrap;"&gt;
        &lt;button id="epbq-submit" type="button" style="background:var(--amber); color:var(--blueprint-deep); border:none; padding:12px 26px; font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.05em; font-weight:600; border-radius:2px; cursor:pointer; font-size:0.95rem;"&gt;Kirim Jawaban&lt;/button&gt;
        &lt;span id="epbq-status" class="mono" style="font-size:0.85rem; color:var(--muted);"&gt;&lt;/span&gt;
      &lt;/div&gt;

      &lt;div id="epbq-result" style="display:none; margin-top:20px; padding:18px 20px; border:1px solid var(--amber); background:rgba(245,166,35,0.08);"&gt;
        &lt;p style="margin:0; font-size:1.05rem;"&gt;Skor kamu: &lt;b id="epbq-score" style="color:var(--amber); font-size:1.3rem;"&gt;&lt;/b&gt; / 100&lt;/p&gt;
        &lt;p id="epbq-detail" style="margin:8px 0 0; font-size:0.9rem; color:var(--muted);"&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;script&gt;
(function(){
  var EPBQ_ENDPOINT = "https://script.google.com/macros/s/AKfycbzM7t2qgAENzxQJXzSYJYL28R6nb3TxJVELLL3CopyEXb51t_gRtrkPOxTpI5mq6VCEKw/exec";
  var EPBQ_MATERI = "Menyajikan Teks Prosedur &amp; Rangkuman Materi Petunjuk Kerja";

  var questions = [
    {lvl:"Mudah", q:"1. Apa tujuan utama teks prosedur?", opts:["Menghibur pembaca","Mengarahkan pembaca melakukan tindakan","Menceritakan pengalaman pribadi","Membujuk pembaca membeli barang","Menjelaskan pendapat penulis"], correct:1},
    {lvl:"Mudah", q:"2. Bagian struktur teks prosedur yang berisi hasil akhir/catatan tambahan disebut...", opts:["Tujuan","Alat dan bahan","Langkah-langkah","Penutup/hasil","Interpretasi"], correct:3},
    {lvl:"Mudah", q:"3. Kalimat yang berisi perintah kepada pembaca disebut kalimat...", opts:["Deklaratif","Interogatif","Imperatif","Persuasif","Naratif"], correct:2},
    {lvl:"Mudah", q:"4. Kata penghubung yang menandai urutan waktu disebut konjungsi...", opts:["Kausalitas","Temporal","Pertentangan","Pilihan","Penjumlahan"], correct:1},
    {lvl:"Mudah", q:"5. Teks yang menjelaskan proses terjadinya suatu fenomena berdasarkan sebab-akibat disebut teks...", opts:["Prosedur","Eksplanasi","Deskripsi","Narasi","Anekdot"], correct:1},
    {lvl:"Mudah", q:"6. Istilah khusus dalam bidang keahlian tertentu disebut...", opts:["Konjungsi","Kata teknis","Kata baku","Kata ganti","Kata sifat"], correct:1},
    {lvl:"Mudah", q:"7. Kalimat yang membujuk pembaca agar mengikuti langkah dengan sungguh-sungguh disebut kalimat...", opts:["Imperatif","Deklaratif","Persuasif","Interogatif","Naratif"], correct:2},
    {lvl:"Mudah", q:"8. Manakah contoh konjungsi temporal?", opts:["Karena","Kemudian","Meskipun","Atau","Tetapi"], correct:1},
    {lvl:"Mudah", q:"9. Langkah pertama dalam menyusun teks prosedur adalah...", opts:["Merevisi teks","Menentukan tujuan","Menyajikan secara lisan","Mencari kata teknis","Menilai teks orang lain"], correct:1},
    {lvl:"Mudah", q:"10. Menyajikan teks prosedur secara lisan berarti menyampaikannya melalui...", opts:["Tulisan di buku","Berbicara di depan orang lain","Gambar diam","Video tanpa suara","Simbol"], correct:1},

    {lvl:"Sedang", q:"11. Berikut ini yang termasuk kriteria evaluasi teks prosedur, KECUALI...", opts:["Keakuratan","Kelengkapan","Kelogisan urutan","Kepopuleran penulis","Kesesuaian tujuan"], correct:3},
    {lvl:"Sedang", q:"12. Manakah pasangan yang tepat untuk membedakan teks prosedur dan teks eksplanasi?", opts:["Prosedur=memahami, Eksplanasi=melakukan","Prosedur=melakukan tindakan, Eksplanasi=memahami proses","Keduanya sama-sama persuasif","Keduanya tidak berstruktur","Keduanya tidak memakai konjungsi"], correct:1},
    {lvl:"Sedang", q:"13. \"Selain itu, pastikan area kerja dalam keadaan bersih.\" Kalimat tersebut mengandung penanda wacana jenis...", opts:["Urutan","Penambahan","Penekanan","Simpulan","Pertentangan"], correct:1},
    {lvl:"Sedang", q:"14. Kalimat \"Jangan sentuh permukaan yang masih panas\" termasuk kalimat perintah jenis...", opts:["Ajakan","Permintaan","Larangan","Deklaratif","Persuasif"], correct:2},
    {lvl:"Sedang", q:"15. Ciri kalimat deklaratif dalam teks prosedur adalah...", opts:["Selalu diakhiri tanda seru","Berupa kalimat berita tanpa perintah","Selalu menggunakan kata \"jangan\"","Selalu berupa pertanyaan","Menggunakan konjungsi temporal"], correct:1},
    {lvl:"Sedang", q:"16. Manakah contoh kata teknis bidang tata boga?", opts:["Karburator","Partisi","Marinasi","Ejector pin","Velg"], correct:2},
    {lvl:"Sedang", q:"17. Fungsi utama menyajikan teks prosedur secara tulisan dibanding lisan adalah...", opts:["Lebih cepat dipahami tanpa membaca","Dapat dibaca ulang dan disimpan","Tidak memerlukan struktur","Tidak perlu memperhatikan kaidah kebahasaan","Hanya bisa disampaikan satu arah"], correct:1},
    {lvl:"Sedang", q:"18. Ketika membandingkan dua teks, langkah setelah membaca kedua teks adalah...", opts:["Menyimpulkan langsung","Mengidentifikasi tujuan masing-masing teks","Menyajikan secara lisan","Menerbitkan teks","Menghapus salah satu teks"], correct:1},
    {lvl:"Sedang", q:"19. Aspek yang TIDAK termasuk penilaian presentasi lisan adalah...", opts:["Intonasi","Artikulasi","Sikap","Jumlah halaman naskah","Kontak mata"], correct:3},
    {lvl:"Sedang", q:"20. \"Dengan demikian, kompos siap digunakan sebagai pupuk.\" Kalimat ini menunjukkan penanda wacana jenis...", opts:["Penambahan","Penekanan","Simpulan","Urutan","Pertentangan"], correct:2},

    {lvl:"Sulit", q:"21. Sebuah teks prosedur menyebutkan takaran bahan yang tidak sesuai standar umum. Kekeliruan ini melanggar kriteria evaluasi...", opts:["Kelogisan urutan","Keakuratan","Kesesuaian tujuan","Kelengkapan","Keselamatan"], correct:1},
    {lvl:"Sulit", q:"22. Sebuah teks prosedur tidak mencantumkan langkah verifikasi hasil akhir, padahal langkah tersebut penting untuk memastikan keberhasilan. Kekurangan ini termasuk pelanggaran kriteria...", opts:["Keakuratan","Kelengkapan","Kejelasan bahasa","Konjungsi temporal","Kata teknis"], correct:1},
    {lvl:"Sulit", q:"23. Manakah simpulan yang PALING TEPAT membedakan teks prosedur dan teks eksplanasi berdasarkan hasil yang diharapkan bagi pembaca?", opts:["Keduanya menghasilkan tindakan yang sama","Prosedur menghasilkan tindakan, eksplanasi menghasilkan pemahaman","Keduanya hanya menghasilkan hiburan","Eksplanasi selalu lebih pendek daripada prosedur","Prosedur tidak memiliki tujuan"], correct:1},
    {lvl:"Sulit", q:"24. Sebuah kelompok menyusun teks prosedur dengan langkah yang runtut, namun saat presentasi lisan, anggota kelompok berbicara terbata-bata dan tidak melakukan kontak mata. Aspek apa yang paling perlu diperbaiki?", opts:["Struktur teks tulisan","Kaidah kebahasaan teks","Keterampilan penyajian lisan","Ketepatan kata teknis","Penanda wacana"], correct:2},
    {lvl:"Sulit", q:"25. Perhatikan kalimat: \"Pastikan sakelar dalam posisi mati, lalu periksa kabel secara berkala agar tidak terjadi korsleting.\" Kalimat tersebut menggabungkan ciri kebahasaan...", opts:["Kalimat deklaratif dan konjungsi kausalitas","Kalimat perintah dan konjungsi temporal","Kalimat persuasif dan kata teknis","Kalimat interogatif dan penanda simpulan","Kalimat naratif dan konjungsi temporal"], correct:1}
  ];

  var optLabels = ["A","B","C","D","E"];
  var lvlColor = {"Mudah":"#6EC6CA","Sedang":"#F5A623","Sulit":"#D94E2A"};

  var container = document.getElementById("epbq-questions");
  questions.forEach(function(item, idx){
    var block = document.createElement("div");
    block.style.marginBottom = "20px";
    block.style.paddingBottom = "16px";
    block.style.borderBottom = "1px dashed rgba(234,242,245,0.16)";

    var tag = document.createElement("span");
    tag.textContent = item.lvl;
    tag.style.display = "inline-block";
    tag.style.fontFamily = "'IBM Plex Mono', monospace";
    tag.style.fontSize = "0.68rem";
    tag.style.letterSpacing = "0.08em";
    tag.style.textTransform = "uppercase";
    tag.style.color = lvlColor[item.lvl] || "#9FB4C2";
    tag.style.border = "1px solid " + (lvlColor[item.lvl] || "#9FB4C2");
    tag.style.padding = "2px 8px";
    tag.style.marginBottom = "6px";
    block.appendChild(tag);

    var qEl = document.createElement("p");
    qEl.style.color = "#EAF2F5";
    qEl.style.fontWeight = "600";
    qEl.style.margin = "6px 0 8px";
    qEl.textContent = item.q;
    block.appendChild(qEl);

    item.opts.forEach(function(opt, oi){
      var label = document.createElement("label");
      label.style.display = "block";
      label.style.color = "#DDE7EC";
      label.style.fontSize = "0.92rem";
      label.style.margin = "4px 0";
      label.style.cursor = "pointer";

      var radio = document.createElement("input");
      radio.type = "radio";
      radio.name = "epbq-q" + idx;
      radio.value = oi;
      radio.style.marginRight = "8px";

      label.appendChild(radio);
      label.appendChild(document.createTextNode(optLabels[oi] + ". " + opt));
      block.appendChild(label);
    });

    container.appendChild(block);
  });

  document.getElementById("epbq-submit").addEventListener("click", function(){
    var absen = document.getElementById("epbq-absen").value.trim();
    var nama = document.getElementById("epbq-nama").value.trim();
    var statusEl = document.getElementById("epbq-status");

    if(!absen || !nama){
      statusEl.textContent = "Isi No. Absen dan Nama terlebih dahulu.";
      statusEl.style.color = "#F5A623";
      return;
    }

    var belumDijawab = [];
    var benar = 0;
    questions.forEach(function(item, idx){
      var checked = document.querySelector('input[name="epbq-q' + idx + '"]:checked');
      if(!checked){
        belumDijawab.push(idx+1);
      } else if(parseInt(checked.value,10) === item.correct){
        benar++;
      }
    });

    if(belumDijawab.length &gt; 0){
      statusEl.textContent = "Pertanyaan belum dijawab: nomor " + belumDijawab.join(", ");
      statusEl.style.color = "#F5A623";
      return;
    }

    var skor = benar * 4;
    document.getElementById("epbq-score").textContent = skor;
    document.getElementById("epbq-detail").textContent = "Menjawab benar " + benar + " dari 25 pertanyaan.";
    document.getElementById("epbq-result").style.display = "block";
    statusEl.textContent = "Mengirim hasil...";
    statusEl.style.color = "#9FB4C2";

    var payload = new URLSearchParams();
    payload.append("noAbsen", absen);
    payload.append("nama", nama);
    payload.append("skor", skor);
    payload.append("materi", EPBQ_MATERI);
    payload.append("waktu", new Date().toISOString());

    fetch(EPBQ_ENDPOINT, {
      method: "POST",
      mode: "no-cors",
      headers: {"Content-Type":"application/x-www-form-urlencoded"},
      body: payload.toString()
    }).then(function(){
      statusEl.textContent = "Hasil berhasil dikirim ke guru.";
      statusEl.style.color = "#6EC6CA";
    }).catch(function(){
      statusEl.textContent = "Skor tercatat di halaman ini, namun pengiriman gagal. Tunjukkan skor ini ke guru.";
      statusEl.style.color = "#F5A623";
    });
  });
})();
&lt;/script&gt;

&lt;/main&gt;

&lt;footer&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-SAJIKAN — Fokus Tujuan Pembelajaran, Materi Inti, Tugas Kelompok &amp;amp; Reviu 25 Soal, 1× pertemuan (3 JP)&lt;/div&gt;
  &lt;p style="margin:0;"&gt;Referensi: Kurikulum Merdeka — Capaian Pembelajaran Bahasa Indonesia Fase F (Elemen Berbicara, Menulis, dan Memirsa); Buku Teks Bahasa Indonesia Kelas XI SMK/MAK Kemendikbudristek.&lt;/p&gt;
&lt;/footer&gt;
&lt;/div&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/menyajikan-teks-prosedur-rangkuman.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-3058660478422290104</guid><pubDate>Thu, 20 Aug 2026 03:08:59 +0000</pubDate><atom:updated>2026-08-20T10:10:03.035+07:00</atom:updated><title>SERTIFKAT KOMBEL KE 9</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Generator Sertifikat&lt;/title&gt;

&lt;link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&amp;display=swap" rel="stylesheet"&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"&gt;&lt;/script&gt;

&lt;style&gt;

body{
    font-family:Arial,sans-serif;
    background:#eef2f7;
    padding:20px;
    max-width:700px;
    margin:auto;
}

.card{
    background:white;
    padding:24px;
    border-radius:20px;
    box-shadow:0 10px 20px rgba(0,0,0,.1);
}

h2{
    text-align:center;
    color:#1e4668;
}

.confirm-box{
    background:#f0f6ff;
    border-left:5px solid #2c7da0;
    padding:16px;
    border-radius:16px;
    margin-bottom:20px;
    text-align:center;
}

.confirm-box p{
    margin-top:0;
    font-weight:bold;
    color:#1e4668;
}

.confirm-buttons{
    display:flex;
    gap:10px;
    margin-top:10px;
}

.confirm-buttons button{
    flex:1;
}

.yes-btn{
    background:#1f8a4c;
}

.yes-btn:hover{
    background:#166638;
}

.no-btn{
    background:#c0392b;
}

.no-btn:hover{
    background:#962d22;
}

input,select,button{
    width:100%;
    padding:12px;
    margin-top:10px;
    border-radius:12px;
    border:1px solid #ccc;
    font-size:16px;
}

button{
    background:#2c7da0;
    color:white;
    border:none;
    cursor:pointer;
    font-weight:bold;
}

button:hover{
    background:#1f5e7a;
}

button:disabled{
    background:#94a3b8;
    cursor:not-allowed;
}

input:disabled,
select:disabled{
    background:#f1f5f9;
}

#preview{
    width:100%;
    border-radius:12px;
    margin-top:10px;
}

.loading{
    display:none;
    margin-top:15px;
    color:#1e4668;
    font-weight:bold;
    text-align:center;
}

.status{
    margin-top:12px;
    font-weight:bold;
}

.success{
    color:#1f8a4c;
}

.error{
    color:#c0392b;
}

&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="card"&gt;

&lt;h2&gt;&#128220; Generator Sertifikat&lt;/h2&gt;

&lt;!-- ================= KONFIRMASI ================= --&gt;

&lt;div class="confirm-box"&gt;

&lt;p&gt;&#128269; Apakah Anda mengikuti pelatihan?&lt;/p&gt;

&lt;div class="confirm-buttons"&gt;

&lt;button class="yes-btn" onclick="confirmIkut()"&gt;
✅ YA, IKUT
&lt;/button&gt;

&lt;button class="no-btn" onclick="confirmTidakIkut()"&gt;
❌ TIDAK
&lt;/button&gt;

&lt;/div&gt;

&lt;div id="statusKonfirmasi" class="status"&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ================= FORM ================= --&gt;

&lt;label&gt;Nama Lengkap&lt;/label&gt;

&lt;input
type="text"
id="nama"
placeholder="Contoh: Ahmad Fauzi"
disabled&gt;

&lt;label&gt;Peran&lt;/label&gt;

&lt;select id="peran" disabled&gt;
    &lt;option&gt;Peserta&lt;/option&gt;
    &lt;option&gt;Narasumber&lt;/option&gt;
&lt;/select&gt;

&lt;img
id="preview"
src="https://lh3.googleusercontent.com/d/17OvHkbTI7cLyTZiZiL2gJykxyIQ1s44Z"
alt="Template"&gt;

&lt;button
id="downloadBtn"
onclick="generatePDF()"
disabled&gt;

⬇️ UNDUH PDF

&lt;/button&gt;

&lt;div class="loading" id="loading"&gt;
Memproses PDF...
&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

// ================= TEMPLATE (DIUBAH) =================

const FILE_ID =
'17OvHkbTI7cLyTZiZiL2gJykxyIQ1s44Z';  // &lt;-- ID baru

const TEMPLATE_URL =
`https://lh3.googleusercontent.com/d/${FILE_ID}`;

// ================= UTIL =================

function showLoading(show){

    document.getElementById('loading').style.display =
        show ? 'block' : 'none';

}

function getRomanMonth(monthIndex){

    const romawi = [
        "I","II","III","IV","V","VI",
        "VII","VIII","IX","X","XI","XII"
    ];

    return romawi[monthIndex];

}

function capitalizeEachWord(text){

    return text
        .toLowerCase()
        .replace(/\b\w/g,c=&gt;c.toUpperCase());

}

// ================= KONFIRMASI =================

function confirmIkut(){

    document.getElementById('nama').disabled = false;

    document.getElementById('peran').disabled = false;

    document.getElementById('downloadBtn').disabled = false;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="success"&gt;✅ Konfirmasi diterima. Anda dapat mengunduh sertifikat.&lt;/span&gt;';

}

function confirmTidakIkut(){

    document.getElementById('nama').disabled = true;

    document.getElementById('peran').disabled = true;

    document.getElementById('downloadBtn').disabled = true;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="error"&gt;❌ Anda tidak dapat mengunduh sertifikat.&lt;/span&gt;';

}

// ================= LOAD IMAGE =================

function loadImage(url){

    return new Promise((resolve,reject)=&gt;{

        const img = new Image();

        img.crossOrigin = "anonymous";

        img.onload = ()=&gt;resolve(img);

        img.onerror = ()=&gt;{

            reject(
                new Error(
                    'Template Google Drive gagal dimuat'
                )
            );

        };

        img.src = url + '?t=' + Date.now();

    });

}

// ================= NOMOR =================

async function generateNomor(){

    const now = new Date();

    const bulan =
        getRomanMonth(now.getMonth());

    const tahun =
        now.getFullYear();

    const nomor =
        Math.floor(Math.random()*900)+100;

    return `${nomor}/K/${bulan}/${tahun}`;

}

// ================= PDF =================

async function generatePDF(){

    const namaInput =
        document.getElementById('nama');

    const peranSelect =
        document.getElementById('peran');

    let nama =
        namaInput.value.trim();

    const peran =
        peranSelect.value;

    if(!nama){

        alert('Nama wajib diisi');

        return;

    }

    nama =
        capitalizeEachWord(nama);

    showLoading(true);

    try{

        await document.fonts.ready;

        const img =
            await loadImage(TEMPLATE_URL);

        const canvas =
            document.createElement('canvas');

        canvas.width = img.width;
        canvas.height = img.height;

        const ctx =
            canvas.getContext('2d');

        ctx.drawImage(
            img,
            0,
            0,
            canvas.width,
            canvas.height
        );

        // ================= POSISI =================

        const nomorY =
            canvas.height * 0.235;

        const namaY =
            canvas.height * 0.3990;

        const peranY =
            canvas.height * 0.5420;

        // ================= STYLE =================

        ctx.textAlign = 'center';

        ctx.textBaseline = 'middle';

        ctx.fillStyle = '#000';

        // nomor
        const nomorSertifikat =
            await generateNomor();

        ctx.font =
            `bold ${canvas.width*0.0125}px Montserrat`;

        ctx.fillText(
            nomorSertifikat,
            canvas.width/2,
            nomorY
        );

        // nama auto shrink
        let fontSize =
            canvas.width * 0.031;

        ctx.font =
            `700 ${fontSize}px Montserrat`;

        let textWidth =
            ctx.measureText(nama).width;

        const maxWidth =
            canvas.width - 180;

        while(
            textWidth &gt; maxWidth &amp;&amp;
            fontSize &gt; 20
        ){

            fontSize -= 2;

            ctx.font =
                `700 ${fontSize}px Montserrat`;

            textWidth =
                ctx.measureText(nama).width;

        }

        ctx.fillText(
            nama,
            canvas.width/2,
            namaY
        );

        // peran
        ctx.font =
            `bold ${canvas.width*0.024}px Montserrat`;

        ctx.fillText(
            peran,
            canvas.width/2,
            peranY
        );

        // ================= PDF =================

        const imageData =
            canvas.toDataURL(
                'image/jpeg',
                1.0
            );

        const { jsPDF } =
            window.jspdf;

        const pdf =
            new jsPDF({

                orientation:
                    canvas.width &gt; canvas.height
                    ? 'landscape'
                    : 'portrait',

                unit:'px',

                format:[
                    canvas.width,
                    canvas.height
                ]

            });

        pdf.addImage(
            imageData,
            'JPEG',
            0,
            0,
            canvas.width,
            canvas.height
        );

        const safeName =
            nama.replace(/[^a-z0-9]/gi,'_');

        pdf.save(
            `Sertifikat_${safeName}.pdf`
        );

    }catch(error){

        console.error(error);

        alert(
            '❌ Gagal membuat PDF\n\n' +
            error.message +
            '\n\nPastikan file Google Drive bersifat PUBLIC.'
        );

    }finally{

        showLoading(false);

    }

}

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/sertifkat-kombel-ke-9.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://lh3.googleusercontent.com/d/17OvHkbTI7cLyTZiZiL2gJykxyIQ1s44Z=s72-c" width="72"/><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-9087345521102818853</guid><pubDate>Wed, 19 Aug 2026 07:24:53 +0000</pubDate><atom:updated>2026-08-20T14:49:14.439+07:00</atom:updated><title>Jaringan Komputer, Internet, &amp; Keamanan Digital</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Jaringan Komputer, Internet, &amp; Keamanan Digital — Informatika Kelas X&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&amp;family=IBM+Plex+Sans:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;style&gt;
  :root{
    --bg: #0B1B2B;
    --bg-deep: #071320;
    --node: #38BDF8;
    --node-dim: rgba(56,189,248,0.3);
    --secure: #22C55E;
    --alert: #F87171;
    --amber: #F2B84B;
    --paper: #FBFCFD;
    --ink: #16232E;
    --ink-soft: #4B5B6B;
    --line: #DCE3EA;
    --radius:6px;
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{ font-family:'IBM Plex Sans', sans-serif; background: var(--bg); color: var(--ink); line-height:1.6; }
  .mono{font-family:'IBM Plex Mono', monospace;}

  /* ===== Hero with network nodes ===== */
  header.hero{ position:relative; overflow:hidden; padding: 60px 6vw 56px; color:#EAF2FA; }
  header.hero::before{
    content:""; position:absolute; inset:0;
    background-image: radial-gradient(var(--node-dim) 1.5px, transparent 1.5px);
    background-size: 26px 26px;
    opacity:0.5;
  }
  header.hero .content{position:relative; z-index:1;}
  .eyebrow{
    font-family:'IBM Plex Mono', monospace; font-size:0.78rem; letter-spacing:0.16em; text-transform:uppercase;
    color: var(--node); display:flex; align-items:center; gap:10px; margin-bottom:20px;
  }
  .eyebrow::before{ content:""; width:10px; height:10px; border:1.5px solid var(--node); border-radius:50%; box-shadow:0 0 0 3px var(--node-dim); }
  h1.title{
    font-family:'IBM Plex Mono', monospace; font-weight:700;
    font-size: clamp(1.9rem, 4.2vw, 3.4rem); line-height:1.14; max-width: 19ch; color:#FFFFFF;
  }
  h1.title span{color: var(--node);}
  .hero-sub{ margin-top:18px; max-width: 64ch; font-size:1.04rem; color:#EAF2FA; }
  .meta-strip{
    margin-top:36px; display:grid; grid-template-columns: repeat(auto-fit,minmax(160px,1fr)); gap:1px;
    background: var(--node-dim); border:1px solid var(--node-dim); max-width: 940px;
  }
  .meta-cell{ background: var(--bg-deep); padding:14px 16px; }
  .meta-cell .k{ font-family:'IBM Plex Mono', monospace; font-size:0.66rem; letter-spacing:0.1em; text-transform:uppercase; color: var(--node); opacity:0.9; }
  .meta-cell .v{ margin-top:6px; font-size:0.94rem; font-weight:600; color:#F1F6FA; }

  /* ===== Content shell ===== */
  main{ background: var(--paper); border-radius:18px 18px 0 0; margin-top:-18px; position:relative; z-index:2; padding: 8px 0 0; }
  .section{ padding: 54px 6vw; max-width: 1180px; margin: 0 auto; border-bottom:1px solid #E7EAEE; }
  .section:last-of-type{border-bottom:none;}
  .section-tag{
    font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.14em; text-transform:uppercase;
    color: var(--ink-soft); display:flex; align-items:center; gap:10px; margin-bottom:10px;
  }
  .section-tag .num{ color:#fff; background: var(--bg); padding:3px 8px; border-radius:3px; font-weight:600; }
  h2.section-title{ font-family:'IBM Plex Mono', monospace; font-size: clamp(1.35rem, 2.3vw, 1.9rem); font-weight:700; color: var(--bg); margin-bottom: 22px; max-width: 32ch; }
  h3.sub-title{ font-family:'IBM Plex Mono', monospace; font-size:1.06rem; font-weight:600; color: var(--bg); margin: 26px 0 12px; display:flex; align-items:center; gap:10px; }
  h3.sub-title::before{ content:""; width:8px;height:8px; background: var(--node); display:inline-block; border-radius:1px; }
  p{ color:#2C3B4A; max-width: 74ch; margin-bottom: 14px;}
  strong{color:var(--bg);}
  ul, ol{ margin: 8px 0 18px 1.3em; max-width: 74ch;}
  li{margin-bottom:8px; color:#2C3B4A;}

  .callout{ border-left: 3px solid var(--node); background: #EAF6FD; padding: 16px 20px; border-radius: 0 6px 6px 0; margin: 18px 0; max-width: 74ch; }
  .callout .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase; color:#0E6E9C; font-weight:700; margin-bottom:6px; }
  .callout.warn{ border-left-color: var(--alert); background:#FDEEEC; }
  .callout.warn .lbl{ color:#B9392A; }
  .callout.secure{ border-left-color: var(--secure); background:#EBF9F0; }
  .callout.secure .lbl{ color:#177A43; }

  /* ===== Cards ===== */
  .card-grid{ display:grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin: 20px 0 8px; }
  @media (max-width: 860px){ .card-grid{grid-template-columns: 1fr;} }
  .card{ background: var(--paper); border: 1.5px solid var(--bg); border-radius: var(--radius); padding: 20px; }
  .card .tag{ font-family:'IBM Plex Mono', monospace; font-size:0.66rem; letter-spacing:0.1em; text-transform:uppercase; color:#fff; background: var(--bg); padding:3px 8px; border-radius:3px; display:inline-block; margin-bottom:12px; }
  .card h4{ font-family:'IBM Plex Mono', monospace; font-size:0.98rem; margin-bottom:8px; color:var(--bg); }
  .card p{font-size:0.89rem; margin-bottom:0;}

  table.compare{ width:100%; border-collapse:collapse; margin:18px 0; font-size:0.9rem; }
  table.compare th, table.compare td{ border:1px solid var(--line); padding:11px 14px; text-align:left; }
  table.compare th{ background: var(--bg); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.74rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.compare tr:nth-child(even) td{ background:#F4F6F8; }

  /* ===== Diagram ===== */
  .diagram-frame{ margin: 26px 0; background: var(--bg-deep); border-radius: 8px; padding: 18px; border: 1px solid var(--node-dim); }
  .diagram-frame svg{width:100%; height:auto; display:block;}
  .diagram-caption{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--node); text-align:center; margin-top:10px; letter-spacing:0.03em; }
  .signal{ stroke-dasharray: 6 8; animation: flow 1.6s linear infinite; }
  @keyframes flow{ to{ stroke-dashoffset:-56; } }
  @media (prefers-reduced-motion: reduce){ .signal{animation:none;} }

  /* ===== Summary ===== */
  .summary-box{ background: var(--bg); color: #fff; border-radius: 8px; padding: 26px 28px; margin-top: 10px; }
  .summary-box h4{ font-family:'IBM Plex Mono', monospace; color: var(--node); font-size:0.85rem; letter-spacing:0.08em; text-transform:uppercase; margin-bottom:14px; }
  .summary-box ul{ margin:0 0 0 1.1em; max-width:none; }
  .summary-box li{ color:#DCEAF2; margin-bottom:8px; }

  /* ===== Tugas kelompok ===== */
  .task-panel{ border: 1.5px dashed var(--bg); border-radius: 8px; padding: 26px 28px; background: repeating-linear-gradient(135deg, #FBFCFD, #FBFCFD 18px, #EEF2F6 18px, #EEF2F6 19px); }
  .task-head{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:12px; }
  .task-head .badge{ font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.08em; text-transform:uppercase; background: var(--node); color:#062230; padding:4px 10px; border-radius:3px; font-weight:700;}
  .task-panel h3{ font-family:'IBM Plex Mono', monospace; font-size:1.22rem; color: var(--bg); }
  .steps-num{ counter-reset: step; margin:16px 0; max-width:78ch; }
  .steps-num li{ counter-increment: step; list-style:none; position:relative; padding-left:34px; margin-bottom:14px; }
  .steps-num li::before{ content: counter(step); position:absolute; left:0; top:0; font-family:'IBM Plex Mono', monospace; font-weight:700; color:#fff; background: var(--bg); width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:0.8rem; }
  table.rubrik{ width:100%; border-collapse:collapse; margin-top:18px; font-size:0.88rem; }
  table.rubrik th, table.rubrik td{ border:1px solid #C9CFD6; padding:10px 12px; text-align:left; }
  table.rubrik th{ background: var(--bg); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.75rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.rubrik tr:nth-child(even) td{ background:#EFF2F5; }

  .closing-task{ margin-top:22px; background: #FEF6EA; border:1.5px solid var(--amber); border-radius:8px; padding:20px 22px; }
  .closing-task .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.1em; text-transform:uppercase; color:#8A5A0A; font-weight:700; margin-bottom:8px; }

  /* ===== Quiz ===== */
  .quiz-panel{ background: var(--bg-deep); border-radius: 10px; padding: 30px 28px; color:#EAF2FA; }
  .quiz-panel h3.sub-title{ color:#EAF2FA; }
  .quiz-panel h3.sub-title::before{ background: var(--node); }
  .quiz-note{ font-size:0.88rem; color:#9FB4C6; max-width:74ch; margin-bottom:18px;}
  .student-info{ display:grid; grid-template-columns: repeat(3, 1fr); gap:14px; margin: 18px 0 30px; }
  @media (max-width:700px){ .student-info{grid-template-columns:1fr;} }
  .field label{ display:block; font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.06em; text-transform:uppercase; color: var(--node); margin-bottom:6px; }
  .field input, .field select{
    width:100%; padding:10px 12px; border-radius:5px; border:1px solid #2A4258; background:#0F2438; color:#EAF2FA; font-family:'IBM Plex Sans', sans-serif; font-size:0.94rem;
  }
  .field select{ cursor:pointer; }
  .field input:focus, .field select:focus{ outline:2px solid var(--node); }

  .q-card{ background:#0F2438; border:1px solid #23384B; border-radius:8px; padding:18px 20px; margin-bottom:14px; }
  .q-card .q-num{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--node); letter-spacing:0.08em; margin-bottom:6px; }
  .q-card .q-text{ font-size:0.98rem; color:#F1F6FA; margin-bottom:12px; font-weight:500; }
  .options{ display:flex; flex-direction:column; gap:8px; }
  .opt{ display:flex; align-items:flex-start; gap:10px; padding:9px 12px; border:1px solid #23384B; border-radius:5px; cursor:pointer; transition: border-color .15s, background .15s; }
  .opt:hover{ border-color: var(--node); }
  .opt input{ margin-top:3px; accent-color: var(--node); }
  .opt span{ font-size:0.9rem; color:#DDE8F0; }
  .opt.selected{ border-color: var(--node); background: rgba(56,189,248,0.08); }

  .quiz-actions{ margin-top:24px; display:flex; align-items:center; gap:16px; flex-wrap:wrap; }
  #btnHitung, #btnKirim{
    font-family:'IBM Plex Mono', monospace; font-weight:600; font-size:0.85rem; letter-spacing:0.04em;
    padding: 12px 22px; border-radius:6px; border:none; cursor:pointer;
  }
  #btnHitung{ background: var(--node); color:#062230; }
  #btnHitung:hover{ filter:brightness(1.08); }
  #btnKirim{ background: var(--secure); color:#062230; display:none; }
  #btnKirim:hover{ filter:brightness(1.08); }
  #btnKirim:disabled{ opacity:0.6; cursor:not-allowed; }
  #quizMsg{ font-family:'IBM Plex Mono', monospace; font-size:0.85rem; color: var(--amber); }

  .result-panel{
    display:none; margin-top:22px; background:#0F2438; border:1.5px solid var(--secure); border-radius:8px; padding:22px 24px;
  }
  .result-panel .score{ font-family:'IBM Plex Mono', monospace; font-size:2.4rem; font-weight:700; color: var(--secure); }
  .result-panel .score-lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.1em; text-transform:uppercase; color:#9FB4C6; }
  .result-panel p{ color:#DDE8F0; font-size:0.9rem; margin-top:10px; margin-bottom:0; }

  footer{ background: var(--bg-deep); color:#7E93A6; text-align:center; padding: 30px 6vw 40px; font-family:'IBM Plex Mono', monospace; font-size:0.75rem; letter-spacing:0.04em; }

  @media (max-width: 700px){
    .card-grid{grid-template-columns:1fr;}
    header.hero{padding:44px 5vw 40px;}
    .section{padding:38px 5vw;}
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;header class="hero" style="background:#0B1B2A; border-radius:10px;"&gt;
  &lt;div class="content"&gt;
    &lt;div class="eyebrow"&gt;Informatika · Fase E · Kelas X SMK&lt;/div&gt;
    &lt;h1 class="title" style="color:#FFFFFF; text-shadow:0 2px 6px rgba(0,0,0,0.55);"&gt;Jaringan Komputer, Internet, &amp; Keamanan &lt;span style="color:#38BDF8;"&gt;Digital&lt;/span&gt;&lt;/h1&gt;
    &lt;p class="hero-sub" style="color:#EAF2FA; text-shadow:0 1px 4px rgba(0,0,0,0.45);"&gt;Materi ini membahas bagaimana perangkat saling terhubung membentuk jaringan, bagaimana internet bekerja menghubungkan jaringan-jaringan di seluruh dunia, serta bagaimana menerapkan keamanan dasar dan enkripsi agar aktivitas digital kita tetap aman.&lt;/p&gt;

    &lt;div class="meta-strip"&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Elemen CP&lt;/div&gt;&lt;div class="v"&gt;Jaringan &amp; Keamanan Digital&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK Kelas X&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;1 Pertemuan · 4 JP (180 menit)&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Model&lt;/div&gt;&lt;div class="v"&gt;Diskusi, Kerja Kelompok &amp; Kuis&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;!-- ===================== TUJUAN ===================== --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;00&lt;/span&gt; Capaian &amp; Tujuan Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Ke Mana Materi Ini Menuju&lt;/h2&gt;

    &lt;h3 class="sub-title"&gt;Capaian Pembelajaran&lt;/h3&gt;
    &lt;p&gt;Murid mampu menjelaskan konsep jaringan komputer, konektivitas internet, perangkat jaringan, komunikasi data, serta menerapkan keamanan dasar dan enkripsi dalam penggunaan jaringan.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Tujuan Pembelajaran&lt;/h3&gt;
    &lt;ol&gt;
      &lt;li&gt;Menjelaskan konsep dasar jaringan komputer dan jenis-jenisnya berdasarkan jangkauan (PAN, LAN, MAN, WAN).&lt;/li&gt;
      &lt;li&gt;Menjelaskan konektivitas internet: ISP, alamat IP, DNS, dan protokol dasar (TCP/IP, HTTP/HTTPS).&lt;/li&gt;
      &lt;li&gt;Mengidentifikasi perangkat jaringan (router, switch, modem, access point, firewall) beserta fungsinya.&lt;/li&gt;
      &lt;li&gt;Menjelaskan konsep komunikasi data, termasuk bandwidth dan latency.&lt;/li&gt;
      &lt;li&gt;Menerapkan prinsip keamanan dasar dan enkripsi dalam penggunaan jaringan sehari-hari.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 class="sub-title"&gt;Rincian Kegiatan (4 JP × 45 menit)&lt;/h3&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Tahap&lt;/th&gt;&lt;th&gt;Kegiatan&lt;/th&gt;&lt;th&gt;Waktu&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pendahuluan&lt;/td&gt;&lt;td&gt;Apersepsi ("Bagaimana pesan yang kamu kirim bisa sampai ke HP temanmu dalam hitungan detik?"), penyampaian tujuan pembelajaran&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Eksplorasi Konsep&lt;/td&gt;&lt;td&gt;Penjelasan jaringan komputer, internet, perangkat jaringan, komunikasi data, dan keamanan digital&lt;/td&gt;&lt;td&gt;55 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Kerja Kelompok&lt;/td&gt;&lt;td&gt;Diskusi dan pengerjaan tugas kelompok merancang skema jaringan&lt;/td&gt;&lt;td&gt;40 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Presentasi&lt;/td&gt;&lt;td&gt;Presentasi singkat tiap kelompok dan tanggapan guru&lt;/td&gt;&lt;td&gt;20 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Kuis Individu&lt;/td&gt;&lt;td&gt;Mengerjakan 15 soal pilihan ganda secara mandiri melalui halaman ini&lt;/td&gt;&lt;td&gt;30 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penutup&lt;/td&gt;&lt;td&gt;Refleksi, penguatan konsep, menulis kesimpulan ringkas di buku catatan&lt;/td&gt;&lt;td&gt;20 menit&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;!-- ===================== A. JARINGAN KOMPUTER ===================== --&gt;
  &lt;section class="section" id="jaringan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;01&lt;/span&gt; Konsep Dasar&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Apa Itu Jaringan Komputer?&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Jaringan komputer&lt;/strong&gt; adalah kumpulan dua atau lebih perangkat (komputer, laptop, HP, printer, dsb.) yang saling terhubung melalui media kabel atau nirkabel, sehingga dapat saling berbagi data, aplikasi, dan sumber daya seperti printer atau koneksi internet.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Jenis Jaringan Berdasarkan Jangkauan&lt;/h3&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Jenis&lt;/th&gt;&lt;th&gt;Kepanjangan&lt;/th&gt;&lt;th&gt;Cakupan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;PAN&lt;/td&gt;&lt;td&gt;Personal Area Network&lt;/td&gt;&lt;td&gt;Sangat dekat, antar perangkat pribadi — mis. HP tersambung ke earphone via Bluetooth.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;LAN&lt;/td&gt;&lt;td&gt;Local Area Network&lt;/td&gt;&lt;td&gt;Satu ruangan atau gedung — mis. jaringan komputer di lab sekolah.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;MAN&lt;/td&gt;&lt;td&gt;Metropolitan Area Network&lt;/td&gt;&lt;td&gt;Satu kota — mis. jaringan yang menghubungkan beberapa kantor cabang dalam satu kota.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;WAN&lt;/td&gt;&lt;td&gt;Wide Area Network&lt;/td&gt;&lt;td&gt;Sangat luas, antar kota bahkan antar negara — internet adalah contoh WAN terbesar.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h3 class="sub-title"&gt;Topologi Jaringan&lt;/h3&gt;
    &lt;p&gt;Topologi adalah pola bagaimana perangkat-perangkat dalam jaringan diatur dan dihubungkan satu sama lain.&lt;/p&gt;
    &lt;div class="diagram-frame"&gt;
      &lt;svg viewBox="0 0 800 230" xmlns="http://www.w3.org/2000/svg"&gt;
        &lt;text x="400" y="24" text-anchor="middle" fill="#38BDF8" font-family="IBM Plex Mono, monospace" font-size="12" letter-spacing="2"&gt;TOPOLOGI STAR (paling umum di lab sekolah)&lt;/text&gt;
        &lt;circle cx="400" cy="120" r="22" fill="none" stroke="#F2B84B" stroke-width="2"/&gt;
        &lt;text x="400" y="125" text-anchor="middle" fill="#F2B84B" font-family="IBM Plex Mono, monospace" font-size="10"&gt;SWITCH&lt;/text&gt;
        &lt;g stroke="#38BDF8" stroke-width="2"&gt;
          &lt;line class="signal" x1="400" y1="98" x2="400" y2="45"/&gt;
          &lt;line class="signal" x1="420" y1="105" x2="620" y2="70"/&gt;
          &lt;line class="signal" x1="420" y1="135" x2="620" y2="170"/&gt;
          &lt;line class="signal" x1="380" y1="135" x2="180" y2="170"/&gt;
          &lt;line class="signal" x1="380" y1="105" x2="180" y2="70"/&gt;
        &lt;/g&gt;
        &lt;g fill="none" stroke="#EAF2FA" stroke-width="1.5"&gt;
          &lt;rect x="375" y="15" width="50" height="30" rx="3"/&gt;
          &lt;rect x="600" y="55" width="55" height="30" rx="3"/&gt;
          &lt;rect x="600" y="155" width="55" height="30" rx="3"/&gt;
          &lt;rect x="150" y="55" width="55" height="30" rx="3"/&gt;
          &lt;rect x="150" y="155" width="55" height="30" rx="3"/&gt;
        &lt;/g&gt;
        &lt;g fill="#EAF2FA" font-family="IBM Plex Mono, monospace" font-size="9" text-anchor="middle"&gt;
          &lt;text x="400" y="34"&gt;PC 1&lt;/text&gt;
          &lt;text x="627" y="74"&gt;PC 2&lt;/text&gt;
          &lt;text x="627" y="174"&gt;PC 3&lt;/text&gt;
          &lt;text x="177" y="74"&gt;PC 4&lt;/text&gt;
          &lt;text x="177" y="174"&gt;PC 5&lt;/text&gt;
        &lt;/g&gt;
      &lt;/svg&gt;
      &lt;div class="diagram-caption"&gt;Semua perangkat terhubung ke satu titik pusat (switch) — mudah dipasang &amp; ditelusuri jika ada gangguan pada satu perangkat.&lt;/div&gt;
    &lt;/div&gt;
    &lt;p&gt;Selain &lt;em&gt;star&lt;/em&gt;, dikenal juga topologi &lt;strong&gt;bus&lt;/strong&gt; (semua perangkat berbagi satu jalur kabel utama), &lt;strong&gt;ring&lt;/strong&gt; (perangkat terhubung membentuk lingkaran), &lt;strong&gt;mesh&lt;/strong&gt; (setiap perangkat saling terhubung langsung satu sama lain), dan &lt;strong&gt;tree&lt;/strong&gt; (gabungan beberapa topologi star bertingkat).&lt;/p&gt;
  &lt;/section&gt;

  &lt;!-- ===================== B. PERANGKAT JARINGAN ===================== --&gt;
  &lt;section class="section" id="perangkat"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;02&lt;/span&gt; Infrastruktur&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Perangkat Jaringan&lt;/h2&gt;
    &lt;p&gt;Sebuah jaringan membutuhkan beberapa perangkat keras khusus agar data dapat mengalir dengan benar antar perangkat.&lt;/p&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Penghubung Internet&lt;/span&gt;&lt;h4&gt;Router&lt;/h4&gt;&lt;p&gt;Menghubungkan jaringan lokal (LAN) ke jaringan lain/internet, serta menentukan jalur terbaik pengiriman data.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Penghubung Lokal&lt;/span&gt;&lt;h4&gt;Switch&lt;/h4&gt;&lt;p&gt;Menghubungkan banyak perangkat dalam satu LAN dan meneruskan data hanya ke perangkat tujuan yang tepat.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Konversi Sinyal&lt;/span&gt;&lt;h4&gt;Modem&lt;/h4&gt;&lt;p&gt;Mengubah sinyal digital dari komputer menjadi sinyal yang dapat dikirim lewat jalur ISP, dan sebaliknya.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Nirkabel&lt;/span&gt;&lt;h4&gt;Access Point&lt;/h4&gt;&lt;p&gt;Memancarkan sinyal Wi-Fi agar perangkat dapat terhubung ke jaringan tanpa kabel.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Kartu Jaringan&lt;/span&gt;&lt;h4&gt;NIC (Network Interface Card)&lt;/h4&gt;&lt;p&gt;Komponen di dalam perangkat yang memungkinkannya terhubung secara fisik ke jaringan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;span class="tag"&gt;Keamanan&lt;/span&gt;&lt;h4&gt;Firewall&lt;/h4&gt;&lt;p&gt;Menyaring dan mengendalikan lalu lintas data masuk/keluar jaringan berdasarkan aturan keamanan tertentu.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== C. INTERNET &amp; KOMUNIKASI DATA ===================== --&gt;
  &lt;section class="section" id="internet"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;03&lt;/span&gt; Konektivitas&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Internet &amp; Komunikasi Data&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Internet&lt;/strong&gt; adalah jaringan raksasa (WAN) yang menghubungkan jutaan jaringan komputer di seluruh dunia menggunakan aturan komunikasi yang sama, yaitu protokol &lt;strong&gt;TCP/IP&lt;/strong&gt;.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Istilah Kunci Konektivitas&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;ISP (Internet Service Provider)&lt;/strong&gt; — perusahaan penyedia layanan akses internet, mis. Telkom/IndiHome, Biznet, atau operator seluler.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IP Address&lt;/strong&gt; — alamat unik yang mengidentifikasi setiap perangkat dalam jaringan, seperti alamat rumah di dunia digital.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;DNS (Domain Name System)&lt;/strong&gt; — sistem yang menerjemahkan nama domain (mis. &lt;span class="mono"&gt;www.contoh.com&lt;/span&gt;) menjadi alamat IP yang dipahami komputer.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;HTTP/HTTPS&lt;/strong&gt; — protokol untuk mengakses halaman web; HTTPS menambahkan lapisan enkripsi agar data yang dikirim antara browser dan server lebih aman.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3 class="sub-title"&gt;Bandwidth &amp; Latency&lt;/h3&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Istilah&lt;/th&gt;&lt;th&gt;Penjelasan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Bandwidth&lt;/td&gt;&lt;td&gt;Kapasitas maksimum data yang dapat ditransmisikan dalam jaringan pada waktu tertentu — makin besar, makin banyak data yang bisa mengalir sekaligus.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Latency&lt;/td&gt;&lt;td&gt;Waktu tunda yang dibutuhkan data untuk berpindah dari satu titik ke titik lain — makin kecil, makin responsif koneksi terasa (penting untuk video call/game online).&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;!-- ===================== D. KEAMANAN DIGITAL ===================== --&gt;
  &lt;section class="section" id="keamanan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;04&lt;/span&gt; Perlindungan Data&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Keamanan Dasar &amp; Enkripsi&lt;/h2&gt;
    &lt;p&gt;Semakin banyak aktivitas dilakukan lewat jaringan, semakin penting pula memahami risiko dan cara melindungi data dari ancaman digital.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Ancaman Umum di Jaringan&lt;/h3&gt;
    &lt;div class="callout warn"&gt;
      &lt;div class="lbl"&gt;Waspadai&lt;/div&gt;
      &lt;ul style="margin:0 0 0 1.1em;"&gt;
        &lt;li&gt;&lt;strong&gt;Malware&lt;/strong&gt; — perangkat lunak berbahaya (virus, ransomware) yang merusak atau mencuri data.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Phishing&lt;/strong&gt; — upaya menipu pengguna agar memberikan data pribadi (mis. password) lewat tautan atau pesan palsu.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;DDoS (Distributed Denial of Service)&lt;/strong&gt; — serangan yang membanjiri server dengan lalu lintas palsu hingga layanan tidak bisa diakses.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Praktik Keamanan Dasar&lt;/h3&gt;
    &lt;div class="callout secure"&gt;
      &lt;div class="lbl"&gt;Langkah Perlindungan&lt;/div&gt;
      &lt;ul style="margin:0 0 0 1.1em;"&gt;
        &lt;li&gt;Gunakan &lt;strong&gt;kata sandi (password) yang kuat&lt;/strong&gt; dan berbeda untuk setiap akun.&lt;/li&gt;
        &lt;li&gt;Aktifkan &lt;strong&gt;autentikasi dua faktor (2FA)&lt;/strong&gt; untuk lapisan keamanan tambahan.&lt;/li&gt;
        &lt;li&gt;Selalu &lt;strong&gt;perbarui (update)&lt;/strong&gt; sistem operasi dan aplikasi untuk menutup celah keamanan.&lt;/li&gt;
        &lt;li&gt;Aktifkan &lt;strong&gt;firewall&lt;/strong&gt; dan gunakan &lt;strong&gt;VPN&lt;/strong&gt; saat mengakses jaringan publik yang tidak terpercaya.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Enkripsi&lt;/h3&gt;
    &lt;p&gt;&lt;strong&gt;Enkripsi&lt;/strong&gt; adalah proses mengubah data menjadi bentuk acak yang tidak dapat dibaca oleh pihak yang tidak berwenang, dan hanya dapat dikembalikan ke bentuk semula dengan kunci tertentu. Saat kalian mengakses situs dengan ikon gembok dan awalan &lt;span class="mono"&gt;https://&lt;/span&gt; di address bar, artinya data yang dikirim antara perangkat kalian dan server situs tersebut sudah dienkripsi.&lt;/p&gt;
  &lt;/section&gt;

  &lt;!-- ===================== E. HUBUNGAN ===================== --&gt;
  &lt;section class="section" id="hubungan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;05&lt;/span&gt; Keterkaitan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Hubungan Antar Konsep&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Perangkat jaringan&lt;/strong&gt; (router, switch, modem, access point) adalah fondasi fisik yang membentuk jaringan komputer.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Jaringan lokal&lt;/strong&gt; yang terhubung ke &lt;strong&gt;ISP&lt;/strong&gt; menjadi bagian dari &lt;strong&gt;internet&lt;/strong&gt; — jaringan global.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Komunikasi data&lt;/strong&gt; antar perangkat diatur oleh protokol standar (TCP/IP, HTTP/HTTPS) agar semua perangkat "berbicara bahasa yang sama".&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Keamanan digital dan enkripsi&lt;/strong&gt; melindungi seluruh proses komunikasi data ini dari pihak yang tidak berwenang.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;!-- ===================== F. RANGKUMAN ===================== --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;06&lt;/span&gt; Penguatan Konsep&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Materi&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;h4&gt;Poin-Poin Kunci&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Jaringan komputer menghubungkan dua atau lebih perangkat untuk berbagi data dan sumber daya, dengan jangkauan PAN, LAN, MAN, hingga WAN.&lt;/li&gt;
        &lt;li&gt;Topologi jaringan (star, bus, ring, mesh, tree) menentukan pola koneksi antar perangkat.&lt;/li&gt;
        &lt;li&gt;Perangkat jaringan utama meliputi router, switch, modem, access point, NIC, dan firewall.&lt;/li&gt;
        &lt;li&gt;Internet adalah WAN raksasa yang menghubungkan jaringan di seluruh dunia melalui protokol TCP/IP.&lt;/li&gt;
        &lt;li&gt;ISP menyediakan akses internet; IP address mengidentifikasi perangkat; DNS menerjemahkan nama domain menjadi IP.&lt;/li&gt;
        &lt;li&gt;Bandwidth menentukan kapasitas data, sedangkan latency menentukan kecepatan respons jaringan.&lt;/li&gt;
        &lt;li&gt;Ancaman digital meliputi malware, phishing, dan DDoS — dicegah dengan password kuat, 2FA, update rutin, firewall, dan VPN.&lt;/li&gt;
        &lt;li&gt;Enkripsi mengubah data menjadi bentuk aman, dan menjadi dasar dari koneksi HTTPS yang kita gunakan sehari-hari.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== TUGAS KELOMPOK ===================== --&gt;
  &lt;section class="section" id="tugas"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;07&lt;/span&gt; Aktivitas Belajar&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tugas Kelompok&lt;/h2&gt;

    &lt;div class="task-panel"&gt;
      &lt;div class="task-head"&gt;
        &lt;span class="badge"&gt;Kerja Kelompok · 4–5 orang&lt;/span&gt;
        &lt;span class="badge" style="background:var(--bg); color:#fff;"&gt;40 menit diskusi + 20 menit presentasi&lt;/span&gt;
      &lt;/div&gt;
      &lt;h3&gt;Merancang Skema Jaringan LAN untuk Laboratorium Komputer Sekolah&lt;/h3&gt;
      &lt;p&gt;Setiap kelompok berperan sebagai "tim IT sekolah" yang ditugaskan merancang jaringan LAN sederhana dan aman untuk sebuah laboratorium komputer.&lt;/p&gt;

      &lt;ol class="steps-num"&gt;
        &lt;li&gt;&lt;strong&gt;Bentuk kelompok&lt;/strong&gt; beranggotakan 4–5 orang, tentukan skenario: jumlah komputer di lab (mis. 15 unit) dan kebutuhan aksesnya ke internet.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Pilih topologi jaringan&lt;/strong&gt; yang paling sesuai untuk skenario tersebut, dan jelaskan alasan pemilihannya.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Tentukan perangkat jaringan&lt;/strong&gt; yang dibutuhkan (router, switch, kabel/access point, dsb.) beserta perkiraan jumlahnya.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Gambarkan skema jaringan sederhana&lt;/strong&gt; yang menunjukkan bagaimana seluruh komputer, perangkat jaringan, dan sambungan internet terhubung.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Rancang langkah keamanan dasar&lt;/strong&gt; untuk jaringan tersebut, misalnya kebijakan password Wi-Fi, penggunaan firewall, dan pembatasan akses pengguna.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Presentasikan&lt;/strong&gt; rancangan di depan kelas selama maksimal 5 menit per kelompok.&lt;/li&gt;
      &lt;/ol&gt;

      &lt;h3 class="sub-title" style="margin-top:26px;"&gt;Format Laporan&lt;/h3&gt;
      &lt;p&gt;Laporan memuat: (1) skenario &amp; anggota kelompok, (2) topologi pilihan beserta alasan, (3) daftar perangkat jaringan yang dibutuhkan, (4) gambar skema jaringan, (5) rancangan langkah keamanan dasar.&lt;/p&gt;

      &lt;h3 class="sub-title"&gt;Rubrik Penilaian&lt;/h3&gt;
      &lt;table class="rubrik"&gt;
        &lt;tr&gt;&lt;th&gt;Aspek&lt;/th&gt;&lt;th&gt;Indikator&lt;/th&gt;&lt;th&gt;Skor Maks.&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Ketepatan Topologi&lt;/td&gt;&lt;td&gt;Topologi yang dipilih sesuai skenario dan alasannya logis&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kelengkapan Perangkat&lt;/td&gt;&lt;td&gt;Perangkat jaringan yang disebutkan lengkap dan fungsinya tepat&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Skema Jaringan&lt;/td&gt;&lt;td&gt;Gambar skema jelas dan menunjukkan hubungan antar komponen dengan benar&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Aspek Keamanan&lt;/td&gt;&lt;td&gt;Langkah keamanan dasar relevan dan dapat diterapkan&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kerja Sama &amp; Presentasi&lt;/td&gt;&lt;td&gt;Seluruh anggota berkontribusi; presentasi jelas dan percaya diri&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td colspan="2" style="text-align:right; font-weight:600;"&gt;Total&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class="closing-task"&gt;
      &lt;div class="lbl"&gt;Penutup Pembelajaran · Tugas Individu&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Tulislah satu kesimpulan ringkas (5–7 kalimat) di buku catatan kalian masing-masing&lt;/strong&gt;, yang merangkum keseluruhan materi hari ini: konsep jaringan komputer, perangkat jaringan, cara kerja internet, komunikasi data, serta pentingnya keamanan dasar dan enkripsi. Tulis dengan bahasa dan pemahaman kalian sendiri, bukan menyalin ulang materi.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== KUIS INDIVIDU ===================== --&gt;
  &lt;section class="section" id="kuis"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;08&lt;/span&gt; Evaluasi Individu&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kuis Pilihan Ganda (15 Soal)&lt;/h2&gt;
    &lt;p&gt;Kerjakan seluruh soal berikut secara mandiri. Isi identitas kalian dengan benar sebelum mengirim jawaban — skor akan otomatis dihitung dan dikirim ke guru.&lt;/p&gt;

    &lt;div class="quiz-panel"&gt;
      &lt;h3 class="sub-title"&gt;Identitas Peserta&lt;/h3&gt;
      &lt;p class="quiz-note"&gt;Pastikan No. Absen, Nama, dan Kelas diisi sesuai data sekolah agar skor tercatat dengan benar.&lt;/p&gt;
      &lt;div class="student-info"&gt;
        &lt;div class="field"&gt;&lt;label for="noAbsen"&gt;No. Absen&lt;/label&gt;&lt;input type="number" id="noAbsen" min="1" placeholder="mis. 12"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="nama"&gt;Nama Lengkap&lt;/label&gt;&lt;input type="text" id="nama" placeholder="Nama sesuai absensi"&gt;&lt;/div&gt;
        &lt;div class="field"&gt;&lt;label for="kelas"&gt;Kelas&lt;/label&gt;
          &lt;select id="kelas"&gt;
            &lt;option value=""&gt;-- Pilih Kelas --&lt;/option&gt;
            &lt;option value="X TB1"&gt;X TB1&lt;/option&gt;
            &lt;option value="X TB2"&gt;X TB2&lt;/option&gt;
            &lt;option value="X TO1"&gt;X TO1&lt;/option&gt;
            &lt;option value="X TO2"&gt;X TO2&lt;/option&gt;
            &lt;option value="X TJKT1"&gt;X TJKT1&lt;/option&gt;
            &lt;option value="X TJKT2"&gt;X TJKT2&lt;/option&gt;
          &lt;/select&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;h3 class="sub-title"&gt;Soal&lt;/h3&gt;
      &lt;div id="quizContainer"&gt;&lt;/div&gt;

      &lt;div class="quiz-actions"&gt;
        &lt;button id="btnHitung"&gt;Hitung &amp; Lihat Skor&lt;/button&gt;
        &lt;button id="btnKirim"&gt;Kirim Ulang ke Guru&lt;/button&gt;
        &lt;span id="quizMsg"&gt;&lt;/span&gt;
      &lt;/div&gt;

      &lt;div class="result-panel" id="resultPanel"&gt;
        &lt;div class="score-lbl"&gt;Skor Kamu&lt;/div&gt;
        &lt;div class="score" id="scoreValue"&gt;0&lt;/div&gt;
        &lt;p id="resultDetail"&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== CONTOH JAWABAN TUGAS KELOMPOK ===================== --&gt;
  &lt;section class="section" id="jawaban-tugas"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;09&lt;/span&gt; Referensi Diskusi Kelompok&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Contoh Jawaban: Skema Jaringan LAN Laboratorium Komputer&lt;/h2&gt;

    &lt;div class="callout secure"&gt;
      &lt;div class="lbl"&gt;Catatan&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Bagian ini adalah &lt;strong&gt;contoh jawaban/kunci jawaban&lt;/strong&gt; untuk tugas kelompok di atas, disusun dari sudut pandang "Tim IT Sekolah" sebagai referensi Diskusi Kelompok hasil kerja murid. Skenario yang digunakan: laboratorium komputer dengan &lt;strong&gt;20 unit komputer siswa dan 1 unit komputer guru&lt;/strong&gt;, membutuhkan akses internet bersama dari satu sambungan ISP sekolah.&lt;/p&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;1. Pemilihan Topologi Jaringan&lt;/h3&gt;
    &lt;p&gt;Topologi yang dipilih adalah &lt;strong&gt;topologi star&lt;/strong&gt;, dengan seluruh komputer terhubung ke satu switch pusat. Alasan pemilihan:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;Jika satu kabel atau satu komputer bermasalah, komputer lain di lab tetap dapat terhubung ke jaringan — gangguan tidak menjalar ke seluruh jaringan seperti pada topologi bus.&lt;/li&gt;
      &lt;li&gt;Penambahan atau pengurangan komputer (mis. saat ada unit rusak/diganti) sangat mudah dilakukan tanpa mengganggu komputer lain.&lt;/li&gt;
      &lt;li&gt;Pelacakan gangguan (troubleshooting) lebih sederhana karena setiap jalur kabel dapat diperiksa satu per satu dari switch pusat.&lt;/li&gt;
      &lt;li&gt;Topologi ini paling umum dan paling sesuai untuk skala satu ruangan/lab dengan jumlah perangkat menengah (± 20 unit).&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3 class="sub-title"&gt;2. Perangkat Jaringan yang Dibutuhkan&lt;/h3&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Perangkat&lt;/th&gt;&lt;th&gt;Perkiraan Jumlah&lt;/th&gt;&lt;th&gt;Fungsi dalam Skema&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Modem&lt;/td&gt;&lt;td&gt;1 unit&lt;/td&gt;&lt;td&gt;Menghubungkan jaringan sekolah ke jalur internet dari ISP.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Router (dengan firewall &amp; DHCP)&lt;/td&gt;&lt;td&gt;1 unit&lt;/td&gt;&lt;td&gt;Membagi alamat IP otomatis ke seluruh perangkat dan menjadi lapisan keamanan pertama jaringan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Switch 24-port&lt;/td&gt;&lt;td&gt;1 unit&lt;/td&gt;&lt;td&gt;Menghubungkan seluruh 21 komputer (20 siswa + 1 guru) dalam satu jaringan lokal.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Access Point&lt;/td&gt;&lt;td&gt;1 unit&lt;/td&gt;&lt;td&gt;Menyediakan akses Wi-Fi terbatas untuk perangkat guru/tamu tanpa perlu kabel tambahan.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kabel UTP Cat6 + konektor RJ45&lt;/td&gt;&lt;td&gt;± 21 jalur kabel&lt;/td&gt;&lt;td&gt;Media penghubung fisik dari switch ke setiap komputer.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;UPS (Uninterruptible Power Supply)&lt;/td&gt;&lt;td&gt;1 unit&lt;/td&gt;&lt;td&gt;Menjaga router dan switch tetap menyala saat listrik padam mendadak, mencegah kerusakan perangkat.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h3 class="sub-title"&gt;3. Skema Jaringan&lt;/h3&gt;
    &lt;div class="diagram-frame"&gt;
      &lt;svg viewBox="0 0 800 380" xmlns="http://www.w3.org/2000/svg"&gt;
        &lt;text x="400" y="26" text-anchor="middle" fill="#38BDF8" font-family="IBM Plex Mono, monospace" font-size="12" letter-spacing="2"&gt;SKEMA JARINGAN LAN — LABORATORIUM KOMPUTER&lt;/text&gt;

        &lt;!-- internet cloud --&gt;
        &lt;g transform="translate(345,42)"&gt;
          &lt;path d="M28 46 a22 22 0 0 1 0-44 a27 27 0 0 1 52-8 a20 20 0 0 1 2 52 z" fill="none" stroke="#38BDF8" stroke-width="2"/&gt;
          &lt;text x="55" y="27" text-anchor="middle" fill="#38BDF8" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="11"&gt;INTERNET&lt;/text&gt;
        &lt;/g&gt;

        &lt;line class="signal" x1="400" y1="100" x2="400" y2="122" stroke="#38BDF8" stroke-width="2"/&gt;

        &lt;!-- modem --&gt;
        &lt;rect x="335" y="122" width="130" height="34" rx="4" fill="none" stroke="#EAF2FA" stroke-width="1.5"/&gt;
        &lt;text x="400" y="143" text-anchor="middle" fill="#EAF2FA" font-family="IBM Plex Mono, monospace" font-size="11"&gt;MODEM&lt;/text&gt;

        &lt;line class="signal" x1="400" y1="156" x2="400" y2="178" stroke="#38BDF8" stroke-width="2"/&gt;

        &lt;!-- router --&gt;
        &lt;rect x="300" y="178" width="200" height="40" rx="4" fill="none" stroke="#F2B84B" stroke-width="1.5"/&gt;
        &lt;text x="400" y="199" text-anchor="middle" fill="#F2B84B" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="11"&gt;ROUTER&lt;/text&gt;
        &lt;text x="400" y="212" text-anchor="middle" fill="#C3D3E0" font-family="IBM Plex Mono, monospace" font-size="8"&gt;Firewall aktif + DHCP&lt;/text&gt;

        &lt;line class="signal" x1="400" y1="218" x2="400" y2="240" stroke="#22C55E" stroke-width="2"/&gt;

        &lt;!-- switch --&gt;
        &lt;rect x="290" y="240" width="220" height="38" rx="4" fill="none" stroke="#22C55E" stroke-width="1.5"/&gt;
        &lt;text x="400" y="264" text-anchor="middle" fill="#22C55E" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="11"&gt;SWITCH 24-PORT&lt;/text&gt;

        &lt;!-- fan out to PC siswa, PC guru, access point --&gt;
        &lt;line class="signal" x1="320" y1="278" x2="130" y2="330" stroke="#38BDF8" stroke-width="2"/&gt;
        &lt;line class="signal" x1="400" y1="278" x2="400" y2="330" stroke="#38BDF8" stroke-width="2"/&gt;
        &lt;line class="signal" x1="480" y1="278" x2="670" y2="330" stroke="#38BDF8" stroke-width="2"/&gt;

        &lt;rect x="45" y="330" width="170" height="38" rx="4" fill="none" stroke="#EAF2FA" stroke-width="1.5"/&gt;
        &lt;text x="130" y="350" text-anchor="middle" fill="#EAF2FA" font-family="IBM Plex Mono, monospace" font-size="10"&gt;PC SISWA (unit 1–20)&lt;/text&gt;
        &lt;text x="130" y="362" text-anchor="middle" fill="#9FB4C6" font-family="IBM Plex Mono, monospace" font-size="8"&gt;terhubung kabel UTP&lt;/text&gt;

        &lt;rect x="315" y="330" width="170" height="38" rx="4" fill="none" stroke="#EAF2FA" stroke-width="1.5"/&gt;
        &lt;text x="400" y="350" text-anchor="middle" fill="#EAF2FA" font-family="IBM Plex Mono, monospace" font-size="10"&gt;PC GURU&lt;/text&gt;
        &lt;text x="400" y="362" text-anchor="middle" fill="#9FB4C6" font-family="IBM Plex Mono, monospace" font-size="8"&gt;terhubung kabel UTP&lt;/text&gt;

        &lt;rect x="585" y="330" width="170" height="38" rx="4" fill="none" stroke="#EAF2FA" stroke-width="1.5"/&gt;
        &lt;text x="670" y="350" text-anchor="middle" fill="#EAF2FA" font-family="IBM Plex Mono, monospace" font-size="10"&gt;ACCESS POINT&lt;/text&gt;
        &lt;text x="670" y="362" text-anchor="middle" fill="#9FB4C6" font-family="IBM Plex Mono, monospace" font-size="8"&gt;Wi-Fi guru/tamu&lt;/text&gt;
      &lt;/svg&gt;
      &lt;div class="diagram-caption"&gt;Alur: Internet → Modem → Router (firewall &amp; DHCP) → Switch 24-port → seluruh PC siswa, PC guru, dan Access Point (Wi-Fi terbatas).&lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;4. Langkah Keamanan Dasar&lt;/h3&gt;
    &lt;div class="callout secure"&gt;
      &lt;div class="lbl"&gt;Kebijakan Keamanan Lab&lt;/div&gt;
      &lt;ul style="margin:0 0 0 1.1em;"&gt;
        &lt;li&gt;&lt;strong&gt;Password Wi-Fi kuat (WPA2/WPA3)&lt;/strong&gt; — kombinasi huruf, angka, dan simbol, diganti secara berkala tiap semester.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Firewall aktif di router&lt;/strong&gt; — memblokir port dan akses masuk yang tidak diperlukan dari luar jaringan sekolah.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Ganti kredensial admin default router/switch&lt;/strong&gt; — username dan password bawaan pabrik wajib diganti agar tidak mudah diretas.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Pembatasan akses pengguna&lt;/strong&gt; — akun/level akses PC guru dipisahkan dari PC siswa; siswa tidak diberi hak admin pada komputer lab.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Web filtering&lt;/strong&gt; — pembatasan akses ke situs yang tidak relevan dengan pembelajaran melalui pengaturan router atau software tambahan.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Update firmware &amp; software berkala&lt;/strong&gt; — router, switch, dan sistem operasi PC lab diperbarui rutin untuk menutup celah keamanan.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Backup data berkala&lt;/strong&gt; — file penting di komputer guru dicadangkan ke penyimpanan terpisah/cloud secara rutin.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Kesimpulan Tim IT Sekolah&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Dengan topologi star, satu router berfirewall, satu switch 24-port, serta kebijakan password dan pembatasan akses yang jelas, laboratorium komputer sekolah dapat memiliki jaringan LAN yang sederhana untuk dikelola, mudah diperluas di masa depan, dan cukup aman untuk mendukung kegiatan belajar-mengajar sehari-hari.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  INFORMATIKA · JARINGAN KOMPUTER, INTERNET &amp; KEAMANAN DIGITAL · FASE E KELAS X SMK
&lt;/footer&gt;

&lt;script&gt;
  // ============================================================
  // KONFIGURASI PENGIRIMAN SKOR KE GOOGLE SHEETS
  // ------------------------------------------------------------
  // Google Sheets TIDAK bisa menerima data langsung dari halaman
  // web biasa. Guru WAJIB membuat Google Apps Script Web App yang
  // terhubung ke spreadsheet, lalu tempel URL Web App tersebut di
  // bawah ini menggantikan teks GANTI_DENGAN_URL_WEB_APP_ANDA.
  // Lihat instruksi lengkap yang diberikan terpisah dari file ini.
  // ============================================================
  const GAS_ENDPOINT = "https://script.google.com/macros/s/AKfycbwKp7DrBTALJMlw8crjK7RgXIO8LVcU4yVEd9WJNs_vgSXkVxfw7fwkGbOT2IBNOjg3uQ/exec";

  const QUESTIONS = [
    { q: "Jaringan komputer secara umum didefinisikan sebagai...",
      opts: ["Sekumpulan program yang berjalan otomatis di komputer",
             "Kumpulan dua atau lebih perangkat yang saling terhubung untuk berbagi data dan sumber daya",
             "Perangkat keras yang menyimpan data secara permanen",
             "Sistem operasi yang mengatur banyak pengguna sekaligus",
             "Aplikasi yang digunakan khusus untuk browsing internet"], correct: 1 },
    { q: "Jaringan yang mencakup area sangat luas seperti antar kota bahkan antar negara disebut...",
      opts: ["LAN", "PAN", "MAN", "WAN", "HAN"], correct: 3 },
    { q: "Jaringan yang biasa digunakan untuk menghubungkan perangkat dalam satu ruangan/gedung seperti lab komputer sekolah disebut...",
      opts: ["LAN", "WAN", "MAN", "Internet", "Cloud Network"], correct: 0 },
    { q: "Topologi jaringan di mana seluruh perangkat terhubung ke satu perangkat pusat (switch) disebut topologi...",
      opts: ["Bus", "Ring", "Star", "Mesh", "Tree"], correct: 2 },
    { q: "Perangkat yang menghubungkan jaringan lokal (LAN) dengan jaringan lain/internet serta menentukan jalur terbaik pengiriman data disebut...",
      opts: ["Switch", "Hub", "Modem", "Router", "Repeater"], correct: 3 },
    { q: "Perangkat atau perangkat lunak yang menyaring dan mengendalikan lalu lintas data masuk/keluar jaringan berdasarkan aturan keamanan disebut...",
      opts: ["Router", "Firewall", "Switch", "Modem", "Access Point"], correct: 1 },
    { q: "Perangkat yang mengubah sinyal digital menjadi sinyal yang dapat dikirim lewat jalur ISP (dan sebaliknya) disebut...",
      opts: ["Switch", "Modem", "Router", "Access Point", "NIC"], correct: 1 },
    { q: "Alamat unik yang digunakan untuk mengidentifikasi setiap perangkat dalam sebuah jaringan disebut...",
      opts: ["URL", "DNS", "IP Address", "MAC Studio", "Domain"], correct: 2 },
    { q: "Sistem yang menerjemahkan nama domain (misalnya www.contoh.com) menjadi alamat IP yang dipahami komputer disebut...",
      opts: ["HTTP", "DNS", "FTP", "ISP", "TCP"], correct: 1 },
    { q: "Perusahaan atau lembaga yang menyediakan layanan akses internet kepada pengguna disebut...",
      opts: ["Web Hosting", "Domain Provider", "ISP (Internet Service Provider)", "Data Center", "Cloud Provider"], correct: 2 },
    { q: "Protokol untuk mengakses halaman web dengan tambahan lapisan enkripsi ditandai dengan awalan...",
      opts: ["FTP", "HTTP", "HTTPS", "SMTP", "POP3"], correct: 2 },
    { q: "Ukuran kapasitas maksimum data yang dapat ditransmisikan dalam jaringan pada waktu tertentu disebut...",
      opts: ["Latency", "Bandwidth", "Ping", "Protokol", "Bit rate error"], correct: 1 },
    { q: "Waktu tunda yang dibutuhkan data untuk berpindah dari satu titik ke titik lain dalam jaringan disebut...",
      opts: ["Bandwidth", "Throughput", "Latency", "Uptime", "Frekuensi"], correct: 2 },
    { q: "Jenis serangan digital yang menipu pengguna agar memberikan data pribadi (seperti password) melalui tautan atau pesan palsu disebut...",
      opts: ["DDoS", "Malware", "Phishing", "Spoofing perangkat keras", "Brute force fisik"], correct: 2 },
    { q: "Proses mengubah data menjadi bentuk yang tidak dapat dibaca oleh pihak yang tidak berwenang, sehingga data tetap aman saat dikirim melalui jaringan, disebut...",
      opts: ["Kompresi", "Enkripsi", "Kalibrasi", "Sinkronisasi", "Virtualisasi"], correct: 1 }
  ];

  const LETTERS = ["A","B","C","D","E"];
  const container = document.getElementById('quizContainer');

  QUESTIONS.forEach((item, qi) =&gt; {
    const card = document.createElement('div');
    card.className = 'q-card';
    const num = document.createElement('div');
    num.className = 'q-num';
    num.textContent = 'SOAL ' + (qi+1) + ' / ' + QUESTIONS.length;
    const text = document.createElement('div');
    text.className = 'q-text';
    text.textContent = (qi+1) + '. ' + item.q;
    const opts = document.createElement('div');
    opts.className = 'options';

    item.opts.forEach((optText, oi) =&gt; {
      const label = document.createElement('label');
      label.className = 'opt';
      const input = document.createElement('input');
      input.type = 'radio';
      input.name = 'q' + qi;
      input.value = oi;
      input.addEventListener('change', () =&gt; {
        opts.querySelectorAll('.opt').forEach(o =&gt; o.classList.remove('selected'));
        label.classList.add('selected');
      });
      const span = document.createElement('span');
      span.textContent = LETTERS[oi] + '. ' + optText;
      label.appendChild(input);
      label.appendChild(span);
      opts.appendChild(label);
    });

    card.appendChild(num);
    card.appendChild(text);
    card.appendChild(opts);
    container.appendChild(card);
  });

  let finalScore = null;

  document.getElementById('btnHitung').addEventListener('click', () =&gt; {
    const noAbsen = document.getElementById('noAbsen').value.trim();
    const nama = document.getElementById('nama').value.trim();
    const kelas = document.getElementById('kelas').value.trim();
    const msg = document.getElementById('quizMsg');

    if (!noAbsen || !nama || !kelas) {
      msg.textContent = 'Lengkapi No. Absen, Nama, dan Kelas terlebih dahulu.';
      return;
    }

    let answered = 0, correct = 0;
    QUESTIONS.forEach((item, qi) =&gt; {
      const picked = document.querySelector('input[name="q' + qi + '"]:checked');
      if (picked) {
        answered++;
        if (parseInt(picked.value) === item.correct) correct++;
      }
    });

    if (answered &lt; QUESTIONS.length) {
      msg.textContent = 'Masih ada ' + (QUESTIONS.length - answered) + ' soal yang belum dijawab.';
      return;
    }

    msg.textContent = '';
    finalScore = Math.round((correct / QUESTIONS.length) * 100);

    document.getElementById('scoreValue').textContent = finalScore;
    document.getElementById('resultDetail').textContent =
      'Jawaban benar: ' + correct + ' dari ' + QUESTIONS.length + ' soal. Skor sedang dikirim ke guru...';
    document.getElementById('resultPanel').style.display = 'block';

    kirimSkor(noAbsen, nama, kelas, finalScore);
  });

  function kirimSkor(noAbsen, nama, kelas, skor) {
    const msg = document.getElementById('quizMsg');
    const btnKirim = document.getElementById('btnKirim');
    const resultDetail = document.getElementById('resultDetail');

    if (GAS_ENDPOINT.indexOf('GANTI_DENGAN_URL_WEB_APP_ANDA') !== -1) {
      msg.textContent = 'Pengiriman belum aktif — guru perlu memasang URL Apps Script terlebih dahulu.';
      btnKirim.style.display = 'inline-block';
      return;
    }

    btnKirim.disabled = true;
    msg.textContent = 'Mengirim skor...';

    fetch(GAS_ENDPOINT, {
      method: 'POST',
      mode: 'no-cors',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ noAbsen: noAbsen, nama: nama, kelas: kelas, skor: skor })
    }).then(() =&gt; {
      msg.textContent = 'Jawaban terkirim otomatis ke guru.';
      resultDetail.textContent = 'Jawaban benar: ' + Math.round(skor * QUESTIONS.length / 100) + ' dari ' + QUESTIONS.length + ' soal. Skor sudah terkirim ke guru.';
      btnKirim.style.display = 'none';
      btnKirim.disabled = false;
    }).catch(() =&gt; {
      msg.textContent = 'Gagal mengirim otomatis — klik "Kirim Ulang ke Guru", atau foto layar skor ini.';
      btnKirim.style.display = 'inline-block';
      btnKirim.disabled = false;
    });
  }

  document.getElementById('btnKirim').addEventListener('click', () =&gt; {
    const noAbsen = document.getElementById('noAbsen').value.trim();
    const nama = document.getElementById('nama').value.trim();
    const kelas = document.getElementById('kelas').value.trim();
    if (finalScore === null) return;
    kirimSkor(noAbsen, nama, kelas, finalScore);
  });
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/jaringan-komputer-internet-keamanan.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-5361175741707973809</guid><pubDate>Fri, 14 Aug 2026 00:50:06 +0000</pubDate><atom:updated>2026-08-14T10:17:18.742+07:00</atom:updated><title>Pemetaan Profil Growth Mindset Murid</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Pemetaan Growth Mindset Murid — SMKN 1 Tuntang&lt;/title&gt;
&lt;style&gt;
  :root{
    --navy:#152238;
    --navy-2:#1F3454;
    --steel:#3D5A80;
    --amber:#E8A33D;
    --amber-dark:#C97F1B;
    --paper:#F5F6F8;
    --card:#FFFFFF;
    --ink:#1B2333;
    --ink-soft:#5A6478;
    --line:#E1E4EA;
    --growth:#2E7D5B;
    --fixed:#B0532B;
    --radius:14px;
  }
  *{box-sizing:border-box;}
  body{
    margin:0;
    font-family:'Segoe UI',-apple-system,BlinkMacSystemFont,'Inter',Arial,sans-serif;
    background:var(--paper);
    color:var(--ink);
  }
  .topbar{
    background:linear-gradient(120deg,var(--navy) 0%,var(--navy-2) 100%);
    color:#fff;
    padding:36px 20px 90px;
    position:relative;
    overflow:hidden;
  }
  .topbar::after{
    content:"";
    position:absolute;
    right:-60px; top:-60px;
    width:220px; height:220px;
    border-radius:50%;
    background:radial-gradient(circle, rgba(232,163,61,0.25) 0%, rgba(232,163,61,0) 70%);
  }
  .topbar-inner{
    max-width:760px;
    margin:0 auto;
    position:relative;
    z-index:1;
  }
  .eyebrow{
    display:inline-block;
    font-size:12.5px;
    letter-spacing:.14em;
    text-transform:uppercase;
    color:var(--amber);
    font-weight:700;
    border:1px solid rgba(232,163,61,0.5);
    padding:5px 12px;
    border-radius:999px;
    margin-bottom:16px;
  }
  h1{
    font-size:clamp(24px,4vw,32px);
    line-height:1.25;
    margin:0 0 10px;
    font-weight:700;
  }
  .lede{
    color:#C9D2E3;
    font-size:15px;
    line-height:1.6;
    max-width:640px;
    margin:0;
  }
  .wrap{
    max-width:760px;
    margin:-56px auto 60px;
    padding:0 20px;
    position:relative;
    z-index:2;
  }
  .card{
    background:var(--card);
    border-radius:var(--radius);
    box-shadow:0 12px 30px rgba(21,34,56,0.10);
    padding:28px;
    margin-bottom:20px;
    border:1px solid var(--line);
  }
  .card h2{
    font-size:17px;
    margin:0 0 4px;
    color:var(--navy);
  }
  .card .sub{
    font-size:13px;
    color:var(--ink-soft);
    margin:0 0 18px;
  }
  label.field{
    display:block;
    font-size:13.5px;
    font-weight:600;
    color:var(--navy);
    margin-bottom:6px;
  }
  .field-wrap{margin-bottom:16px;}
  input[type=text], select{
    width:100%;
    padding:11px 13px;
    border-radius:9px;
    border:1.5px solid var(--line);
    font-size:14.5px;
    font-family:inherit;
    color:var(--ink);
    background:#fcfcfd;
  }
  input[type=text]:focus, select:focus{
    outline:none;
    border-color:var(--steel);
    box-shadow:0 0 0 3px rgba(61,90,128,0.15);
  }
  .progress-shell{
    position:sticky;
    top:0;
    z-index:20;
    background:rgba(245,246,248,0.94);
    backdrop-filter:blur(6px);
    padding:12px 20px;
    border-bottom:1px solid var(--line);
  }
  .progress-inner{
    max-width:760px;
    margin:0 auto;
    display:flex;
    align-items:center;
    gap:12px;
  }
  .progress-track{
    flex:1;
    height:7px;
    border-radius:999px;
    background:#E4E7EE;
    overflow:hidden;
  }
  .progress-fill{
    height:100%;
    width:0%;
    background:linear-gradient(90deg,var(--steel),var(--amber));
    border-radius:999px;
    transition:width .25s ease;
  }
  .progress-label{
    font-size:12.5px;
    font-weight:700;
    color:var(--navy);
    white-space:nowrap;
    min-width:64px;
    text-align:right;
  }
  .section-tag{
    display:inline-flex;
    align-items:center;
    gap:8px;
    font-size:11.5px;
    font-weight:700;
    letter-spacing:.06em;
    text-transform:uppercase;
    color:var(--steel);
    margin-bottom:14px;
  }
  .section-tag .dot{
    width:7px;height:7px;border-radius:50%;
    background:var(--amber);
  }
  .qitem{
    padding:18px 0;
    border-top:1px solid var(--line);
  }
  .qitem:first-of-type{border-top:none; padding-top:4px;}
  .qnum{
    font-size:12px;
    font-weight:700;
    color:#fff;
    background:var(--steel);
    width:22px;height:22px;
    border-radius:6px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    margin-right:8px;
    flex-shrink:0;
  }
  .qtext{
    font-size:14.5px;
    line-height:1.55;
    color:var(--ink);
    display:flex;
    margin-bottom:12px;
  }
  .qtext span.txt{padding-top:1px;}
  .opts{
    display:grid;
    grid-template-columns:repeat(4,1fr);
    gap:8px;
  }
  @media (max-width:520px){
    .opts{grid-template-columns:repeat(2,1fr);}
  }
  .opt{
    position:relative;
  }
  .opt input{
    position:absolute;
    opacity:0;
    width:100%;height:100%;
    cursor:pointer;
    margin:0;
  }
  .opt .pill{
    display:block;
    text-align:center;
    font-size:12.5px;
    font-weight:600;
    padding:10px 6px;
    border-radius:9px;
    border:1.5px solid var(--line);
    color:var(--ink-soft);
    transition:all .15s ease;
    background:#fcfcfd;
  }
  .opt input:checked + .pill{
    background:var(--navy);
    border-color:var(--navy);
    color:#fff;
  }
  .opt input:focus-visible + .pill{
    box-shadow:0 0 0 3px rgba(61,90,128,0.35);
  }
  .opt .pill:hover{border-color:var(--steel); color:var(--navy);}
  .submit-bar{
    display:flex;
    flex-direction:column;
    gap:12px;
    align-items:center;
    text-align:center;
  }
  button#submitBtn{
    width:100%;
    padding:15px;
    border:none;
    border-radius:11px;
    background:var(--amber-dark);
    color:#fff;
    font-size:15.5px;
    font-weight:700;
    cursor:pointer;
    transition:background .15s ease, transform .1s ease;
  }
  button#submitBtn:hover{background:#B06F16;}
  button#submitBtn:active{transform:scale(0.99);}
  button#submitBtn:disabled{background:#C7CCD6; cursor:not-allowed;}
  .hint{font-size:12.5px; color:var(--ink-soft);}
  .warn{
    font-size:13px;
    color:var(--fixed);
    font-weight:600;
    margin-top:6px;
    display:none;
  }
  .footer-note{
    text-align:center;
    font-size:12px;
    color:var(--ink-soft);
    margin-top:24px;
  }
  #successScreen{
    display:none;
    text-align:center;
    padding:40px 20px 70px;
    max-width:560px;
    margin:0 auto;
  }
  #successScreen .check{
    width:64px;height:64px;
    border-radius:50%;
    background:var(--growth);
    color:#fff;
    display:flex;
    align-items:center;
    justify-content:center;
    margin:0 auto 18px;
    font-size:30px;
  }
  #successScreen h2{color:var(--navy); font-size:22px; margin-bottom:8px;}
  #successScreen p{color:var(--ink-soft); font-size:14.5px; line-height:1.6;}
  #resultBox{
    margin-top:18px;
    background:var(--card);
    border:1px solid var(--line);
    border-radius:var(--radius);
    padding:20px;
    text-align:left;
  }
  #resultBox .scoreRow{display:flex; justify-content:space-between; font-size:14px; padding:6px 0; border-bottom:1px dashed var(--line);}
  #resultBox .scoreRow:last-child{border-bottom:none;}
  .catBadge{
    display:inline-block;
    padding:3px 10px;
    border-radius:999px;
    font-size:12.5px;
    font-weight:700;
    color:#fff;
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="topbar"&gt;
  &lt;div class="topbar-inner"&gt;
    &lt;span class="eyebrow"&gt;SMKN 1 Tuntang · TJKT · Teknik Otomotif · Tata Busana&lt;/span&gt;
    &lt;h1&gt;Pemetaan Profil Growth Mindset Murid&lt;/h1&gt;
    &lt;p class="lede"&gt;Kuesioner ini diisi oleh Bapak/Ibu guru mata pelajaran untuk memetakan profil pola pikir (growth mindset) murid yang diajar, sebagai bagian dari siklus inkuiri kolaboratif identifikasi masalah pembelajaran di laboratorium/bengkel. Jawaban akan otomatis terkirim dan tersimpan.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class="progress-shell" id="progressShell"&gt;
  &lt;div class="progress-inner"&gt;
    &lt;div class="progress-track"&gt;&lt;div class="progress-fill" id="progressFill"&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div class="progress-label" id="progressLabel"&gt;0 / 25&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class="wrap"&gt;

  &lt;form id="mindsetForm"&gt;

    &lt;div class="card" id="metaCard"&gt;
      &lt;h2&gt;Data Guru&lt;/h2&gt;
      &lt;p class="sub"&gt;Isi identitas Bapak/Ibu guru dan kelompok murid yang sedang dinilai.&lt;/p&gt;

      &lt;div class="field-wrap"&gt;
        &lt;label class="field"&gt;Nama Guru&lt;/label&gt;
        &lt;input type="text" id="namaGuru" required placeholder="Contoh: Nofrizal, S.Pd."&gt;
      &lt;/div&gt;

      &lt;div class="field-wrap"&gt;
        &lt;label class="field"&gt;Mata Pelajaran yang Diampu&lt;/label&gt;
        &lt;input type="text" id="mapel" required placeholder="Contoh: Produktif TJKT"&gt;
      &lt;/div&gt;

      &lt;div class="field-wrap" style="margin-bottom:0;"&gt;
        &lt;label class="field"&gt;Jurusan&lt;/label&gt;
        &lt;select id="jurusan" required&gt;
          &lt;option value="" disabled selected&gt;Pilih jurusan&lt;/option&gt;
          &lt;option value="TJKT"&gt;Teknik Jaringan Komputer dan Telekomunikasi (TJKT)&lt;/option&gt;
          &lt;option value="Teknik Otomotif"&gt;Teknik dan Bisnis Sepeda Motor (Teknik Otomotif)&lt;/option&gt;
          &lt;option value="Tata Busana"&gt;Tata Busana&lt;/option&gt;
          &lt;option value="Tata Busana"&gt;Semua Jurusan&lt;/option&gt;
        &lt;/select&gt;
      &lt;/div&gt;

      &lt;div class="field-wrap" style="margin-bottom:0; margin-top:16px;"&gt;
        &lt;label class="field"&gt;Jumlah Murid yang Dinilai (perkiraan, semua rombel di jurusan ini)&lt;/label&gt;
        &lt;input type="text" id="jumlahMurid" placeholder="Contoh: 96 murid"&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id="questionsContainer"&gt;&lt;/div&gt;

    &lt;div class="card"&gt;
      &lt;div class="submit-bar"&gt;
        &lt;button type="submit" id="submitBtn"&gt;Kirim Jawaban&lt;/button&gt;
        &lt;div class="warn" id="warnMsg"&gt;Mohon lengkapi semua data dan jawab seluruh 25 pernyataan sebelum mengirim.&lt;/div&gt;
        &lt;div class="hint"&gt;Jawaban dikirim langsung ke rekap Google Sheet sekolah.&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

  &lt;/form&gt;

  &lt;div id="successScreen"&gt;
    &lt;div class="check"&gt;✓&lt;/div&gt;
    &lt;h2&gt;Jawaban Terkirim&lt;/h2&gt;
    &lt;p&gt;Terima kasih, Bapak/Ibu Guru. Pemetaan profil growth mindset murid yang diampu telah tercatat dan akan digunakan dalam siklus inkuiri kolaboratif SMKN 1 Tuntang.&lt;/p&gt;
    &lt;div id="resultBox"&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;p class="footer-note"&gt;Presentasi Siklus Inkuiri Kolaboratif — SMKN 1 Tuntang&lt;/p&gt;
&lt;/div&gt;

&lt;script&gt;
/* ======================================================
   KONFIGURASI PENGIRIMAN DATA
   Ganti WEB_APP_URL dengan URL Web App Google Apps Script
   yang sudah di-deploy dan terhubung ke Google Sheet tujuan.
   Lihat panduan "Apps Script" yang disertakan terpisah.
====================================================== */
const WEB_APP_URL = "https://script.google.com/macros/s/AKfycbwntViLE98jkmp-xGIHAK8u13gdKyR4DY8dGMVfz77m9pqBHra7cc8bCOqlsmX3MtQadg/exec";

// type: "growth" -&gt; setuju mencerminkan growth mindset (skor SS=3..STS=0)
// type: "fixed"  -&gt; setuju mencerminkan fixed mindset (skor SS=0..STS=3)
const QUESTIONS = [
  { section:"Keyakinan tentang Kemampuan", items:[
    {t:"Murid yang saya ajar meyakini bahwa kemampuan mereka di mata pelajaran/praktik ini bisa terus berkembang melalui latihan.", type:"growth"},
    {t:"Murid yang saya ajar menganggap kemampuan praktiknya sudah menetap dan sulit untuk diubah.", type:"fixed"},
    {t:"Murid saya percaya bahwa kerja keras lebih menentukan keberhasilan dibanding bakat bawaan.", type:"growth"},
    {t:"Murid saya percaya hanya murid yang berbakat saja yang bisa unggul dalam praktik di jurusan ini.", type:"fixed"},
    {t:"Murid saya cepat puas dengan kemampuan yang sudah dimiliki dan enggan mempelajari hal baru.", type:"fixed"},
  ]},
  { section:"Sikap terhadap Tantangan &amp; Kegigihan", items:[
    {t:"Ketika menghadapi materi atau praktik yang sulit, murid saya cenderung terus mencoba hingga berhasil.", type:"growth"},
    {t:"Murid saya mudah menyerah ketika mengerjakan tugas praktik yang menantang.", type:"fixed"},
    {t:"Murid saya menganggap tantangan dalam tugas praktik sebagai kesempatan untuk berkembang.", type:"growth"},
    {t:"Murid saya menghindari tugas atau proyek praktik yang dirasa terlalu menantang.", type:"fixed"},
    {t:"Murid saya tetap berusaha semaksimal mungkin meski keterbatasan alat/bahan praktik di laboratorium atau bengkel.", type:"growth"},
    {t:"Murid saya mudah frustrasi dan berhenti berusaha ketika alat atau bahan praktik terbatas.", type:"fixed"},
  ]},
  { section:"Respon terhadap Kegagalan &amp; Kritik", items:[
    {t:"Murid saya menganggap kesalahan dalam praktik sebagai bagian wajar dari proses belajar.", type:"growth"},
    {t:"Murid saya merasa malu dan menghindar setelah melakukan kesalahan di depan teman-temannya.", type:"fixed"},
    {t:"Murid saya menunjukkan semangat yang lebih tinggi setelah mendapat kritik atau masukan dari saya.", type:"growth"},
    {t:"Murid saya bersikap defensif atau tidak senang saat menerima kritik terhadap hasil kerjanya.", type:"fixed"},
    {t:"Murid saya mau mencoba metode atau pendekatan baru saat cara sebelumnya gagal.", type:"growth"},
    {t:"Murid saya enggan mencoba cara baru karena takut gagal lagi.", type:"fixed"},
  ]},
  { section:"Rasa Ingin Tahu &amp; Motivasi Belajar", items:[
    {t:"Murid saya aktif bertanya ketika belum memahami suatu topik atau teknik praktik.", type:"growth"},
    {t:"Murid saya cenderung diam meski belum paham, karena takut dianggap tidak mampu.", type:"fixed"},
    {t:"Murid saya menunjukkan rasa ingin tahu terhadap teknik, alat, atau tren baru di bidang jurusannya.", type:"growth"},
    {t:"Secara umum, murid yang saya ajar memiliki motivasi belajar yang tinggi untuk berkembang di bidang keahliannya.", type:"growth"},
  ]},
  { section:"Kolaborasi &amp; Perkembangan Keterampilan", items:[
    {t:"Murid saya saling membantu dan berdiskusi dengan teman saat menghadapi kesulitan praktik.", type:"growth"},
    {t:"Murid saya lebih memilih bekerja sendiri dan enggan berkolaborasi saat praktik atau proyek kelompok.", type:"fixed"},
    {t:"Murid saya menunjukkan peningkatan keterampilan praktik dari waktu ke waktu selama saya ajar.", type:"growth"},
    {t:"Murid saya menunjukkan keterampilan praktik yang stagnan meski sudah diberi banyak latihan dan bimbingan.", type:"fixed"},
  ]},
];

const OPTIONS = [
  {label:"Sangat Setuju", key:"SS"},
  {label:"Setuju", key:"S"},
  {label:"Tidak Setuju", key:"TS"},
  {label:"Sangat Tidak Setuju", key:"STS"},
];

function scoreFor(type, key){
  const growthScale = {SS:3,S:2,TS:1,STS:0};
  const fixedScale  = {SS:0,S:1,TS:2,STS:3};
  return type === "growth" ? growthScale[key] : fixedScale[key];
}

const container = document.getElementById("questionsContainer");
let qCounter = 0;
let totalQuestions = 0;
QUESTIONS.forEach(sec =&gt; totalQuestions += sec.items.length);

QUESTIONS.forEach((sec) =&gt; {
  const card = document.createElement("div");
  card.className = "card";
  const tag = document.createElement("div");
  tag.className = "section-tag";
  tag.innerHTML = '&lt;span class="dot"&gt;&lt;/span&gt;' + sec.section;
  card.appendChild(tag);

  sec.items.forEach((item) =&gt; {
    qCounter++;
    const qid = "q" + qCounter;
    const qDiv = document.createElement("div");
    qDiv.className = "qitem";

    const qText = document.createElement("div");
    qText.className = "qtext";
    qText.innerHTML = '&lt;span class="qnum"&gt;' + qCounter + '&lt;/span&gt;&lt;span class="txt"&gt;' + item.t + '&lt;/span&gt;';
    qDiv.appendChild(qText);

    const opts = document.createElement("div");
    opts.className = "opts";
    OPTIONS.forEach((o) =&gt; {
      const optDiv = document.createElement("label");
      optDiv.className = "opt";
      optDiv.innerHTML =
        '&lt;input type="radio" name="' + qid + '" value="' + o.key + '" data-type="' + item.type + '" data-text="' + item.t.replace(/"/g,'&amp;quot;') + '" required&gt;' +
        '&lt;span class="pill"&gt;' + o.label + '&lt;/span&gt;';
      opts.appendChild(optDiv);
    });
    qDiv.appendChild(opts);
    card.appendChild(qDiv);
  });

  container.appendChild(card);
});

document.getElementById("progressLabel").textContent = "0 / " + totalQuestions;

function updateProgress(){
  const answered = new Set();
  document.querySelectorAll('#questionsContainer input[type=radio]:checked').forEach(r =&gt; answered.add(r.name));
  const n = answered.size;
  document.getElementById("progressLabel").textContent = n + " / " + totalQuestions;
  document.getElementById("progressFill").style.width = (n / totalQuestions * 100) + "%";
}
container.addEventListener("change", updateProgress);

function categorize(total, maxScore){
  const f1 = Math.round(maxScore * (20/60));
  const f2 = Math.round(maxScore * (33/60));
  const f3 = Math.round(maxScore * (44/60));
  if(total &lt;= f1) return {label:"Fixed Mindset (F)", color:"#B0532B"};
  if(total &lt;= f2) return {label:"Fixed-Growth (FG)", color:"#C97F1B"};
  if(total &lt;= f3) return {label:"Growth-Fixed (GF)", color:"#3D5A80"};
  return {label:"Growth Mindset (G)", color:"#2E7D5B"};
}

document.getElementById("mindsetForm").addEventListener("submit", function(e){
  e.preventDefault();

  const namaGuru = document.getElementById("namaGuru").value.trim();
  const mapel = document.getElementById("mapel").value.trim();
  const jurusan = document.getElementById("jurusan").value;
  const jumlahMurid = document.getElementById("jumlahMurid").value.trim();

  const checked = document.querySelectorAll('#questionsContainer input[type=radio]:checked');
  const warnMsg = document.getElementById("warnMsg");

  if(!namaGuru || !mapel || !jurusan || checked.length &lt; totalQuestions){
    warnMsg.style.display = "block";
    window.scrollTo({top:0, behavior:"smooth"});
    return;
  }
  warnMsg.style.display = "none";

  let total = 0;
  const answers = {};
  checked.forEach((r) =&gt; {
    const s = scoreFor(r.dataset.type, r.value);
    total += s;
    answers[r.name + "_jawaban"] = r.value;
    answers[r.name + "_skor"] = s;
  });
  const maxScore = totalQuestions * 3;
  const cat = categorize(total, maxScore);

  const payload = Object.assign({
    timestamp: new Date().toISOString(),
    namaGuru: namaGuru,
    mapel: mapel,
    jurusan: jurusan,
    jumlahMurid: jumlahMurid,
    totalSkor: total,
    skorMaksimal: maxScore,
    kategori: cat.label,
  }, answers);

  const submitBtn = document.getElementById("submitBtn");
  submitBtn.disabled = true;
  submitBtn.textContent = "Mengirim...";

  const formData = new URLSearchParams();
  Object.keys(payload).forEach(k =&gt; formData.append(k, payload[k]));

  fetch(WEB_APP_URL, {
    method: "POST",
    mode: "no-cors",
    body: formData
  }).catch(function(err){
    console.warn("Pengiriman ke Google Sheet gagal atau tidak dapat dikonfirmasi (mode no-cors):", err);
  }).finally(function(){
    document.getElementById("mindsetForm").style.display = "none";
    document.getElementById("progressShell").style.display = "none";
    const successScreen = document.getElementById("successScreen");
    successScreen.style.display = "block";
    document.getElementById("resultBox").innerHTML =
      '&lt;div class="scoreRow"&gt;&lt;span&gt;Guru&lt;/span&gt;&lt;b&gt;' + namaGuru + '&lt;/b&gt;&lt;/div&gt;' +
      '&lt;div class="scoreRow"&gt;&lt;span&gt;Jurusan&lt;/span&gt;&lt;b&gt;' + jurusan + '&lt;/b&gt;&lt;/div&gt;' +
      '&lt;div class="scoreRow"&gt;&lt;span&gt;Total Skor&lt;/span&gt;&lt;b&gt;' + total + ' / ' + maxScore + '&lt;/b&gt;&lt;/div&gt;' +
      '&lt;div class="scoreRow"&gt;&lt;span&gt;Kategori Mindset&lt;/span&gt;&lt;span class="catBadge" style="background:' + cat.color + '"&gt;' + cat.label + '&lt;/span&gt;&lt;/div&gt;';
    window.scrollTo({top:0, behavior:"smooth"});
  });
});
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/pemetaan-growth-mindset-murid-smkn-1.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-575736118791912939</guid><pubDate>Wed, 12 Aug 2026 02:46:19 +0000</pubDate><atom:updated>2026-08-12T10:09:55.509+07:00</atom:updated><title>Kaidah Kebahasaan Teks Prosedur (Bagian 2) &amp; Menyusun Teks Prosedur</title><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&amp;family=Source+Sans+3:wght@400;500;600;700&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;display=swap');
.epb{
  --blueprint:#0F2A3D;
  --blueprint-deep:#0A1E2C;
  --panel:#4A2E12;
  --paper:#F3F0E6;
  --ink:#132029;
  --amber:#F5A623;
  --amber-deep:#C97F12;
  --mint:#6EC6CA;
  --line:rgba(234,242,245,0.16);
  --off-white:#EAF2F5;
  --muted:#9FB4C2;
}
.epb *{box-sizing:border-box;}
.epb{scroll-behavior:smooth; background:#0A1F2E;}
.epb{
  margin:0;
  position:relative;
  overflow:hidden;
  background:var(--blueprint);
  color:var(--off-white);
  font-family:'Source Sans 3',sans-serif;
  line-height:1.65;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 34px 34px;
}
.epb h1, .epb h2, .epb h3, .epb h4{font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.02em; margin:0 0 0.5em;}
.epb .mono{font-family:'IBM Plex Mono',monospace;}
.epb a{color:var(--amber);}
.epb .crop{position:absolute; width:22px; height:22px; z-index:5; opacity:.55; pointer-events:none;}
.epb .crop::before, .epb .crop::after{content:"";position:absolute;background:var(--mint);}
.epb .crop::before{width:100%;height:1px;top:50%;left:0;}
.epb .crop::after{width:1px;height:100%;left:50%;top:0;}
.epb .crop.tl{top:14px;left:14px;}
.epb .crop.tr{top:14px;right:14px;}
.epb .crop.bl{bottom:14px;left:14px;}
.epb .crop.br{bottom:14px;right:14px;}
.epb header.cover{
  position:relative;
  padding:40px 24px 36px;
  border-bottom:1px solid var(--line);
  overflow:hidden;
}
.epb .doc-code{font-family:'IBM Plex Mono',monospace; color:var(--amber); letter-spacing:0.15em; font-size:0.78rem; text-transform:uppercase; margin-bottom:18px; display:flex; gap:10px; align-items:center;}
.epb .doc-code::before{content:"◆"; color:var(--amber);}
.epb .cover h1{font-size:clamp(1.6rem,7vw,2.5rem); color:var(--off-white); max-width:16ch; line-height:1.05;}
.epb .cover .subtitle{color:var(--muted); font-size:1.05rem; max-width:60ch; margin-top:14px;}
.epb .meta-strip{
  margin-top:38px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border-top:1px dashed var(--line); border-bottom:1px dashed var(--line);
}
.epb .meta-strip div{padding:14px 16px; border-right:1px dashed var(--line);}
.epb .meta-strip div:last-child{border-right:none;}
.epb .meta-strip .k{font-family:'IBM Plex Mono',monospace; font-size:0.68rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.1em;}
.epb .meta-strip .v{font-size:0.98rem; color:var(--off-white); margin-top:4px; font-weight:600;}
.epb .stamp{
  position:absolute; top:40px; right:20px; width:104px; height:104px;
  border:2.5px solid var(--amber); border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  transform:rotate(-11deg);
  color:var(--amber); font-family:'IBM Plex Mono',monospace;
  text-align:center; font-size:0.62rem; letter-spacing:0.08em; text-transform:uppercase;
  opacity:0.9;
}
.epb .stamp .ring{position:absolute; inset:8px; border:1px dashed var(--amber); border-radius:50%;}
.epb .stamp b{display:block; font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:0.06em; margin-top:4px;}

@media (max-width:760px){.epb .stamp{display:none;}
.epb }


.epb main{max-width:920px; margin:0 auto; padding:0 20px 60px;}
.epb .section{padding-top:64px;}
.epb .eyebrow{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase; margin-bottom:10px; display:flex; align-items:center; gap:10px;}
.epb .eyebrow::after{content:""; flex:1; height:1px; background:var(--line);}
.epb h2.section-title{font-size:1.7rem; color:var(--off-white);}
.epb p{color:#DDE7EC;}
.epb .lead{color:var(--muted); font-size:1.02rem; max-width:72ch;}
.epb .panel{
  background:var(--panel); border:1px solid var(--line); border-radius:2px;
  padding:26px 28px; margin:22px 0;
}
.epb .panel.tp{border-left:4px solid var(--mint);}
.epb .panel.warn{border-left:4px solid var(--amber);}
.epb .tp-box{display:grid; gap:14px; margin-top:18px;}
.epb .tp-item{display:flex; gap:14px; align-items:flex-start;}
.epb .tp-item .idx{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; min-width:34px;}
.epb .flow{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:20px;}
.epb .flow .step{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px; position:relative;}
.epb .flow .step .tag{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;}
.epb .flow .step h4{font-size:1rem; margin-top:8px; color:var(--off-white);}
.epb .flow .step .time{position:absolute; top:16px; right:16px; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; color:var(--amber);}
.epb .grid-3{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-top:16px;}
.epb .card{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px;}
.epb .card h4{color:var(--amber); font-size:0.95rem;}
.epb .criteria{display:grid; gap:16px; margin-top:20px;}
.epb .crit{
  background:var(--blueprint-deep); border:1px solid var(--line);
  display:grid; grid-template-columns:64px 1fr; gap:0;
}
.epb .crit .num{
  background:var(--amber); color:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace;
  font-weight:700; display:flex; align-items:center; justify-content:center; font-size:1.05rem;
}
.epb .crit .body{padding:18px 20px;}
.epb .crit h4{color:var(--off-white); font-size:1.02rem; margin-bottom:6px;}
.epb .crit .q{margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); font-family:'IBM Plex Mono',monospace; font-size:0.86rem; color:var(--amber);}
.epb .timeline{margin-top:24px; position:relative; padding-left:34px;}
.epb .timeline::before{content:""; position:absolute; left:11px; top:6px; bottom:6px; width:2px; background:var(--line);}
.epb .tl-item{position:relative; padding-bottom:26px;}
.epb .tl-item:last-child{padding-bottom:0;}
.epb .tl-item::before{content:""; position:absolute; left:-34px; top:2px; width:22px; height:22px; border-radius:50%; background:var(--blueprint); border:2px solid var(--amber);}
.epb .tl-item h4{color:var(--off-white); font-size:1rem; margin-bottom:4px;}
.epb .doc-sample{
  background:var(--paper); color:var(--ink); border-radius:2px; padding:0; margin-top:22px;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .doc-sample .doc-head{background:var(--ink); color:var(--paper); padding:12px 22px; font-family:'IBM Plex Mono',monospace; font-size:0.75rem; letter-spacing:0.1em; text-transform:uppercase; display:flex; justify-content:space-between;}
.epb .doc-sample .doc-body{padding:26px 28px 30px;}
.epb .doc-sample h3{font-family:'Oswald',sans-serif; color:var(--ink); font-size:1.25rem; text-transform:none; letter-spacing:0;}
.epb .doc-sample ol{padding-left:22px;}
.epb .doc-sample li{margin-bottom:9px;}
.epb .flag{
  display:inline-block; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; font-weight:600;
  background:#D94E2A; color:#fff; padding:1px 7px; border-radius:2px; margin-left:6px; vertical-align:middle;
}
.epb .doc-sample .note-margin{margin-top:6px; font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:#8A3A1F; padding-left:8px; border-left:2px solid #D94E2A;}
.epb .legend{display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:16px;}
.epb .legend span{font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:var(--muted); display:flex; align-items:center; gap:8px;}
.epb .legend .dot{width:10px; height:10px; border-radius:50%; display:inline-block;}
.epb table{width:100%; border-collapse:collapse; margin-top:18px; font-size:0.94rem;}
.epb th, .epb td{border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top;}
.epb th{background:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace; font-size:0.75rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--amber);}
.epb .summary-box{
  border:1px solid var(--amber); background:linear-gradient(180deg, rgba(245,166,35,0.08), transparent);
  padding:24px 26px; margin-top:24px;
}
.epb .summary-box ul{margin:10px 0 0; padding-left:20px;}
.epb .summary-box li{margin-bottom:8px;}
.epb .task-header{
  background:var(--amber); color:var(--blueprint-deep); padding:22px 26px; margin-top:20px;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
}
.epb .task-header h2{color:var(--blueprint-deep); font-size:1.4rem; margin:0;}
.epb .task-header .badge{font-family:'IBM Plex Mono',monospace; font-size:0.8rem; background:var(--blueprint-deep); color:var(--amber); padding:6px 12px; border-radius:2px;}
.epb .steps-num{counter-reset:step; margin-top:18px; list-style:none; padding:0;}
.epb .steps-num li{counter-increment:step; position:relative; padding-left:44px; margin-bottom:16px;}
.epb .steps-num li::before{content:counter(step,decimal-leading-zero); position:absolute; left:0; top:0; font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; font-size:0.95rem; border:1px solid var(--amber); width:30px; height:26px; display:flex; align-items:center; justify-content:center;}
.epb .rubric-scale{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px;}
.epb .rubric-scale div{background:var(--blueprint-deep); border:1px solid var(--line); padding:12px; text-align:center;}
.epb .rubric-scale .n{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:1.3rem; font-weight:700;}
.epb .rubric-scale .l{font-size:0.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:0.05em;}
.epb .notebook{
  background:repeating-linear-gradient(var(--paper), var(--paper) 33px, #D8D3C2 34px);
  color:var(--ink); border-radius:2px; padding:28px 30px; margin-top:20px; position:relative;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .notebook::before{content:""; position:absolute; left:46px; top:0; bottom:0; width:1.5px; background:#C0453A; opacity:0.5;}
.epb .notebook .content{padding-left:24px;}
.epb .notebook h3{color:var(--ink); font-family:'Oswald',sans-serif; letter-spacing:0.02em; margin-bottom:10px;}
.epb .notebook ul{padding-left:20px;}
.epb footer{border-top:1px solid var(--line); padding:24px 20px 40px; color:var(--muted); font-size:0.86rem;}
.epb footer .doc-code{margin-bottom:10px;}
.epb .divider-dash{border:none; border-top:1px dashed var(--line); margin:44px 0 0;}
.epb::selection{background:var(--amber); color:var(--blueprint-deep);}

&lt;/style&gt;
&lt;div class="epb"&gt;
&lt;div class="crop tl"&gt;&lt;/div&gt;&lt;div class="crop tr"&gt;&lt;/div&gt;&lt;div class="crop bl"&gt;&lt;/div&gt;&lt;div class="crop br"&gt;&lt;/div&gt;

&lt;header class="cover"&gt;
  &lt;div class="stamp"&gt;&lt;div class="ring"&gt;&lt;/div&gt;&lt;span&gt;Modul Ajar&lt;b&gt;Terverifikasi&lt;/b&gt;Fase F&lt;/span&gt;&lt;/div&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-KAIDAH-2 — 3 JP · 1 Pertemuan&lt;/div&gt;
  &lt;h1&gt;Kaidah Kebahasaan Teks Prosedur (Bagian 2) &amp;amp; Menyusun Teks Prosedur&lt;/h1&gt;
  &lt;p class="subtitle"&gt;Materi Bahasa Indonesia Kelas XI SMK/MAK — melatih murid menganalisis kalimat perintah, kata teknis, dan penanda wacana, serta menyusun teks prosedur secara logis dan sistematis.&lt;/p&gt;

  &lt;div class="meta-strip"&gt;
    &lt;div&gt;&lt;div class="k"&gt;Mata Pelajaran&lt;/div&gt;&lt;div class="v"&gt;Bahasa Indonesia&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK/MAK — Kelas XI&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Elemen&lt;/div&gt;&lt;div class="v"&gt;Membaca, Memirsa &amp;amp; Menulis&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;3 JP (3 × 45 menit)&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;!-- ============ TUJUAN PEMBELAJARAN ============ --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="eyebrow"&gt;01 — Identitas Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Capaian &amp;amp; Tujuan Pembelajaran&lt;/h2&gt;

    &lt;div class="panel tp"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Capaian Pembelajaran (Elemen Membaca–Memirsa &amp;amp; Menulis)&lt;/div&gt;
      &lt;p&gt;Murid mampu menganalisis kaidah kebahasaan pada berbagai jenis teks, termasuk teks prosedur, serta menulis teks prosedur secara logis dan sistematis dengan memperhatikan struktur dan kaidah kebahasaan yang tepat.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="panel"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Tujuan Pembelajaran&lt;/div&gt;
      &lt;p style="font-size:1.05rem; color:var(--off-white); font-weight:600;"&gt;Murid mampu menganalisis penggunaan kalimat perintah, kata teknis, dan penanda wacana, serta menyusun teks prosedur secara logis dan sistematis.&lt;/p&gt;

      &lt;div class="tp-box"&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.1&lt;/span&gt;&lt;p&gt;Murid dapat menganalisis variasi bentuk dan fungsi kalimat perintah dalam teks prosedur.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.2&lt;/span&gt;&lt;p&gt;Murid dapat mengidentifikasi kata teknis dalam teks prosedur beserta fungsinya.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.3&lt;/span&gt;&lt;p&gt;Murid dapat mengidentifikasi penanda wacana dan menjelaskan fungsinya dalam menjaga keterpaduan teks.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.4&lt;/span&gt;&lt;p&gt;Murid dapat menyusun teks prosedur baru secara logis dan sistematis dengan menerapkan ketiga kaidah kebahasaan tersebut.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="eyebrow" style="margin-top:26px; margin-bottom:6px;"&gt;8 Profil Lulusan yang Dikembangkan&lt;/div&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penalaran Kritis&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menganalisis fungsi kalimat perintah, kata teknis, dan penanda wacana dalam teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kreativitas&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyusun teks prosedur baru secara orisinal dan sistematis.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kolaborasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Bekerja sama dalam kelompok saat menyusun teks prosedur.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Komunikasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyampaikan hasil analisis dan teks prosedur yang disusun secara jelas.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI A: RECAP BAGIAN 1 ============ --&gt;
  &lt;section class="section" id="materi-a"&gt;
    &lt;div class="eyebrow"&gt;02 — Materi Inti A&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengingat Kembali Kaidah Kebahasaan Teks Prosedur (Bagian 1)&lt;/h2&gt;
    &lt;p class="lead"&gt;Pada pertemuan sebelumnya, murid telah mempelajari empat ciri kebahasaan teks prosedur. Materi hari ini melanjutkan dengan tiga ciri kebahasaan tambahan, sekaligus mempelajari cara menyusun teks prosedur.&lt;/p&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kalimat Imperatif&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Mengarahkan pembaca melakukan tindakan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kalimat Deklaratif&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyampaikan fakta atau informasi pendukung.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kalimat Persuasif&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Membujuk pembaca mengikuti langkah dengan sungguh-sungguh.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Konjungsi Temporal&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menandai urutan waktu antarlangkah.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI B: KALIMAT PERINTAH ============ --&gt;
  &lt;section class="section" id="materi-b"&gt;
    &lt;div class="eyebrow"&gt;03 — Materi Inti B&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kalimat Perintah dalam Teks Prosedur&lt;/h2&gt;
    &lt;p class="lead"&gt;Kalimat perintah merupakan bentuk khusus kalimat imperatif yang memiliki beberapa variasi sesuai maksud penyampaiannya.&lt;/p&gt;

    &lt;div class="criteria"&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;1&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Perintah Biasa&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Mengarahkan pembaca melakukan tindakan secara langsung.&lt;/p&gt;
          &lt;div class="q"&gt;Contoh: "Sambungkan kabel ke sumber listrik."&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;2&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Perintah Larangan&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Melarang pembaca melakukan suatu tindakan tertentu.&lt;/p&gt;
          &lt;div class="q"&gt;Contoh: "Jangan sentuh permukaan yang masih panas."&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;3&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Perintah Ajakan&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Mengajak pembaca melakukan tindakan dengan nada lebih halus.&lt;/p&gt;
          &lt;div class="q"&gt;Contoh: "Mari kita mulai dengan menyiapkan alat terlebih dahulu."&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;4&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Perintah Permintaan&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Meminta pembaca melakukan sesuatu dengan nada sopan.&lt;/p&gt;
          &lt;div class="q"&gt;Contoh: "Tolong perhatikan indikator suhu sebelum melanjutkan."&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI C: KATA TEKNIS ============ --&gt;
  &lt;section class="section" id="materi-c"&gt;
    &lt;div class="eyebrow"&gt;04 — Materi Inti C&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kata Teknis dalam Teks Prosedur&lt;/h2&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Kata teknis&lt;/b&gt; adalah istilah khusus yang digunakan dalam bidang keahlian tertentu, jarang dipakai dalam percakapan sehari-hari, dan berfungsi memberikan ketepatan serta presisi pada instruksi yang disampaikan.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Bidang Otomotif&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;karburator, velg, pentil, kampas rem&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Bidang Tata Boga&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;mengocok, memfermentasi, mengukus, marinasi&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Bidang Teknik Komputer&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;partisi, ekstensi file, restart, defrag&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;p class="lead" style="margin-top:14px;"&gt;&lt;b style="color:var(--off-white);"&gt;Fungsi:&lt;/b&gt; memastikan pembaca yang memahami bidang tersebut dapat mengikuti instruksi secara akurat tanpa salah tafsir.&lt;/p&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI D: PENANDA WACANA ============ --&gt;
  &lt;section class="section" id="materi-d"&gt;
    &lt;div class="eyebrow"&gt;05 — Materi Inti D&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Penanda Wacana dalam Teks Prosedur&lt;/h2&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Penanda wacana&lt;/b&gt; adalah kata atau frasa yang mengatur hubungan antarkalimat atau antarparagraf dalam sebuah teks, sehingga teks menjadi padu dan mudah dipahami. Penanda wacana tidak hanya menunjukkan urutan waktu, tetapi juga penambahan, penekanan, dan simpulan.&lt;/p&gt;
    &lt;/div&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:24%;"&gt;Jenis Penanda Wacana&lt;/th&gt;&lt;th style="width:38%;"&gt;Contoh Kata/Frasa&lt;/th&gt;&lt;th&gt;Fungsi&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penanda Urutan&lt;/td&gt;&lt;td&gt;pertama-tama, selanjutnya, berikutnya&lt;/td&gt;&lt;td&gt;Menunjukkan urutan langkah&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penanda Penambahan&lt;/td&gt;&lt;td&gt;selain itu, di samping itu, lagi pula&lt;/td&gt;&lt;td&gt;Menambahkan informasi baru&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penanda Penekanan&lt;/td&gt;&lt;td&gt;perlu diperhatikan, yang terpenting, perlu diingat&lt;/td&gt;&lt;td&gt;Menegaskan bagian penting&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penanda Simpulan&lt;/td&gt;&lt;td&gt;dengan demikian, oleh karena itu, jadi&lt;/td&gt;&lt;td&gt;Menyimpulkan atau menegaskan hasil akhir&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI E: MENYUSUN TEKS PROSEDUR ============ --&gt;
  &lt;section class="section" id="materi-e"&gt;
    &lt;div class="eyebrow"&gt;06 — Materi Inti E&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Menyusun Teks Prosedur secara Logis dan Sistematis&lt;/h2&gt;

    &lt;div class="timeline"&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;01 · Menentukan Tujuan&lt;/h4&gt;&lt;p&gt;Tentukan tujuan atau hasil akhir yang ingin dicapai dari prosedur yang akan disusun.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;02 · Mendaftar Alat &amp;amp; Bahan&lt;/h4&gt;&lt;p&gt;Susun daftar alat dan bahan yang diperlukan, jika prosedur membutuhkannya.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;03 · Merancang Langkah secara Berurutan&lt;/h4&gt;&lt;p&gt;Susun langkah-langkah sesuai urutan logis, tanpa ada langkah yang meloncat atau bertentangan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;04 · Menerapkan Kaidah Kebahasaan&lt;/h4&gt;&lt;p&gt;Gunakan kalimat perintah, kata teknis, dan penanda wacana yang tepat pada setiap bagian teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;05 · Merevisi Keruntutan Teks&lt;/h4&gt;&lt;p&gt;Baca ulang teks yang disusun untuk memastikan urutan sudah logis dan mudah diikuti pembaca.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI F: TABEL RANGKUMAN ============ --&gt;
  &lt;section class="section" id="materi-f"&gt;
    &lt;div class="eyebrow"&gt;07 — Materi Inti F&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Ciri Kebahasaan Bagian 2&lt;/h2&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:20%;"&gt;Ciri Kebahasaan&lt;/th&gt;&lt;th style="width:30%;"&gt;Fungsi&lt;/th&gt;&lt;th&gt;Contoh&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Perintah&lt;/td&gt;&lt;td&gt;Mengarahkan, melarang, mengajak, atau meminta pembaca melakukan tindakan&lt;/td&gt;&lt;td&gt;"Jangan sentuh permukaan yang masih panas."&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kata Teknis&lt;/td&gt;&lt;td&gt;Memberikan ketepatan dan presisi sesuai bidang keahlian&lt;/td&gt;&lt;td&gt;"Periksa tekanan pada pentil ban."&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penanda Wacana&lt;/td&gt;&lt;td&gt;Menjaga keterpaduan antarkalimat/paragraf dalam teks&lt;/td&gt;&lt;td&gt;"Selain itu, pastikan area kerja dalam keadaan bersih."&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ PEMODELAN ============ --&gt;
  &lt;section class="section" id="contoh"&gt;
    &lt;div class="eyebrow"&gt;08 — Pemodelan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Contoh Penerapan: Menganalisis dan Menyusun Teks Prosedur&lt;/h2&gt;
    &lt;p class="lead"&gt;Guru membacakan dan membahas bersama contoh berikut sebagai model sebelum murid mengerjakan tugas kelompok.&lt;/p&gt;

    &lt;div class="doc-sample"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Prosedur Contoh&lt;/span&gt;&lt;span&gt;Dokumen-01&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Prosedur Memasang Kartu SIM dan Kartu Memori pada Smartphone&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63 !important;"&gt;&lt;i&gt;Tujuan: Memasang kartu SIM dan kartu memori dengan benar agar smartphone dapat digunakan secara optimal.&lt;/i&gt;&lt;/p&gt;
        &lt;ol style="color:#132029 !important;"&gt;
          &lt;li style="color:#132029 !important;"&gt;Matikan smartphone terlebih dahulu sebelum memasang kartu.&lt;span class="flag"&gt;PERINTAH&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Gunakan ejector pin untuk membuka slot kartu SIM.&lt;span class="flag"&gt;KATA TEKNIS&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Letakkan kartu SIM pada baki (tray) sesuai posisi yang tertera.&lt;span class="flag"&gt;KATA TEKNIS&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Selain itu, pastikan kartu memori terpasang pada slot yang benar agar terbaca oleh sistem.&lt;span class="flag"&gt;PENANDA WACANA&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Masukkan kembali baki ke dalam slot hingga terdengar bunyi klik.&lt;span class="flag"&gt;PERINTAH&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Jangan memaksa memasukkan baki jika terasa tersendat.&lt;span class="flag"&gt;PERINTAH&lt;/span&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;div class="note-margin" style="margin-top:10px; color:#8A3A1F !important;"&gt;Dengan demikian, kartu SIM dan kartu memori siap digunakan setelah smartphone dinyalakan kembali. &lt;b&gt;(penanda simpulan)&lt;/b&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="panel" style="margin-top:22px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Simpulan model analisis:&lt;/b&gt; Teks di atas menggunakan variasi kalimat perintah (perintah biasa dan larangan), kata teknis khas perangkat elektronik ("ejector pin", "baki/tray"), serta penanda wacana penambahan ("selain itu") dan simpulan ("dengan demikian") yang menjaga keterpaduan antarlangkah.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN ============ --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="eyebrow"&gt;09 — Ringkasan Materi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Poin-Poin Penting&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;ul&gt;
        &lt;li&gt;Kalimat perintah memiliki variasi bentuk: perintah biasa, larangan, ajakan, dan permintaan.&lt;/li&gt;
        &lt;li&gt;Kata teknis adalah istilah khusus bidang keahlian yang memberi ketepatan pada instruksi.&lt;/li&gt;
        &lt;li&gt;Penanda wacana menjaga keterpaduan teks melalui penanda urutan, penambahan, penekanan, dan simpulan.&lt;/li&gt;
        &lt;li&gt;Teks prosedur disusun melalui lima langkah: menentukan tujuan → mendaftar alat/bahan → merancang langkah → menerapkan kaidah kebahasaan → merevisi keruntutan.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS KELOMPOK ============ --&gt;
  &lt;section class="section" id="tugas-kelompok"&gt;
    &lt;div class="eyebrow"&gt;10 — Lembar Kerja&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Kelompok: Menyusun Teks Prosedur Baru&lt;/h2&gt;
      &lt;span class="badge"&gt;Durasi ± 60 menit&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Tujuan tugas:&lt;/b&gt; Murid secara berkelompok menyusun sebuah teks prosedur baru secara logis dan sistematis, dengan menerapkan kalimat perintah, kata teknis, dan penanda wacana yang telah dipelajari.&lt;/p&gt;

    &lt;div class="panel" style="margin-top:20px;"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Pilihan Tema (boleh memilih salah satu atau mengusulkan tema lain sesuai bidang keahlian dengan persetujuan guru)&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Mengisi Daya Ponsel dengan Aman · Membuat Mi Instan yang Lezat · Merawat Tanaman Hias di Dalam Ruangan · Membersihkan Keyboard Laptop · atau prosedur lain sesuai bidang keahlian kelompok.&lt;/p&gt;
    &lt;/div&gt;

    &lt;h4 style="color:var(--off-white); margin-top:24px;"&gt;Petunjuk Pengerjaan&lt;/h4&gt;
    &lt;ol class="steps-num"&gt;
      &lt;li&gt;&lt;b&gt;Bentuk kelompok&lt;/b&gt; beranggotakan 4–5 orang sesuai pembagian dari guru.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Pilih satu tema&lt;/b&gt; teks prosedur yang akan disusun.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Tentukan tujuan&lt;/b&gt; serta alat/bahan (jika ada) untuk prosedur tersebut.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Susun langkah-langkah&lt;/b&gt; secara berurutan dan logis pada Lembar Kerja Penyusunan di bawah ini.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Terapkan kaidah kebahasaan&lt;/b&gt;: gunakan minimal 5 kalimat perintah, 2 kata teknis, dan 2 penanda wacana, lalu isi tabel ceklis penggunaannya.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Presentasikan hasil&lt;/b&gt; di depan kelas selama maksimal 5 menit per kelompok, dilanjutkan tanya jawab singkat.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Lembar Kerja Penyusunan Teks Prosedur&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Bagian&lt;/th&gt;&lt;th&gt;Isi yang Disusun Kelompok&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Judul&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Tujuan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Alat &amp;amp; Bahan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Langkah 1–3&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Langkah 4–6&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penutup&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Ceklis Penggunaan Kaidah Kebahasaan&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:34%;"&gt;Kaidah Kebahasaan&lt;/th&gt;&lt;th style="width:20%;"&gt;Target Minimal&lt;/th&gt;&lt;th&gt;Jumlah yang Digunakan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Perintah&lt;/td&gt;&lt;td&gt;5 kalimat&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kata Teknis&lt;/td&gt;&lt;td&gt;2 kata&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penanda Wacana&lt;/td&gt;&lt;td&gt;2 kata/frasa&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Rubrik Penilaian Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:26%;"&gt;Aspek Penilaian&lt;/th&gt;&lt;th&gt;Skor 4 (Sangat Baik)&lt;/th&gt;&lt;th&gt;Skor 3 (Baik)&lt;/th&gt;&lt;th&gt;Skor 2 (Cukup)&lt;/th&gt;&lt;th&gt;Skor 1 (Kurang)&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kelogisan urutan langkah&lt;/td&gt;&lt;td&gt;Seluruh langkah runtut dan logis&lt;/td&gt;&lt;td&gt;Sebagian besar runtut&lt;/td&gt;&lt;td&gt;Ada beberapa langkah tidak runtut&lt;/td&gt;&lt;td&gt;Urutan tidak logis&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan kalimat perintah&lt;/td&gt;&lt;td&gt;Digunakan tepat dan bervariasi&lt;/td&gt;&lt;td&gt;Digunakan tepat&lt;/td&gt;&lt;td&gt;Kurang bervariasi&lt;/td&gt;&lt;td&gt;Tidak tepat/tidak digunakan&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan kata teknis &amp;amp; penanda wacana&lt;/td&gt;&lt;td&gt;Digunakan tepat sesuai konteks&lt;/td&gt;&lt;td&gt;Sebagian besar tepat&lt;/td&gt;&lt;td&gt;Kurang tepat&lt;/td&gt;&lt;td&gt;Tidak digunakan&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Presentasi&lt;/td&gt;&lt;td&gt;Jelas, percaya diri, menjawab pertanyaan dengan baik&lt;/td&gt;&lt;td&gt;Jelas namun kurang percaya diri&lt;/td&gt;&lt;td&gt;Kurang jelas/terbata-bata&lt;/td&gt;&lt;td&gt;Tidak dapat menjelaskan hasil&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

&lt;!-- ============ TUGAS INDIVIDU: KUIS INTERAKTIF 10 PERTANYAAN ============ --&gt;
  &lt;section class="section" id="tugas-individu"&gt;
    &lt;div class="eyebrow"&gt;11 — Penutup Pembelajaran&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Individu: Menjawab 10 Pertanyaan tentang Materi&lt;/h2&gt;
      &lt;span class="badge"&gt;Dikerjakan Mandiri · Otomatis Bernilai&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Petunjuk:&lt;/b&gt; Isi No. Absen dan Nama, lalu jawab 10 pertanyaan pilihan ganda berikut berdasarkan materi yang telah dipelajari hari ini. Skor akan muncul otomatis setelah menekan tombol "Kirim Jawaban", dan hasilnya (No. Absen, Nama, Skor) akan tercatat otomatis.&lt;/p&gt;

    &lt;div class="panel" id="epbq-form-wrap" style="margin-top:20px;"&gt;
      &lt;div style="display:grid; grid-template-columns:1fr 2fr; gap:14px; margin-bottom:22px;"&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;No. Absen&lt;/label&gt;
          &lt;input id="epbq-absen" type="text" inputmode="numeric" placeholder="Contoh: 12" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;label class="mono" style="display:block; font-size:0.75rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.08em; margin-bottom:6px;"&gt;Nama Lengkap&lt;/label&gt;
          &lt;input id="epbq-nama" type="text" placeholder="Tulis nama lengkap" style="width:100%; padding:10px 12px; border-radius:2px; border:1px solid var(--line); background:var(--blueprint-deep); color:var(--off-white); font-family:'Source Sans 3',sans-serif; font-size:0.95rem;"&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div id="epbq-questions"&gt;&lt;/div&gt;

      &lt;div style="margin-top:24px; display:flex; align-items:center; gap:16px; flex-wrap:wrap;"&gt;
        &lt;button id="epbq-submit" type="button" style="background:var(--amber); color:var(--blueprint-deep); border:none; padding:12px 26px; font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.05em; font-weight:600; border-radius:2px; cursor:pointer; font-size:0.95rem;"&gt;Kirim Jawaban&lt;/button&gt;
        &lt;span id="epbq-status" class="mono" style="font-size:0.85rem; color:var(--muted);"&gt;&lt;/span&gt;
      &lt;/div&gt;

      &lt;div id="epbq-result" style="display:none; margin-top:20px; padding:18px 20px; border:1px solid var(--amber); background:rgba(245,166,35,0.08);"&gt;
        &lt;p style="margin:0; font-size:1.05rem;"&gt;Skor kamu: &lt;b id="epbq-score" style="color:var(--amber); font-size:1.3rem;"&gt;&lt;/b&gt; / 100&lt;/p&gt;
        &lt;p id="epbq-detail" style="margin:8px 0 0; font-size:0.9rem; color:var(--muted);"&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;script&gt;
(function(){
  var EPBQ_ENDPOINT = "https://script.google.com/macros/s/AKfycbzM7t2qgAENzxQJXzSYJYL28R6nb3TxJVELLL3CopyEXb51t_gRtrkPOxTpI5mq6VCEKw/exec";

  var questions = [
    {q:"1. Kalimat yang berisi larangan kepada pembaca disebut...", opts:["Kalimat deklaratif","Kalimat perintah larangan","Kalimat persuasif","Kalimat interogatif"], correct:1},
    {q:"2. Manakah contoh kalimat perintah ajakan?", opts:["\"Jangan sentuh permukaan yang panas.\"","\"Mari kita mulai dengan menyiapkan alat.\"","\"Alat ini terbuat dari logam.\"","\"Sebaiknya gunakan alat ini secara rutin.\""], correct:1},
    {q:"3. Kata teknis dalam teks prosedur berfungsi untuk...", opts:["Membuat teks lebih panjang","Memberikan ketepatan dan presisi instruksi","Menghibur pembaca","Menambah jumlah kalimat persuasif"], correct:1},
    {q:"4. Manakah yang termasuk kata teknis bidang otomotif?", opts:["Mengocok","Partisi","Karburator","Marinasi"], correct:2},
    {q:"5. Penanda wacana \"selain itu\" termasuk jenis...", opts:["Penanda urutan","Penanda penambahan","Penanda penekanan","Penanda simpulan"], correct:1},
    {q:"6. Contoh penanda wacana penekanan adalah...", opts:["\"Pertama-tama...\"","\"Dengan demikian...\"","\"Perlu diperhatikan...\"","\"Selanjutnya...\""], correct:2},
    {q:"7. Langkah pertama dalam menyusun teks prosedur adalah...", opts:["Merevisi keruntutan teks","Menentukan tujuan","Menerapkan kaidah kebahasaan","Mendaftar alat dan bahan"], correct:1},
    {q:"8. Mengapa urutan langkah dalam teks prosedur tidak boleh diacak?", opts:["Karena akan membuat teks lebih pendek","Karena pembaca bisa gagal mencapai hasil yang diinginkan","Karena aturan tata bahasa mengharuskannya","Karena teks prosedur harus selalu memiliki 5 langkah"], correct:1},
    {q:"9. Manakah kalimat yang mengandung kata teknis?", opts:["\"Silakan duduk dengan nyaman.\"","\"Periksa tekanan pada pentil ban.\"","\"Semoga langkah ini bermanfaat.\"","\"Jangan lupa berdoa sebelum memulai.\""], correct:1},
    {q:"10. Penanda wacana yang menyimpulkan sebuah proses biasanya menggunakan kata...", opts:["\"Kemudian\"","\"Selain itu\"","\"Dengan demikian\"","\"Perlu diperhatikan\""], correct:2}
  ];

  var container = document.getElementById("epbq-questions");
  questions.forEach(function(item, idx){
    var block = document.createElement("div");
    block.style.marginBottom = "20px";
    block.style.paddingBottom = "16px";
    block.style.borderBottom = "1px dashed rgba(234,242,245,0.16)";

    var qEl = document.createElement("p");
    qEl.style.color = "#EAF2F5";
    qEl.style.fontWeight = "600";
    qEl.style.marginBottom = "8px";
    qEl.textContent = item.q;
    block.appendChild(qEl);

    item.opts.forEach(function(opt, oi){
      var label = document.createElement("label");
      label.style.display = "block";
      label.style.color = "#DDE7EC";
      label.style.fontSize = "0.92rem";
      label.style.margin = "4px 0";
      label.style.cursor = "pointer";

      var radio = document.createElement("input");
      radio.type = "radio";
      radio.name = "epbq-q" + idx;
      radio.value = oi;
      radio.style.marginRight = "8px";

      label.appendChild(radio);
      label.appendChild(document.createTextNode(opt));
      block.appendChild(label);
    });

    container.appendChild(block);
  });

  document.getElementById("epbq-submit").addEventListener("click", function(){
    var absen = document.getElementById("epbq-absen").value.trim();
    var nama = document.getElementById("epbq-nama").value.trim();
    var statusEl = document.getElementById("epbq-status");

    if(!absen || !nama){
      statusEl.textContent = "Isi No. Absen dan Nama terlebih dahulu.";
      statusEl.style.color = "#F5A623";
      return;
    }

    var belumDijawab = [];
    var benar = 0;
    questions.forEach(function(item, idx){
      var checked = document.querySelector('input[name="epbq-q' + idx + '"]:checked');
      if(!checked){
        belumDijawab.push(idx+1);
      } else if(parseInt(checked.value,10) === item.correct){
        benar++;
      }
    });

    if(belumDijawab.length &gt; 0){
      statusEl.textContent = "Pertanyaan belum dijawab: nomor " + belumDijawab.join(", ");
      statusEl.style.color = "#F5A623";
      return;
    }

    var skor = benar * 10;
    document.getElementById("epbq-score").textContent = skor;
    document.getElementById("epbq-detail").textContent = "Menjawab benar " + benar + " dari 10 pertanyaan.";
    document.getElementById("epbq-result").style.display = "block";
    statusEl.textContent = "Mengirim hasil...";
    statusEl.style.color = "#9FB4C2";

    var payload = new URLSearchParams();
    payload.append("noAbsen", absen);
    payload.append("nama", nama);
    payload.append("skor", skor);
    payload.append("waktu", new Date().toISOString());

    if(EPBQ_ENDPOINT.indexOf("PASTE_URL") === 0){
      statusEl.textContent = "Skor tercatat di halaman ini. (Pengiriman ke Google Sheets belum diaktifkan guru.)";
      return;
    }

    fetch(EPBQ_ENDPOINT, {
      method: "POST",
      mode: "no-cors",
      headers: {"Content-Type":"application/x-www-form-urlencoded"},
      body: payload.toString()
    }).then(function(){
      statusEl.textContent = "Hasil berhasil dikirim ke guru.";
      statusEl.style.color = "#6EC6CA";
    }).catch(function(){
      statusEl.textContent = "Skor tercatat di halaman ini, namun pengiriman gagal. Tunjukkan skor ini ke guru.";
      statusEl.style.color = "#F5A623";
    });
  });
})();
&lt;/script&gt;

&lt;/main&gt;

&lt;footer&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-KAIDAH-2 — Fokus Tujuan Pembelajaran, Materi Inti, Tugas Kelompok &amp;amp; Tugas Individu, 1× pertemuan (3 JP)&lt;/div&gt;
  &lt;p style="margin:0;"&gt;Referensi: Kurikulum Merdeka — Capaian Pembelajaran Bahasa Indonesia Fase F (Elemen Membaca, Memirsa, dan Menulis); Buku Teks Bahasa Indonesia Kelas XI SMK/MAK Kemendikbudristek.&lt;/p&gt;
&lt;/footer&gt;
&lt;/div&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/kaidah-kebahasaan-teks-prosedur-bagian.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-8699242951655968917</guid><pubDate>Fri, 07 Aug 2026 01:33:22 +0000</pubDate><atom:updated>2026-08-07T08:33:22.366+07:00</atom:updated><title>Sistem Operasi, Manajemen File, &amp; Penyimpanan Cloud</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Sistem Operasi, Manajemen File &amp; Penyimpanan Cloud — Informatika Kelas X&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&amp;family=IBM+Plex+Sans:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;style&gt;
  :root{
    --chrome: #2E3440;
    --chrome-deep: #232833;
    --desktop: #E8ECF1;
    --window: #FFFFFF;
    --line: #C7D0DA;
    --folder: #F0A93F;
    --folder-dark: #C9820A;
    --cloud: #3B82C4;
    --cloud-dark: #2A5F8F;
    --file-gray: #7C8798;
    --ink: #1F2A36;
    --ink-soft: #55647A;
    --green: #3FAE72;
    --red: #E0604A;
    --radius: 6px;
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{
    font-family:'IBM Plex Sans', sans-serif;
    background: var(--desktop);
    color: var(--ink);
    line-height:1.6;
  }
  .mono{font-family:'IBM Plex Mono', monospace;}

  /* ===== Top window chrome hero ===== */
  .titlebar-hero{
    background: var(--chrome);
    color: #E8ECF1;
  }
  .titlebar{
    display:flex; align-items:center; gap:8px;
    padding: 14px 6vw;
    border-bottom: 1px solid rgba(255,255,255,0.08);
  }
  .dot{width:12px; height:12px; border-radius:50%;}
  .dot.r{background:#E0604A;}
  .dot.y{background:#F0A93F;}
  .dot.g{background:#3FAE72;}
  .path-bar{
    margin-left:14px;
    font-family:'IBM Plex Mono', monospace;
    font-size:0.78rem;
    background: rgba(255,255,255,0.07);
    padding:5px 12px;
    border-radius:4px;
    color:#B9C4D2;
    letter-spacing:0.02em;
  }
  .hero-body{
    padding: 40px 6vw 60px;
  }
  .eyebrow{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.78rem;
    letter-spacing:0.14em;
    text-transform:uppercase;
    color: var(--folder);
    margin-bottom:18px;
  }
  h1.title{
    font-family:'IBM Plex Mono', monospace;
    font-weight:700;
    font-size: clamp(1.9rem, 4vw, 3.3rem);
    line-height:1.16;
    max-width: 20ch;
    color:#F4F6F9;
  }
  h1.title span{color: var(--cloud);}
  .hero-sub{
    margin-top:16px;
    max-width: 64ch;
    font-size:1.03rem;
    color: #C3CCD8;
  }
  .meta-strip{
    margin-top:36px;
    display:grid;
    grid-template-columns: repeat(auto-fit,minmax(160px,1fr));
    gap:1px;
    background: rgba(255,255,255,0.1);
    border:1px solid rgba(255,255,255,0.1);
    max-width: 920px;
  }
  .meta-cell{ background: var(--chrome-deep); padding:14px 16px; }
  .meta-cell .k{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.66rem; letter-spacing:0.1em; text-transform:uppercase;
    color: var(--cloud); opacity:0.9;
  }
  .meta-cell .v{ margin-top:6px; font-size:0.94rem; font-weight:600; color:#F1F4F7; }

  /* ===== Content ===== */
  main{
    background: var(--desktop);
    padding: 8px 0 0;
  }
  .section{
    padding: 54px 6vw;
    max-width: 1180px;
    margin: 0 auto;
  }
  .section-tag{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.72rem; letter-spacing:0.14em; text-transform:uppercase;
    color: var(--ink-soft);
    display:flex; align-items:center; gap:10px; margin-bottom:10px;
  }
  .section-tag .num{
    color:#fff; background: var(--chrome); padding:3px 8px; border-radius:3px; font-weight:600;
  }
  h2.section-title{
    font-family:'IBM Plex Mono', monospace;
    font-size: clamp(1.35rem, 2.3vw, 1.9rem);
    font-weight:700; color: var(--chrome); margin-bottom: 22px; max-width: 32ch;
  }
  h3.sub-title{
    font-family:'IBM Plex Mono', monospace;
    font-size:1.06rem; font-weight:600; color: var(--chrome);
    margin: 26px 0 12px; display:flex; align-items:center; gap:10px;
  }
  h3.sub-title::before{ content:""; width:8px;height:8px; background: var(--folder); display:inline-block; border-radius:1px; }
  p{ color:#33414F; max-width: 74ch; margin-bottom: 14px;}
  strong{color:var(--chrome);}
  ul, ol{ margin: 8px 0 18px 1.3em; max-width: 74ch;}
  li{margin-bottom:8px; color:#33414F;}

  .callout{
    border-left: 3px solid var(--cloud);
    background: #EAF2FA;
    padding: 16px 20px; border-radius: 0 6px 6px 0; margin: 18px 0; max-width: 74ch;
  }
  .callout .lbl{
    font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;
    color:#2A5F8F; font-weight:700; margin-bottom:6px;
  }

  /* ===== Window-style cards ===== */
  .win-card{
    background: var(--window);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    box-shadow: 0 2px 10px rgba(30,40,55,0.06);
    overflow:hidden;
  }
  .win-card .win-bar{
    background: #F3F5F8;
    border-bottom: 1px solid var(--line);
    padding: 8px 12px;
    display:flex; align-items:center; gap:6px;
  }
  .win-card .win-bar .d{width:9px;height:9px;border-radius:50%;}
  .win-card .win-bar .d.r{background:#E0604A;} .win-card .win-bar .d.y{background:#F0A93F;} .win-card .win-bar .d.g{background:#3FAE72;}
  .win-card .win-bar .win-title{
    margin-left:8px; font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--ink-soft);
  }
  .win-card .win-content{ padding: 18px 20px; }

  .card-grid{ display:grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin: 20px 0 8px; }
  @media (max-width: 860px){ .card-grid{grid-template-columns: 1fr;} }
  .card-grid .win-card h4{ font-family:'IBM Plex Mono', monospace; font-size:0.98rem; color:var(--chrome); margin-bottom:6px;}
  .card-grid .win-card p{ font-size:0.88rem; margin-bottom:8px;}
  .card-grid .win-card ul{ margin:6px 0 0 1.1em; font-size:0.88rem;}
  .card-grid .win-card li{ margin-bottom:4px; color:#3C4C5B;}

  /* ===== Folder tree diagram ===== */
  .tree-frame{
    margin: 24px 0;
    background: var(--window);
    border:1px solid var(--line);
    border-radius: 8px;
    padding: 22px 24px;
  }
  .tree{ font-family:'IBM Plex Mono', monospace; font-size:0.88rem; line-height:2; color:#2C3947;}
  .tree .lvl0::before{ content:"&#128193; "; }
  .tree .lvl1{ padding-left:26px; position:relative;}
  .tree .lvl1::before{ content:"├─ &#128193; "; color: var(--ink-soft);}
  .tree .lvl2{ padding-left:52px; position:relative; color:#55647A;}
  .tree .lvl2::before{ content:"├─ &#128196; "; }
  .tree .lvl2.last::before{ content:"└─ &#128196; "; }
  .tree .folder-name{color:var(--folder-dark); font-weight:600;}
  .tree .file-name{color:var(--file-gray);}

  /* ===== Cloud sync diagram ===== */
  .diagram-frame{
    margin: 26px 0;
    background: var(--window);
    border-radius: 8px;
    padding: 18px;
    border: 1px solid var(--line);
  }
  .diagram-frame svg{width:100%; height:auto; display:block;}
  .diagram-caption{
    font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color: var(--ink-soft);
    text-align:center; margin-top:10px; letter-spacing:0.03em;
  }
  .signal{ stroke-dasharray: 6 8; animation: flow 1.6s linear infinite; }
  @keyframes flow{ to{ stroke-dashoffset:-56; } }
  @media (prefers-reduced-motion: reduce){ .signal{animation:none;} }

  /* ===== Compare table ===== */
  table.compare{ width:100%; border-collapse:collapse; margin:18px 0; font-size:0.9rem; background:var(--window); }
  table.compare th, table.compare td{ border:1px solid var(--line); padding:11px 14px; text-align:left; }
  table.compare th{ background: var(--chrome); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.74rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.compare tr:nth-child(even) td{ background:#F3F5F8; }

  /* ===== Summary ===== */
  .summary-box{ background: var(--chrome); color: #fff; border-radius: 8px; padding: 26px 28px; margin-top: 10px; }
  .summary-box h4{ font-family:'IBM Plex Mono', monospace; color: var(--folder); font-size:0.85rem; letter-spacing:0.08em; text-transform:uppercase; margin-bottom:14px; }
  .summary-box ul{ margin:0 0 0 1.1em; max-width:none; }
  .summary-box li{ color:#E4EAF0; margin-bottom:8px; }

  /* ===== Tugas kelompok ===== */
  .task-panel{
    border: 1.5px dashed var(--chrome);
    border-radius: 8px; padding: 26px 28px;
    background: repeating-linear-gradient(135deg, #FFFFFF, #FFFFFF 18px, #EEF1F5 18px, #EEF1F5 19px);
  }
  .task-head{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:12px; }
  .task-head .badge{
    font-family:'IBM Plex Mono', monospace; font-size:0.7rem; letter-spacing:0.08em; text-transform:uppercase;
    background: var(--cloud); color:#fff; padding:4px 10px; border-radius:3px;
  }
  .task-panel h3{ font-family:'IBM Plex Mono', monospace; font-size:1.22rem; color: var(--chrome); }
  .steps-num{ counter-reset: step; margin:16px 0; max-width:78ch; }
  .steps-num li{ counter-increment: step; list-style:none; position:relative; padding-left:34px; margin-bottom:14px; }
  .steps-num li::before{
    content: counter(step); position:absolute; left:0; top:0;
    font-family:'IBM Plex Mono', monospace; font-weight:700; color:#fff; background: var(--chrome);
    width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:0.8rem;
  }
  table.rubrik{ width:100%; border-collapse:collapse; margin-top:18px; font-size:0.88rem; }
  table.rubrik th, table.rubrik td{ border:1px solid #C9C4B4; padding:10px 12px; text-align:left; }
  table.rubrik th{ background: var(--chrome); color:#fff; font-family:'IBM Plex Mono', monospace; font-size:0.75rem; letter-spacing:0.04em; text-transform:uppercase; }
  table.rubrik tr:nth-child(even) td{ background:#F1F0E8; }

  .closing-task{
    margin-top:22px; background: #FFF6E8; border:1.5px solid var(--folder); border-radius:8px; padding:20px 22px;
  }
  .closing-task .lbl{ font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.1em; text-transform:uppercase; color:#8A5A0A; font-weight:700; margin-bottom:8px; }

  footer{
    background: var(--chrome-deep); color:#9FAEC0; text-align:center; padding: 30px 6vw 40px;
    font-family:'IBM Plex Mono', monospace; font-size:0.75rem; letter-spacing:0.04em;
  }

  @media (max-width: 700px){
    .card-grid{grid-template-columns:1fr;}
    .hero-body{padding:32px 5vw 44px;}
    .section{padding:38px 5vw;}
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="titlebar-hero"&gt;
  &lt;div class="titlebar"&gt;
    &lt;span class="dot r"&gt;&lt;/span&gt;&lt;span class="dot y"&gt;&lt;/span&gt;&lt;span class="dot g"&gt;&lt;/span&gt;
    &lt;span class="path-bar"&gt;C:\Informatika\Kelas-X\Sistem-Operasi-File-Cloud&lt;/span&gt;
  &lt;/div&gt;
  &lt;div class="hero-body"&gt;
    &lt;div class="eyebrow"&gt;Informatika · Fase E · Kelas X SMK&lt;/div&gt;
    &lt;h1 class="title"&gt;Sistem Operasi, Manajemen File, &amp; Penyimpanan &lt;span&gt;Cloud&lt;/span&gt;&lt;/h1&gt;
    &lt;p class="hero-sub"&gt;Materi ini membahas bagaimana sistem operasi mengatur seluruh sumber daya komputer, bagaimana file dan folder dikelola secara sistematis, serta bagaimana layanan penyimpanan cloud mendukung pekerjaan digital masa kini.&lt;/p&gt;

    &lt;div class="meta-strip"&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Elemen CP&lt;/div&gt;&lt;div class="v"&gt;Sistem Operasi &amp; File&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK Kelas X&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;1 Pertemuan · 4 JP (180 menit)&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Model&lt;/div&gt;&lt;div class="v"&gt;Praktik &amp; Kerja Kelompok&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;main&gt;

  &lt;!-- ===================== TUJUAN ===================== --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;00&lt;/span&gt; Capaian &amp; Tujuan Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Ke Mana Materi Ini Menuju&lt;/h2&gt;

    &lt;h3 class="sub-title"&gt;Capaian Pembelajaran&lt;/h3&gt;
    &lt;p&gt;Murid mampu mengelola sistem operasi, file, folder, media penyimpanan, serta memanfaatkan layanan cloud storage untuk mendukung pekerjaan digital.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Tujuan Pembelajaran&lt;/h3&gt;
    &lt;ol&gt;
      &lt;li&gt;Menjelaskan pengertian dan fungsi sistem operasi dalam mengelola sumber daya komputer.&lt;/li&gt;
      &lt;li&gt;Mengidentifikasi jenis-jenis sistem operasi yang umum digunakan.&lt;/li&gt;
      &lt;li&gt;Mengelola file dan folder: membuat, menamai, menyalin, memindahkan, dan menghapus dengan struktur yang rapi.&lt;/li&gt;
      &lt;li&gt;Membedakan jenis media penyimpanan (internal, removable, dan cloud) beserta karakteristiknya.&lt;/li&gt;
      &lt;li&gt;Memanfaatkan layanan penyimpanan cloud untuk menyimpan, mengelola, dan berbagi berkas pekerjaan digital.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 class="sub-title"&gt;Rincian Kegiatan (4 JP × 45 menit)&lt;/h3&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Tahap&lt;/th&gt;&lt;th&gt;Kegiatan&lt;/th&gt;&lt;th&gt;Waktu&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pendahuluan&lt;/td&gt;&lt;td&gt;Apersepsi ("Ke mana perginya file yang kamu simpan?"), penyampaian tujuan pembelajaran&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Eksplorasi Konsep&lt;/td&gt;&lt;td&gt;Penjelasan sistem operasi, manajemen file/folder, media penyimpanan, dan cloud storage&lt;/td&gt;&lt;td&gt;55 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Praktik Mandiri&lt;/td&gt;&lt;td&gt;Murid mempraktikkan membuat struktur folder dan mengunggah file ke akun cloud storage&lt;/td&gt;&lt;td&gt;30 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Kerja Kelompok&lt;/td&gt;&lt;td&gt;Diskusi dan pengerjaan tugas kelompok&lt;/td&gt;&lt;td&gt;45 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Inti — Presentasi&lt;/td&gt;&lt;td&gt;Presentasi singkat tiap kelompok dan tanggapan guru&lt;/td&gt;&lt;td&gt;25 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penutup&lt;/td&gt;&lt;td&gt;Refleksi, penguatan konsep, menulis kesimpulan ringkas di buku catatan&lt;/td&gt;&lt;td&gt;10 menit&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;!-- ===================== A. SISTEM OPERASI ===================== --&gt;
  &lt;section class="section" id="sistem-operasi"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;01&lt;/span&gt; Konsep Dasar&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Apa Itu Sistem Operasi?&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Sistem operasi (operating system/OS)&lt;/strong&gt; adalah perangkat lunak utama yang menjembatani antara pengguna, aplikasi, dan perangkat keras komputer. OS dijalankan pertama kali saat komputer dinyalakan dan terus bekerja di latar belakang selama komputer digunakan.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Fungsi Utama Sistem Operasi&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Manajemen proses&lt;/strong&gt; — mengatur program apa saja yang sedang berjalan dan membagi waktu pemrosesan CPU untuk masing-masing program.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Manajemen memori&lt;/strong&gt; — mengalokasikan RAM untuk setiap program agar dapat berjalan tanpa saling bertabrakan.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Manajemen perangkat keras&lt;/strong&gt; — mengatur komunikasi dengan printer, keyboard, mouse, dan perangkat lain melalui driver.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Manajemen file&lt;/strong&gt; — mengatur bagaimana data disimpan, disusun dalam folder, dan diakses kembali.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Antarmuka pengguna (User Interface)&lt;/strong&gt; — menyediakan tampilan (GUI) atau baris perintah (CLI) agar manusia dapat berinteraksi dengan komputer.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3 class="sub-title"&gt;Jenis-Jenis Sistem Operasi&lt;/h3&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="win-card"&gt;
        &lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;desktop-os.exe&lt;/span&gt;&lt;/div&gt;
        &lt;div class="win-content"&gt;
          &lt;h4&gt;Windows&lt;/h4&gt;
          &lt;p&gt;OS paling umum di komputer perkantoran dan sekolah, dikembangkan oleh Microsoft, dikenal luas kompatibel dengan berbagai aplikasi.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="win-card"&gt;
        &lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;macos.app&lt;/span&gt;&lt;/div&gt;
        &lt;div class="win-content"&gt;
          &lt;h4&gt;macOS&lt;/h4&gt;
          &lt;p&gt;OS buatan Apple untuk perangkat Mac, dikenal dengan antarmuka yang halus dan integrasi kuat dengan perangkat Apple lainnya.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="win-card"&gt;
        &lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;~/linux&lt;/span&gt;&lt;/div&gt;
        &lt;div class="win-content"&gt;
          &lt;h4&gt;Linux&lt;/h4&gt;
          &lt;p&gt;OS open-source yang fleksibel dan banyak dipakai di server, perangkat pengembangan, hingga superkomputer. Contoh: Ubuntu, Debian.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="win-card"&gt;
        &lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;mobile.apk&lt;/span&gt;&lt;/div&gt;
        &lt;div class="win-content"&gt;
          &lt;h4&gt;Android&lt;/h4&gt;
          &lt;p&gt;OS berbasis Linux untuk perangkat mobile, dikembangkan Google, digunakan oleh mayoritas smartphone di dunia.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="win-card"&gt;
        &lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;mobile.ipa&lt;/span&gt;&lt;/div&gt;
        &lt;div class="win-content"&gt;
          &lt;h4&gt;iOS&lt;/h4&gt;
          &lt;p&gt;OS buatan Apple khusus untuk iPhone, dikenal dengan ekosistem tertutup namun stabil dan aman.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="win-card"&gt;
        &lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;chrome.os&lt;/span&gt;&lt;/div&gt;
        &lt;div class="win-content"&gt;
          &lt;h4&gt;Chrome OS&lt;/h4&gt;
          &lt;p&gt;OS ringan berbasis cloud dari Google, banyak digunakan di Chromebook untuk kebutuhan belajar dan kerja ringan berbasis internet.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== B. MANAJEMEN FILE ===================== --&gt;
  &lt;section class="section" id="manajemen-file"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;02&lt;/span&gt; Pengelolaan Data&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Manajemen File dan Folder&lt;/h2&gt;
    &lt;p&gt;Salah satu tugas penting sistem operasi adalah mengatur &lt;strong&gt;file&lt;/strong&gt; (berkas data) dan &lt;strong&gt;folder/direktori&lt;/strong&gt; (wadah untuk mengelompokkan file) agar data dapat disimpan dan ditemukan kembali dengan mudah.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Anatomi Sebuah File&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Nama file&lt;/strong&gt; — identitas unik dalam satu folder, sebaiknya deskriptif dan konsisten.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Ekstensi file&lt;/strong&gt; — akhiran nama yang menandakan jenis/format file, misalnya &lt;span class="mono"&gt;.docx&lt;/span&gt; (dokumen), &lt;span class="mono"&gt;.xlsx&lt;/span&gt; (spreadsheet), &lt;span class="mono"&gt;.jpg&lt;/span&gt; (gambar), &lt;span class="mono"&gt;.pdf&lt;/span&gt; (dokumen portabel), &lt;span class="mono"&gt;.mp4&lt;/span&gt; (video).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Ukuran file&lt;/strong&gt; — kapasitas ruang yang dipakai, diukur dalam KB, MB, atau GB.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Path (alamat file)&lt;/strong&gt; — lokasi lengkap file dalam struktur folder, misalnya &lt;span class="mono"&gt;D:\Tugas\Informatika\laporan.docx&lt;/span&gt;.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3 class="sub-title"&gt;Struktur Folder (Hierarki)&lt;/h3&gt;
    &lt;p&gt;Folder disusun secara berjenjang seperti pohon terbalik — satu folder utama dapat memiliki banyak subfolder, dan setiap subfolder dapat menyimpan file maupun subfolder lain di dalamnya.&lt;/p&gt;
    &lt;div class="tree-frame"&gt;
      &lt;div class="tree"&gt;
        &lt;div class="lvl0"&gt;&lt;span class="folder-name"&gt;Tugas Sekolah&lt;/span&gt;&lt;/div&gt;
        &lt;div class="lvl1"&gt;&lt;span class="folder-name"&gt;Informatika&lt;/span&gt;&lt;/div&gt;
        &lt;div class="lvl2"&gt;&lt;span class="file-name"&gt;materi-sistem-operasi.pdf&lt;/span&gt;&lt;/div&gt;
        &lt;div class="lvl2 last"&gt;&lt;span class="file-name"&gt;tugas-kelompok.docx&lt;/span&gt;&lt;/div&gt;
        &lt;div class="lvl1"&gt;&lt;span class="folder-name"&gt;Matematika&lt;/span&gt;&lt;/div&gt;
        &lt;div class="lvl2 last"&gt;&lt;span class="file-name"&gt;latihan-soal.pdf&lt;/span&gt;&lt;/div&gt;
        &lt;div class="lvl1"&gt;&lt;span class="folder-name"&gt;Bahasa Indonesia&lt;/span&gt;&lt;/div&gt;
        &lt;div class="lvl2 last"&gt;&lt;span class="file-name"&gt;esai-argumentatif.docx&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Operasi Dasar Pengelolaan File&lt;/h3&gt;
    &lt;ul style="columns:2;"&gt;
      &lt;li&gt;&lt;strong&gt;Create&lt;/strong&gt; — membuat file/folder baru&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Rename&lt;/strong&gt; — mengganti nama&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Copy&lt;/strong&gt; — menggandakan&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Move&lt;/strong&gt; — memindahkan lokasi&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Delete&lt;/strong&gt; — menghapus&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Compress&lt;/strong&gt; — memampatkan (mis. .zip)&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Praktik Baik&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Gunakan penamaan file yang konsisten dan deskriptif, misalnya &lt;span class="mono"&gt;Laporan_Praktikum_Bab3_v1.docx&lt;/span&gt;, serta kelompokkan file ke dalam folder bertema agar mudah ditemukan kembali — bukan menumpuk semua file langsung di Desktop.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== C. MEDIA PENYIMPANAN ===================== --&gt;
  &lt;section class="section" id="penyimpanan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;03&lt;/span&gt; Perangkat Simpan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Media Penyimpanan&lt;/h2&gt;
    &lt;p&gt;File dan folder yang dikelola sistem operasi pada akhirnya disimpan secara fisik maupun virtual pada media penyimpanan berikut.&lt;/p&gt;

    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Jenis&lt;/th&gt;&lt;th&gt;Contoh&lt;/th&gt;&lt;th&gt;Karakteristik&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penyimpanan Internal&lt;/td&gt;&lt;td&gt;HDD (Hard Disk Drive), SSD (Solid State Drive)&lt;/td&gt;&lt;td&gt;Terpasang permanen di dalam perangkat; SSD jauh lebih cepat namun lebih mahal per GB dibanding HDD.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penyimpanan Removable&lt;/td&gt;&lt;td&gt;Flashdisk, memory card (microSD), HDD eksternal&lt;/td&gt;&lt;td&gt;Portabel, mudah dipindah antar perangkat, namun rawan hilang atau rusak fisik.&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penyimpanan Cloud&lt;/td&gt;&lt;td&gt;Google Drive, OneDrive, Dropbox, iCloud&lt;/td&gt;&lt;td&gt;Data tersimpan di server internet, dapat diakses dari mana saja selama terhubung internet.&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;!-- ===================== D. CLOUD STORAGE ===================== --&gt;
  &lt;section class="section" id="cloud"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;04&lt;/span&gt; Penyimpanan Modern&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Penyimpanan Cloud (Cloud Storage)&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Cloud storage&lt;/strong&gt; adalah layanan penyimpanan data yang menempatkan file pada server jarak jauh milik penyedia layanan, bukan pada perangkat milik pengguna sendiri. File yang disimpan di cloud dapat diakses, diedit, dan dibagikan dari perangkat mana pun yang terhubung ke internet.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Cara Kerja Cloud Storage&lt;/h3&gt;
    &lt;div class="diagram-frame"&gt;
      &lt;svg viewBox="0 0 800 300" xmlns="http://www.w3.org/2000/svg"&gt;
        &lt;text x="400" y="28" text-anchor="middle" fill="#55647A" font-family="IBM Plex Mono, monospace" font-size="12" letter-spacing="2"&gt;SINKRONISASI PERANGKAT LOKAL &amp;amp; CLOUD&lt;/text&gt;

        &lt;!-- laptop --&gt;
        &lt;rect x="60" y="90" width="150" height="95" rx="6" fill="none" stroke="#2E3440" stroke-width="1.5"/&gt;
        &lt;text x="135" y="122" text-anchor="middle" fill="#2E3440" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="12"&gt;Laptop&lt;/text&gt;
        &lt;text x="135" y="145" text-anchor="middle" fill="#55647A" font-family="IBM Plex Mono, monospace" font-size="9"&gt;file lokal&lt;/text&gt;
        &lt;rect x="85" y="155" width="100" height="16" fill="none" stroke="#7C8798" stroke-width="1"/&gt;

        &lt;!-- smartphone --&gt;
        &lt;rect x="60" y="205" width="150" height="70" rx="6" fill="none" stroke="#2E3440" stroke-width="1.5"/&gt;
        &lt;text x="135" y="232" text-anchor="middle" fill="#2E3440" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="12"&gt;Smartphone&lt;/text&gt;
        &lt;text x="135" y="252" text-anchor="middle" fill="#55647A" font-family="IBM Plex Mono, monospace" font-size="9"&gt;app cloud storage&lt;/text&gt;

        &lt;!-- cloud --&gt;
        &lt;g transform="translate(430,60)"&gt;
          &lt;path d="M50 90 a40 40 0 0 1 0-80 a50 50 0 0 1 96-14 a36 36 0 0 1 4 94 z" fill="none" stroke="#3B82C4" stroke-width="2"/&gt;
          &lt;text x="90" y="52" text-anchor="middle" fill="#2A5F8F" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="13"&gt;CLOUD&lt;/text&gt;
          &lt;text x="90" y="70" text-anchor="middle" fill="#3B82C4" font-family="IBM Plex Mono, monospace" font-size="9"&gt;server penyedia layanan&lt;/text&gt;
        &lt;/g&gt;

        &lt;!-- arrows --&gt;
        &lt;line class="signal" x1="210" y1="130" x2="440" y2="110" stroke="#3B82C4" stroke-width="2"/&gt;
        &lt;line class="signal" x1="210" y1="240" x2="440" y2="150" stroke="#3B82C4" stroke-width="2"/&gt;

        &lt;text x="580" y="235" text-anchor="middle" fill="#55647A" font-family="IBM Plex Mono, monospace" font-size="10"&gt;Sinkron otomatis via internet —&lt;/text&gt;
        &lt;text x="580" y="252" text-anchor="middle" fill="#55647A" font-family="IBM Plex Mono, monospace" font-size="10"&gt;perubahan di satu perangkat&lt;/text&gt;
        &lt;text x="580" y="269" text-anchor="middle" fill="#55647A" font-family="IBM Plex Mono, monospace" font-size="10"&gt;otomatis muncul di perangkat lain&lt;/text&gt;
      &lt;/svg&gt;
      &lt;div class="diagram-caption"&gt;File yang diunggah dari satu perangkat langsung tersinkronisasi ke semua perangkat lain yang masuk ke akun cloud yang sama.&lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Contoh Layanan Cloud Storage&lt;/h3&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="win-card"&gt;&lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;drive.google.com&lt;/span&gt;&lt;/div&gt;&lt;div class="win-content"&gt;&lt;h4&gt;Google Drive&lt;/h4&gt;&lt;p&gt;Terintegrasi dengan akun Google dan Google Docs/Sheets/Slides untuk kolaborasi real-time.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;div class="win-card"&gt;&lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;onedrive.live.com&lt;/span&gt;&lt;/div&gt;&lt;div class="win-content"&gt;&lt;h4&gt;OneDrive&lt;/h4&gt;&lt;p&gt;Layanan cloud dari Microsoft, terhubung erat dengan Windows dan aplikasi Office.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;div class="win-card"&gt;&lt;div class="win-bar"&gt;&lt;span class="d r"&gt;&lt;/span&gt;&lt;span class="d y"&gt;&lt;/span&gt;&lt;span class="d g"&gt;&lt;/span&gt;&lt;span class="win-title"&gt;dropbox.com&lt;/span&gt;&lt;/div&gt;&lt;div class="win-content"&gt;&lt;h4&gt;Dropbox&lt;/h4&gt;&lt;p&gt;Salah satu pionir cloud storage, dikenal dengan fitur sinkronisasi dan berbagi file yang sederhana.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Kelebihan &amp; Tantangan Cloud Storage&lt;/h3&gt;
    &lt;table class="compare"&gt;
      &lt;tr&gt;&lt;th&gt;Kelebihan&lt;/th&gt;&lt;th&gt;Tantangan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Dapat diakses dari mana saja dan kapan saja selama ada internet&lt;/td&gt;&lt;td&gt;Membutuhkan koneksi internet untuk sinkronisasi&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Memudahkan kolaborasi dan berbagi file dengan orang lain&lt;/td&gt;&lt;td&gt;Kapasitas gratis terbatas, perlu berlangganan untuk kapasitas lebih besar&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Berfungsi sebagai cadangan (backup) jika perangkat lokal rusak/hilang&lt;/td&gt;&lt;td&gt;Perlu diperhatikan pengaturan privasi dan keamanan berbagi file&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;!-- ===================== E. HUBUNGAN ===================== --&gt;
  &lt;section class="section" id="hubungan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;05&lt;/span&gt; Keterkaitan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Hubungan Antar Konsep&lt;/h2&gt;
    &lt;p&gt;Sistem operasi, manajemen file, media penyimpanan, dan cloud storage bekerja sebagai satu rangkaian yang saling melengkapi:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Sistem operasi&lt;/strong&gt; menyediakan alat (file manager) untuk mengelola file dan folder.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;File dan folder&lt;/strong&gt; yang dikelola tersebut pada akhirnya disimpan secara fisik pada &lt;strong&gt;media penyimpanan&lt;/strong&gt; — baik internal, removable, maupun cloud.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Cloud storage&lt;/strong&gt; memperluas kapasitas dan fleksibilitas penyimpanan, memungkinkan file yang sama diakses dari berbagai perangkat dan sistem operasi yang berbeda.&lt;/li&gt;
      &lt;li&gt;Ketiganya membentuk fondasi produktivitas digital: tanpa manajemen file yang baik, kapasitas penyimpanan sebesar apa pun akan sulit dimanfaatkan secara efektif.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;!-- ===================== F. RANGKUMAN ===================== --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;06&lt;/span&gt; Penguatan Konsep&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Materi&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;h4&gt;Poin-Poin Kunci&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Sistem operasi mengatur proses, memori, perangkat keras, file, dan antarmuka pengguna.&lt;/li&gt;
        &lt;li&gt;Contoh sistem operasi: Windows, macOS, Linux, Android, iOS, dan Chrome OS.&lt;/li&gt;
        &lt;li&gt;File memiliki nama, ekstensi, ukuran, dan path; folder menyusun file dalam struktur hierarki.&lt;/li&gt;
        &lt;li&gt;Operasi dasar pengelolaan file meliputi create, rename, copy, move, delete, dan compress.&lt;/li&gt;
        &lt;li&gt;Media penyimpanan terbagi atas internal (HDD/SSD), removable (flashdisk, HDD eksternal), dan cloud.&lt;/li&gt;
        &lt;li&gt;Cloud storage menyimpan file di server internet dan mensinkronkannya ke seluruh perangkat pengguna.&lt;/li&gt;
        &lt;li&gt;Cloud storage memudahkan akses dan kolaborasi, namun bergantung pada koneksi internet dan kuota penyimpanan.&lt;/li&gt;
        &lt;li&gt;Sistem operasi, manajemen file, dan cloud storage saling melengkapi dalam mendukung pekerjaan digital.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== TUGAS KELOMPOK ===================== --&gt;
  &lt;section class="section" id="tugas"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;07&lt;/span&gt; Aktivitas Belajar&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tugas Kelompok&lt;/h2&gt;

    &lt;div class="task-panel"&gt;
      &lt;div class="task-head"&gt;
        &lt;span class="badge"&gt;Kerja Kelompok · 4–5 orang&lt;/span&gt;
        &lt;span class="badge" style="background:var(--chrome);"&gt;45 menit diskusi + 25 menit presentasi&lt;/span&gt;
      &lt;/div&gt;
      &lt;h3&gt;Membangun Struktur Folder &amp; Ekosistem Cloud Storage Kelompok&lt;/h3&gt;
      &lt;p&gt;Setiap kelompok merancang struktur folder digital untuk sebuah proyek belajar, kemudian mengimplementasikannya pada salah satu layanan cloud storage dan mempraktikkan cara berbagi file antar anggota.&lt;/p&gt;

      &lt;ol class="steps-num"&gt;
        &lt;li&gt;&lt;strong&gt;Bentuk kelompok&lt;/strong&gt; beranggotakan 4–5 orang dan pilih satu layanan cloud storage yang akan digunakan (Google Drive, OneDrive, atau Dropbox).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Rancang struktur folder&lt;/strong&gt; untuk proyek "Portofolio Belajar Semester Ini" dengan minimal 1 folder utama dan 3 subfolder bertema (mis. per mata pelajaran atau per jenis tugas).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Buat struktur folder tersebut&lt;/strong&gt; di akun cloud storage kelompok, lalu unggah minimal 3 contoh file ke dalamnya.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Atur pengaturan berbagi (sharing)&lt;/strong&gt; agar seluruh anggota kelompok dapat mengakses dan mengedit folder bersama.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Dokumentasikan prosesnya&lt;/strong&gt; dalam bentuk tangkapan layar (screenshot) struktur folder dan pengaturan berbagi.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Diskusikan dan tuliskan perbandingan&lt;/strong&gt;: kelebihan dan kekurangan menyimpan tugas di penyimpanan lokal (flashdisk/laptop) dibandingkan di cloud storage untuk skenario kerja kelompok.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Presentasikan&lt;/strong&gt; struktur folder, hasil dokumentasi, dan kesimpulan perbandingan di depan kelas selama maksimal 5 menit per kelompok.&lt;/li&gt;
      &lt;/ol&gt;

      &lt;h3 class="sub-title" style="margin-top:26px;"&gt;Format Laporan&lt;/h3&gt;
      &lt;p&gt;Laporan memuat: (1) nama layanan cloud &amp; anggota kelompok, (2) skema/daftar struktur folder yang dirancang, (3) tangkapan layar folder dan pengaturan berbagi di cloud, (4) tabel perbandingan penyimpanan lokal vs cloud.&lt;/p&gt;

      &lt;h3 class="sub-title"&gt;Rubrik Penilaian&lt;/h3&gt;
      &lt;table class="rubrik"&gt;
        &lt;tr&gt;&lt;th&gt;Aspek&lt;/th&gt;&lt;th&gt;Indikator&lt;/th&gt;&lt;th&gt;Skor Maks.&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Struktur Folder&lt;/td&gt;&lt;td&gt;Struktur folder logis, bertingkat, dan sesuai tema proyek&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Implementasi di Cloud&lt;/td&gt;&lt;td&gt;Folder dan file berhasil dibuat serta diunggah ke layanan cloud yang dipilih&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Pengaturan Berbagi&lt;/td&gt;&lt;td&gt;Pengaturan sharing tepat sehingga seluruh anggota dapat mengakses&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Analisis Perbandingan&lt;/td&gt;&lt;td&gt;Perbandingan lokal vs cloud logis, relevan, dan didukung alasan yang jelas&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kerja Sama &amp; Presentasi&lt;/td&gt;&lt;td&gt;Seluruh anggota berkontribusi; presentasi jelas dan percaya diri&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td colspan="2" style="text-align:right; font-weight:600;"&gt;Total&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class="closing-task"&gt;
      &lt;div class="lbl"&gt;Penutup Pembelajaran · Tugas Individu&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Tulislah satu kesimpulan ringkas (5–7 kalimat) di buku catatan kalian masing-masing&lt;/strong&gt;, yang merangkum keseluruhan materi hari ini: fungsi sistem operasi, cara mengelola file dan folder, jenis-jenis media penyimpanan, serta peran dan cara kerja cloud storage dalam mendukung pekerjaan digital. Tulis dengan bahasa dan pemahaman kalian sendiri, bukan menyalin ulang materi.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  INFORMATIKA · SISTEM OPERASI, MANAJEMEN FILE &amp; PENYIMPANAN CLOUD · FASE E KELAS X SMK
&lt;/footer&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/sistem-operasi-manajemen-file.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-4375210522487967607</guid><pubDate>Tue, 04 Aug 2026 02:25:41 +0000</pubDate><atom:updated>2026-08-04T09:25:41.044+07:00</atom:updated><title>sertifikat kombel</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Generator Sertifikat&lt;/title&gt;

&lt;link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&amp;display=swap" rel="stylesheet"&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"&gt;&lt;/script&gt;

&lt;style&gt;

body{
    font-family:Arial,sans-serif;
    background:#eef2f7;
    padding:20px;
    max-width:700px;
    margin:auto;
}

.card{
    background:white;
    padding:24px;
    border-radius:20px;
    box-shadow:0 10px 20px rgba(0,0,0,.1);
}

h2{
    text-align:center;
    color:#1e4668;
}

.confirm-box{
    background:#f0f6ff;
    border-left:5px solid #2c7da0;
    padding:16px;
    border-radius:16px;
    margin-bottom:20px;
    text-align:center;
}

.confirm-box p{
    margin-top:0;
    font-weight:bold;
    color:#1e4668;
}

.confirm-buttons{
    display:flex;
    gap:10px;
    margin-top:10px;
}

.confirm-buttons button{
    flex:1;
}

.yes-btn{
    background:#1f8a4c;
}

.yes-btn:hover{
    background:#166638;
}

.no-btn{
    background:#c0392b;
}

.no-btn:hover{
    background:#962d22;
}

input,select,button{
    width:100%;
    padding:12px;
    margin-top:10px;
    border-radius:12px;
    border:1px solid #ccc;
    font-size:16px;
}

button{
    background:#2c7da0;
    color:white;
    border:none;
    cursor:pointer;
    font-weight:bold;
}

button:hover{
    background:#1f5e7a;
}

button:disabled{
    background:#94a3b8;
    cursor:not-allowed;
}

input:disabled,
select:disabled{
    background:#f1f5f9;
}

#preview{
    width:100%;
    border-radius:12px;
    margin-top:10px;
}

.loading{
    display:none;
    margin-top:15px;
    color:#1e4668;
    font-weight:bold;
    text-align:center;
}

.status{
    margin-top:12px;
    font-weight:bold;
}

.success{
    color:#1f8a4c;
}

.error{
    color:#c0392b;
}

&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="card"&gt;

&lt;h2&gt;&#128220; Generator Sertifikat&lt;/h2&gt;

&lt;!-- ================= KONFIRMASI ================= --&gt;

&lt;div class="confirm-box"&gt;

&lt;p&gt;&#128269; Apakah Anda mengikuti pelatihan?&lt;/p&gt;

&lt;div class="confirm-buttons"&gt;

&lt;button class="yes-btn" onclick="confirmIkut()"&gt;
✅ YA, IKUT
&lt;/button&gt;

&lt;button class="no-btn" onclick="confirmTidakIkut()"&gt;
❌ TIDAK
&lt;/button&gt;

&lt;/div&gt;

&lt;div id="statusKonfirmasi" class="status"&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ================= FORM ================= --&gt;

&lt;label&gt;Nama Lengkap&lt;/label&gt;

&lt;input
type="text"
id="nama"
placeholder="Contoh: Ahmad Fauzi"
disabled&gt;

&lt;label&gt;Peran&lt;/label&gt;

&lt;select id="peran" disabled&gt;
    &lt;option&gt;Peserta&lt;/option&gt;
    &lt;option&gt;Narasumber&lt;/option&gt;
&lt;/select&gt;

&lt;img
id="preview"
src="https://lh3.googleusercontent.com/d/1uGWwV5s0sYXgquBcnrH5_jyIFYnyMTHz"
alt="Template"&gt;

&lt;button
id="downloadBtn"
onclick="generatePDF()"
disabled&gt;

⬇️ UNDUH PDF

&lt;/button&gt;

&lt;div class="loading" id="loading"&gt;
Memproses PDF...
&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

// ================= TEMPLATE (DIUBAH) =================

const FILE_ID =
'1uGWwV5s0sYXgquBcnrH5_jyIFYnyMTHz';  // &lt;-- ID baru

const TEMPLATE_URL =
`https://lh3.googleusercontent.com/d/${FILE_ID}`;

// ================= UTIL =================

function showLoading(show){

    document.getElementById('loading').style.display =
        show ? 'block' : 'none';

}

function getRomanMonth(monthIndex){

    const romawi = [
        "I","II","III","IV","V","VI",
        "VII","VIII","IX","X","XI","XII"
    ];

    return romawi[monthIndex];

}

function capitalizeEachWord(text){

    return text
        .toLowerCase()
        .replace(/\b\w/g,c=&gt;c.toUpperCase());

}

// ================= KONFIRMASI =================

function confirmIkut(){

    document.getElementById('nama').disabled = false;

    document.getElementById('peran').disabled = false;

    document.getElementById('downloadBtn').disabled = false;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="success"&gt;✅ Konfirmasi diterima. Anda dapat mengunduh sertifikat.&lt;/span&gt;';

}

function confirmTidakIkut(){

    document.getElementById('nama').disabled = true;

    document.getElementById('peran').disabled = true;

    document.getElementById('downloadBtn').disabled = true;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="error"&gt;❌ Anda tidak dapat mengunduh sertifikat.&lt;/span&gt;';

}

// ================= LOAD IMAGE =================

function loadImage(url){

    return new Promise((resolve,reject)=&gt;{

        const img = new Image();

        img.crossOrigin = "anonymous";

        img.onload = ()=&gt;resolve(img);

        img.onerror = ()=&gt;{

            reject(
                new Error(
                    'Template Google Drive gagal dimuat'
                )
            );

        };

        img.src = url + '?t=' + Date.now();

    });

}

// ================= NOMOR =================

async function generateNomor(){

    const now = new Date();

    const bulan =
        getRomanMonth(now.getMonth());

    const tahun =
        now.getFullYear();

    const nomor =
        Math.floor(Math.random()*900)+100;

    return `${nomor}/K/${bulan}/${tahun}`;

}

// ================= PDF =================

async function generatePDF(){

    const namaInput =
        document.getElementById('nama');

    const peranSelect =
        document.getElementById('peran');

    let nama =
        namaInput.value.trim();

    const peran =
        peranSelect.value;

    if(!nama){

        alert('Nama wajib diisi');

        return;

    }

    nama =
        capitalizeEachWord(nama);

    showLoading(true);

    try{

        await document.fonts.ready;

        const img =
            await loadImage(TEMPLATE_URL);

        const canvas =
            document.createElement('canvas');

        canvas.width = img.width;
        canvas.height = img.height;

        const ctx =
            canvas.getContext('2d');

        ctx.drawImage(
            img,
            0,
            0,
            canvas.width,
            canvas.height
        );

        // ================= POSISI =================

        const nomorY =
            canvas.height * 0.235;

        const namaY =
            canvas.height * 0.3990;

        const peranY =
            canvas.height * 0.5420;

        // ================= STYLE =================

        ctx.textAlign = 'center';

        ctx.textBaseline = 'middle';

        ctx.fillStyle = '#000';

        // nomor
        const nomorSertifikat =
            await generateNomor();

        ctx.font =
            `bold ${canvas.width*0.0125}px Montserrat`;

        ctx.fillText(
            nomorSertifikat,
            canvas.width/2,
            nomorY
        );

        // nama auto shrink
        let fontSize =
            canvas.width * 0.031;

        ctx.font =
            `700 ${fontSize}px Montserrat`;

        let textWidth =
            ctx.measureText(nama).width;

        const maxWidth =
            canvas.width - 180;

        while(
            textWidth &gt; maxWidth &amp;&amp;
            fontSize &gt; 20
        ){

            fontSize -= 2;

            ctx.font =
                `700 ${fontSize}px Montserrat`;

            textWidth =
                ctx.measureText(nama).width;

        }

        ctx.fillText(
            nama,
            canvas.width/2,
            namaY
        );

        // peran
        ctx.font =
            `bold ${canvas.width*0.024}px Montserrat`;

        ctx.fillText(
            peran,
            canvas.width/2,
            peranY
        );

        // ================= PDF =================

        const imageData =
            canvas.toDataURL(
                'image/jpeg',
                1.0
            );

        const { jsPDF } =
            window.jspdf;

        const pdf =
            new jsPDF({

                orientation:
                    canvas.width &gt; canvas.height
                    ? 'landscape'
                    : 'portrait',

                unit:'px',

                format:[
                    canvas.width,
                    canvas.height
                ]

            });

        pdf.addImage(
            imageData,
            'JPEG',
            0,
            0,
            canvas.width,
            canvas.height
        );

        const safeName =
            nama.replace(/[^a-z0-9]/gi,'_');

        pdf.save(
            `Sertifikat_${safeName}.pdf`
        );

    }catch(error){

        console.error(error);

        alert(
            '❌ Gagal membuat PDF\n\n' +
            error.message +
            '\n\nPastikan file Google Drive bersifat PUBLIC.'
        );

    }finally{

        showLoading(false);

    }

}

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/sertifikat-kombel.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://lh3.googleusercontent.com/d/1uGWwV5s0sYXgquBcnrH5_jyIFYnyMTHz=s72-c" width="72"/><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-639845434598151534</guid><pubDate>Tue, 04 Aug 2026 00:35:15 +0000</pubDate><atom:updated>2026-08-04T07:38:59.337+07:00</atom:updated><title>Kaidah Kebahasaan Teks Prosedur (Bagian 1)</title><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&amp;family=Source+Sans+3:wght@400;500;600;700&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;display=swap');
.epb{
  --blueprint:#0F2A3D;
  --blueprint-deep:#0A1E2C;
  --panel:#4A2E12;
  --paper:#F3F0E6;
  --ink:#132029;
  --amber:#F5A623;
  --amber-deep:#C97F12;
  --mint:#6EC6CA;
  --line:rgba(234,242,245,0.16);
  --off-white:#EAF2F5;
  --muted:#9FB4C2;
}
.epb *{box-sizing:border-box;}
.epb{scroll-behavior:smooth; background:#0A1F2E;}
.epb{
  margin:0;
  position:relative;
  overflow:hidden;
  background:var(--blueprint);
  color:var(--off-white);
  font-family:'Source Sans 3',sans-serif;
  line-height:1.65;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 34px 34px;
}
.epb h1, .epb h2, .epb h3, .epb h4{font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.02em; margin:0 0 0.5em;}
.epb .mono{font-family:'IBM Plex Mono',monospace;}
.epb a{color:var(--amber);}
.epb .crop{position:absolute; width:22px; height:22px; z-index:5; opacity:.55; pointer-events:none;}
.epb .crop::before, .epb .crop::after{content:"";position:absolute;background:var(--mint);}
.epb .crop::before{width:100%;height:1px;top:50%;left:0;}
.epb .crop::after{width:1px;height:100%;left:50%;top:0;}
.epb .crop.tl{top:14px;left:14px;}
.epb .crop.tr{top:14px;right:14px;}
.epb .crop.bl{bottom:14px;left:14px;}
.epb .crop.br{bottom:14px;right:14px;}
.epb header.cover{
  position:relative;
  padding:40px 24px 36px;
  border-bottom:1px solid var(--line);
  overflow:hidden;
}
.epb .doc-code{font-family:'IBM Plex Mono',monospace; color:var(--amber); letter-spacing:0.15em; font-size:0.78rem; text-transform:uppercase; margin-bottom:18px; display:flex; gap:10px; align-items:center;}
.epb .doc-code::before{content:"◆"; color:var(--amber);}
.epb .cover h1{font-size:clamp(1.6rem,7vw,2.5rem); color:var(--off-white); max-width:16ch; line-height:1.05;}
.epb .cover .subtitle{color:var(--muted); font-size:1.05rem; max-width:60ch; margin-top:14px;}
.epb .meta-strip{
  margin-top:38px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border-top:1px dashed var(--line); border-bottom:1px dashed var(--line);
}
.epb .meta-strip div{padding:14px 16px; border-right:1px dashed var(--line);}
.epb .meta-strip div:last-child{border-right:none;}
.epb .meta-strip .k{font-family:'IBM Plex Mono',monospace; font-size:0.68rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.1em;}
.epb .meta-strip .v{font-size:0.98rem; color:var(--off-white); margin-top:4px; font-weight:600;}
.epb .stamp{
  position:absolute; top:40px; right:20px; width:104px; height:104px;
  border:2.5px solid var(--amber); border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  transform:rotate(-11deg);
  color:var(--amber); font-family:'IBM Plex Mono',monospace;
  text-align:center; font-size:0.62rem; letter-spacing:0.08em; text-transform:uppercase;
  opacity:0.9;
}
.epb .stamp .ring{position:absolute; inset:8px; border:1px dashed var(--amber); border-radius:50%;}
.epb .stamp b{display:block; font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:0.06em; margin-top:4px;}

@media (max-width:760px){.epb .stamp{display:none;}
.epb }


.epb main{max-width:920px; margin:0 auto; padding:0 20px 60px;}
.epb .section{padding-top:64px;}
.epb .eyebrow{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase; margin-bottom:10px; display:flex; align-items:center; gap:10px;}
.epb .eyebrow::after{content:""; flex:1; height:1px; background:var(--line);}
.epb h2.section-title{font-size:1.7rem; color:var(--off-white);}
.epb p{color:#DDE7EC;}
.epb .lead{color:var(--muted); font-size:1.02rem; max-width:72ch;}
.epb .panel{
  background:var(--panel); border:1px solid var(--line); border-radius:2px;
  padding:26px 28px; margin:22px 0;
}
.epb .panel.tp{border-left:4px solid var(--mint);}
.epb .panel.warn{border-left:4px solid var(--amber);}
.epb .tp-box{display:grid; gap:14px; margin-top:18px;}
.epb .tp-item{display:flex; gap:14px; align-items:flex-start;}
.epb .tp-item .idx{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; min-width:34px;}
.epb .flow{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:20px;}
.epb .flow .step{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px; position:relative;}
.epb .flow .step .tag{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;}
.epb .flow .step h4{font-size:1rem; margin-top:8px; color:var(--off-white);}
.epb .flow .step .time{position:absolute; top:16px; right:16px; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; color:var(--amber);}
.epb .grid-3{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-top:16px;}
.epb .card{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px;}
.epb .card h4{color:var(--amber); font-size:0.95rem;}
.epb .criteria{display:grid; gap:16px; margin-top:20px;}
.epb .crit{
  background:var(--blueprint-deep); border:1px solid var(--line);
  display:grid; grid-template-columns:64px 1fr; gap:0;
}
.epb .crit .num{
  background:var(--amber); color:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace;
  font-weight:700; display:flex; align-items:center; justify-content:center; font-size:1.05rem;
}
.epb .crit .body{padding:18px 20px;}
.epb .crit h4{color:var(--off-white); font-size:1.02rem; margin-bottom:6px;}
.epb .crit .q{margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); font-family:'IBM Plex Mono',monospace; font-size:0.86rem; color:var(--amber);}
.epb .timeline{margin-top:24px; position:relative; padding-left:34px;}
.epb .timeline::before{content:""; position:absolute; left:11px; top:6px; bottom:6px; width:2px; background:var(--line);}
.epb .tl-item{position:relative; padding-bottom:26px;}
.epb .tl-item:last-child{padding-bottom:0;}
.epb .tl-item::before{content:""; position:absolute; left:-34px; top:2px; width:22px; height:22px; border-radius:50%; background:var(--blueprint); border:2px solid var(--amber);}
.epb .tl-item h4{color:var(--off-white); font-size:1rem; margin-bottom:4px;}
.epb .doc-sample{
  background:var(--paper); color:var(--ink); border-radius:2px; padding:0; margin-top:22px;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .doc-sample .doc-head{background:var(--ink); color:var(--paper); padding:12px 22px; font-family:'IBM Plex Mono',monospace; font-size:0.75rem; letter-spacing:0.1em; text-transform:uppercase; display:flex; justify-content:space-between;}
.epb .doc-sample .doc-body{padding:26px 28px 30px;}
.epb .doc-sample h3{font-family:'Oswald',sans-serif; color:var(--ink); font-size:1.25rem; text-transform:none; letter-spacing:0;}
.epb .doc-sample ol{padding-left:22px;}
.epb .doc-sample li{margin-bottom:9px;}
.epb .flag{
  display:inline-block; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; font-weight:600;
  background:#D94E2A; color:#fff; padding:1px 7px; border-radius:2px; margin-left:6px; vertical-align:middle;
}
.epb .doc-sample .note-margin{margin-top:6px; font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:#8A3A1F; padding-left:8px; border-left:2px solid #D94E2A;}
.epb .legend{display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:16px;}
.epb .legend span{font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:var(--muted); display:flex; align-items:center; gap:8px;}
.epb .legend .dot{width:10px; height:10px; border-radius:50%; display:inline-block;}
.epb table{width:100%; border-collapse:collapse; margin-top:18px; font-size:0.94rem;}
.epb th, .epb td{border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top;}
.epb th{background:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace; font-size:0.75rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--amber);}
.epb .summary-box{
  border:1px solid var(--amber); background:linear-gradient(180deg, rgba(245,166,35,0.08), transparent);
  padding:24px 26px; margin-top:24px;
}
.epb .summary-box ul{margin:10px 0 0; padding-left:20px;}
.epb .summary-box li{margin-bottom:8px;}
.epb .task-header{
  background:var(--amber); color:var(--blueprint-deep); padding:22px 26px; margin-top:20px;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
}
.epb .task-header h2{color:var(--blueprint-deep); font-size:1.4rem; margin:0;}
.epb .task-header .badge{font-family:'IBM Plex Mono',monospace; font-size:0.8rem; background:var(--blueprint-deep); color:var(--amber); padding:6px 12px; border-radius:2px;}
.epb .steps-num{counter-reset:step; margin-top:18px; list-style:none; padding:0;}
.epb .steps-num li{counter-increment:step; position:relative; padding-left:44px; margin-bottom:16px;}
.epb .steps-num li::before{content:counter(step,decimal-leading-zero); position:absolute; left:0; top:0; font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; font-size:0.95rem; border:1px solid var(--amber); width:30px; height:26px; display:flex; align-items:center; justify-content:center;}
.epb .rubric-scale{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px;}
.epb .rubric-scale div{background:var(--blueprint-deep); border:1px solid var(--line); padding:12px; text-align:center;}
.epb .rubric-scale .n{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:1.3rem; font-weight:700;}
.epb .rubric-scale .l{font-size:0.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:0.05em;}
.epb .notebook{
  background:repeating-linear-gradient(var(--paper), var(--paper) 33px, #D8D3C2 34px);
  color:var(--ink); border-radius:2px; padding:28px 30px; margin-top:20px; position:relative;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .notebook::before{content:""; position:absolute; left:46px; top:0; bottom:0; width:1.5px; background:#C0453A; opacity:0.5;}
.epb .notebook .content{padding-left:24px;}
.epb .notebook h3{color:var(--ink); font-family:'Oswald',sans-serif; letter-spacing:0.02em; margin-bottom:10px;}
.epb .notebook ul{padding-left:20px;}
.epb footer{border-top:1px solid var(--line); padding:24px 20px 40px; color:var(--muted); font-size:0.86rem;}
.epb footer .doc-code{margin-bottom:10px;}
.epb .divider-dash{border:none; border-top:1px dashed var(--line); margin:44px 0 0;}
.epb::selection{background:var(--amber); color:var(--blueprint-deep);}

&lt;/style&gt;
&lt;div class="epb"&gt;
&lt;div class="crop tl"&gt;&lt;/div&gt;&lt;div class="crop tr"&gt;&lt;/div&gt;&lt;div class="crop bl"&gt;&lt;/div&gt;&lt;div class="crop br"&gt;&lt;/div&gt;

&lt;header class="cover"&gt;
  &lt;div class="stamp"&gt;&lt;div class="ring"&gt;&lt;/div&gt;&lt;span&gt;Modul Ajar&lt;b&gt;Terverifikasi&lt;/b&gt;Fase F&lt;/span&gt;&lt;/div&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-KAIDAH-1 — 3 JP · 1 Pertemuan&lt;/div&gt;
  &lt;h1&gt;Kaidah Kebahasaan Teks Prosedur (Bagian 1)&lt;/h1&gt;
  &lt;p class="subtitle"&gt;Materi Bahasa Indonesia Kelas XI SMK/MAK — melatih murid mengidentifikasi ciri kebahasaan teks prosedur: kalimat imperatif, deklaratif, persuasif, dan konjungsi temporal.&lt;/p&gt;

  &lt;div class="meta-strip"&gt;
    &lt;div&gt;&lt;div class="k"&gt;Mata Pelajaran&lt;/div&gt;&lt;div class="v"&gt;Bahasa Indonesia&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK/MAK — Kelas XI&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Elemen&lt;/div&gt;&lt;div class="v"&gt;Membaca &amp;amp; Memirsa&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;3 JP (3 × 45 menit)&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;!-- ============ TUJUAN PEMBELAJARAN ============ --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="eyebrow"&gt;01 — Identitas Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Capaian &amp;amp; Tujuan Pembelajaran&lt;/h2&gt;

    &lt;div class="panel tp"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Capaian Pembelajaran (Elemen Membaca–Memirsa)&lt;/div&gt;
      &lt;p&gt;Murid mampu mengidentifikasi dan menganalisis ciri kebahasaan pada berbagai jenis teks, termasuk teks prosedur, untuk memahami bagaimana bahasa digunakan secara efektif dalam menyampaikan instruksi kepada pembaca.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="panel"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Tujuan Pembelajaran&lt;/div&gt;
      &lt;p style="font-size:1.05rem; color:var(--off-white); font-weight:600;"&gt;Murid mampu mengidentifikasi ciri-ciri kebahasaan teks prosedur, seperti kalimat imperatif, deklaratif, persuasif, dan konjungsi temporal.&lt;/p&gt;

      &lt;div class="tp-box"&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.1&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan pengertian dan ciri kalimat imperatif dalam teks prosedur.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.2&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan pengertian dan ciri kalimat deklaratif dalam teks prosedur.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.3&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan pengertian dan ciri kalimat persuasif dalam teks prosedur.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.4&lt;/span&gt;&lt;p&gt;Murid dapat mengidentifikasi konjungsi temporal serta menemukan keempat ciri kebahasaan tersebut dalam sebuah teks prosedur.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="eyebrow" style="margin-top:26px; margin-bottom:6px;"&gt;8 Profil Lulusan yang Dikembangkan&lt;/div&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penalaran Kritis&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menganalisis fungsi setiap jenis kalimat dan konjungsi dalam teks prosedur.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kemandirian&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyelesaikan identifikasi dan rangkuman secara mandiri.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kolaborasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Bekerja sama dalam kelompok saat menganalisis ciri kebahasaan teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Komunikasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyampaikan hasil identifikasi ciri kebahasaan secara jelas dan runtut.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI A: RECAP ============ --&gt;
  &lt;section class="section" id="materi-a"&gt;
    &lt;div class="eyebrow"&gt;02 — Materi Inti A&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengingat Kembali Ciri Umum Teks Prosedur&lt;/h2&gt;
    &lt;p class="lead"&gt;Teks prosedur memiliki kaidah kebahasaan yang khas karena tujuannya mengarahkan pembaca melakukan suatu tindakan. Pada pertemuan ini, murid akan mempelajari empat ciri kebahasaan utama teks prosedur.&lt;/p&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;1. Kalimat Imperatif&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kalimat perintah yang mengarahkan pembaca melakukan tindakan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;2. Kalimat Deklaratif&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kalimat pernyataan yang menyampaikan fakta atau informasi.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;3. Kalimat Persuasif&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kalimat ajakan/bujukan agar pembaca mengikuti langkah dengan sungguh-sungguh.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;4. Konjungsi Temporal&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kata penghubung yang menandai urutan waktu antarlangkah.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI B: IMPERATIF ============ --&gt;
  &lt;section class="section" id="materi-b"&gt;
    &lt;div class="eyebrow"&gt;03 — Materi Inti B&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kalimat Imperatif dalam Teks Prosedur&lt;/h2&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Kalimat imperatif&lt;/b&gt; adalah kalimat yang berisi perintah, larangan, permintaan, atau anjuran kepada pembaca agar melakukan suatu tindakan. Kalimat ini merupakan ciri paling dominan dalam teks prosedur karena berfungsi langsung mengarahkan langkah-langkah yang harus dilakukan.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Perintah biasa&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Panaskan minyak dalam wajan."&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Larangan&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Jangan gunakan alat dalam keadaan basah."&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Permintaan/anjuran halus&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Tunggulah hingga adonan mengembang."&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;p class="lead" style="margin-top:14px;"&gt;&lt;b style="color:var(--off-white);"&gt;Ciri penanda:&lt;/b&gt; biasanya berakhiran &lt;i&gt;-lah&lt;/i&gt; atau &lt;i&gt;-kan&lt;/i&gt;, menggunakan kata kerja dasar tanpa subjek eksplisit, dan sering diakhiri tanda seru atau titik.&lt;/p&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI C: DEKLARATIF ============ --&gt;
  &lt;section class="section" id="materi-c"&gt;
    &lt;div class="eyebrow"&gt;04 — Materi Inti C&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kalimat Deklaratif dalam Teks Prosedur&lt;/h2&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Kalimat deklaratif&lt;/b&gt; adalah kalimat yang menyatakan suatu fakta, informasi, atau penjelasan kepada pembaca tanpa memerintah. Dalam teks prosedur, kalimat ini biasanya muncul pada bagian tujuan, pengantar, atau catatan tambahan untuk memberi konteks sebelum atau setelah langkah-langkah dijelaskan.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Pada bagian tujuan&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Prosedur ini bertujuan menjaga kebersihan alat dapur."&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Pada bagian penjelas&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Minyak yang terlalu panas dapat merusak tekstur makanan."&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Pada catatan tambahan&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Alat ini umumnya digunakan di dapur rumah tangga."&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;p class="lead" style="margin-top:14px;"&gt;&lt;b style="color:var(--off-white);"&gt;Ciri penanda:&lt;/b&gt; berupa kalimat berita, tidak mengandung perintah, dan biasanya diakhiri tanda titik.&lt;/p&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI D: PERSUASIF ============ --&gt;
  &lt;section class="section" id="materi-d"&gt;
    &lt;div class="eyebrow"&gt;05 — Materi Inti D&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kalimat Persuasif dalam Teks Prosedur&lt;/h2&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Kalimat persuasif&lt;/b&gt; adalah kalimat yang bertujuan membujuk atau meyakinkan pembaca agar mengikuti langkah-langkah dengan sungguh-sungguh, biasanya muncul pada bagian tips, peringatan, atau penutup teks prosedur.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Ajakan&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Sebaiknya langkah ini dilakukan secara rutin agar hasilnya maksimal."&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penekanan manfaat&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Dengan mengikuti langkah ini, alat akan lebih awet digunakan."&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Peringatan halus&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;"Pastikan langkah ini tidak dilewatkan agar hasil kerja optimal."&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;p class="lead" style="margin-top:14px;"&gt;&lt;b style="color:var(--off-white);"&gt;Ciri penanda:&lt;/b&gt; sering menggunakan kata "sebaiknya", "agar", "disarankan", "pastikan", dan menekankan alasan atau manfaat mengikuti langkah.&lt;/p&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI E: KONJUNGSI TEMPORAL ============ --&gt;
  &lt;section class="section" id="materi-e"&gt;
    &lt;div class="eyebrow"&gt;06 — Materi Inti E&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Konjungsi Temporal dalam Teks Prosedur&lt;/h2&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Konjungsi temporal&lt;/b&gt; adalah kata penghubung yang menandai urutan waktu antarlangkah dalam teks prosedur, sehingga pembaca dapat memahami langkah mana yang harus dilakukan lebih dulu dan langkah berikutnya.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penanda awal&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;pertama, mula-mula, langkah awal&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penanda lanjutan&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;kemudian, selanjutnya, setelah itu, lalu&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penanda akhir&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;terakhir, akhirnya, hingga selesai&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI F: TABEL RANGKUMAN CIRI ============ --&gt;
  &lt;section class="section" id="materi-f"&gt;
    &lt;div class="eyebrow"&gt;07 — Materi Inti F&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Empat Ciri Kebahasaan Teks Prosedur&lt;/h2&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:20%;"&gt;Ciri Kebahasaan&lt;/th&gt;&lt;th style="width:28%;"&gt;Fungsi&lt;/th&gt;&lt;th style="width:26%;"&gt;Penanda&lt;/th&gt;&lt;th&gt;Contoh&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Imperatif&lt;/td&gt;&lt;td&gt;Mengarahkan pembaca melakukan tindakan&lt;/td&gt;&lt;td&gt;Akhiran -lah/-kan, tanpa subjek eksplisit&lt;/td&gt;&lt;td&gt;"Aduk adonan hingga rata."&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Deklaratif&lt;/td&gt;&lt;td&gt;Menyampaikan fakta/informasi pendukung&lt;/td&gt;&lt;td&gt;Kalimat berita, tanpa perintah&lt;/td&gt;&lt;td&gt;"Adonan yang baik bertekstur lembut."&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Persuasif&lt;/td&gt;&lt;td&gt;Membujuk pembaca mengikuti langkah dengan sungguh-sungguh&lt;/td&gt;&lt;td&gt;Kata "sebaiknya", "agar", "pastikan"&lt;/td&gt;&lt;td&gt;"Sebaiknya adonan didiamkan 10 menit agar mengembang sempurna."&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Konjungsi Temporal&lt;/td&gt;&lt;td&gt;Menandai urutan waktu antarlangkah&lt;/td&gt;&lt;td&gt;Kata "kemudian", "setelah itu", "lalu"&lt;/td&gt;&lt;td&gt;"Kemudian, masukkan adonan ke dalam oven."&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ PEMODELAN ============ --&gt;
  &lt;section class="section" id="contoh"&gt;
    &lt;div class="eyebrow"&gt;08 — Pemodelan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Contoh Penerapan: Mengidentifikasi Ciri Kebahasaan&lt;/h2&gt;
    &lt;p class="lead"&gt;Guru membacakan dan membahas bersama contoh berikut sebagai model identifikasi sebelum murid mengerjakan tugas kelompok. Setiap kalimat ditandai sesuai ciri kebahasaannya.&lt;/p&gt;

    &lt;div class="doc-sample"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Prosedur Contoh&lt;/span&gt;&lt;span&gt;Dokumen-01&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Prosedur Menjaga Kesehatan Mata saat Bekerja di Depan Layar Komputer&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63 !important;"&gt;&lt;i&gt;Tujuan: Menjaga kesehatan mata agar tidak cepat lelah selama bekerja atau belajar menggunakan komputer.&lt;/i&gt;&lt;/p&gt;
        &lt;ol style="color:#132029 !important;"&gt;
          &lt;li style="color:#132029 !important;"&gt;Aturlah jarak pandang layar komputer sekitar 50–70 cm dari mata.&lt;span class="flag"&gt;IMPERATIF&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Sesuaikan tingkat kecerahan layar agar tidak terlalu terang atau terlalu redup.&lt;span class="flag"&gt;IMPERATIF&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Kemudian, terapkan aturan 20-20-20: setiap 20 menit, alihkan pandangan ke objek sejauh 20 kaki selama 20 detik.&lt;span class="flag"&gt;KONJUNGSI TEMPORAL&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Berkediplah lebih sering agar mata tidak kering.&lt;span class="flag"&gt;IMPERATIF&lt;/span&gt;&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Setelah itu, gunakan kacamata anti-radiasi jika diperlukan.&lt;span class="flag"&gt;KONJUNGSI TEMPORAL&lt;/span&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;div class="note-margin" style="margin-top:10px; color:#8A3A1F !important;"&gt;Paparan layar dalam waktu lama dapat menyebabkan mata lelah, kering, bahkan menurunkan konsentrasi. &lt;b&gt;(kalimat deklaratif — fakta pendukung)&lt;/b&gt;&lt;/div&gt;
        &lt;div class="note-margin" style="margin-top:10px; color:#8A3A1F !important;"&gt;Sebaiknya langkah-langkah ini dilakukan secara rutin agar kesehatan mata tetap terjaga selama bekerja atau belajar. &lt;b&gt;(kalimat persuasif — penutup)&lt;/b&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="panel" style="margin-top:22px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Simpulan model identifikasi:&lt;/b&gt; Teks di atas didominasi kalimat imperatif pada bagian langkah-langkah, dua konjungsi temporal ("kemudian" dan "setelah itu") menandai urutan langkah, satu kalimat deklaratif memberi fakta pendukung, dan satu kalimat persuasif pada bagian penutup membujuk pembaca agar konsisten menerapkan langkah tersebut.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN ============ --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="eyebrow"&gt;09 — Ringkasan Materi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Poin-Poin Penting&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;ul&gt;
        &lt;li&gt;Kalimat imperatif mengarahkan pembaca melakukan tindakan dan menjadi ciri paling dominan dalam teks prosedur.&lt;/li&gt;
        &lt;li&gt;Kalimat deklaratif menyampaikan fakta atau informasi pendukung, biasanya pada bagian tujuan atau catatan tambahan.&lt;/li&gt;
        &lt;li&gt;Kalimat persuasif membujuk pembaca agar mengikuti langkah dengan sungguh-sungguh, biasanya pada bagian tips atau penutup.&lt;/li&gt;
        &lt;li&gt;Konjungsi temporal menandai urutan waktu antarlangkah, seperti "pertama", "kemudian", "setelah itu", dan "terakhir".&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS KELOMPOK ============ --&gt;
  &lt;section class="section" id="tugas-kelompok"&gt;
    &lt;div class="eyebrow"&gt;10 — Lembar Kerja&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Kelompok: Mengidentifikasi Ciri Kebahasaan Teks Prosedur&lt;/h2&gt;
      &lt;span class="badge"&gt;Durasi ± 60 menit&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Tujuan tugas:&lt;/b&gt; Murid secara berkelompok mengidentifikasi kalimat imperatif, deklaratif, persuasif, dan konjungsi temporal pada teks prosedur berikut, lalu mempresentasikan hasil temuannya.&lt;/p&gt;

    &lt;div class="doc-sample" style="margin-top:20px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Prosedur untuk Diidentifikasi&lt;/span&gt;&lt;span&gt;Dokumen-02&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Prosedur Mencuci Tangan yang Benar sesuai Anjuran Kesehatan&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63 !important;"&gt;&lt;i&gt;Tujuan: Membersihkan tangan dari kuman dan kotoran agar terhindar dari penyakit.&lt;/i&gt;&lt;/p&gt;
        &lt;ol style="color:#132029 !important;"&gt;
          &lt;li style="color:#132029 !important;"&gt;Basahi kedua tangan dengan air mengalir.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Gunakan sabun secukupnya, lalu gosok telapak tangan hingga berbusa.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Bersihkan sela-sela jari, punggung tangan, dan kuku secara menyeluruh.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Setelah itu, bilas tangan dengan air mengalir hingga bersih.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Keringkan tangan menggunakan tisu atau kain bersih.&lt;/li&gt;
        &lt;/ol&gt;
        &lt;p style="margin:10px 0 0; color:#132029 !important;"&gt;Tangan merupakan bagian tubuh yang paling sering bersentuhan dengan kuman penyebab penyakit.&lt;/p&gt;
        &lt;p style="margin:10px 0 0; color:#4b5a63 !important;"&gt;&lt;i&gt;Sebaiknya kebiasaan mencuci tangan ini dilakukan secara rutin, terutama sebelum makan dan setelah beraktivitas di luar rumah, agar tubuh tetap sehat.&lt;/i&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;p class="lead" style="margin-top:14px;"&gt;Teks di atas &lt;b style="color:var(--off-white);"&gt;belum ditandai&lt;/b&gt; — tugas kelompok adalah menemukan sendiri kalimat imperatif, deklaratif, persuasif, dan konjungsi temporal yang terdapat di dalamnya.&lt;/p&gt;

    &lt;h4 style="color:var(--off-white); margin-top:24px;"&gt;Petunjuk Pengerjaan&lt;/h4&gt;
    &lt;ol class="steps-num"&gt;
      &lt;li&gt;&lt;b&gt;Bentuk kelompok&lt;/b&gt; beranggotakan 4–5 orang sesuai pembagian dari guru.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Baca teks prosedur&lt;/b&gt; di atas secara bersama-sama dalam kelompok.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Tandai setiap kalimat&lt;/b&gt; sesuai jenisnya (imperatif, deklaratif, atau persuasif) dan garis bawahi konjungsi temporal yang ditemukan.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Isi Tabel Identifikasi&lt;/b&gt; di bawah ini untuk setiap ciri kebahasaan.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Presentasikan hasil&lt;/b&gt; di depan kelas selama maksimal 5 menit per kelompok, dilanjutkan tanya jawab singkat.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Format Tabel Identifikasi Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Ciri Kebahasaan&lt;/th&gt;&lt;th style="width:38%;"&gt;Contoh Kalimat/Kata yang Ditemukan&lt;/th&gt;&lt;th style="width:12%;"&gt;Jumlah&lt;/th&gt;&lt;th&gt;Fungsi dalam Teks&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Imperatif&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Deklaratif&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Persuasif&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Konjungsi Temporal&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Rubrik Penilaian Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:26%;"&gt;Aspek Penilaian&lt;/th&gt;&lt;th&gt;Skor 4 (Sangat Baik)&lt;/th&gt;&lt;th&gt;Skor 3 (Baik)&lt;/th&gt;&lt;th&gt;Skor 2 (Cukup)&lt;/th&gt;&lt;th&gt;Skor 1 (Kurang)&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan identifikasi kalimat&lt;/td&gt;&lt;td&gt;Seluruh jenis kalimat teridentifikasi tepat&lt;/td&gt;&lt;td&gt;Sebagian besar tepat&lt;/td&gt;&lt;td&gt;Identifikasi dangkal, sebagian keliru&lt;/td&gt;&lt;td&gt;Identifikasi tidak sesuai&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan identifikasi konjungsi&lt;/td&gt;&lt;td&gt;Seluruh konjungsi temporal ditemukan dengan tepat&lt;/td&gt;&lt;td&gt;Sebagian besar tepat&lt;/td&gt;&lt;td&gt;Sebagian konjungsi terlewat&lt;/td&gt;&lt;td&gt;Tidak ditemukan dengan tepat&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kerja sama kelompok&lt;/td&gt;&lt;td&gt;Seluruh anggota aktif berkontribusi&lt;/td&gt;&lt;td&gt;Sebagian besar anggota aktif&lt;/td&gt;&lt;td&gt;Hanya sebagian kecil anggota aktif&lt;/td&gt;&lt;td&gt;Didominasi satu orang&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Presentasi&lt;/td&gt;&lt;td&gt;Jelas, percaya diri, menjawab pertanyaan dengan baik&lt;/td&gt;&lt;td&gt;Jelas namun kurang percaya diri&lt;/td&gt;&lt;td&gt;Kurang jelas/terbata-bata&lt;/td&gt;&lt;td&gt;Tidak dapat menjelaskan hasil&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN UNTUK BUKU CATATAN ============ --&gt;
  &lt;section class="section" id="catatan-murid"&gt;
    &lt;div class="eyebrow"&gt;11 — Penutup Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman untuk Dicatat di Buku Catatan&lt;/h2&gt;
    &lt;p class="lead"&gt;Sebagai penutup pertemuan, setiap murid menuliskan satu rangkuman ringkas secara mandiri di buku catatan sebagai simpulan pribadi atas materi hari ini.&lt;/p&gt;

    &lt;div class="notebook"&gt;
      &lt;div class="content"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Instruksi Menulis Rangkuman&lt;/h3&gt;
        &lt;p style="margin-top:0; color:#132029 !important;"&gt;Tulis di buku catatan masing-masing, maksimal &lt;b&gt;satu halaman&lt;/b&gt;, mencakup poin-poin berikut:&lt;/p&gt;
        &lt;ul style="color:#132029 !important;"&gt;
          &lt;li style="color:#132029 !important;"&gt;Pengertian kalimat imperatif, deklaratif, dan persuasif dalam teks prosedur, menurut pemahaman sendiri.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Ciri penanda masing-masing jenis kalimat tersebut.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Pengertian dan fungsi konjungsi temporal, disertai minimal tiga contoh kata.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Satu contoh kalimat buatan sendiri untuk setiap ciri kebahasaan (imperatif, deklaratif, persuasif, dan konjungsi temporal).&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p style="margin-bottom:0; color:#4b5a63 !important;"&gt;&lt;i&gt;Rangkuman ditulis dengan kalimat sendiri (bukan menyalin ulang dari materi), dan dikumpulkan pada awal pertemuan berikutnya untuk diperiksa guru.&lt;/i&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-KAIDAH-1 — Fokus Tujuan Pembelajaran, Materi Inti &amp;amp; Tugas Kelompok, 1× pertemuan (3 JP)&lt;/div&gt;
  &lt;p style="margin:0;"&gt;Referensi: Kurikulum Merdeka — Capaian Pembelajaran Bahasa Indonesia Fase F (Elemen Membaca dan Memirsa); Buku Teks Bahasa Indonesia Kelas XI SMK/MAK Kemendikbudristek.&lt;/p&gt;
&lt;/footer&gt;
&lt;/div&gt;</description><link>http://kitab-investasi.blogspot.com/2026/08/kaidah-kebahasaan-teks-prosedur-bagian-1.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-6658566003008767440</guid><pubDate>Wed, 29 Jul 2026 02:22:44 +0000</pubDate><atom:updated>2026-07-29T09:22:44.174+07:00</atom:updated><title>Sistem Komputer &amp; Arsitektur Von Neumann</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Sistem Komputer &amp; Arsitektur Von Neumann — Informatika Kelas X&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&amp;family=IBM+Plex+Sans:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;style&gt;
  :root{
    --blueprint: #0F2A44;
    --blueprint-deep: #0A1E33;
    --line: #7FC7FF;
    --line-dim: rgba(127,199,255,0.35);
    --paper: #FBFBF9;
    --paper-dim: #EEF2F5;
    --ink: #16232E;
    --ink-soft: #47586A;
    --amber: #F2A340;
    --green: #4CAF7D;
    --rose: #E2694B;
    --radius: 4px;
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{
    font-family:'IBM Plex Sans', sans-serif;
    background: var(--blueprint);
    color: var(--ink);
    line-height:1.6;
  }
  .mono{font-family:'IBM Plex Mono', monospace;}

  /* ===== Blueprint grid background ===== */
  .blueprint-bg{
    background-color: var(--blueprint);
    background-image:
      linear-gradient(var(--line-dim) 1px, transparent 1px),
      linear-gradient(90deg, var(--line-dim) 1px, transparent 1px);
    background-size: 32px 32px;
    position:relative;
  }
  .blueprint-bg::before{
    content:"";
    position:absolute; inset:0;
    background: radial-gradient(ellipse at 20% 0%, rgba(127,199,255,0.10), transparent 55%);
    pointer-events:none;
  }

  /* ===== Hero ===== */
  header.hero{
    padding: 64px 6vw 56px;
    color: var(--paper);
    position:relative;
    overflow:hidden;
  }
  .eyebrow{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.78rem;
    letter-spacing:0.16em;
    text-transform:uppercase;
    color: var(--line);
    display:flex; align-items:center; gap:10px;
    margin-bottom:22px;
  }
  .eyebrow::before{
    content:"";
    width:10px; height:10px;
    border:1.5px solid var(--line);
    border-radius:2px;
    display:inline-block;
    box-shadow: 0 0 0 3px var(--line-dim);
  }
  h1.title{
    font-family:'IBM Plex Mono', monospace;
    font-weight:700;
    font-size: clamp(2rem, 4.4vw, 3.6rem);
    line-height:1.12;
    letter-spacing:-0.01em;
    max-width: 16ch;
  }
  h1.title span{color: var(--line);}
  .hero-sub{
    margin-top:18px;
    max-width: 62ch;
    font-size:1.05rem;
    color: #C9DCEC;
  }
  .meta-strip{
    margin-top:40px;
    display:grid;
    grid-template-columns: repeat(auto-fit,minmax(160px,1fr));
    gap:1px;
    background: var(--line-dim);
    border:1px solid var(--line-dim);
    max-width: 920px;
  }
  .meta-cell{
    background: var(--blueprint-deep);
    padding:14px 16px;
  }
  .meta-cell .k{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.68rem;
    letter-spacing:0.1em;
    text-transform:uppercase;
    color: var(--line);
    opacity:0.85;
  }
  .meta-cell .v{
    margin-top:6px;
    font-size:0.95rem;
    font-weight:600;
    color: var(--paper);
  }

  /* ===== Content shell ===== */
  main{
    background: var(--paper);
    border-radius: 18px 18px 0 0;
    margin-top: -18px;
    position:relative;
    z-index:2;
    padding: 8px 0 0;
  }
  .section{
    padding: 56px 6vw;
    max-width: 1180px;
    margin: 0 auto;
    border-bottom: 1px solid #E4E1D8;
  }
  .section:last-of-type{border-bottom:none;}
  .section-tag{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.72rem;
    letter-spacing:0.14em;
    text-transform:uppercase;
    color: var(--ink-soft);
    display:flex; align-items:center; gap:10px;
    margin-bottom:10px;
  }
  .section-tag .num{
    color: var(--paper);
    background: var(--blueprint);
    padding:3px 8px;
    border-radius:3px;
    font-weight:600;
  }
  h2.section-title{
    font-family:'IBM Plex Mono', monospace;
    font-size: clamp(1.4rem, 2.4vw, 2rem);
    font-weight:700;
    color: var(--blueprint);
    margin-bottom: 22px;
    max-width: 30ch;
  }
  h3.sub-title{
    font-family:'IBM Plex Mono', monospace;
    font-size:1.08rem;
    font-weight:600;
    color: var(--blueprint);
    margin: 28px 0 12px;
    display:flex; align-items:center; gap:10px;
  }
  h3.sub-title::before{
    content:"";
    width:8px;height:8px;
    background: var(--amber);
    display:inline-block;
    border-radius:1px;
  }
  p{ color:#2B3A48; max-width: 74ch; margin-bottom: 14px;}
  strong{color:var(--blueprint);}
  ul, ol{ margin: 8px 0 18px 1.3em; max-width: 74ch;}
  li{margin-bottom:8px; color:#2B3A48;}

  .callout{
    border-left: 3px solid var(--amber);
    background: #FEF6EA;
    padding: 16px 20px;
    border-radius: 0 6px 6px 0;
    margin: 18px 0;
    max-width: 74ch;
  }
  .callout .lbl{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.7rem;
    letter-spacing:0.1em;
    text-transform:uppercase;
    color:#B4791C;
    font-weight:700;
    margin-bottom:6px;
  }

  /* ===== Cards grid (komponen) ===== */
  .card-grid{
    display:grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
    margin: 20px 0 8px;
  }
  @media (max-width: 860px){ .card-grid{grid-template-columns: 1fr;} }
  .card{
    background: var(--paper);
    border: 1.5px solid var(--blueprint);
    border-radius: var(--radius);
    padding: 20px;
    position:relative;
  }
  .card .tag{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.68rem;
    letter-spacing:0.1em;
    text-transform:uppercase;
    color:#fff;
    background: var(--blueprint);
    padding:3px 8px;
    border-radius:3px;
    display:inline-block;
    margin-bottom:12px;
  }
  .card h4{
    font-family:'IBM Plex Mono', monospace;
    font-size:1rem;
    margin-bottom:8px;
    color:var(--blueprint);
  }
  .card ul{margin:6px 0 0 1.1em; font-size:0.92rem;}
  .card li{margin-bottom:5px; color:#3C4C5B;}

  /* ===== IPO diagram ===== */
  .ipo-wrap{
    margin: 26px 0;
    overflow-x:auto;
  }
  .ipo-row{
    display:flex; align-items:stretch; gap:0;
    min-width: 640px;
  }
  .ipo-box{
    flex:1;
    background: var(--blueprint);
    color: var(--paper);
    padding: 20px 16px;
    text-align:center;
    position:relative;
  }
  .ipo-box:nth-child(odd){background: var(--blueprint);}
  .ipo-box .lab{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.7rem;
    letter-spacing:0.12em;
    text-transform:uppercase;
    color: var(--line);
  }
  .ipo-box .desc{font-size:0.85rem; margin-top:8px; color:#D6E4F0;}
  .ipo-arrow{
    width:44px; flex-shrink:0;
    display:flex; align-items:center; justify-content:center;
    background: var(--paper-dim);
    color: var(--blueprint);
    font-size:1.3rem;
  }
  .ipo-storage{
    margin-top:14px;
    text-align:center;
    font-family:'IBM Plex Mono', monospace;
    font-size:0.78rem;
    color: var(--ink-soft);
  }

  /* ===== Von Neumann diagram ===== */
  .diagram-frame{
    margin: 26px 0;
    background: var(--blueprint-deep);
    border-radius: 8px;
    padding: 18px;
    border: 1px solid var(--line-dim);
  }
  .diagram-frame svg{width:100%; height:auto; display:block;}
  .diagram-caption{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.72rem;
    color: var(--line);
    text-align:center;
    margin-top:10px;
    letter-spacing:0.04em;
  }

  /* signal flow animation */
  .signal{
    stroke-dasharray: 6 8;
    animation: flow 1.6s linear infinite;
  }
  @keyframes flow{ to{ stroke-dashoffset:-56; } }
  @media (prefers-reduced-motion: reduce){ .signal{animation:none;} }

  /* ===== Fetch-decode-execute steps ===== */
  .cycle{
    display:flex; flex-wrap:wrap; gap:14px; margin:22px 0;
  }
  .cycle .step{
    flex:1; min-width:190px;
    border:1.5px solid var(--blueprint);
    border-radius: var(--radius);
    padding:16px;
    position:relative;
  }
  .cycle .step .n{
    font-family:'IBM Plex Mono', monospace;
    font-weight:700;
    font-size:1.6rem;
    color: var(--amber);
  }
  .cycle .step h5{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.92rem;
    margin:4px 0 6px;
    color: var(--blueprint);
  }
  .cycle .step p{font-size:0.86rem; margin:0;}

  /* ===== Rangkuman ===== */
  .summary-box{
    background: var(--blueprint);
    color: var(--paper);
    border-radius: 8px;
    padding: 26px 28px;
    margin-top: 10px;
  }
  .summary-box h4{
    font-family:'IBM Plex Mono', monospace;
    color: var(--line);
    font-size:0.85rem;
    letter-spacing:0.08em;
    text-transform:uppercase;
    margin-bottom:14px;
  }
  .summary-box ul{margin:0 0 0 1.1em; max-width:none;}
  .summary-box li{color:#E4EEF5; margin-bottom:8px;}

  /* ===== Tugas kelompok ===== */
  .task-panel{
    border: 1.5px dashed var(--blueprint);
    border-radius: 8px;
    padding: 26px 28px;
    background: repeating-linear-gradient(135deg, #FBFBF9, #FBFBF9 18px, #F3F1E9 18px, #F3F1E9 19px);
  }
  .task-head{
    display:flex; align-items:center; gap:12px; flex-wrap:wrap;
    margin-bottom:12px;
  }
  .task-head .badge{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.7rem;
    letter-spacing:0.08em;
    text-transform:uppercase;
    background: var(--rose);
    color:#fff;
    padding:4px 10px;
    border-radius:3px;
  }
  .task-panel h3{
    font-family:'IBM Plex Mono', monospace;
    font-size:1.25rem;
    color: var(--blueprint);
  }
  .steps-num{ counter-reset: step; margin:16px 0; max-width:78ch;}
  .steps-num li{
    counter-increment: step;
    list-style:none;
    position:relative;
    padding-left:34px;
    margin-bottom:14px;
  }
  .steps-num li::before{
    content: counter(step);
    position:absolute; left:0; top:0;
    font-family:'IBM Plex Mono', monospace;
    font-weight:700;
    color:#fff;
    background: var(--blueprint);
    width:24px; height:24px;
    border-radius:50%;
    display:flex; align-items:center; justify-content:center;
    font-size:0.8rem;
  }
  table.rubrik{
    width:100%;
    border-collapse:collapse;
    margin-top:18px;
    font-size:0.88rem;
  }
  table.rubrik th, table.rubrik td{
    border:1px solid #C9C4B4;
    padding:10px 12px;
    text-align:left;
  }
  table.rubrik th{
    background: var(--blueprint);
    color:#fff;
    font-family:'IBM Plex Mono', monospace;
    font-size:0.75rem;
    letter-spacing:0.04em;
    text-transform:uppercase;
  }
  table.rubrik tr:nth-child(even) td{ background:#F4F2EA; }

  .closing-task{
    margin-top:22px;
    background: #FEF6EA;
    border:1.5px solid var(--amber);
    border-radius:8px;
    padding:20px 22px;
  }
  .closing-task .lbl{
    font-family:'IBM Plex Mono', monospace;
    font-size:0.72rem;
    letter-spacing:0.1em;
    text-transform:uppercase;
    color:#B4791C;
    font-weight:700;
    margin-bottom:8px;
  }

  footer{
    background: var(--blueprint-deep);
    color:#9FB4C6;
    text-align:center;
    padding: 30px 6vw 40px;
    font-family:'IBM Plex Mono', monospace;
    font-size:0.75rem;
    letter-spacing:0.04em;
  }

  @media (max-width: 700px){
    .card-grid{grid-template-columns:1fr;}
    header.hero{padding:44px 5vw 40px;}
    .section{padding:40px 5vw;}
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="blueprint-bg"&gt;
  &lt;header class="hero"&gt;
    &lt;div class="eyebrow"&gt;Informatika · Fase E · Kelas X SMK&lt;/div&gt;
    &lt;h1 class="title"&gt;Sistem Komputer &lt;span&gt;&amp;&lt;/span&gt; Arsitektur Von&amp;nbsp;Neumann&lt;/h1&gt;
    &lt;p class="hero-sub"&gt;Materi ini membahas bagaimana komputer tersusun dan bekerja — mulai dari komponen penyusunnya, alur input–proses–output, hingga cetak biru arsitektur yang mendasari hampir seluruh komputer modern: arsitektur Von Neumann.&lt;/p&gt;

    &lt;div class="meta-strip"&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Elemen CP&lt;/div&gt;&lt;div class="v"&gt;Sistem Komputer&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK Kelas X&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;1 Pertemuan · 4 JP (180 menit)&lt;/div&gt;&lt;/div&gt;
      &lt;div class="meta-cell"&gt;&lt;div class="k"&gt;Model&lt;/div&gt;&lt;div class="v"&gt;Diskusi &amp; Kerja Kelompok&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/header&gt;
&lt;/div&gt;

&lt;main&gt;

  &lt;!-- ===================== CAPAIAN &amp; TUJUAN ===================== --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;00&lt;/span&gt; Capaian &amp; Tujuan Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Ke Mana Materi Ini Menuju&lt;/h2&gt;

    &lt;h3 class="sub-title"&gt;Capaian Pembelajaran&lt;/h3&gt;
    &lt;p&gt;Peserta didik mampu menjelaskan komponen sistem komputer, model input–proses–output, fungsi perangkat keras, perangkat lunak, brainware, serta hubungan antar komponennya dalam sistem komputer.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Tujuan Pembelajaran&lt;/h3&gt;
    &lt;ol&gt;
      &lt;li&gt;Menjelaskan pengertian sistem komputer sebagai satu kesatuan yang utuh.&lt;/li&gt;
      &lt;li&gt;Mengidentifikasi dan mengelompokkan komponen sistem komputer: perangkat keras (hardware), perangkat lunak (software), dan pengguna (brainware).&lt;/li&gt;
      &lt;li&gt;Menjelaskan model kerja input – proses – output beserta peran penyimpanan (storage) di dalamnya.&lt;/li&gt;
      &lt;li&gt;Menjelaskan arsitektur Von Neumann dan fungsi setiap bagiannya: CPU (Control Unit &amp; ALU), memori utama, serta jalur bus.&lt;/li&gt;
      &lt;li&gt;Menganalisis hubungan dan ketergantungan antar komponen dalam sebuah sistem komputer melalui studi kasus perangkat nyata.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 class="sub-title"&gt;Rincian Kegiatan (4 JP × 45 menit)&lt;/h3&gt;
    &lt;table class="rubrik"&gt;
      &lt;tr&gt;&lt;th&gt;Tahap&lt;/th&gt;&lt;th&gt;Kegiatan&lt;/th&gt;&lt;th&gt;Waktu&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Pendahuluan&lt;/td&gt;&lt;td&gt;Apersepsi, pertanyaan pemantik ("Apa yang sebenarnya terjadi di dalam laptopmu saat kamu mengetik?"), penyampaian tujuan pembelajaran&lt;/td&gt;&lt;td&gt;15 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kegiatan Inti — Eksplorasi Konsep&lt;/td&gt;&lt;td&gt;Penjelasan materi: komponen sistem komputer, model IPO, dan arsitektur Von Neumann&lt;/td&gt;&lt;td&gt;60 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kegiatan Inti — Kerja Kelompok&lt;/td&gt;&lt;td&gt;Diskusi dan pengerjaan tugas kelompok (identifikasi komponen &amp; skema Von Neumann)&lt;/td&gt;&lt;td&gt;45 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kegiatan Inti — Presentasi&lt;/td&gt;&lt;td&gt;Presentasi singkat tiap kelompok dan tanggapan/klarifikasi guru&lt;/td&gt;&lt;td&gt;30 menit&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Penutup&lt;/td&gt;&lt;td&gt;Refleksi, penguatan konsep, dan menulis kesimpulan ringkas di buku catatan&lt;/td&gt;&lt;td&gt;30 menit&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;!-- ===================== A. PENGERTIAN ===================== --&gt;
  &lt;section class="section" id="pengertian"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;01&lt;/span&gt; Konsep Dasar&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Apa Itu Sistem Komputer?&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Sistem komputer&lt;/strong&gt; adalah kumpulan komponen yang saling terhubung dan bekerja sama secara terkoordinasi untuk menerima, mengolah, menyimpan, dan menghasilkan data menjadi informasi yang berguna. Kata kuncinya adalah &lt;em&gt;"saling bekerja sama"&lt;/em&gt; — satu komputer bukan sekadar tumpukan komponen elektronik, melainkan sebuah sistem, di mana setiap bagian punya peran dan tidak dapat berfungsi maksimal tanpa bagian lainnya.&lt;/p&gt;

    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Analogi&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Bayangkan sistem komputer seperti tubuh manusia: &lt;strong&gt;hardware&lt;/strong&gt; adalah tubuh fisik (otot, tulang, organ), &lt;strong&gt;software&lt;/strong&gt; adalah pikiran dan instruksi yang mengatur gerakan, dan &lt;strong&gt;brainware&lt;/strong&gt; adalah orang yang memberi perintah dan tujuan. Ketiganya harus hadir bersama agar "tubuh" itu dapat benar-benar hidup dan berguna.&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;Secara umum, sistem komputer tersusun atas tiga elemen utama yang akan kita bahas satu per satu: &lt;strong&gt;perangkat keras (hardware)&lt;/strong&gt;, &lt;strong&gt;perangkat lunak (software)&lt;/strong&gt;, dan &lt;strong&gt;manusia sebagai pengguna/pengelola (brainware)&lt;/strong&gt;.&lt;/p&gt;
  &lt;/section&gt;

  &lt;!-- ===================== B. KOMPONEN ===================== --&gt;
  &lt;section class="section" id="komponen"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;02&lt;/span&gt; Komponen Sistem&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tiga Pilar Sistem Komputer&lt;/h2&gt;

    &lt;h3 class="sub-title"&gt;1. Perangkat Keras (Hardware)&lt;/h3&gt;
    &lt;p&gt;Hardware adalah seluruh komponen fisik komputer yang dapat dilihat dan disentuh. Berdasarkan fungsinya, hardware dikelompokkan menjadi empat kategori berikut.&lt;/p&gt;

    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;
        &lt;span class="tag"&gt;Input&lt;/span&gt;
        &lt;h4&gt;Perangkat Masukan&lt;/h4&gt;
        &lt;p style="font-size:0.9rem; margin-bottom:6px;"&gt;Mengubah data dari luar menjadi bentuk yang dapat diproses komputer.&lt;/p&gt;
        &lt;ul&gt;&lt;li&gt;Keyboard&lt;/li&gt;&lt;li&gt;Mouse&lt;/li&gt;&lt;li&gt;Scanner&lt;/li&gt;&lt;li&gt;Mikrofon&lt;/li&gt;&lt;li&gt;Kamera/webcam&lt;/li&gt;&lt;/ul&gt;
      &lt;/div&gt;
      &lt;div class="card"&gt;
        &lt;span class="tag"&gt;Proses&lt;/span&gt;
        &lt;h4&gt;Perangkat Pemroses&lt;/h4&gt;
        &lt;p style="font-size:0.9rem; margin-bottom:6px;"&gt;Mengolah data menjadi informasi; "otak" komputer.&lt;/p&gt;
        &lt;ul&gt;&lt;li&gt;CPU (Processor)&lt;/li&gt;&lt;li&gt;Motherboard&lt;/li&gt;&lt;li&gt;RAM (memori kerja)&lt;/li&gt;&lt;li&gt;VGA/GPU&lt;/li&gt;&lt;/ul&gt;
      &lt;/div&gt;
      &lt;div class="card"&gt;
        &lt;span class="tag"&gt;Output&lt;/span&gt;
        &lt;h4&gt;Perangkat Keluaran&lt;/h4&gt;
        &lt;p style="font-size:0.9rem; margin-bottom:6px;"&gt;Menampilkan atau menyajikan hasil pemrosesan.&lt;/p&gt;
        &lt;ul&gt;&lt;li&gt;Monitor&lt;/li&gt;&lt;li&gt;Printer&lt;/li&gt;&lt;li&gt;Speaker&lt;/li&gt;&lt;li&gt;Proyektor&lt;/li&gt;&lt;/ul&gt;
      &lt;/div&gt;
      &lt;div class="card" style="grid-column: span 3;"&gt;
        &lt;span class="tag" style="background:var(--amber); color:#3A2400;"&gt;Storage&lt;/span&gt;
        &lt;h4&gt;Perangkat Penyimpanan&lt;/h4&gt;
        &lt;p style="font-size:0.9rem; margin-bottom:6px;"&gt;Menyimpan data dan program, baik sementara maupun permanen.&lt;/p&gt;
        &lt;ul style="columns:2;"&gt;
          &lt;li&gt;&lt;strong&gt;Penyimpanan primer&lt;/strong&gt; — RAM (volatile, sementara, sangat cepat)&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Penyimpanan sekunder&lt;/strong&gt; — HDD, SSD, flashdisk (non-volatile, permanen, lebih lambat)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;2. Perangkat Lunak (Software)&lt;/h3&gt;
    &lt;p&gt;Software adalah kumpulan instruksi/program yang mengatur bagaimana hardware bekerja. Tanpa software, hardware hanyalah rangkaian komponen elektronik yang tidak tahu harus melakukan apa.&lt;/p&gt;
    &lt;div class="card-grid"&gt;
      &lt;div class="card"&gt;
        &lt;span class="tag"&gt;Sistem Operasi&lt;/span&gt;
        &lt;h4&gt;Operating System&lt;/h4&gt;
        &lt;p style="font-size:0.9rem;"&gt;Mengelola dan menjembatani seluruh sumber daya hardware agar dapat digunakan software lain. Contoh: Windows, Linux, macOS, Android.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class="card"&gt;
        &lt;span class="tag"&gt;Aplikasi&lt;/span&gt;
        &lt;h4&gt;Software Aplikasi&lt;/h4&gt;
        &lt;p style="font-size:0.9rem;"&gt;Program untuk menyelesaikan tugas spesifik pengguna. Contoh: pengolah kata, browser, aplikasi desain.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class="card"&gt;
        &lt;span class="tag"&gt;Bahasa &amp; Utilitas&lt;/span&gt;
        &lt;h4&gt;Bahasa Pemrograman / Utility&lt;/h4&gt;
        &lt;p style="font-size:0.9rem;"&gt;Alat untuk membuat software (mis. Python, Java) dan program pemeliharaan sistem (antivirus, disk cleaner).&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;3. Brainware&lt;/h3&gt;
    &lt;p&gt;Brainware adalah manusia yang berinteraksi langsung dengan sistem komputer — merancang, mengoperasikan, dan mengelolanya. Tanpa brainware, hardware dan software secanggih apa pun tidak memiliki tujuan.&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;End user&lt;/strong&gt; — pengguna yang memanfaatkan komputer untuk kebutuhan sehari-hari.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Programmer&lt;/strong&gt; — merancang dan menulis kode program/software.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;System administrator&lt;/strong&gt; — mengelola dan menjaga sistem agar berjalan optimal dan aman.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Operator&lt;/strong&gt; — menjalankan operasi rutin sistem, misalnya operator entri data.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;!-- ===================== C. MODEL IPO ===================== --&gt;
  &lt;section class="section" id="ipo"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;03&lt;/span&gt; Alur Kerja&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Model Input – Proses – Output&lt;/h2&gt;
    &lt;p&gt;Secara fungsional, cara kerja komputer dapat digambarkan sebagai sebuah alur sederhana: data masuk sebagai &lt;strong&gt;input&lt;/strong&gt;, diolah pada tahap &lt;strong&gt;proses&lt;/strong&gt;, lalu menghasilkan &lt;strong&gt;output&lt;/strong&gt;. Di sepanjang alur ini, &lt;strong&gt;storage&lt;/strong&gt; berperan menyimpan data maupun hasil, baik untuk digunakan kembali maupun disimpan permanen.&lt;/p&gt;

    &lt;div class="ipo-wrap"&gt;
      &lt;div class="ipo-row"&gt;
        &lt;div class="ipo-box"&gt;
          &lt;div class="lab"&gt;Input&lt;/div&gt;
          &lt;div class="desc"&gt;Data mentah dimasukkan&lt;br&gt;mis. mengetik teks di keyboard&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="ipo-arrow"&gt;→&lt;/div&gt;
        &lt;div class="ipo-box"&gt;
          &lt;div class="lab"&gt;Proses&lt;/div&gt;
          &lt;div class="desc"&gt;CPU mengolah data sesuai&lt;br&gt;instruksi program&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="ipo-arrow"&gt;→&lt;/div&gt;
        &lt;div class="ipo-box"&gt;
          &lt;div class="lab"&gt;Output&lt;/div&gt;
          &lt;div class="desc"&gt;Hasil olahan ditampilkan&lt;br&gt;mis. teks muncul di layar&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ipo-storage"&gt;▲▼ Storage — menyimpan data &amp; hasil di setiap tahap (mis. autosave dokumen ke SSD) ▲▼&lt;/div&gt;

    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Contoh Konkret&lt;/div&gt;
      &lt;p style="margin:0;"&gt;Saat kamu mengetik nama di aplikasi pengolah kata: &lt;strong&gt;keyboard&lt;/strong&gt; menjadi input, &lt;strong&gt;CPU dan RAM&lt;/strong&gt; memproses karakter yang diketik dan menyusunnya menjadi dokumen, &lt;strong&gt;monitor&lt;/strong&gt; menampilkan hasilnya sebagai output, dan saat kamu menekan "Save", dokumen tersebut ditulis ke &lt;strong&gt;penyimpanan (storage)&lt;/strong&gt; agar tidak hilang.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== D. VON NEUMANN ===================== --&gt;
  &lt;section class="section" id="von-neumann"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;04&lt;/span&gt; Arsitektur Komputer&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Arsitektur Von Neumann&lt;/h2&gt;

    &lt;p&gt;Pada tahun 1945, ilmuwan &lt;strong&gt;John von Neumann&lt;/strong&gt; memperkenalkan sebuah rancangan (arsitektur) komputer yang menjadi fondasi hampir seluruh komputer modern hingga saat ini — mulai dari laptop, komputer sekolah, sampai smartphone. Gagasan utamanya disebut &lt;strong&gt;stored-program concept&lt;/strong&gt;: instruksi program dan data disimpan bersama di dalam memori yang sama, sehingga komputer dapat membaca dan mengeksekusi instruksi tersebut secara berurutan tanpa harus diprogram ulang secara fisik setiap kali.&lt;/p&gt;

    &lt;h3 class="sub-title"&gt;Komponen Utama Arsitektur Von Neumann&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;CPU (Central Processing Unit)&lt;/strong&gt; — pusat pemrosesan, terdiri atas:
        &lt;ul&gt;
          &lt;li&gt;&lt;strong&gt;Control Unit (CU)&lt;/strong&gt; — mengatur dan mengendalikan seluruh aktivitas dalam CPU, termasuk mengambil dan menerjemahkan instruksi.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Arithmetic Logic Unit (ALU)&lt;/strong&gt; — melakukan operasi aritmatika (tambah, kurang, kali, bagi) dan operasi logika (perbandingan, AND/OR/NOT).&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Register&lt;/strong&gt; — memori berkapasitas sangat kecil namun sangat cepat di dalam CPU, tempat menyimpan data yang sedang diproses.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Memori Utama (Main Memory)&lt;/strong&gt; — menyimpan instruksi program dan data dalam bentuk biner, dan menjadi ciri khas arsitektur ini karena instruksi maupun data berbagi ruang penyimpanan yang sama.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Perangkat Input/Output&lt;/strong&gt; — jalur komunikasi antara komputer dan dunia luar.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Bus&lt;/strong&gt; — jalur fisik yang menghubungkan dan mengalirkan data antar komponen, terbagi menjadi tiga:
        &lt;ul&gt;
          &lt;li&gt;&lt;strong&gt;Bus Alamat (Address Bus)&lt;/strong&gt; — membawa informasi lokasi/alamat data di memori.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Bus Data (Data Bus)&lt;/strong&gt; — membawa data atau instruksi yang sesungguhnya.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Bus Kontrol (Control Bus)&lt;/strong&gt; — membawa sinyal perintah/pengendali antar komponen.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class="diagram-frame"&gt;
      &lt;svg viewBox="0 0 800 420" xmlns="http://www.w3.org/2000/svg"&gt;
        &lt;!-- title --&gt;
        &lt;text x="400" y="30" text-anchor="middle" fill="#7FC7FF" font-family="IBM Plex Mono, monospace" font-size="13" letter-spacing="2"&gt;SKEMA ARSITEKTUR VON NEUMANN&lt;/text&gt;

        &lt;!-- CPU block --&gt;
        &lt;rect x="60" y="70" width="300" height="200" rx="4" fill="none" stroke="#7FC7FF" stroke-width="1.5"/&gt;
        &lt;text x="210" y="92" text-anchor="middle" fill="#F2A340" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="14"&gt;CPU&lt;/text&gt;

        &lt;rect x="80" y="108" width="115" height="60" rx="3" fill="none" stroke="#7FC7FF" stroke-width="1"/&gt;
        &lt;text x="137" y="132" text-anchor="middle" fill="#EEF2F5" font-family="IBM Plex Mono, monospace" font-size="11"&gt;Control&lt;/text&gt;
        &lt;text x="137" y="148" text-anchor="middle" fill="#EEF2F5" font-family="IBM Plex Mono, monospace" font-size="11"&gt;Unit (CU)&lt;/text&gt;

        &lt;rect x="205" y="108" width="115" height="60" rx="3" fill="none" stroke="#7FC7FF" stroke-width="1"/&gt;
        &lt;text x="262" y="132" text-anchor="middle" fill="#EEF2F5" font-family="IBM Plex Mono, monospace" font-size="11"&gt;ALU&lt;/text&gt;
        &lt;text x="262" y="148" text-anchor="middle" fill="#C9DCEC" font-family="IBM Plex Mono, monospace" font-size="9"&gt;Arithmetic/Logic&lt;/text&gt;

        &lt;rect x="80" y="188" width="240" height="58" rx="3" fill="none" stroke="#7FC7FF" stroke-width="1"/&gt;
        &lt;text x="200" y="212" text-anchor="middle" fill="#EEF2F5" font-family="IBM Plex Mono, monospace" font-size="11"&gt;Register&lt;/text&gt;
        &lt;text x="200" y="228" text-anchor="middle" fill="#C9DCEC" font-family="IBM Plex Mono, monospace" font-size="9"&gt;Penyimpanan sementara super cepat&lt;/text&gt;

        &lt;!-- Memory block --&gt;
        &lt;rect x="470" y="70" width="270" height="130" rx="4" fill="none" stroke="#7FC7FF" stroke-width="1.5"/&gt;
        &lt;text x="605" y="94" text-anchor="middle" fill="#F2A340" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="14"&gt;MEMORI UTAMA&lt;/text&gt;
        &lt;text x="605" y="118" text-anchor="middle" fill="#C9DCEC" font-family="IBM Plex Mono, monospace" font-size="10"&gt;Instruksi &amp;amp; data disimpan&lt;/text&gt;
        &lt;text x="605" y="133" text-anchor="middle" fill="#C9DCEC" font-family="IBM Plex Mono, monospace" font-size="10"&gt;bersama (stored program)&lt;/text&gt;
        &lt;rect x="500" y="150" width="60" height="34" fill="none" stroke="#4CAF7D" stroke-width="1"/&gt;
        &lt;text x="530" y="171" text-anchor="middle" fill="#9FE0BE" font-family="IBM Plex Mono, monospace" font-size="9"&gt;0101&lt;/text&gt;
        &lt;rect x="565" y="150" width="60" height="34" fill="none" stroke="#4CAF7D" stroke-width="1"/&gt;
        &lt;text x="595" y="171" text-anchor="middle" fill="#9FE0BE" font-family="IBM Plex Mono, monospace" font-size="9"&gt;1100&lt;/text&gt;
        &lt;rect x="630" y="150" width="60" height="34" fill="none" stroke="#4CAF7D" stroke-width="1"/&gt;
        &lt;text x="660" y="171" text-anchor="middle" fill="#9FE0BE" font-family="IBM Plex Mono, monospace" font-size="9"&gt;0011&lt;/text&gt;

        &lt;!-- I/O block --&gt;
        &lt;rect x="470" y="240" width="270" height="70" rx="4" fill="none" stroke="#7FC7FF" stroke-width="1.5"/&gt;
        &lt;text x="605" y="266" text-anchor="middle" fill="#F2A340" font-family="IBM Plex Mono, monospace" font-weight="700" font-size="13"&gt;PERANGKAT INPUT / OUTPUT&lt;/text&gt;
        &lt;text x="605" y="286" text-anchor="middle" fill="#C9DCEC" font-family="IBM Plex Mono, monospace" font-size="10"&gt;Keyboard, monitor, printer, dll.&lt;/text&gt;

        &lt;!-- Buses connecting CPU &lt;-&gt; Memory --&gt;
        &lt;line class="signal" x1="360" y1="120" x2="470" y2="120" stroke="#7FC7FF" stroke-width="2"/&gt;
        &lt;line class="signal" x1="360" y1="150" x2="470" y2="150" stroke="#F2A340" stroke-width="2"/&gt;
        &lt;line class="signal" x1="360" y1="180" x2="470" y2="180" stroke="#4CAF7D" stroke-width="2"/&gt;

        &lt;!-- Buses connecting CPU &lt;-&gt; I/O --&gt;
        &lt;line class="signal" x1="360" y1="230" x2="470" y2="275" stroke="#7FC7FF" stroke-width="2"/&gt;

        &lt;!-- Legend --&gt;
        &lt;g font-family="IBM Plex Mono, monospace" font-size="10"&gt;
          &lt;line x1="60" y1="345" x2="90" y2="345" stroke="#7FC7FF" stroke-width="2"/&gt;
          &lt;text x="98" y="349" fill="#C9DCEC"&gt;Bus Alamat (Address Bus)&lt;/text&gt;
          &lt;line x1="60" y1="368" x2="90" y2="368" stroke="#F2A340" stroke-width="2"/&gt;
          &lt;text x="98" y="372" fill="#C9DCEC"&gt;Bus Data (Data Bus)&lt;/text&gt;
          &lt;line x1="60" y1="391" x2="90" y2="391" stroke="#4CAF7D" stroke-width="2"/&gt;
          &lt;text x="98" y="395" fill="#C9DCEC"&gt;Bus Kontrol (Control Bus)&lt;/text&gt;
        &lt;/g&gt;
      &lt;/svg&gt;
      &lt;div class="diagram-caption"&gt;Ketiga jalur bus mengalirkan sinyal terus-menerus antara CPU, memori, dan I/O — inilah "sistem peredaran darah" komputer.&lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 class="sub-title"&gt;Siklus Fetch – Decode – Execute&lt;/h3&gt;
    &lt;p&gt;Setiap instruksi program dijalankan CPU melalui siklus mesin (machine cycle) berikut, berulang-ulang jutaan kali per detik:&lt;/p&gt;
    &lt;div class="cycle"&gt;
      &lt;div class="step"&gt;
        &lt;div class="n"&gt;01&lt;/div&gt;
        &lt;h5&gt;FETCH&lt;/h5&gt;
        &lt;p&gt;Control Unit mengambil instruksi berikutnya dari memori utama menggunakan bus alamat dan bus data.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class="step"&gt;
        &lt;div class="n"&gt;02&lt;/div&gt;
        &lt;h5&gt;DECODE&lt;/h5&gt;
        &lt;p&gt;Instruksi yang diambil diterjemahkan oleh Control Unit agar CPU memahami perintah apa yang harus dilakukan.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class="step"&gt;
        &lt;div class="n"&gt;03&lt;/div&gt;
        &lt;h5&gt;EXECUTE&lt;/h5&gt;
        &lt;p&gt;ALU menjalankan instruksi tersebut (mis. operasi hitung), lalu hasilnya disimpan kembali ke register atau memori.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="callout"&gt;
      &lt;div class="lbl"&gt;Istilah Penting&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Von Neumann bottleneck&lt;/strong&gt; adalah keterbatasan kecepatan yang muncul karena instruksi dan data harus bergantian melewati bus yang sama menuju satu memori yang sama, sehingga kecepatan pemrosesan CPU sering kali dibatasi oleh kecepatan transfer data ke/dari memori.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== E. HUBUNGAN ANTAR KOMPONEN ===================== --&gt;
  &lt;section class="section" id="hubungan"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;05&lt;/span&gt; Keterkaitan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Hubungan Antar Komponen&lt;/h2&gt;
    &lt;p&gt;Hardware, software, dan brainware bukan tiga hal yang berdiri sendiri, melainkan tiga sisi dari satu sistem yang saling bergantung:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Hardware membutuhkan software&lt;/strong&gt; — tanpa sistem operasi dan program, hardware hanyalah komponen elektronik yang tidak tahu harus melakukan apa.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Software membutuhkan hardware&lt;/strong&gt; — instruksi program tidak dapat dijalankan tanpa CPU, memori, dan perangkat fisik lain sebagai tempat eksekusinya.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Brainware mengendalikan keduanya&lt;/strong&gt; — manusia merancang software, mengoperasikan hardware, dan menentukan tujuan penggunaan sistem.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Arsitektur Von Neumann adalah "jembatan"&lt;/strong&gt; yang menjelaskan bagaimana secara teknis instruksi (software) dan komponen fisik (hardware) benar-benar saling berkomunikasi melalui CPU, memori, dan bus.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;Jika salah satu unsur ini tidak ada atau tidak berfungsi, sistem komputer sebagai satu kesatuan tidak dapat bekerja sebagaimana mestinya.&lt;/p&gt;
  &lt;/section&gt;

  &lt;!-- ===================== F. RANGKUMAN ===================== --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;06&lt;/span&gt; Penguatan Konsep&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman Materi&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;h4&gt;Poin-Poin Kunci&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Sistem komputer adalah kesatuan hardware, software, dan brainware yang bekerja sama mengolah data menjadi informasi.&lt;/li&gt;
        &lt;li&gt;Hardware terbagi atas perangkat input, proses, output, dan storage (primer &amp; sekunder).&lt;/li&gt;
        &lt;li&gt;Software terdiri atas sistem operasi, aplikasi, serta bahasa pemrograman/utility.&lt;/li&gt;
        &lt;li&gt;Model kerja komputer mengikuti alur input → proses → output, dengan storage berperan menyimpan data di sepanjang alur.&lt;/li&gt;
        &lt;li&gt;Arsitektur Von Neumann memperkenalkan konsep &lt;em&gt;stored program&lt;/em&gt;: instruksi dan data disimpan bersama di satu memori.&lt;/li&gt;
        &lt;li&gt;CPU terdiri atas Control Unit, ALU, dan register, yang bekerja melalui siklus fetch–decode–execute.&lt;/li&gt;
        &lt;li&gt;Bus alamat, bus data, dan bus kontrol adalah jalur komunikasi yang menghubungkan CPU, memori, dan I/O.&lt;/li&gt;
        &lt;li&gt;Ketiga komponen sistem komputer saling bergantung — tidak dapat berfungsi optimal secara terpisah.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- ===================== TUGAS KELOMPOK ===================== --&gt;
  &lt;section class="section" id="tugas"&gt;
    &lt;div class="section-tag"&gt;&lt;span class="num"&gt;07&lt;/span&gt; Aktivitas Belajar&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Tugas Kelompok&lt;/h2&gt;

    &lt;div class="task-panel"&gt;
      &lt;div class="task-head"&gt;
        &lt;span class="badge"&gt;Kerja Kelompok · 4–5 orang&lt;/span&gt;
        &lt;span class="badge" style="background:var(--blueprint);"&gt;45 menit diskusi + 30 menit presentasi&lt;/span&gt;
      &lt;/div&gt;
      &lt;h3&gt;Menelusuri Arsitektur Von Neumann di Perangkat Sehari-hari&lt;/h3&gt;
      &lt;p&gt;Setiap kelompok memilih satu perangkat komputer yang dikenal (laptop, komputer di lab sekolah, atau smartphone), lalu menganalisis komponen sistem komputernya dan memetakannya ke dalam kerangka arsitektur Von Neumann.&lt;/p&gt;

      &lt;ol class="steps-num"&gt;
        &lt;li&gt;&lt;strong&gt;Bentuk kelompok&lt;/strong&gt; beranggotakan 4–5 orang, tentukan satu perangkat komputer yang akan dianalisis.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Identifikasi hardware&lt;/strong&gt; perangkat tersebut dan kelompokkan ke dalam kategori input, proses, output, dan storage (buat dalam bentuk tabel).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Identifikasi software&lt;/strong&gt; yang berjalan di perangkat tersebut: sistem operasi dan minimal 2 contoh aplikasi.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Gambarkan skema sederhana&lt;/strong&gt; arsitektur Von Neumann untuk perangkat pilihan kalian (CPU dengan CU &amp; ALU, memori, I/O, dan tiga jenis bus) — boleh digambar tangan di kertas atau dibuat digital.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Jelaskan dengan bahasa sendiri&lt;/strong&gt; bagaimana siklus fetch–decode–execute terjadi ketika perangkat tersebut menjalankan satu contoh aktivitas sederhana (mis. menekan tombol volume atau membuka aplikasi).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Presentasikan&lt;/strong&gt; hasil kerja kelompok di depan kelas selama maksimal 5 menit per kelompok.&lt;/li&gt;
      &lt;/ol&gt;

      &lt;h3 class="sub-title" style="margin-top:26px;"&gt;Format Laporan&lt;/h3&gt;
      &lt;p&gt;Laporan ditulis pada kertas folio atau dokumen sederhana, memuat: (1) nama perangkat &amp; anggota kelompok, (2) tabel komponen hardware &amp; software, (3) gambar skema Von Neumann, (4) penjelasan siklus fetch-decode-execute.&lt;/p&gt;

      &lt;h3 class="sub-title"&gt;Rubrik Penilaian&lt;/h3&gt;
      &lt;table class="rubrik"&gt;
        &lt;tr&gt;&lt;th&gt;Aspek&lt;/th&gt;&lt;th&gt;Indikator&lt;/th&gt;&lt;th&gt;Skor Maks.&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Ketepatan Konsep&lt;/td&gt;&lt;td&gt;Komponen hardware/software teridentifikasi dan dikategorikan dengan benar&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kelengkapan Skema&lt;/td&gt;&lt;td&gt;Skema Von Neumann memuat CPU (CU, ALU), memori, I/O, dan tiga bus dengan benar&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Penjelasan Siklus&lt;/td&gt;&lt;td&gt;Penjelasan fetch-decode-execute logis dan sesuai contoh yang dipilih&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kerja Sama &amp; Presentasi&lt;/td&gt;&lt;td&gt;Seluruh anggota berkontribusi; presentasi jelas dan percaya diri&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td colspan="2" style="text-align:right; font-weight:600;"&gt;Total&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class="closing-task"&gt;
      &lt;div class="lbl"&gt;Penutup Pembelajaran · Tugas Individu&lt;/div&gt;
      &lt;p style="margin:0;"&gt;&lt;strong&gt;Tulislah satu kesimpulan ringkas (5–7 kalimat) di buku catatan kalian masing-masing&lt;/strong&gt;, yang merangkum keseluruhan materi hari ini: pengertian sistem komputer, tiga komponennya (hardware, software, brainware), model input–proses–output, dan inti dari arsitektur Von Neumann beserta siklus fetch–decode–execute. Tulis dengan bahasa dan pemahaman kalian sendiri, bukan menyalin ulang materi.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  INFORMATIKA · SISTEM KOMPUTER &amp; ARSITEKTUR VON NEUMANN · FASE E KELAS X SMK
&lt;/footer&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/07/sistem-komputer-arsitektur-von-neumann.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-1012881908066357365</guid><pubDate>Wed, 29 Jul 2026 01:36:39 +0000</pubDate><atom:updated>2026-07-29T09:03:10.220+07:00</atom:updated><title>Membandingkan Teks Prosedur dengan Teks Lain</title><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&amp;family=Source+Sans+3:wght@400;500;600;700&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;display=swap');
.epb{
  --blueprint:#0F2A3D;
  --blueprint-deep:#0A1E2C;
  --panel:#4A2E12;
  --paper:#F3F0E6;
  --ink:#132029;
  --amber:#F5A623;
  --amber-deep:#C97F12;
  --mint:#6EC6CA;
  --line:rgba(234,242,245,0.16);
  --off-white:#EAF2F5;
  --muted:#9FB4C2;
}
.epb *{box-sizing:border-box;}
.epb{scroll-behavior:smooth; background:#0A1F2E;}
.epb{
  margin:0;
  position:relative;
  overflow:hidden;
  background:var(--blueprint);
  color:var(--off-white);
  font-family:'Source Sans 3',sans-serif;
  line-height:1.65;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 34px 34px;
}
.epb h1, .epb h2, .epb h3, .epb h4{font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.02em; margin:0 0 0.5em;}
.epb .mono{font-family:'IBM Plex Mono',monospace;}
.epb a{color:var(--amber);}
.epb .crop{position:absolute; width:22px; height:22px; z-index:5; opacity:.55; pointer-events:none;}
.epb .crop::before, .epb .crop::after{content:"";position:absolute;background:var(--mint);}
.epb .crop::before{width:100%;height:1px;top:50%;left:0;}
.epb .crop::after{width:1px;height:100%;left:50%;top:0;}
.epb .crop.tl{top:14px;left:14px;}
.epb .crop.tr{top:14px;right:14px;}
.epb .crop.bl{bottom:14px;left:14px;}
.epb .crop.br{bottom:14px;right:14px;}
.epb header.cover{
  position:relative;
  padding:40px 24px 36px;
  border-bottom:1px solid var(--line);
  overflow:hidden;
}
.epb .doc-code{font-family:'IBM Plex Mono',monospace; color:var(--amber); letter-spacing:0.15em; font-size:0.78rem; text-transform:uppercase; margin-bottom:18px; display:flex; gap:10px; align-items:center;}
.epb .doc-code::before{content:"◆"; color:var(--amber);}
.epb .cover h1{font-size:clamp(1.6rem,7vw,2.5rem); color:var(--off-white); max-width:16ch; line-height:1.05;}
.epb .cover .subtitle{color:var(--muted); font-size:1.05rem; max-width:60ch; margin-top:14px;}
.epb .meta-strip{
  margin-top:38px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border-top:1px dashed var(--line); border-bottom:1px dashed var(--line);
}
.epb .meta-strip div{padding:14px 16px; border-right:1px dashed var(--line);}
.epb .meta-strip div:last-child{border-right:none;}
.epb .meta-strip .k{font-family:'IBM Plex Mono',monospace; font-size:0.68rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.1em;}
.epb .meta-strip .v{font-size:0.98rem; color:var(--off-white); margin-top:4px; font-weight:600;}
.epb .stamp{
  position:absolute; top:40px; right:20px; width:104px; height:104px;
  border:2.5px solid var(--amber); border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  transform:rotate(-11deg);
  color:var(--amber); font-family:'IBM Plex Mono',monospace;
  text-align:center; font-size:0.62rem; letter-spacing:0.08em; text-transform:uppercase;
  opacity:0.9;
}
.epb .stamp .ring{position:absolute; inset:8px; border:1px dashed var(--amber); border-radius:50%;}
.epb .stamp b{display:block; font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:0.06em; margin-top:4px;}

@media (max-width:760px){.epb .stamp{display:none;}
.epb }


.epb main{max-width:920px; margin:0 auto; padding:0 20px 60px;}
.epb .section{padding-top:64px;}
.epb .eyebrow{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase; margin-bottom:10px; display:flex; align-items:center; gap:10px;}
.epb .eyebrow::after{content:""; flex:1; height:1px; background:var(--line);}
.epb h2.section-title{font-size:1.7rem; color:var(--off-white);}
.epb p{color:#DDE7EC;}
.epb .lead{color:var(--muted); font-size:1.02rem; max-width:72ch;}
.epb .panel{
  background:var(--panel); border:1px solid var(--line); border-radius:2px;
  padding:26px 28px; margin:22px 0;
}
.epb .panel.tp{border-left:4px solid var(--mint);}
.epb .panel.warn{border-left:4px solid var(--amber);}
.epb .tp-box{display:grid; gap:14px; margin-top:18px;}
.epb .tp-item{display:flex; gap:14px; align-items:flex-start;}
.epb .tp-item .idx{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; min-width:34px;}
.epb .flow{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:20px;}
.epb .flow .step{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px; position:relative;}
.epb .flow .step .tag{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;}
.epb .flow .step h4{font-size:1rem; margin-top:8px; color:var(--off-white);}
.epb .flow .step .time{position:absolute; top:16px; right:16px; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; color:var(--amber);}
.epb .grid-3{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-top:16px;}
.epb .card{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px;}
.epb .card h4{color:var(--amber); font-size:0.95rem;}
.epb .criteria{display:grid; gap:16px; margin-top:20px;}
.epb .crit{
  background:var(--blueprint-deep); border:1px solid var(--line);
  display:grid; grid-template-columns:64px 1fr; gap:0;
}
.epb .crit .num{
  background:var(--amber); color:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace;
  font-weight:700; display:flex; align-items:center; justify-content:center; font-size:1.05rem;
}
.epb .crit .body{padding:18px 20px;}
.epb .crit h4{color:var(--off-white); font-size:1.02rem; margin-bottom:6px;}
.epb .crit .q{margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); font-family:'IBM Plex Mono',monospace; font-size:0.86rem; color:var(--amber);}
.epb .timeline{margin-top:24px; position:relative; padding-left:34px;}
.epb .timeline::before{content:""; position:absolute; left:11px; top:6px; bottom:6px; width:2px; background:var(--line);}
.epb .tl-item{position:relative; padding-bottom:26px;}
.epb .tl-item:last-child{padding-bottom:0;}
.epb .tl-item::before{content:""; position:absolute; left:-34px; top:2px; width:22px; height:22px; border-radius:50%; background:var(--blueprint); border:2px solid var(--amber);}
.epb .tl-item h4{color:var(--off-white); font-size:1rem; margin-bottom:4px;}
.epb .doc-sample{
  background:var(--paper); color:var(--ink); border-radius:2px; padding:0; margin-top:22px;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .doc-sample .doc-head{background:var(--ink); color:var(--paper); padding:12px 22px; font-family:'IBM Plex Mono',monospace; font-size:0.75rem; letter-spacing:0.1em; text-transform:uppercase; display:flex; justify-content:space-between;}
.epb .doc-sample .doc-body{padding:26px 28px 30px;}
.epb .doc-sample h3{font-family:'Oswald',sans-serif; color:var(--ink); font-size:1.25rem; text-transform:none; letter-spacing:0;}
.epb .doc-sample ol{padding-left:22px;}
.epb .doc-sample li{margin-bottom:9px;}
.epb .flag{
  display:inline-block; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; font-weight:600;
  background:#D94E2A; color:#fff; padding:1px 7px; border-radius:2px; margin-left:6px; vertical-align:middle;
}
.epb .doc-sample .note-margin{margin-top:6px; font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:#8A3A1F; padding-left:8px; border-left:2px solid #D94E2A;}
.epb .legend{display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:16px;}
.epb .legend span{font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:var(--muted); display:flex; align-items:center; gap:8px;}
.epb .legend .dot{width:10px; height:10px; border-radius:50%; display:inline-block;}
.epb table{width:100%; border-collapse:collapse; margin-top:18px; font-size:0.94rem;}
.epb th, .epb td{border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top;}
.epb th{background:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace; font-size:0.75rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--amber);}
.epb .summary-box{
  border:1px solid var(--amber); background:linear-gradient(180deg, rgba(245,166,35,0.08), transparent);
  padding:24px 26px; margin-top:24px;
}
.epb .summary-box ul{margin:10px 0 0; padding-left:20px;}
.epb .summary-box li{margin-bottom:8px;}
.epb .task-header{
  background:var(--amber); color:var(--blueprint-deep); padding:22px 26px; margin-top:20px;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
}
.epb .task-header h2{color:var(--blueprint-deep); font-size:1.4rem; margin:0;}
.epb .task-header .badge{font-family:'IBM Plex Mono',monospace; font-size:0.8rem; background:var(--blueprint-deep); color:var(--amber); padding:6px 12px; border-radius:2px;}
.epb .steps-num{counter-reset:step; margin-top:18px; list-style:none; padding:0;}
.epb .steps-num li{counter-increment:step; position:relative; padding-left:44px; margin-bottom:16px;}
.epb .steps-num li::before{content:counter(step,decimal-leading-zero); position:absolute; left:0; top:0; font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; font-size:0.95rem; border:1px solid var(--amber); width:30px; height:26px; display:flex; align-items:center; justify-content:center;}
.epb .rubric-scale{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px;}
.epb .rubric-scale div{background:var(--blueprint-deep); border:1px solid var(--line); padding:12px; text-align:center;}
.epb .rubric-scale .n{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:1.3rem; font-weight:700;}
.epb .rubric-scale .l{font-size:0.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:0.05em;}
.epb .notebook{
  background:repeating-linear-gradient(var(--paper), var(--paper) 33px, #D8D3C2 34px);
  color:var(--ink); border-radius:2px; padding:28px 30px; margin-top:20px; position:relative;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .notebook::before{content:""; position:absolute; left:46px; top:0; bottom:0; width:1.5px; background:#C0453A; opacity:0.5;}
.epb .notebook .content{padding-left:24px;}
.epb .notebook h3{color:var(--ink); font-family:'Oswald',sans-serif; letter-spacing:0.02em; margin-bottom:10px;}
.epb .notebook ul{padding-left:20px;}
.epb footer{border-top:1px solid var(--line); padding:24px 20px 40px; color:var(--muted); font-size:0.86rem;}
.epb footer .doc-code{margin-bottom:10px;}
.epb .divider-dash{border:none; border-top:1px dashed var(--line); margin:44px 0 0;}
.epb::selection{background:var(--amber); color:var(--blueprint-deep);}

&lt;/style&gt;
&lt;div class="epb"&gt;
&lt;div class="crop tl"&gt;&lt;/div&gt;&lt;div class="crop tr"&gt;&lt;/div&gt;&lt;div class="crop bl"&gt;&lt;/div&gt;&lt;div class="crop br"&gt;&lt;/div&gt;

&lt;header class="cover"&gt;
  &lt;div class="stamp"&gt;&lt;div class="ring"&gt;&lt;/div&gt;&lt;span&gt;Modul Ajar&lt;b&gt;Terverifikasi&lt;/b&gt;Fase F&lt;/span&gt;&lt;/div&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-BANDING — 3 JP · 1 Pertemuan&lt;/div&gt;
  &lt;h1&gt;Membandingkan Teks Prosedur dengan Teks Lain&lt;/h1&gt;
  &lt;p class="subtitle"&gt;Materi Bahasa Indonesia Kelas XI SMK/MAK — melatih murid membandingkan teks prosedur dengan teks eksplanasi untuk menemukan persamaan dan perbedaan keduanya secara kritis dan sistematis.&lt;/p&gt;

  &lt;div class="meta-strip"&gt;
    &lt;div&gt;&lt;div class="k"&gt;Mata Pelajaran&lt;/div&gt;&lt;div class="v"&gt;Bahasa Indonesia&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK/MAK — Kelas XI&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Elemen&lt;/div&gt;&lt;div class="v"&gt;Membaca &amp;amp; Memirsa&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;3 JP (3 × 45 menit)&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;!-- ============ TUJUAN PEMBELAJARAN ============ --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="eyebrow"&gt;01 — Identitas Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Capaian &amp;amp; Tujuan Pembelajaran&lt;/h2&gt;

    &lt;div class="panel tp"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Capaian Pembelajaran (Elemen Membaca–Memirsa)&lt;/div&gt;
      &lt;p&gt;Murid mampu mengevaluasi informasi berupa gagasan, pikiran, pandangan, arahan, atau pesan dari berbagai jenis teks, termasuk teks prosedur, untuk menemukan makna yang tersurat dan tersirat, serta membandingkan teks tersebut dengan jenis teks lain untuk menemukan persamaan dan perbedaannya secara kritis.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="panel"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Tujuan Pembelajaran&lt;/div&gt;
      &lt;p style="font-size:1.05rem; color:var(--off-white); font-weight:600;"&gt;Murid mampu membandingkan teks prosedur dengan teks lainnya yang mendukung serta menemukan persamaan dan perbedaannya.&lt;/p&gt;

      &lt;div class="tp-box"&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.1&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan kembali struktur dan ciri kebahasaan teks prosedur.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.2&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan struktur dan ciri kebahasaan teks eksplanasi sebagai teks pembanding.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.3&lt;/span&gt;&lt;p&gt;Murid dapat menemukan persamaan antara teks prosedur dan teks eksplanasi berdasarkan tujuan, struktur, dan kebahasaannya.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.4&lt;/span&gt;&lt;p&gt;Murid dapat menemukan perbedaan antara teks prosedur dan teks eksplanasi, lalu menyusun simpulan perbandingan secara tertulis.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="eyebrow" style="margin-top:26px; margin-bottom:6px;"&gt;8 Profil Lulusan yang Dikembangkan&lt;/div&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penalaran Kritis&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menganalisis persamaan dan perbedaan dua jenis teks berdasarkan bukti tekstual.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kemandirian&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyelesaikan simpulan perbandingan dan rangkuman secara mandiri.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kolaborasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Bekerja sama dalam kelompok saat membandingkan dua teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Komunikasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyampaikan hasil perbandingan teks secara jelas dan runtut.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI A ============ --&gt;
  &lt;section class="section" id="materi-a"&gt;
    &lt;div class="eyebrow"&gt;02 — Materi Inti A&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengingat Kembali Teks Prosedur&lt;/h2&gt;
    &lt;p class="lead"&gt;Sebelum membandingkan, murid perlu mengingat kembali ciri utama teks prosedur sebagai salah satu teks yang akan dibandingkan.&lt;/p&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Teks prosedur&lt;/b&gt; adalah teks yang berisi langkah-langkah sistematis untuk melakukan atau membuat sesuatu, bertujuan agar pembaca dapat mencapai hasil tertentu jika mengikuti langkah tersebut dengan tepat.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Tujuan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Mengarahkan pembaca untuk &lt;b&gt;melakukan tindakan&lt;/b&gt; tertentu secara berurutan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Struktur&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Tujuan → alat/bahan (jika ada) → langkah-langkah → penutup/hasil.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Ciri Kebahasaan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kalimat imperatif, konjungsi temporal (kemudian, lalu, setelah itu), verba tindakan.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI B ============ --&gt;
  &lt;section class="section" id="materi-b"&gt;
    &lt;div class="eyebrow"&gt;03 — Materi Inti B&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengenal Teks Eksplanasi sebagai Teks Pembanding&lt;/h2&gt;
    &lt;p class="lead"&gt;Teks eksplanasi dipilih sebagai teks pembanding karena sama-sama menjelaskan sebuah proses, namun dengan tujuan yang berbeda dari teks prosedur.&lt;/p&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Teks eksplanasi&lt;/b&gt; adalah teks yang menjelaskan proses terjadinya suatu fenomena (alam, sosial, atau ilmiah) berdasarkan hubungan sebab-akibat, bertujuan agar pembaca &lt;b&gt;memahami mengapa dan bagaimana&lt;/b&gt; sesuatu terjadi — bukan untuk diikuti sebagai tindakan.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Tujuan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Menjelaskan proses/fenomena agar pembaca &lt;b&gt;memahami&lt;/b&gt;, bukan melakukan tindakan.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Struktur&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Pernyataan umum → deretan penjelas (sebab-akibat) → interpretasi/penutup.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Ciri Kebahasaan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Konjungsi kausalitas (sebab, karena, akibatnya) dan kronologis, kalimat pasif, istilah ilmiah/faktual.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI C: PERSAMAAN ============ --&gt;
  &lt;section class="section" id="materi-c"&gt;
    &lt;div class="eyebrow"&gt;04 — Materi Inti C&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Persamaan Teks Prosedur dan Teks Eksplanasi&lt;/h2&gt;
    &lt;p class="lead"&gt;Meskipun berbeda tujuan, kedua teks memiliki beberapa kesamaan mendasar berikut.&lt;/p&gt;

    &lt;div class="criteria"&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;1&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Sama-Sama Menjelaskan Proses/Tahapan&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Kedua teks disusun dalam rangkaian tahap atau langkah yang berurutan, bukan sekadar kumpulan informasi acak.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;2&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Bersifat Informatif dan Faktual&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Keduanya menyampaikan informasi berdasarkan fakta atau kebenaran umum, bukan opini atau imajinasi penulis.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;3&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Menggunakan Konjungsi Urutan&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Keduanya memakai kata penghubung yang menandai urutan, baik urutan waktu maupun urutan sebab-akibat.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;4&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Disusun secara Sistematis&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Kedua teks memiliki struktur yang jelas dan tidak dapat diacak susunannya tanpa mengubah makna.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI D: PERBEDAAN ============ --&gt;
  &lt;section class="section" id="materi-d"&gt;
    &lt;div class="eyebrow"&gt;05 — Materi Inti D&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Perbedaan Teks Prosedur dan Teks Eksplanasi&lt;/h2&gt;
    &lt;p class="lead"&gt;Gunakan tabel berikut untuk membandingkan kedua teks berdasarkan beberapa aspek utama.&lt;/p&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Aspek&lt;/th&gt;&lt;th&gt;Teks Prosedur&lt;/th&gt;&lt;th&gt;Teks Eksplanasi&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Tujuan&lt;/td&gt;&lt;td&gt;Mengarahkan pembaca &lt;b&gt;melakukan&lt;/b&gt; sesuatu&lt;/td&gt;&lt;td&gt;Membuat pembaca &lt;b&gt;memahami&lt;/b&gt; suatu proses/fenomena&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Fokus Isi&lt;/td&gt;&lt;td&gt;Tindakan yang harus dilakukan manusia&lt;/td&gt;&lt;td&gt;Proses alami, ilmiah, atau sosial yang terjadi dengan sendirinya&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Struktur&lt;/td&gt;&lt;td&gt;Tujuan → alat/bahan → langkah-langkah → penutup&lt;/td&gt;&lt;td&gt;Pernyataan umum → deretan penjelas → interpretasi&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat Dominan&lt;/td&gt;&lt;td&gt;Kalimat imperatif (perintah/anjuran)&lt;/td&gt;&lt;td&gt;Kalimat deklaratif/pasif (pernyataan)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Konjungsi Utama&lt;/td&gt;&lt;td&gt;Konjungsi temporal (lalu, kemudian, setelah itu)&lt;/td&gt;&lt;td&gt;Konjungsi kausalitas (karena, sebab, akibatnya)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Hasil bagi Pembaca&lt;/td&gt;&lt;td&gt;Mampu melakukan/menghasilkan sesuatu&lt;/td&gt;&lt;td&gt;Mampu menjelaskan mengapa/bagaimana sesuatu terjadi&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI E: LANGKAH MEMBANDINGKAN ============ --&gt;
  &lt;section class="section" id="materi-e"&gt;
    &lt;div class="eyebrow"&gt;06 — Materi Inti E&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Langkah-Langkah Membandingkan Dua Teks&lt;/h2&gt;

    &lt;div class="timeline"&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;01 · Membaca Kedua Teks&lt;/h4&gt;&lt;p&gt;Baca teks prosedur dan teks eksplanasi secara menyeluruh untuk memahami isi masing-masing.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;02 · Mengidentifikasi Tujuan&lt;/h4&gt;&lt;p&gt;Tentukan tujuan penulisan setiap teks: apakah mengarahkan tindakan atau menjelaskan proses.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;03 · Membandingkan Struktur&lt;/h4&gt;&lt;p&gt;Bandingkan bagian-bagian pembangun kedua teks dan urutannya.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;04 · Membandingkan Ciri Kebahasaan&lt;/h4&gt;&lt;p&gt;Cermati jenis kalimat dan konjungsi dominan yang digunakan pada masing-masing teks.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;05 · Menyusun Simpulan Perbandingan&lt;/h4&gt;&lt;p&gt;Tuliskan persamaan dan perbedaan kedua teks secara ringkas dan berdasarkan bukti dari teks.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ CONTOH PENERAPAN ============ --&gt;
  &lt;section class="section" id="contoh"&gt;
    &lt;div class="eyebrow"&gt;07 — Pemodelan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Contoh Penerapan: Membandingkan Dua Teks&lt;/h2&gt;
    &lt;p class="lead"&gt;Guru membacakan dan membahas bersama sepasang teks berikut sebagai model penerapan sebelum murid mengerjakan tugas kelompok.&lt;/p&gt;

    &lt;div class="doc-sample"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Prosedur Contoh&lt;/span&gt;&lt;span&gt;Dokumen-01&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3&gt;Prosedur Membuat Kompos dari Sampah Organik&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63;"&gt;&lt;i&gt;Tujuan: Mengubah sampah organik rumah tangga menjadi kompos yang dapat digunakan sebagai pupuk.&lt;/i&gt;&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;Kumpulkan sampah organik seperti sisa sayuran, buah, dan daun kering.&lt;/li&gt;
          &lt;li&gt;Cacah sampah organik menjadi potongan kecil agar cepat terurai.&lt;/li&gt;
          &lt;li&gt;Masukkan sampah organik ke dalam wadah komposter secara berlapis dengan tanah.&lt;/li&gt;
          &lt;li&gt;Siram dengan sedikit air agar kelembapan terjaga, lalu tutup wadah.&lt;/li&gt;
          &lt;li&gt;Aduk campuran setiap tiga hari sekali selama proses pengomposan berlangsung.&lt;/li&gt;
          &lt;li&gt;Setelah 3–4 minggu, kompos siap digunakan sebagai pupuk tanaman.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="doc-sample" style="margin-top:22px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Eksplanasi Contoh&lt;/span&gt;&lt;span&gt;Dokumen-02&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Proses Terjadinya Pengomposan pada Sampah Organik&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63 !important;"&gt;&lt;i&gt;Pernyataan umum: Pengomposan adalah proses penguraian bahan organik oleh mikroorganisme menjadi bahan yang lebih sederhana dan bermanfaat bagi tanah.&lt;/i&gt;&lt;/p&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;Proses ini terjadi karena mikroorganisme seperti bakteri dan jamur menguraikan senyawa organik kompleks pada sisa sayuran dan daun. Akibat aktivitas mikroorganisme tersebut, suhu tumpukan sampah meningkat sehingga mempercepat proses penguraian. Seiring berjalannya waktu, struktur sampah organik berubah menjadi lebih gelap, remah, dan tidak berbau menyengat sebagai tanda bahwa proses penguraian telah selesai.&lt;/p&gt;
        &lt;p style="margin:10px 0 0; color:#4b5a63 !important;"&gt;&lt;i&gt;Interpretasi: Dengan demikian, pengomposan merupakan proses alami yang mengubah sampah organik menjadi materi yang bermanfaat bagi kesuburan tanah.&lt;/i&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="panel" style="margin-top:22px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Simpulan model perbandingan:&lt;/b&gt; Kedua teks membahas tema yang sama, yaitu pengomposan sampah organik. &lt;b&gt;Persamaannya&lt;/b&gt;, keduanya bersifat informatif dan disusun secara bertahap. &lt;b&gt;Perbedaannya&lt;/b&gt;, teks pertama berisi instruksi yang harus dilakukan pembaca (kalimat imperatif, konjungsi temporal), sedangkan teks kedua menjelaskan proses alami yang terjadi dengan sendirinya (kalimat deklaratif, konjungsi kausalitas) agar pembaca memahami mengapa dan bagaimana pengomposan terjadi.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN ============ --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="eyebrow"&gt;08 — Ringkasan Materi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Poin-Poin Penting&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;ul&gt;
        &lt;li&gt;Teks prosedur bertujuan mengarahkan pembaca melakukan tindakan, sedangkan teks eksplanasi bertujuan membuat pembaca memahami suatu proses/fenomena.&lt;/li&gt;
        &lt;li&gt;Persamaan kedua teks: sama-sama menjelaskan proses/tahapan, bersifat informatif dan faktual, menggunakan konjungsi urutan, dan disusun secara sistematis.&lt;/li&gt;
        &lt;li&gt;Perbedaan utama terletak pada tujuan, fokus isi, struktur, jenis kalimat dominan, dan konjungsi yang digunakan.&lt;/li&gt;
        &lt;li&gt;Membandingkan dilakukan bertahap: membaca kedua teks → mengidentifikasi tujuan → membandingkan struktur → membandingkan kebahasaan → menyusun simpulan.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS KELOMPOK ============ --&gt;
  &lt;section class="section" id="tugas-kelompok"&gt;
    &lt;div class="eyebrow"&gt;09 — Lembar Kerja&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Kelompok: Membandingkan Teks Prosedur dan Teks Eksplanasi&lt;/h2&gt;
      &lt;span class="badge"&gt;Durasi ± 60 menit&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Tujuan tugas:&lt;/b&gt; Murid secara berkelompok membandingkan sepasang teks bertema sama berikut, lalu menemukan persamaan dan perbedaannya berdasarkan tujuan, struktur, dan ciri kebahasaan.&lt;/p&gt;

    &lt;div class="doc-sample" style="margin-top:20px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Prosedur untuk Dibandingkan&lt;/span&gt;&lt;span&gt;Dokumen-03&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3&gt;Prosedur Mendaur Ulang Botol Plastik menjadi Pot Tanaman&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63;"&gt;&lt;i&gt;Tujuan: Mengubah botol plastik bekas menjadi pot tanaman sederhana.&lt;/i&gt;&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;Siapkan botol plastik bekas, gunting, dan cat jika diperlukan.&lt;/li&gt;
          &lt;li&gt;Potong botol plastik menjadi dua bagian menggunakan gunting.&lt;/li&gt;
          &lt;li&gt;Buat beberapa lubang kecil di bagian bawah botol sebagai saluran air.&lt;/li&gt;
          &lt;li&gt;Hias bagian luar botol dengan cat sesuai selera.&lt;/li&gt;
          &lt;li&gt;Isi botol dengan tanah dan bibit tanaman.&lt;/li&gt;
          &lt;li&gt;Pot dari botol plastik siap digunakan untuk menanam.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="doc-sample" style="margin-top:20px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Eksplanasi untuk Dibandingkan&lt;/span&gt;&lt;span&gt;Dokumen-04&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Proses Terjadinya Pencemaran Lingkungan akibat Sampah Plastik&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63 !important;"&gt;&lt;i&gt;Pernyataan umum: Pencemaran lingkungan akibat sampah plastik terjadi karena sifat plastik yang sulit terurai secara alami.&lt;/i&gt;&lt;/p&gt;
        &lt;p style="margin:10px 0; color:#132029 !important;"&gt;Plastik yang dibuang sembarangan akan terurai dalam waktu yang sangat lama, bahkan hingga ratusan tahun. Selama proses tersebut, plastik dapat mencemari tanah dan air karena melepaskan zat kimia berbahaya. Selain itu, sampah plastik yang menumpuk di saluran air dapat menyebabkan penyumbatan sehingga memicu banjir pada musim hujan.&lt;/p&gt;
        &lt;p style="margin:10px 0 0; color:#4b5a63 !important;"&gt;&lt;i&gt;Interpretasi: Oleh karena itu, pengelolaan sampah plastik yang tepat, termasuk melalui daur ulang, sangat penting untuk mengurangi dampak pencemaran lingkungan.&lt;/i&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Petunjuk Pengerjaan&lt;/h4&gt;
    &lt;ol class="steps-num"&gt;
      &lt;li&gt;&lt;b&gt;Bentuk kelompok&lt;/b&gt; beranggotakan 4–5 orang sesuai pembagian dari guru.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Baca kedua teks&lt;/b&gt; di atas secara bersama-sama dalam kelompok.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Identifikasi tujuan, struktur, dan ciri kebahasaan&lt;/b&gt; masing-masing teks.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Isi Tabel Perbandingan&lt;/b&gt; di bawah ini untuk setiap aspek yang diminta.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Presentasikan hasil&lt;/b&gt; di depan kelas selama maksimal 5 menit per kelompok, dilanjutkan tanya jawab singkat.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Format Tabel Perbandingan Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Aspek&lt;/th&gt;&lt;th&gt;Teks Prosedur&lt;/th&gt;&lt;th&gt;Teks Eksplanasi&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Tujuan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Struktur&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kalimat dominan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Konjungsi utama&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Hasil bagi pembaca&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Rubrik Penilaian Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:26%;"&gt;Aspek Penilaian&lt;/th&gt;&lt;th&gt;Skor 4 (Sangat Baik)&lt;/th&gt;&lt;th&gt;Skor 3 (Baik)&lt;/th&gt;&lt;th&gt;Skor 2 (Cukup)&lt;/th&gt;&lt;th&gt;Skor 1 (Kurang)&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan identifikasi persamaan&lt;/td&gt;&lt;td&gt;Seluruh persamaan teridentifikasi tepat&lt;/td&gt;&lt;td&gt;Sebagian besar tepat&lt;/td&gt;&lt;td&gt;Identifikasi dangkal&lt;/td&gt;&lt;td&gt;Tidak sesuai&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan identifikasi perbedaan&lt;/td&gt;&lt;td&gt;Seluruh perbedaan teridentifikasi tepat dengan bukti jelas&lt;/td&gt;&lt;td&gt;Sebagian besar tepat&lt;/td&gt;&lt;td&gt;Identifikasi dangkal&lt;/td&gt;&lt;td&gt;Tidak sesuai&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kerja sama kelompok&lt;/td&gt;&lt;td&gt;Seluruh anggota aktif berkontribusi&lt;/td&gt;&lt;td&gt;Sebagian besar anggota aktif&lt;/td&gt;&lt;td&gt;Hanya sebagian kecil anggota aktif&lt;/td&gt;&lt;td&gt;Didominasi satu orang&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Presentasi&lt;/td&gt;&lt;td&gt;Jelas, percaya diri, menjawab pertanyaan dengan baik&lt;/td&gt;&lt;td&gt;Jelas namun kurang percaya diri&lt;/td&gt;&lt;td&gt;Kurang jelas/terbata-bata&lt;/td&gt;&lt;td&gt;Tidak dapat menjelaskan hasil&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN UNTUK BUKU CATATAN ============ --&gt;
  &lt;section class="section" id="catatan-murid"&gt;
    &lt;div class="eyebrow"&gt;10 — Penutup Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman untuk Dicatat di Buku Catatan&lt;/h2&gt;
    &lt;p class="lead"&gt;Sebagai penutup pertemuan, setiap murid menuliskan satu rangkuman ringkas secara mandiri di buku catatan sebagai simpulan pribadi atas materi hari ini.&lt;/p&gt;

    &lt;div class="notebook"&gt;
      &lt;div class="content"&gt;
        &lt;h3 style="color:#132029 !important;"&gt;Instruksi Menulis Rangkuman&lt;/h3&gt;
        &lt;p style="margin-top:0; color:#132029 !important;"&gt;Tulis di buku catatan masing-masing, maksimal &lt;b&gt;satu halaman&lt;/b&gt;, mencakup poin-poin berikut:&lt;/p&gt;
        &lt;ul style="color:#132029 !important;"&gt;
          &lt;li style="color:#132029 !important;"&gt;Perbedaan tujuan antara teks prosedur dan teks eksplanasi, menurut pemahaman sendiri.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Minimal dua persamaan dan tiga perbedaan antara teks prosedur dan teks eksplanasi.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Langkah-langkah membandingkan dua teks secara berurutan.&lt;/li&gt;
          &lt;li style="color:#132029 !important;"&gt;Satu contoh situasi sehari-hari yang menunjukkan perbedaan antara "mengikuti prosedur" dan "memahami penjelasan proses".&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p style="margin-bottom:0; color:#4b5a63 !important;"&gt;&lt;i&gt;Rangkuman ditulis dengan kalimat sendiri (bukan menyalin ulang dari materi), dan dikumpulkan pada awal pertemuan berikutnya untuk diperiksa guru.&lt;/i&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-BANDING — Fokus Tujuan Pembelajaran, Materi Inti &amp;amp; Tugas Kelompok, 1× pertemuan (3 JP)&lt;/div&gt;
  &lt;p style="margin:0;"&gt;Referensi: Kurikulum Merdeka — Capaian Pembelajaran Bahasa Indonesia Fase F (Elemen Membaca dan Memirsa); Buku Teks Bahasa Indonesia Kelas XI SMK/MAK Kemendikbudristek.&lt;/p&gt;
&lt;/footer&gt;
&lt;/div&gt;</description><link>http://kitab-investasi.blogspot.com/2026/07/membandingkan-teks-prosedur-dengan-teks.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-4520144294968549584</guid><pubDate>Thu, 23 Jul 2026 07:35:22 +0000</pubDate><atom:updated>2026-07-24T07:29:26.342+07:00</atom:updated><title>Asesmen Awal Bahasa Indonesia XI SMK</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"&gt;
    &lt;title&gt;SMART • Asesmen Awal Bahasa Indonesia XI SMK&lt;/title&gt;
    &lt;style&gt;
        * { margin: 0; padding: 0; box-sizing: border-box; user-select: none; }
        html, body {
            width: 100%;
            min-height: 100vh;
            background: #080c18;
            font-family: 'Segoe UI', 'Arial', 'Helvetica', sans-serif;
            overflow: hidden;
            position: relative;
        }
        #game-wrapper {
            position: fixed;
            top: 0;
            left: 0;
            width: 100vw;
            height: 100vh;
            max-width: 100%;
            max-height: 100%;
            background: radial-gradient(circle at 20% 30%, #0e1a2b, #050a14);
            box-shadow: 0 0 50px #00d4ff40, 0 0 120px #0055ff20;
            border: 1px solid #00d4ff60;
            display: flex;
            flex-direction: column;
            padding: 16px;
            overflow: hidden;
            z-index: 9999;
        }
        #header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 6px 12px;
            color: #a8e6ff;
            font-weight: bold;
            background: rgba(0, 20, 40, 0.6);
            backdrop-filter: blur(4px);
            border-radius: 60px;
            border: 1px solid #00d4ff80;
            margin-bottom: 10px;
            flex-shrink: 0;
        }
        #header span { background: #0a1a2e; padding: 4px 16px; border-radius: 40px; border: 1px solid #00d4ff; font-size: 0.9rem; letter-spacing: 1px; }
        #level-indicator { background: #0a1a2e; color: #7ad0ff; border-color: #00aaff; }
        #score-indicator { color: #facc15; border-color: #facc15; }
        #player-name-display { color: #7ad0ff; border-color: #00aaff; }
        #timer-display { background: #1a0a0a; color: #ff6b6b; border-color: #ff4444; min-width: 80px; text-align: center; }
        #game-canvas-container {
            flex: 1;
            position: relative;
            border-radius: 24px;
            overflow: hidden;
            min-height: 200px;
            border: 1px solid #00d4ff40;
            box-shadow: inset 0 0 60px #0044aa30;
            cursor: crosshair;
        }
        canvas { display: block; width: 100%; height: 100%; background: transparent; cursor: crosshair; }
        #question-panel {
            background: rgba(0, 16, 32, 0.85);
            backdrop-filter: blur(8px);
            border: 1px solid #00d4ff;
            border-radius: 40px;
            padding: 14px 20px;
            margin-top: 10px;
            color: #e6f7ff;
            font-weight: 600;
            font-size: clamp(0.95rem, 2.6vw, 1.25rem);
            text-align: left;
            box-shadow: 0 0 40px #0066ff44;
            flex-shrink: 0;
            min-height: 76px;
            display: flex;
            align-items: center;
            line-height: 1.5;
        }
        #question-panel .q-number { color: #00d4ff; font-weight: 800; margin-right: 12px; white-space: nowrap; text-shadow: 0 0 12px #00aaff; }
        #question-panel .q-text { color: #ffffff; font-weight: 700; text-shadow: 0 0 8px rgba(0, 180, 255, 0.3); }
        #entry-screen {
            position: absolute; inset: 0; z-index: 20;
            background: rgba(0, 6, 16, 0.92); backdrop-filter: blur(12px);
            display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 30px;
            border-radius: 32px; padding: 20px;
        }
        #entry-screen h1 { font-size: 2.6rem; color: #7ad0ff; text-shadow: 0 0 40px #00aaff, 0 0 100px #0055ff; letter-spacing: 4px; font-weight: 800; }
        #entry-screen h2 { color: #7ad0ff; font-size: 1.4rem; margin-top: -20px; text-shadow: 0 0 20px #00aaff; font-weight: 400; letter-spacing: 2px; }
        #entry-screen input { background: #0a1a2e; border: 2px solid #00d4ff; border-radius: 60px; padding: 16px 24px; width: 80%; max-width: 340px; font-size: 1.3rem; color: #d6f0ff; text-align: center; outline: none; box-shadow: 0 0 40px #0066ff55; }
        #entry-screen input::placeholder { color: #4a7a9a; }
        .cyber-btn {
            background: linear-gradient(145deg, #0a2a4a, #06152a); border: 1px solid #00d4ff; color: #d6f0ff;
            padding: 16px 48px; border-radius: 60px; font-size: 1.6rem; font-weight: bold; letter-spacing: 3px;
            box-shadow: 0 0 40px #00aaffaa, inset 0 0 20px #00aaff44; transition: 0.2s; cursor: pointer; backdrop-filter: blur(4px);
        }
        .cyber-btn:active { transform: scale(0.93); box-shadow: 0 0 80px #00d4ff; }
        #congrats-overlay {
            position: absolute; inset: 0; z-index: 30;
            background: rgba(0, 4, 16, 0.85); backdrop-filter: blur(8px); border-radius: 32px;
            display: none; flex-direction: column; justify-content: center; align-items: center; padding: 20px; text-align: center; color: #fff;
        }
        #congrats-overlay.show { display: flex; }
        .congrats-box {
            background: rgba(0, 16, 32, 0.8); border: 2px solid #00d4ff; border-radius: 60px; padding: 30px 20px;
            max-width: 480px; width: 100%; box-shadow: 0 0 80px #0066ff88, inset 0 0 30px #00aaff44; backdrop-filter: blur(8px); position: relative; z-index: 5;
        }
        .congrats-box .user-name { font-size: 1.4rem; color: #7ad0ff; margin-bottom: 8px; text-shadow: 0 0 20px #00aaff; }
        .congrats-box .user-name i { font-style: normal; background: rgba(0,180,255,0.15); padding: 2px 14px; border-radius: 30px; border: 1px solid #00aaff44; }
        .congrats-box h2 { font-size: 2.4rem; margin-bottom: 6px; color: #facc15; text-shadow: 0 0 30px #facc15aa; }
        .congrats-box .rank { font-size: 2rem; font-weight: 800; background: linear-gradient(45deg, #7ad0ff, #00aaff, #a855f7); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin: 10px 0; }
        .congrats-box .final-score { font-size: 1.8rem; color: #7ad0ff; text-shadow: 0 0 20px #00aaff66; }
        .congrats-box .final-score span { color: #facc15; font-weight: 800; text-shadow: 0 0 20px #facc1566; }
        .congrats-box .message { font-size: 1.2rem; color: #c8e6ff; margin: 16px 0; background: rgba(0,180,255,0.1); padding: 10px 16px; border-radius: 30px; border: 1px solid #00aaff44; }
        .congrats-box .stats-grid { display: flex; justify-content: center; gap: 20px; margin: 12px 0; font-size: 0.9rem; color: #7ad0ff; }
        .congrats-box .stats-grid span { background: rgba(0,20,50,0.5); padding: 4px 14px; border-radius: 20px; border: 1px solid #00aaff33; }
        .congrats-box .footer-note { margin-top: 16px; font-size: 0.85rem; color: #5a8aaa; letter-spacing: 1px; border-top: 1px solid #00aaff33; padding-top: 14px; font-style: italic; }
        .small-btn { background: #0a2a4a; border: 1px solid #00d4ff; color: #d6f0ff; padding: 12px 30px; border-radius: 60px; font-size: 1.2rem; margin-top: 12px; cursor: pointer; transition: 0.2s; box-shadow: 0 0 20px #00aaff33; }
        .small-btn:active { transform: scale(0.92); }
        #speech-btn { background: rgba(0,180,255,0.15); border: 1px solid #00d4ff; color: #7ad0ff; padding: 8px 20px; border-radius: 40px; font-size: 0.9rem; cursor: pointer; margin-top: 6px; transition: 0.2s; box-shadow: 0 0 15px #00aaff22; }
        #speech-btn:hover { background: rgba(0,180,255,0.3); }
        #leaderboard {
            position: absolute; bottom: 10px; right: 16px;
            background: #0a1218cc; backdrop-filter: blur(8px); padding: 10px 18px; border-radius: 40px;
            border: 1px solid #00d4ff; color: #7ad0ff; font-size: 0.8rem; max-width: 200px; max-height: 120px; overflow-y: auto; z-index: 10;
        }
        #leaderboard div { display: flex; justify-content: space-between; gap: 10px; border-bottom: 1px solid #00d4ff40; padding: 2px 0; }
        .lb-score { color: #facc15; }
        /* Tombol Panduan - PASTI MUNCUL */
        #guide-btn {
            position: absolute;
            top: 12px;
            right: 12px;
            background: rgba(0, 180, 255, 0.2);
            border: 1.5px solid #00d4ff;
            color: #7ad0ff;
            padding: 8px 18px;
            border-radius: 40px;
            font-size: 0.9rem;
            font-weight: bold;
            cursor: pointer;
            z-index: 15;
            transition: 0.3s;
            box-shadow: 0 0 20px #00aaff44;
            backdrop-filter: blur(4px);
            display: flex;
            align-items: center;
            gap: 6px;
        }
        #guide-btn:hover { background: rgba(0, 180, 255, 0.35); transform: scale(1.05); }
        #guide-btn:active { transform: scale(0.95); }
        /* Modal Panduan */
        #guide-modal {
            position: absolute; inset: 0; z-index: 40;
            background: rgba(0, 4, 16, 0.92); backdrop-filter: blur(10px);
            display: none; flex-direction: column; justify-content: center; align-items: center;
            border-radius: 32px; padding: 30px 20px;
            text-align: center; color: #fff;
        }
        #guide-modal.show { display: flex; }
        #guide-modal .guide-box {
            background: rgba(0, 16, 32, 0.9); border: 1px solid #00d4ff; border-radius: 40px;
            padding: 30px 25px; max-width: 500px; width: 100%;
            max-height: 80vh; overflow-y: auto;
            box-shadow: 0 0 60px #0066ff66;
        }
        #guide-modal h2 { color: #facc15; font-size: 2rem; margin-bottom: 16px; text-shadow: 0 0 30px #facc15aa; }
        #guide-modal p, #guide-modal li { color: #c8e6ff; font-size: 1rem; line-height: 1.6; text-align: left; }
        #guide-modal ul { padding-left: 20px; margin: 10px 0; }
        #guide-modal .close-guide {
            margin-top: 20px;
            background: #0a2a4a; border: 1px solid #00d4ff; color: #d6f0ff;
            padding: 10px 30px; border-radius: 60px; font-size: 1.1rem;
            cursor: pointer; transition: 0.2s;
        }
        #guide-modal .close-guide:hover { background: #0a3a5a; }
        .guide-icon { font-size: 1.5rem; margin-right: 8px; }
        @media (max-width: 500px) {
            #header span { font-size: 0.7rem; padding: 2px 10px; }
            #entry-screen h1 { font-size: 2rem; }
            #question-panel { font-size: clamp(0.8rem, 2.5vw, 1rem); padding: 10px 14px; min-height: 64px; }
            .congrats-box { padding: 20px 14px; }
            .congrats-box h2 { font-size: 1.8rem; }
            .congrats-box .rank { font-size: 1.5rem; }
            #leaderboard { max-width: 140px; font-size: 0.7rem; padding: 6px 12px; }
            #guide-btn { font-size: 0.7rem; padding: 5px 12px; top: 8px; right: 8px; }
            #guide-modal .guide-box { padding: 20px 15px; }
            #guide-modal h2 { font-size: 1.5rem; }
            #guide-modal p, #guide-modal li { font-size: 0.85rem; }
        }
        @media (max-width: 400px) {
            #header span { font-size: 0.6rem; padding: 2px 6px; }
            #timer-display { min-width: 60px; font-size: 0.7rem; }
            #guide-btn { font-size: 0.6rem; padding: 4px 10px; }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="game-wrapper"&gt;
    &lt;div id="header"&gt;
        &lt;span id="player-name-display"&gt;&#128218; User&lt;/span&gt;
        &lt;span id="level-indicator"&gt;⚡ Level 1&lt;/span&gt;
        &lt;span id="score-indicator"&gt;⭐ 0 / 100&lt;/span&gt;
        &lt;span id="timer-display"&gt;⏱️ 60:00&lt;/span&gt;
    &lt;/div&gt;
    &lt;div id="game-canvas-container"&gt;
        &lt;canvas id="gameCanvas" width="800" height="600"&gt;&lt;/canvas&gt;
        &lt;!-- TOMBOL PANDUAN - DITAMPILKAN DI ATAS CANVAS --&gt;
        &lt;button id="guide-btn"&gt;&#128214; Panduan&lt;/button&gt;
        &lt;div id="entry-screen"&gt;
            &lt;h1&gt;&#128218; SMART&lt;/h1&gt;
            &lt;h2&gt;Asesmen Awal Bahasa Indonesia • Kelas XI SMK&lt;/h2&gt;
            &lt;input id="playerNameInput" type="text" placeholder="Nama User" maxlength="20"&gt;
            &lt;button class="cyber-btn" id="startGameBtn"&gt;▶ MULAI&lt;/button&gt;
            &lt;div style="color:#4a7a9a; font-size:0.8rem;"&gt;Panah ke buku &amp; perpustakaan! • Waktu 60 menit&lt;/div&gt;
        &lt;/div&gt;
        &lt;div id="congrats-overlay"&gt;
            &lt;div class="congrats-box"&gt;
                &lt;div class="user-name"&gt;&#128218; &lt;i id="userNameDisplay"&gt;User&lt;/i&gt;&lt;/div&gt;
                &lt;h2&gt;&#127937; ASESMEN SELESAI&lt;/h2&gt;
                &lt;div class="rank" id="rankDisplay"&gt;Master Bahasa Indonesia&lt;/div&gt;
                &lt;div class="final-score"&gt;Skor Akhir: &lt;span id="finalScoreDisplay"&gt;0&lt;/span&gt; / 100&lt;/div&gt;
                &lt;div class="stats-grid"&gt;
                    &lt;span id="levelCompleteDisplay"&gt;Level: 5/5&lt;/span&gt;
                    &lt;span id="accuracyDisplay"&gt;Akurasi: 0%&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class="message" id="personalMessage"&gt;Hebat, User!&lt;/div&gt;
                &lt;button id="speech-btn"&gt;&#128266; Dengarkan Laporan&lt;/button&gt;
                &lt;button class="small-btn" id="restartFromCongratsBtn"&gt;&#128260; Misi Ulang&lt;/button&gt;
                &lt;div class="footer-note"&gt;✦ Selamat Belajar &amp; Bermain ✦&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;div id="leaderboard"&gt;
            &lt;div style="color:#facc15; font-weight:bold;"&gt;&#127942; LEADERBOARD&lt;/div&gt;
            &lt;div id="lbEntries"&gt;&lt;div style="color:#4a7a9a;"&gt;Belum ada data&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;!-- Modal Panduan --&gt;
        &lt;div id="guide-modal"&gt;
            &lt;div class="guide-box"&gt;
                &lt;h2&gt;&#128214; Panduan Permainan&lt;/h2&gt;
                &lt;p&gt;&lt;strong&gt;&#127919; Tujuan:&lt;/strong&gt; Jawab 50 pertanyaan Bahasa Indonesia Kelas XI SMK dengan menembak target yang benar.&lt;/p&gt;
                &lt;hr style="border-color:#00aaff44; margin:12px 0;"&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;strong&gt;&#128260; Cara Bermain:&lt;/strong&gt; Gerakkan kursor/tap untuk mengarahkan busur. &lt;strong&gt;Klik atau tap&lt;/strong&gt; pada target (buku/perpustakaan) yang kamu yakini sebagai jawaban benar.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;&#128218; Materi:&lt;/strong&gt; 5 Level mewakili 18 pertemuan: Teks Prosedur, Ceramah, Resensi, Latihan AKM, dan Rangkuman.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;⭐ Skor:&lt;/strong&gt; Setiap jawaban benar mendapat poin. Skor maksimal 100. Target bernilai 2 poin per jawaban benar.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;⏱️ Waktu:&lt;/strong&gt; Kamu memiliki waktu 60 menit untuk menyelesaikan semua level. Waktu akan berubah merah saat &lt; 5 menit.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;&#127942; Predikat:&lt;/strong&gt; Skor akhir menentukan predikat: Master, Expert, Pro, Learner, atau Perlu Belajar Lagi.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;&#128266; Suara:&lt;/strong&gt; Klik tombol "Dengarkan Laporan" di akhir permainan untuk mendengar hasil.&lt;/li&gt;
                &lt;/ul&gt;
                &lt;p style="margin-top:12px; font-style:italic; color:#7ad0ff;"&gt;✦ Selamat belajar &amp; semoga sukses! ✦&lt;/p&gt;
                &lt;button class="close-guide" id="closeGuideBtn"&gt;✔️ Saya Mengerti&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id="question-panel"&gt;
        &lt;span class="q-number" id="qNumberDisplay"&gt;1.&lt;/span&gt;
        &lt;span class="q-text" id="qTextDisplay"&gt;Tekan mulai &amp; tembak buku pengetahuan&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    (function(){
        // ============================================================
        // BANK SOAL BAHASA INDONESIA KELAS XI SMK (18 Pertemuan)
        // ============================================================
        const LEVELS = 5;
        const QUESTIONS_PER_LEVEL = 10;
        const MAX_SCORE = 100;
        const TOTAL_TIME = 60 * 60;

        const QUESTION_BANK = [
            // ===== LEVEL 1: Teks Prosedur =====
            [
                { q: "Apa tujuan utama dari teks prosedur?", options: ["Memberikan petunjuk langkah-langkah", "Menghibur pembaca", "Menceritakan pengalaman", "Meyakinkan pembaca", "Menjelaskan definisi"], correct: 0 },
                { q: "Ciri kebahasaan yang dominan dalam teks prosedur adalah...", options: ["Kalimat imperatif", "Kalimat tanya", "Kalimat pasif", "Kalimat berita", "Kalimat seru"], correct: 0 },
                { q: "Konjungsi temporal yang sering digunakan dalam teks prosedur adalah...", options: ["Kemudian, setelah itu, lalu", "Namun, akan tetapi", "Oleh karena itu", "Selain itu", "Dengan demikian"], correct: 0 },
                { q: "Contoh kalimat deklaratif dalam teks prosedur adalah...", options: ["Langkah pertama adalah menyiapkan alat", "Siapkan alat-alat!", "Apakah kamu sudah siap?", "Ayo kita mulai!", "Jangan lupa berdoa"], correct: 0 },
                { q: "Kalimat persuasif dalam teks prosedur bertujuan...", options: ["Membujuk pembaca untuk melakukan", "Memberi perintah", "Menanyakan", "Menceritakan", "Menjelaskan"], correct: 0 },
                { q: "Kaidah kebahasaan teks prosedur meliputi...", options: ["Kalimat perintah, kata teknis, konjungsi temporal", "Kata ganti orang, kata sifat, antonim", "Kata kerja mental, kata kerja material", "Kalimat pasif, kalimat aktif", "Konjungsi kausalitas, kata tanya"], correct: 0 },
                { q: "Salah satu langkah menulis teks prosedur yang baik adalah...", options: ["Menentukan tujuan dan audiens", "Mengabaikan urutan", "Menggunakan bahasa asing", "Membuat panjang lebar", "Menghilangkan langkah"], correct: 0 },
                { q: "Teks prosedur yang baik harus disusun secara...", options: ["Logis dan sistematis", "Acak dan bebas", "Emosional", "Panjang lebar", "Subjektif"], correct: 0 },
                { q: "Contoh kata teknis dalam teks prosedur memasak adalah...", options: ["Tumis, rebus, panggang", "Indah, cantik, bagus", "Cepat, lambat, sedang", "Panas, dingin, hangat", "Manis, asin, asam"], correct: 0 },
                { q: "Apa yang dimaksud dengan evaluasi informasi dalam teks prosedur?", options: ["Menilai kebenaran dan kegunaan informasi", "Menghafal isi teks", "Menceritakan kembali", "Mengabaikan detail", "Mengubah isi teks"], correct: 0 }
            ],
            // ===== LEVEL 2: Teks Ceramah =====
            [
                { q: "Tujuan utama teks ceramah adalah...", options: ["Memberi nasihat atau arahan", "Menghibur pendengar", "Menceritakan kisah", "Menjelaskan prosedur", "Meyakinkan dengan data"], correct: 0 },
                { q: "Gagasan pokok dalam teks ceramah biasanya terletak di...", options: ["Awal paragraf", "Akhir paragraf", "Tengah paragraf", "Semua paragraf", "Tidak tentu"], correct: 0 },
                { q: "Kata ganti orang yang sering digunakan dalam ceramah adalah...", options: ["Kita, kami, anda", "Saya, aku", "Mereka", "Kalian", "Beliau"], correct: 0 },
                { q: "Kata teknis dalam teks ceramah keagamaan contohnya...", options: ["Taqwa, ikhlas, sabar", "Masak, goreng, rebus", "Lari, jalan, duduk", "Baca, tulis, hitung", "Senyum, sapa, salam"], correct: 0 },
                { q: "Kata persuasif dalam ceramah bertujuan...", options: ["Membujuk pendengar", "Memberi perintah", "Menjelaskan fakta", "Menceritakan kejadian", "Menanyakan pendapat"], correct: 0 },
                { q: "Ciri kebahasaan teks ceramah meliputi...", options: ["Kata ganti orang, kata teknis, kata persuasif", "Kalimat imperatif, konjungsi temporal", "Kata benda, kata sifat", "Kalimat tanya, kata seru", "Kata kerja mental"], correct: 0 },
                { q: "Saat menyajikan ceramah, intonasi yang baik adalah...", options: ["Jelas dan bervariasi", "Monoton", "Sangat cepat", "Sangat lambat", "Berteriak"], correct: 0 },
                { q: "Membandingkan isi teks ceramah dengan teks lain bertujuan...", options: ["Menemukan persamaan dan perbedaan", "Menghafal isi", "Mengubah isi", "Mengabaikan teks lain", "Meniru gaya bahasa"], correct: 0 },
                { q: "Evaluasi informasi dalam teks ceramah berarti...", options: ["Menilai keakuratan dan relevansi informasi", "Menghafal semua isi", "Menceritakan kembali", "Mengabaikan sumber", "Mengubah topik"], correct: 0 },
                { q: "Sikap yang harus dimiliki saat menyampaikan ceramah adalah...", options: ["Santun dan percaya diri", "Marah dan keras", "Acuh tak acuh", "Malu dan ragu", "Bercanda berlebihan"], correct: 0 }
            ],
            // ===== LEVEL 3: Teks Resensi =====
            [
                { q: "Teks resensi bertujuan untuk...", options: ["Memberi penilaian terhadap karya", "Menghibur pembaca", "Menceritakan kisah", "Memberi petunjuk", "Menyampaikan berita"], correct: 0 },
                { q: "Struktur teks resensi yang benar adalah...", options: ["Identitas, orientasi, sinopsis, analisis, evaluasi", "Pendahuluan, isi, penutup", "Abstrak, pendahuluan, pembahasan, kesimpulan", "Tesis, argumentasi, penegasan", "Orientasi, komplikasi, resolusi"], correct: 0 },
                { q: "Kaidah kebahasaan teks resensi yang dominan adalah...", options: ["Kata kerja mental, kata sifat penilaian", "Kalimat imperatif", "Konjungsi temporal", "Kata ganti orang", "Kata teknis prosedur"], correct: 0 },
                { q: "Contoh kata sifat penilaian dalam resensi adalah...", options: ["Menarik, membosankan, inspiratif", "Cepat, lambat, sedang", "Besar, kecil, panjang", "Manis, asin, asam", "Panas, dingin, hangat"], correct: 0 },
                { q: "Sinopsis dalam resensi berisi...", options: ["Ringkasan cerita secara singkat", "Analisis mendalam", "Kelebihan buku", "Kekurangan buku", "Kesimpulan akhir"], correct: 0 },
                { q: "Menganalisis kaidah kebahasaan resensi berarti...", options: ["Menelaah penggunaan bahasa", "Menghafal isi", "Mengubah isi", "Membandingkan buku", "Menceritakan kembali"], correct: 0 },
                { q: "Teks resensi yang baik harus ditulis secara...", options: ["Logis dan sistematis", "Acak dan bebas", "Emosional", "Panjang lebar", "Subjektif"], correct: 0 },
                { q: "Saat mempresentasikan resensi, hal yang perlu diperhatikan adalah...", options: ["Kejelasan dan logika penyampaian", "Kecepatan bicara", "Penggunaan bahasa asing", "Penampilan fisik", "Durasi yang sangat panjang"], correct: 0 },
                { q: "Membandingkan teks resensi dengan teks lain bertujuan...", options: ["Menemukan kelebihan dan kekurangan", "Menghafal isi", "Mengubah isi", "Mengabaikan teks lain", "Meniru gaya bahasa"], correct: 0 },
                { q: "Evaluasi struktur teks resensi meliputi...", options: ["Kelengkapan bagian-bagian resensi", "Jumlah halaman", "Penerbit buku", "Harga buku", "Tahun terbit"], correct: 0 }
            ],
            // ===== LEVEL 4: Latihan Soal &amp; AKM =====
            [
                { q: "Soal AKM (Asesmen Kompetensi Minimum) biasanya mengukur...", options: ["Kemampuan bernalar dan literasi", "Penghafalan materi", "Kecepatan menulis", "Keterampilan berbicara", "Kemampuan menggambar"], correct: 0 },
                { q: "Dalam soal AKM teks prosedur, yang sering diuji adalah...", options: ["Pemahaman langkah-langkah dan tujuan", "Menghafal teks", "Mengubah teks", "Menulis ulang", "Menyanyi teks"], correct: 0 },
                { q: "Latihan soal teks ceramah bertujuan untuk...", options: ["Mengidentifikasi kelemahan pemahaman", "Menghafal isi", "Mengubah ceramah", "Menulis ceramah baru", "Membandingkan ceramah"], correct: 0 },
                { q: "Ulangan harian petunjuk kerja bertujuan...", options: ["Mengevaluasi kompetensi siswa", "Menghafal materi", "Membuat proyek", "Presentasi", "Diskusi"], correct: 0 },
                { q: "Soal tipe AKM biasanya berbentuk...", options: ["Pilihan ganda kompleks dan menjodohkan", "Pilihan ganda biasa", "Essay", "Uraian", "Benar-salah"], correct: 0 },
                { q: "Mengidentifikasi kelemahan pemahaman dilakukan melalui...", options: ["Analisis kesalahan jawaban", "Menghafal materi", "Membaca ulang", "Bertanya pada teman", "Mengubah jawaban"], correct: 0 },
                { q: "Ulangan harian resensi bertujuan...", options: ["Mengevaluasi kemampuan menilai buku", "Menghafal isi buku", "Membuat buku baru", "Membandingkan buku", "Menjual buku"], correct: 0 },
                { q: "Soal AKM menuntut siswa untuk...", options: ["Bernalar dan berpikir kritis", "Menghafal jawaban", "Membaca cepat", "Menulis panjang", "Menghafal istilah"], correct: 0 },
                { q: "Salah satu manfaat latihan soal AKM adalah...", options: ["Mengenal tipe soal dan meningkatkan nalar", "Menghafal materi", "Membuat soal baru", "Menilai teman", "Mengubah kurikulum"], correct: 0 },
                { q: "Evaluasi pencapaian kompetensi pada ulangan harian bertujuan...", options: ["Mengukur pemahaman siswa", "Menghafal materi", "Membuat proyek", "Presentasi", "Diskusi"], correct: 0 }
            ],
            // ===== LEVEL 5: Rangkuman =====
            [
                { q: "Rangkuman materi petunjuk kerja mencakup...", options: ["Prosedur, ceramah, dan resensi", "Puisi dan drama", "Novel dan cerpen", "Surat dan iklan", "Laporan dan berita"], correct: 0 },
                { q: "Persamaan teks prosedur dan teks ceramah adalah...", options: ["Sama-sama memberikan arahan", "Sama-sama menghibur", "Sama-sama bercerita", "Sama-sama menilai", "Sama-sama berita"], correct: 0 },
                { q: "Perbedaan teks resensi dengan teks prosedur adalah...", options: ["Resensi menilai, prosedur memberi petunjuk", "Resensi bercerita, prosedur menghibur", "Resensi berita, prosedur cerita", "Resensi puisi, prosedur drama", "Resensi surat, prosedur laporan"], correct: 0 },
                { q: "Kaidah kebahasaan yang digunakan dalam teks resensi adalah...", options: ["Kata kerja mental dan kata sifat penilaian", "Kalimat imperatif", "Konjungsi temporal", "Kata ganti orang", "Kata teknis prosedur"], correct: 0 },
                { q: "Menyajikan teks prosedur secara lisan memerlukan...", options: ["Kejelasan dan urutan yang logis", "Kecepatan bicara", "Penggunaan bahasa asing", "Penampilan menarik", "Durasi panjang"], correct: 0 },
                { q: "Menyajikan teks ceramah harus disertai...", options: ["Sikap santun dan intonasi yang tepat", "Suara keras", "Gerakan berlebihan", "Membaca teks", "Bercanda"], correct: 0 },
                { q: "Mempresentasikan resensi harus dilakukan secara...", options: ["Logis dan kreatif", "Acak dan bebas", "Emosional", "Panjang lebar", "Subjektif"], correct: 0 },
                { q: "Teks prosedur, ceramah, dan resensi termasuk jenis teks...", options: ["Fungsional (nonfiksi)", "Fiksi", "Puisi", "Drama", "Epik"], correct: 0 },
                { q: "Keterampilan menyimak teks ceramah bertujuan...", options: ["Memahami isi dan maksud pembicara", "Menghafal isi", "Mengubah isi", "Menulis ulang", "Membandingkan"], correct: 0 },
                { q: "Tujuan akhir dari pembelajaran teks prosedur, ceramah, dan resensi adalah...", options: ["Meningkatkan literasi dan keterampilan berbahasa", "Menghafal semua teks", "Membuat teks panjang", "Menjadi penulis", "Menjadi pembicara"], correct: 0 }
            ]
        ];

        // ===== STATE =====
        let userName = "User";
        let currentLevel = 0;
        let currentQuestionIndex = 0;
        let score = 0;
        let totalAttempts = 0;
        let correctAttempts = 0;
        let questionsForLevel = [];
        let targets = [];
        let gameActive = false;
        let levelCompleted = false;
        let animationFrame = null;
        let canvas, ctx;
        let W, H;
        let leaderboardData = [];
        let particles = [];
        let fireworks = [];
        let isCelebrating = false;
        let finalScore = 0, finalRank = "", finalMessage = "", finalAccuracy = 0;

        let timeRemaining = TOTAL_TIME;
        let timerInterval = null;
        let timerRunning = false;

        let archer = { x: 50, y: 0 };
        let arrow = { x: 0, y: 0, vx: 0, vy: 0, active: false, angle: 0, targetX: 0, targetY: 0, speed: 10, homing: false };
        let arrowCooldown = 0;
        let mouseX = 0, mouseY = 0;

        // DOM
        const canvasEl = document.getElementById('gameCanvas');
        const questionPanel = document.getElementById('question-panel');
        const qNumberDisplay = document.getElementById('qNumberDisplay');
        const qTextDisplay = document.getElementById('qTextDisplay');
        const levelIndicator = document.getElementById('level-indicator');
        const scoreIndicator = document.getElementById('score-indicator');
        const playerNameDisplay = document.getElementById('player-name-display');
        const timerDisplay = document.getElementById('timer-display');
        const entryScreen = document.getElementById('entry-screen');
        const congratsOverlay = document.getElementById('congrats-overlay');
        const finalScoreSpan = document.getElementById('finalScoreDisplay');
        const rankDisplay = document.getElementById('rankDisplay');
        const personalMessage = document.getElementById('personalMessage');
        const userNameDisplay = document.getElementById('userNameDisplay');
        const levelCompleteDisplay = document.getElementById('levelCompleteDisplay');
        const accuracyDisplay = document.getElementById('accuracyDisplay');
        const lbEntries = document.getElementById('lbEntries');
        const speechBtn = document.getElementById('speech-btn');
        const guideBtn = document.getElementById('guide-btn');
        const guideModal = document.getElementById('guide-modal');
        const closeGuideBtn = document.getElementById('closeGuideBtn');

        canvas = canvasEl; ctx = canvas.getContext('2d');

        // ===== PANDUAN =====
        guideBtn.addEventListener('click', () =&gt; { guideModal.classList.add('show'); });
        closeGuideBtn.addEventListener('click', () =&gt; { guideModal.classList.remove('show'); });
        guideModal.addEventListener('click', (e) =&gt; { if (e.target === guideModal) guideModal.classList.remove('show'); });

        let speechSynth = window.speechSynthesis;
        let speechUtterance = null;
        function speakScoreboard(score, rank, message, accuracy) {
            if (!window.speechSynthesis) return;
            if (speechSynth.speaking) speechSynth.cancel();
            const text = `Laporan untuk User ${userName}. Skor ${score} dari 100. Predikat ${rank}. Akurasi ${accuracy} persen. ${message}`;
            speechUtterance = new SpeechSynthesisUtterance(text);
            speechUtterance.lang = 'id-ID'; speechUtterance.rate = 0.85; speechUtterance.pitch = 1;
            speechSynth.speak(speechUtterance);
        }

        function shuffleArray(arr) { for (let i=arr.length-1; i&gt;0; i--) { const j=Math.floor(Math.random()*(i+1)); [arr[i],arr[j]]=[arr[j],arr[i]]; } return arr; }

        function loadLeaderboard() {
            try { const data = localStorage.getItem('smart_bindo_leaderboard'); leaderboardData = data ? JSON.parse(data) : []; } catch(e){ leaderboardData = []; }
            renderLeaderboard();
        }
        function saveLeaderboard() { localStorage.setItem('smart_bindo_leaderboard', JSON.stringify(leaderboardData)); renderLeaderboard(); }
        function renderLeaderboard() {
            if (!lbEntries) return;
            if (leaderboardData.length === 0) { lbEntries.innerHTML = '&lt;div style="color:#4a7a9a;"&gt;Belum ada data&lt;/div&gt;'; return; }
            const sorted = [...leaderboardData].sort((a,b) =&gt; b.score - a.score).slice(0,5);
            lbEntries.innerHTML = sorted.map(p =&gt; `&lt;div&gt;&lt;span&gt;${p.name}&lt;/span&gt;&lt;span class="lb-score"&gt;${p.score}&lt;/span&gt;&lt;/div&gt;`).join('');
        }

        function resizeCanvas() {
            const container = document.getElementById('game-canvas-container');
            const rect = container.getBoundingClientRect();
            canvas.width = rect.width || 800; canvas.height = rect.height || 600;
            W = canvas.width; H = canvas.height;
            archer.y = H - 70; archer.x = Math.min(archer.x, W-30);
            if (gameActive &amp;&amp; questionsForLevel.length) { generateTargets(); if (!levelCompleted) showCurrentQuestion(); }
        }
        window.addEventListener('resize', resizeCanvas);
        resizeCanvas();

        function loadLevel(levelIdx) {
            currentLevel = levelIdx; currentQuestionIndex = 0; levelCompleted = false;
            const raw = QUESTION_BANK[levelIdx] || QUESTION_BANK[0];
            questionsForLevel = raw.map(item =&gt; {
                const shuffledOptions = shuffleArray([...item.options]);
                const correctIndex = shuffledOptions.indexOf(item.options[item.correct]);
                return { q: item.q, options: shuffledOptions, correct: correctIndex };
            });
            questionsForLevel = shuffleArray(questionsForLevel);
            generateTargets();
            updateUI();
            if (gameActive) showCurrentQuestion();
        }

        function generateTargets() {
            targets = [];
            if (!questionsForLevel.length) return;
            const total = questionsForLevel.length;
            const cols = Math.min(4, total, Math.floor(W / 130) + 1);
            const rows = Math.ceil(total / cols);
            const spacingX = (W - 80) / (cols + 1);
            const spacingY = (H - 140) / (rows + 2);
            const size = Math.min(spacingX * 0.40, spacingY * 0.45, 62);
            const baseY = spacingY * 0.6 + 20;
            const icons = ['&#128218;', '&#128214;', '&#128213;', '&#128215;', '&#128216;', '&#128217;', '&#128211;', '&#128212;', '&#128210;', '&#128240;', '&#128278;', '&#127963;️'];
            for (let i = 0; i &lt; total; i++) {
                const col = i % cols, row = Math.floor(i / cols);
                let x = 60 + spacingX * (col + 1) + (Math.random() - 0.5) * 30;
                let y = baseY + spacingY * row + (Math.random() - 0.5) * 20;
                x = Math.min(Math.max(x, size+20), W - size - 10);
                y = Math.min(Math.max(y, size+20), H - size - 80);
                const vx = (Math.random() - 0.5) * 0.6, vy = (Math.random() - 0.5) * 0.6;
                targets.push({
                    id: i, x, y, size,
                    vx, vy,
                    icon: icons[i % icons.length],
                    label: questionsForLevel[i]?.options[0] || '?',
                    fullText: questionsForLevel[i]?.options[0] || '?',
                    answered: false,
                    optionIndex: 0
                });
            }
        }

        function showCurrentQuestion() {
            if (!questionsForLevel.length || currentQuestionIndex &gt;= questionsForLevel.length) {
                levelCompleted = true;
                if (currentLevel + 1 &lt; LEVELS) { currentLevel++; loadLevel(currentLevel); updateUI(); }
                else { endGame(); }
                return;
            }
            const qData = questionsForLevel[currentQuestionIndex];
            if (!qData) return;
            qNumberDisplay.textContent = `${currentQuestionIndex + 1}.`;
            qTextDisplay.textContent = qData.q;
            targets.forEach((t, idx) =&gt; {
                const optIdx = idx % qData.options.length;
                t.optionIndex = optIdx;
                t.fullText = qData.options[optIdx] || '?';
                t.label = t.fullText;
                t.answered = false;
            });
        }

        function shootArrow(targetX, targetY) {
            if (!gameActive || levelCompleted) return;
            if (arrow.active || arrowCooldown &gt; 0) return;
            const dx = targetX - archer.x, dy = targetY - archer.y;
            if (Math.sqrt(dx*dx + dy*dy) &lt; 30) return;
            arrow.active = true;
            arrow.x = archer.x + 20; arrow.y = archer.y - 10;
            arrow.targetX = targetX; arrow.targetY = targetY;
            arrow.homing = true; arrow.speed = 10;
            const angle = Math.atan2(dy, dx);
            arrow.vx = Math.cos(angle) * arrow.speed;
            arrow.vy = Math.sin(angle) * arrow.speed;
            arrow.angle = angle;
            arrowCooldown = 12;
        }

        function updateArrow() {
            if (!arrow.active) return;
            if (arrow.homing) {
                const dx = arrow.targetX - arrow.x, dy = arrow.targetY - arrow.y;
                const dist = Math.sqrt(dx*dx + dy*dy);
                if (dist &gt; 5) {
                    const targetAngle = Math.atan2(dy, dx);
                    let angleDiff = targetAngle - arrow.angle;
                    while (angleDiff &gt; Math.PI) angleDiff -= 2*Math.PI;
                    while (angleDiff &lt; -Math.PI) angleDiff += 2*Math.PI;
                    arrow.angle += angleDiff * 0.1;
                    arrow.vx = Math.cos(arrow.angle) * arrow.speed;
                    arrow.vy = Math.sin(arrow.angle) * arrow.speed;
                }
            }
            arrow.x += arrow.vx; arrow.y += arrow.vy;
            for (let t of targets) {
                if (t.answered) continue;
                const dx = arrow.x - t.x, dy = arrow.y - t.y;
                if (dx*dx + dy*dy &lt; (t.size + 8) * (t.size + 8)) {
                    arrow.active = false;
                    t.answered = true;
                    totalAttempts++;
                    const qData = questionsForLevel[currentQuestionIndex];
                    const selectedOptIdx = t.optionIndex % qData.options.length;
                    const isCorrect = (selectedOptIdx === qData.correct);
                    if (isCorrect) {
                        const scorePerQuestion = MAX_SCORE / (LEVELS * QUESTIONS_PER_LEVEL);
                        score = Math.min(MAX_SCORE, score + scorePerQuestion);
                        correctAttempts++;
                        spawnExplosion(t.x, t.y, '#00ffaa', 25);
                    } else {
                        spawnExplosion(t.x, t.y, '#ff4444', 18);
                    }
                    currentQuestionIndex++;
                    if (currentQuestionIndex &gt;= questionsForLevel.length) {
                        if (currentLevel + 1 &lt; LEVELS) showLevelCongrats();
                        else { endGame(); }
                    } else showCurrentQuestion();
                    updateUI();
                    return;
                }
            }
            if (arrow.x &gt; W || arrow.x &lt; 0 || arrow.y &gt; H || arrow.y &lt; 0) arrow.active = false;
        }

        function spawnExplosion(x, y, color, count) {
            for (let i=0; i&lt;count; i++) {
                const angle = Math.random() * 2 * Math.PI, speed = Math.random() * 4 + 1;
                particles.push({ x, y, vx: Math.cos(angle)*speed, vy: Math.sin(angle)*speed, life: 1, decay: Math.random()*0.025+0.015, size: Math.random()*5+2, color });
            }
        }

        function showLevelCongrats() {
            qNumberDisplay.textContent = '⚡';
            qTextDisplay.textContent = `Level ${currentLevel+1} Selesai! Skor: ${Math.round(score)} / ${MAX_SCORE}`;
            for (let i=0; i&lt;25; i++) spawnExplosion(Math.random()*W, Math.random()*H, '#00ddff', 6);
            setTimeout(() =&gt; { if (currentLevel + 1 &lt; LEVELS) { currentLevel++; loadLevel(currentLevel); updateUI(); } else endGame(); }, 1200);
        }

        function getRank(scr) {
            const pct = (scr/MAX_SCORE)*100;
            if (pct &gt;= 90) return "Master Bahasa Indonesia";
            else if (pct &gt;= 75) return "Expert Bahasa Indonesia";
            else if (pct &gt;= 60) return "Pro Bahasa Indonesia";
            else if (pct &gt;= 40) return "Learner Bahasa Indonesia";
            else return "Perlu Belajar Lagi";
        }

        function getMessage(scr) {
            const pct = (scr/MAX_SCORE)*100;
            if (pct &gt;= 90) return "Luar biasa! Anda Master Bahasa Indonesia sejati!";
            else if (pct &gt;= 75) return "Hebat! Pemahaman Bahasa Indonesia Anda solid!";
            else if (pct &gt;= 60) return "Bagus! Terus asah kemampuan literasi Anda!";
            else if (pct &gt;= 40) return "Mulai konsisten, raih predikat lebih tinggi!";
            else return "Perlu belajar lagi, kuasai dasar-dasar Bahasa Indonesia!";
        }

        function endGame() {
            gameActive = false;
            if (timerInterval) { clearInterval(timerInterval); timerInterval = null; }
            timerRunning = false;
            
            finalScore = Math.round(score);
            finalRank = getRank(finalScore);
            finalMessage = getMessage(finalScore);
            finalAccuracy = totalAttempts &gt; 0 ? Math.round((correctAttempts / totalAttempts) * 100) : 0;
            
            congratsOverlay.classList.add('show');
            finalScoreSpan.textContent = finalScore;
            rankDisplay.textContent = finalRank;
            personalMessage.textContent = finalMessage;
            userNameDisplay.textContent = userName;
            levelCompleteDisplay.textContent = `Level: ${LEVELS}/${LEVELS}`;
            accuracyDisplay.textContent = `Akurasi: ${finalAccuracy}%`;
            
            leaderboardData.push({ name: userName, score: finalScore });
            saveLeaderboard();
            isCelebrating = true;
            for (let i=0; i&lt;80; i++) setTimeout(() =&gt; spawnFirework(Math.random()*W, Math.random()*H*0.7 + 50), i*65);
            for (let i=0; i&lt;45; i++) setTimeout(() =&gt; spawnFirework(Math.random()*W, Math.random()*H*0.5 + 30), 3800 + i*85);
            setTimeout(() =&gt; speakScoreboard(finalScore, finalRank, finalMessage, finalAccuracy), 1600);
        }

        function spawnFirework(x, y) {
            const colors = ['#ff4444','#ffdd44','#44ff44','#44ddff','#ff44ff','#ffffff','#ff8800','#00ffaa','#a855f7'];
            for (let i=0; i&lt;55; i++) {
                const angle = Math.random()*2*Math.PI, speed = Math.random()*7+2, color = colors[Math.floor(Math.random()*colors.length)];
                fireworks.push({ x, y, vx: Math.cos(angle)*speed, vy: Math.sin(angle)*speed-1, life:1, decay: Math.random()*0.015+0.006, size: Math.random()*5+2, color, isConfetti: false });
            }
            for (let i=0; i&lt;30; i++) {
                const angle = Math.random()*2*Math.PI, speed = Math.random()*4+1, color = colors[Math.floor(Math.random()*colors.length)];
                fireworks.push({ x, y, vx: Math.cos(angle)*speed+(Math.random()-0.5)*2, vy: Math.sin(angle)*speed-2.5, life:1, decay: Math.random()*0.01+0.004, size: Math.random()*9+4, color, isConfetti: true });
            }
        }

        function updateUI() {
            levelIndicator.textContent = `⚡ Level ${currentLevel+1}`;
            scoreIndicator.textContent = `⭐ ${Math.round(score)} / ${MAX_SCORE}`;
            playerNameDisplay.textContent = `&#128218; ${userName}`;
        }

        function startTimer() {
            if (timerRunning) return;
            timerRunning = true;
            timerInterval = setInterval(() =&gt; {
                timeRemaining--;
                updateTimerDisplay();
                if (timeRemaining &lt;= 0) {
                    clearInterval(timerInterval);
                    timerInterval = null;
                    timerRunning = false;
                    if (gameActive) { endGame(); }
                }
            }, 1000);
        }

        function updateTimerDisplay() {
            const mins = Math.floor(timeRemaining / 60);
            const secs = timeRemaining % 60;
            timerDisplay.textContent = `⏱️ ${String(mins).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;
            if (timeRemaining &lt; 300) {
                timerDisplay.style.color = '#ff4444';
                timerDisplay.style.borderColor = '#ff4444';
            } else {
                timerDisplay.style.color = '#ff6b6b';
                timerDisplay.style.borderColor = '#ff4444';
            }
        }

        function drawArcher() {
            const ax = archer.x, ay = archer.y;
            ctx.shadowBlur = 20; ctx.shadowColor = '#00aaff66';
            ctx.fillStyle = '#1a3a5a'; ctx.fillRect(ax-8, ay+10, 6, 14); ctx.fillRect(ax+2, ay+10, 6, 14);
            ctx.fillStyle = '#2a5a7a'; ctx.beginPath(); ctx.ellipse(ax, ay-4, 16, 22, 0, 0, Math.PI*2); ctx.fill();
            ctx.fillStyle = '#f0d8b0'; ctx.beginPath(); ctx.arc(ax, ay-28, 14, 0, Math.PI*2); ctx.fill();
            ctx.fillStyle = '#4a3a2a'; ctx.beginPath(); ctx.arc(ax, ay-34, 14, Math.PI, 2*Math.PI); ctx.fill();
            const bowAngle = Math.atan2(mouseY - ay, mouseX - ax);
            const bowLen = 38;
            ctx.strokeStyle = '#c8a060'; ctx.lineWidth = 3; ctx.shadowBlur = 15; ctx.shadowColor = '#ffdd44aa';
            ctx.beginPath(); ctx.arc(ax + 16, ay - 4, bowLen, bowAngle - 0.7, bowAngle + 0.7); ctx.stroke();
            ctx.strokeStyle = '#aaaacc'; ctx.lineWidth = 1.5;
            const e1 = bowAngle - 0.7, e2 = bowAngle + 0.7;
            const ex1 = ax+16+Math.cos(e1)*bowLen, ey1 = ay-4+Math.sin(e1)*bowLen;
            const ex2 = ax+16+Math.cos(e2)*bowLen, ey2 = ay-4+Math.sin(e2)*bowLen;
            ctx.beginPath(); ctx.moveTo(ex1, ey1); ctx.lineTo(ax+16+Math.cos(bowAngle)*10, ay-4+Math.sin(bowAngle)*10); ctx.lineTo(ex2, ey2); ctx.stroke();
            ctx.shadowBlur = 0;
            if (arrow.active) {
                ctx.save(); ctx.translate(arrow.x, arrow.y); ctx.rotate(arrow.angle);
                ctx.shadowBlur = 20; ctx.shadowColor = '#00ffaa88';
                ctx.strokeStyle = '#ddaa88'; ctx.lineWidth = 2.5; ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(25,0); ctx.stroke();
                ctx.fillStyle = '#ffdd44'; ctx.shadowColor = '#ffdd44aa'; ctx.beginPath(); ctx.moveTo(28,0); ctx.lineTo(20,-5); ctx.lineTo(20,5); ctx.closePath(); ctx.fill();
                ctx.fillStyle = '#ff6666'; ctx.shadowColor = '#ff666688'; ctx.beginPath(); ctx.moveTo(-2,0); ctx.lineTo(-8,-6); ctx.lineTo(-8,6); ctx.closePath(); ctx.fill();
                ctx.restore(); ctx.shadowBlur = 0;
            }
        }

        function draw() {
            ctx.clearRect(0, 0, W, H);
            ctx.fillStyle = 'rgba(0, 10, 30, 0.3)'; ctx.fillRect(0, 0, W, H);
            ctx.strokeStyle = '#00aaff20'; ctx.lineWidth = 0.5;
            for (let i=0; i&lt;W; i+=30) { ctx.beginPath(); ctx.moveTo(i,0); ctx.lineTo(i,H); ctx.stroke(); }
            for (let i=0; i&lt;H; i+=30) { ctx.beginPath(); ctx.moveTo(0,i); ctx.lineTo(W,i); ctx.stroke(); }
            ctx.strokeStyle = '#00d4ff15'; ctx.lineWidth = 1;
            for (let i=0; i&lt;W; i+=80) { ctx.beginPath(); ctx.moveTo(i,0); ctx.lineTo(i+40,H); ctx.stroke(); }
            for (let i=0; i&lt;30; i++) {
                ctx.fillStyle = `rgba(0, 180, 255, ${Math.random()*0.15+0.03})`;
                ctx.font = '12px monospace'; ctx.fillText(Math.random()&gt;0.5?'1':'0', Math.random()*W, Math.random()*H);
            }
            ctx.fillStyle = '#00aaff10'; ctx.font = '28px sans-serif';
            ctx.fillText('&#128218;', 20, 40); ctx.fillText('&#128214;', W-50, 50); ctx.fillText('&#127963;️', W-70, H-30); ctx.fillText('&#128213;', 30, H-20);

            targets.forEach(t =&gt; {
                if (t.answered) return;
                ctx.shadowColor = '#00aaffaa'; ctx.shadowBlur = 30;
                const grad = ctx.createRadialGradient(t.x-5, t.y-5, 2, t.x, t.y, t.size);
                grad.addColorStop(0, '#80d4ff'); grad.addColorStop(0.5, '#0088ff'); grad.addColorStop(1, '#1a0066');
                ctx.beginPath(); ctx.arc(t.x, t.y, t.size, 0, 2*Math.PI);
                ctx.fillStyle = grad; ctx.fill();
                ctx.shadowBlur = 0;
                ctx.strokeStyle = '#80d4ff'; ctx.lineWidth = 2.5; ctx.shadowBlur = 15; ctx.shadowColor = '#00aaff';
                ctx.stroke(); ctx.shadowBlur = 0;
                
                ctx.font = `${t.size * 0.38}px 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', sans-serif`;
                ctx.textAlign = 'center'; ctx.textBaseline = 'middle';
                ctx.fillStyle = '#ffffff'; ctx.shadowBlur = 8; ctx.shadowColor = '#0044ff';
                ctx.fillText(t.icon, t.x, t.y - 14);
                ctx.shadowBlur = 0;
                
                ctx.fillStyle = '#ffffff'; 
                const fontSize = Math.max(14, t.size * 0.34);
                ctx.font = `bold ${fontSize}px 'Segoe UI', Arial, sans-serif`;
                ctx.textAlign = 'center'; ctx.textBaseline = 'bottom';
                let displayText = t.fullText;
                if (displayText.length &gt; 14) displayText = displayText.substring(0, 13) + '…';
                
                const metrics = ctx.measureText(displayText);
                const tw = metrics.width;
                const th = fontSize * 1.5;
                const tx = t.x - tw/2 - 8;
                const ty = t.y + t.size - 14 - th;
                
                ctx.shadowBlur = 0;
                const r = 6;
                ctx.beginPath();
                ctx.moveTo(tx + r, ty);
                ctx.lineTo(tx + tw + 16 - r, ty);
                ctx.quadraticCurveTo(tx + tw + 16, ty, tx + tw + 16, ty + r);
                ctx.lineTo(tx + tw + 16, ty + th + 6 - r);
                ctx.quadraticCurveTo(tx + tw + 16, ty + th + 6, tx + tw + 16 - r, ty + th + 6);
                ctx.lineTo(tx + r, ty + th + 6);
                ctx.quadraticCurveTo(tx, ty + th + 6, tx, ty + th + 6 - r);
                ctx.lineTo(tx, ty + r);
                ctx.quadraticCurveTo(tx, ty, tx + r, ty);
                ctx.closePath();
                ctx.fillStyle = 'rgba(0, 10, 30, 0.85)';
                ctx.fill();
                
                ctx.fillStyle = '#ffffff';
                ctx.shadowBlur = 4;
                ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
                ctx.textAlign = 'center'; ctx.textBaseline = 'bottom';
                ctx.fillText(displayText, t.x, t.y + t.size - 6);
                ctx.shadowBlur = 0;
                
                t.x += t.vx; t.y += t.vy;
                if (t.x &lt; t.size + 20 || t.x &gt; W - t.size - 10) t.vx *= -1;
                if (t.y &lt; t.size + 20 || t.y &gt; H - t.size - 80) t.vy *= -1;
                t.x = Math.min(Math.max(t.x, t.size+20), W - t.size - 10);
                t.y = Math.min(Math.max(t.y, t.size+20), H - t.size - 80);
            });

            if (arrow.active) updateArrow();
            if (arrowCooldown &gt; 0) arrowCooldown--;
            if (gameActive) {
                const targetX = Math.min(Math.max(mouseX, 30), W - 30);
                archer.x += (targetX - archer.x) * 0.08;
                archer.y = H - 70;
            }
            drawArcher();

            for (let i=particles.length-1; i&gt;=0; i--) {
                const p = particles[i];
                p.x += p.vx; p.y += p.vy; p.life -= p.decay; p.vy += 0.05;
                if (p.life &lt;= 0) { particles.splice(i,1); continue; }
                ctx.globalAlpha = p.life; ctx.fillStyle = p.color; ctx.shadowBlur = 10; ctx.shadowColor = p.color;
                ctx.beginPath(); ctx.arc(p.x, p.y, p.size * p.life, 0, 2*Math.PI); ctx.fill();
                ctx.shadowBlur = 0;
            }
            ctx.globalAlpha = 1;

            for (let i=fireworks.length-1; i&gt;=0; i--) {
                const f = fireworks[i];
                f.x += f.vx; f.y += f.vy; f.vy += 0.04; f.life -= f.decay;
                if (f.life &lt;= 0) { fireworks.splice(i,1); continue; }
                ctx.globalAlpha = f.life; ctx.fillStyle = f.color; ctx.shadowBlur = 18; ctx.shadowColor = f.color;
                if (f.isConfetti) { ctx.save(); ctx.translate(f.x, f.y); ctx.rotate(f.life*12); ctx.fillRect(-f.size/2, -f.size/2, f.size*f.life, f.size*f.life*0.5); ctx.restore(); }
                else { ctx.beginPath(); ctx.arc(f.x, f.y, f.size * f.life, 0, 2*Math.PI); ctx.fill(); }
                ctx.shadowBlur = 0;
            }
            ctx.globalAlpha = 1;
        }

        function gameLoop() { draw(); animationFrame = requestAnimationFrame(gameLoop); }

        canvasEl.addEventListener('click', (e) =&gt; {
            const rect = canvasEl.getBoundingClientRect();
            const scaleX = canvas.width / rect.width, scaleY = canvas.height / rect.height;
            shootArrow((e.clientX - rect.left)*scaleX, (e.clientY - rect.top)*scaleY);
        });
        canvasEl.addEventListener('touchstart', (e) =&gt; {
            e.preventDefault(); const rect = canvasEl.getBoundingClientRect();
            const touch = e.touches[0]; const scaleX = canvas.width/rect.width, scaleY = canvas.height/rect.height;
            shootArrow((touch.clientX - rect.left)*scaleX, (touch.clientY - rect.top)*scaleY);
        }, { passive: false });
        canvasEl.addEventListener('mousemove', (e) =&gt; {
            const rect = canvasEl.getBoundingClientRect();
            mouseX = (e.clientX - rect.left) * (canvas.width/rect.width);
            mouseY = (e.clientY - rect.top) * (canvas.height/rect.height);
        });
        speechBtn.addEventListener('click', () =&gt; speakScoreboard(finalScore, finalRank, finalMessage, finalAccuracy));

        function startGame() {
            const nameInput = document.getElementById('playerNameInput');
            userName = nameInput.value.trim() || "User";
            playerNameDisplay.textContent = `&#128218; ${userName}`;
            entryScreen.style.display = 'none';
            congratsOverlay.classList.remove('show');
            
            score = 0; totalAttempts = 0; correctAttempts = 0; currentLevel = 0;
            timeRemaining = TOTAL_TIME;
            updateTimerDisplay();
            timerDisplay.style.color = '#ff6b6b';
            timerDisplay.style.borderColor = '#ff4444';
            
            gameActive = true; isCelebrating = false; particles = []; fireworks = []; arrow.active = false;
            if (speechSynth.speaking) speechSynth.cancel();
            
            startTimer();
            loadLevel(0); updateUI();
            if (animationFrame) cancelAnimationFrame(animationFrame);
            gameLoop();
        }

        document.getElementById('startGameBtn').addEventListener('click', startGame);
        document.getElementById('restartFromCongratsBtn').addEventListener('click', () =&gt; { 
            congratsOverlay.classList.remove('show'); 
            if (timerInterval) { clearInterval(timerInterval); timerInterval = null; }
            timerRunning = false;
            startGame(); 
        });
        loadLeaderboard(); loadLevel(0); updateUI();
        qNumberDisplay.textContent = '&#128218;'; qTextDisplay.textContent = 'Masukkan nama &amp; tekan MULAI';
        updateTimerDisplay();
        gameLoop();
        window.addEventListener('resize', resizeCanvas);
    })();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/07/asesmen-awal-bahasa-indonesia-xi-smk.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-413804888584619253</guid><pubDate>Thu, 23 Jul 2026 06:21:44 +0000</pubDate><atom:updated>2026-07-24T07:47:57.023+07:00</atom:updated><title>Evaluasi Informasi dalam Teks Prosedur</title><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&amp;family=Source+Sans+3:wght@400;500;600;700&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;display=swap');
.epb{
  --blueprint:#0F2A3D;
  --blueprint-deep:#0A1E2C;
  --panel:#4A2E12;
  --paper:#F3F0E6;
  --ink:#132029;
  --amber:#F5A623;
  --amber-deep:#C97F12;
  --mint:#6EC6CA;
  --line:rgba(234,242,245,0.16);
  --off-white:#EAF2F5;
  --muted:#9FB4C2;
}
.epb *{box-sizing:border-box;}
.epb{scroll-behavior:smooth; background:#0A1F2E;}
.epb{
  margin:0;
  position:relative;
  overflow:hidden;
  background:var(--blueprint);
  color:var(--off-white);
  font-family:'Source Sans 3',sans-serif;
  line-height:1.65;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 34px 34px;
}
.epb h1, .epb h2, .epb h3, .epb h4{font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:0.02em; margin:0 0 0.5em;}
.epb .mono{font-family:'IBM Plex Mono',monospace;}
.epb a{color:var(--amber);}
.epb .crop{position:absolute; width:22px; height:22px; z-index:5; opacity:.55; pointer-events:none;}
.epb .crop::before, .epb .crop::after{content:"";position:absolute;background:var(--mint);}
.epb .crop::before{width:100%;height:1px;top:50%;left:0;}
.epb .crop::after{width:1px;height:100%;left:50%;top:0;}
.epb .crop.tl{top:14px;left:14px;}
.epb .crop.tr{top:14px;right:14px;}
.epb .crop.bl{bottom:14px;left:14px;}
.epb .crop.br{bottom:14px;right:14px;}
.epb header.cover{
  position:relative;
  padding:40px 24px 36px;
  border-bottom:1px solid var(--line);
  overflow:hidden;
}
.epb .doc-code{font-family:'IBM Plex Mono',monospace; color:var(--amber); letter-spacing:0.15em; font-size:0.78rem; text-transform:uppercase; margin-bottom:18px; display:flex; gap:10px; align-items:center;}
.epb .doc-code::before{content:"◆"; color:var(--amber);}
.epb .cover h1{font-size:clamp(1.6rem,7vw,2.5rem); color:var(--off-white); max-width:16ch; line-height:1.05;}
.epb .cover .subtitle{color:var(--muted); font-size:1.05rem; max-width:60ch; margin-top:14px;}
.epb .meta-strip{
  margin-top:38px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border-top:1px dashed var(--line); border-bottom:1px dashed var(--line);
}
.epb .meta-strip div{padding:14px 16px; border-right:1px dashed var(--line);}
.epb .meta-strip div:last-child{border-right:none;}
.epb .meta-strip .k{font-family:'IBM Plex Mono',monospace; font-size:0.68rem; color:var(--amber); text-transform:uppercase; letter-spacing:0.1em;}
.epb .meta-strip .v{font-size:0.98rem; color:var(--off-white); margin-top:4px; font-weight:600;}
.epb .stamp{
  position:absolute; top:40px; right:20px; width:104px; height:104px;
  border:2.5px solid var(--amber); border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  transform:rotate(-11deg);
  color:var(--amber); font-family:'IBM Plex Mono',monospace;
  text-align:center; font-size:0.62rem; letter-spacing:0.08em; text-transform:uppercase;
  opacity:0.9;
}
.epb .stamp .ring{position:absolute; inset:8px; border:1px dashed var(--amber); border-radius:50%;}
.epb .stamp b{display:block; font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:0.06em; margin-top:4px;}

@media (max-width:760px){.epb .stamp{display:none;}
.epb }


.epb main{max-width:920px; margin:0 auto; padding:0 20px 60px;}
.epb .section{padding-top:64px;}
.epb .eyebrow{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase; margin-bottom:10px; display:flex; align-items:center; gap:10px;}
.epb .eyebrow::after{content:""; flex:1; height:1px; background:var(--line);}
.epb h2.section-title{font-size:1.7rem; color:var(--off-white);}
.epb p{color:#DDE7EC;}
.epb .lead{color:var(--muted); font-size:1.02rem; max-width:72ch;}
.epb .panel{
  background:var(--panel); border:1px solid var(--line); border-radius:2px;
  padding:26px 28px; margin:22px 0;
}
.epb .panel.tp{border-left:4px solid var(--mint);}
.epb .panel.warn{border-left:4px solid var(--amber);}
.epb .tp-box{display:grid; gap:14px; margin-top:18px;}
.epb .tp-item{display:flex; gap:14px; align-items:flex-start;}
.epb .tp-item .idx{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; min-width:34px;}
.epb .flow{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:20px;}
.epb .flow .step{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px; position:relative;}
.epb .flow .step .tag{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;}
.epb .flow .step h4{font-size:1rem; margin-top:8px; color:var(--off-white);}
.epb .flow .step .time{position:absolute; top:16px; right:16px; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; color:var(--amber);}
.epb .grid-3{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-top:16px;}
.epb .card{background:var(--blueprint-deep); border:1px solid var(--line); padding:18px;}
.epb .card h4{color:var(--amber); font-size:0.95rem;}
.epb .criteria{display:grid; gap:16px; margin-top:20px;}
.epb .crit{
  background:var(--blueprint-deep); border:1px solid var(--line);
  display:grid; grid-template-columns:64px 1fr; gap:0;
}
.epb .crit .num{
  background:var(--amber); color:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace;
  font-weight:700; display:flex; align-items:center; justify-content:center; font-size:1.05rem;
}
.epb .crit .body{padding:18px 20px;}
.epb .crit h4{color:var(--off-white); font-size:1.02rem; margin-bottom:6px;}
.epb .crit .q{margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); font-family:'IBM Plex Mono',monospace; font-size:0.86rem; color:var(--amber);}
.epb .timeline{margin-top:24px; position:relative; padding-left:34px;}
.epb .timeline::before{content:""; position:absolute; left:11px; top:6px; bottom:6px; width:2px; background:var(--line);}
.epb .tl-item{position:relative; padding-bottom:26px;}
.epb .tl-item:last-child{padding-bottom:0;}
.epb .tl-item::before{content:""; position:absolute; left:-34px; top:2px; width:22px; height:22px; border-radius:50%; background:var(--blueprint); border:2px solid var(--amber);}
.epb .tl-item h4{color:var(--off-white); font-size:1rem; margin-bottom:4px;}
.epb .doc-sample{
  background:var(--paper); color:var(--ink); border-radius:2px; padding:0; margin-top:22px;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .doc-sample .doc-head{background:var(--ink); color:var(--paper); padding:12px 22px; font-family:'IBM Plex Mono',monospace; font-size:0.75rem; letter-spacing:0.1em; text-transform:uppercase; display:flex; justify-content:space-between;}
.epb .doc-sample .doc-body{padding:26px 28px 30px;}
.epb .doc-sample h3{font-family:'Oswald',sans-serif; color:var(--ink); font-size:1.25rem; text-transform:none; letter-spacing:0;}
.epb .doc-sample ol{padding-left:22px;}
.epb .doc-sample li{margin-bottom:9px;}
.epb .flag{
  display:inline-block; font-family:'IBM Plex Mono',monospace; font-size:0.7rem; font-weight:600;
  background:#D94E2A; color:#fff; padding:1px 7px; border-radius:2px; margin-left:6px; vertical-align:middle;
}
.epb .doc-sample .note-margin{margin-top:6px; font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:#8A3A1F; padding-left:8px; border-left:2px solid #D94E2A;}
.epb .legend{display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:16px;}
.epb .legend span{font-family:'IBM Plex Mono',monospace; font-size:0.78rem; color:var(--muted); display:flex; align-items:center; gap:8px;}
.epb .legend .dot{width:10px; height:10px; border-radius:50%; display:inline-block;}
.epb table{width:100%; border-collapse:collapse; margin-top:18px; font-size:0.94rem;}
.epb th, .epb td{border:1px solid var(--line); padding:10px 12px; text-align:left; vertical-align:top;}
.epb th{background:var(--blueprint-deep); font-family:'IBM Plex Mono',monospace; font-size:0.75rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--amber);}
.epb .summary-box{
  border:1px solid var(--amber); background:linear-gradient(180deg, rgba(245,166,35,0.08), transparent);
  padding:24px 26px; margin-top:24px;
}
.epb .summary-box ul{margin:10px 0 0; padding-left:20px;}
.epb .summary-box li{margin-bottom:8px;}
.epb .task-header{
  background:var(--amber); color:var(--blueprint-deep); padding:22px 26px; margin-top:20px;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
}
.epb .task-header h2{color:var(--blueprint-deep); font-size:1.4rem; margin:0;}
.epb .task-header .badge{font-family:'IBM Plex Mono',monospace; font-size:0.8rem; background:var(--blueprint-deep); color:var(--amber); padding:6px 12px; border-radius:2px;}
.epb .steps-num{counter-reset:step; margin-top:18px; list-style:none; padding:0;}
.epb .steps-num li{counter-increment:step; position:relative; padding-left:44px; margin-bottom:16px;}
.epb .steps-num li::before{content:counter(step,decimal-leading-zero); position:absolute; left:0; top:0; font-family:'IBM Plex Mono',monospace; color:var(--amber); font-weight:600; font-size:0.95rem; border:1px solid var(--amber); width:30px; height:26px; display:flex; align-items:center; justify-content:center;}
.epb .rubric-scale{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px;}
.epb .rubric-scale div{background:var(--blueprint-deep); border:1px solid var(--line); padding:12px; text-align:center;}
.epb .rubric-scale .n{font-family:'IBM Plex Mono',monospace; color:var(--amber); font-size:1.3rem; font-weight:700;}
.epb .rubric-scale .l{font-size:0.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:0.05em;}
.epb .notebook{
  background:repeating-linear-gradient(var(--paper), var(--paper) 33px, #D8D3C2 34px);
  color:var(--ink); border-radius:2px; padding:28px 30px; margin-top:20px; position:relative;
  box-shadow:0 20px 45px rgba(0,0,0,0.35);
}
.epb .notebook::before{content:""; position:absolute; left:46px; top:0; bottom:0; width:1.5px; background:#C0453A; opacity:0.5;}
.epb .notebook .content{padding-left:24px;}
.epb .notebook h3{color:var(--ink); font-family:'Oswald',sans-serif; letter-spacing:0.02em; margin-bottom:10px;}
.epb .notebook ul{padding-left:20px;}
.epb footer{border-top:1px solid var(--line); padding:24px 20px 40px; color:var(--muted); font-size:0.86rem;}
.epb footer .doc-code{margin-bottom:10px;}
.epb .divider-dash{border:none; border-top:1px dashed var(--line); margin:44px 0 0;}
.epb::selection{background:var(--amber); color:var(--blueprint-deep);}

&lt;/style&gt;
&lt;div class="epb"&gt;
&lt;div class="crop tl"&gt;&lt;/div&gt;&lt;div class="crop tr"&gt;&lt;/div&gt;&lt;div class="crop bl"&gt;&lt;/div&gt;&lt;div class="crop br"&gt;&lt;/div&gt;

&lt;header class="cover"&gt;
  &lt;div class="stamp"&gt;&lt;div class="ring"&gt;&lt;/div&gt;&lt;span&gt;Modul Ajar&lt;b&gt;Terverifikasi&lt;/b&gt;Fase F&lt;/span&gt;&lt;/div&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-EVAL — 3 JP · 1 Pertemuan&lt;/div&gt;
  &lt;h1&gt;Evaluasi Informasi dalam Teks Prosedur&lt;/h1&gt;
  &lt;p class="subtitle"&gt;Materi Bahasa Indonesia Kelas XI SMK/MAK — melatih murid membaca teks prosedur secara kritis: memeriksa keakuratan, kelengkapan, kelogisan urutan, dan kejelasan bahasa sebelum informasi tersebut dipercaya dan digunakan.&lt;/p&gt;

  &lt;div class="meta-strip"&gt;
    &lt;div&gt;&lt;div class="k"&gt;Mata Pelajaran&lt;/div&gt;&lt;div class="v"&gt;Bahasa Indonesia&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Jenjang&lt;/div&gt;&lt;div class="v"&gt;SMK/MAK — Kelas XI&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Elemen&lt;/div&gt;&lt;div class="v"&gt;Membaca &amp;amp; Memirsa&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;3 JP (3 × 45 menit)&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;main&gt;

  &lt;!-- ============ CP &amp; TP ============ --&gt;
  &lt;section class="section" id="tujuan"&gt;
    &lt;div class="eyebrow"&gt;01 — Identitas Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Capaian &amp;amp; Tujuan Pembelajaran&lt;/h2&gt;

    &lt;div class="panel tp"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Capaian Pembelajaran (Elemen Membaca–Memirsa)&lt;/div&gt;
      &lt;p&gt;Murid mampu mengevaluasi informasi berupa gagasan, pikiran, pandangan, arahan, atau pesan dari berbagai jenis teks, termasuk teks prosedur, untuk menemukan makna yang tersurat dan tersirat, serta menilai akurasi dan kualitas informasi dari teks tersebut secara kritis.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="panel"&gt;
      &lt;div class="eyebrow" style="margin-bottom:6px;"&gt;Tujuan Pembelajaran&lt;/div&gt;
      &lt;p style="font-size:1.05rem; color:var(--off-white); font-weight:600;"&gt;Murid mampu mengevaluasi informasi yang disajikan dalam teks prosedur secara kritis dan logis.&lt;/p&gt;

      &lt;div class="tp-box"&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.1&lt;/span&gt;&lt;p&gt;Murid dapat menjelaskan kembali struktur dan ciri kebahasaan teks prosedur.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.2&lt;/span&gt;&lt;p&gt;Murid dapat mengidentifikasi kriteria yang digunakan untuk menilai kualitas informasi dalam teks prosedur (keakuratan, kelengkapan, kelogisan urutan, kejelasan bahasa, dan kesesuaian tujuan).&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.3&lt;/span&gt;&lt;p&gt;Murid dapat menemukan kekeliruan, kejanggalan, atau bagian yang kurang logis pada sebuah teks prosedur berdasarkan kriteria evaluasi.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="tp-item"&gt;&lt;span class="idx mono"&gt;TP.4&lt;/span&gt;&lt;p&gt;Murid dapat menyusun simpulan dan rekomendasi perbaikan atas hasil evaluasi teks prosedur secara tertulis.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="eyebrow" style="margin-top:26px; margin-bottom:6px;"&gt;8 Profil Lulusan yang Dikembangkan&lt;/div&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Penalaran Kritis&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menganalisis dan menilai keakuratan serta kelogisan informasi dalam teks prosedur.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kemandirian&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyelesaikan analisis dan menuliskan kesimpulan secara mandiri.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kolaborasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Bekerja sama dalam kelompok saat mengevaluasi teks prosedur.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Komunikasi&lt;/h4&gt;&lt;p style="font-size:0.9rem;"&gt;Menyampaikan hasil evaluasi dan rekomendasi perbaikan secara jelas.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI A: TEKS PROSEDUR ============ --&gt;
  &lt;section class="section" id="materi-a"&gt;
    &lt;div class="eyebrow"&gt;02 — Materi Inti A&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Mengingat Kembali Teks Prosedur&lt;/h2&gt;
    &lt;p class="lead"&gt;Sebelum mengevaluasi, murid perlu memahami kembali apa yang membentuk sebuah teks prosedur, agar tahu bagian mana yang perlu diperiksa.&lt;/p&gt;

    &lt;div class="panel"&gt;
      &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Teks prosedur&lt;/b&gt; adalah teks yang berisi langkah-langkah sistematis untuk melakukan atau membuat sesuatu, dengan tujuan agar pembaca dapat mencapai hasil tertentu jika mengikuti langkah tersebut dengan tepat. Dalam konteks SMK, teks prosedur sangat erat dengan praktik kejuruan — misalnya prosedur pengoperasian mesin, prosedur keselamatan kerja (K3), prosedur instalasi, atau prosedur perawatan alat.&lt;/p&gt;
    &lt;/div&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Struktur Teks Prosedur&lt;/h4&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;1. Tujuan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Pernyataan tentang hasil atau capaian yang ingin diperoleh dari prosedur tersebut.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;2. Alat &amp;amp; Bahan&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Daftar alat, bahan, atau syarat yang diperlukan sebelum langkah dimulai (tidak selalu ada, tergantung jenis prosedur).&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;3. Langkah-Langkah&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Urutan tindakan yang harus dilakukan, biasanya bersifat kronologis dan tidak dapat diacak.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;4. Penutup/Hasil&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Penegasan hasil akhir, catatan tambahan, atau peringatan keselamatan (jika ada).&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Ciri Kebahasaan&lt;/h4&gt;
    &lt;div class="grid-3"&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Kalimat imperatif&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kalimat perintah/larangan/anjuran, mis. "Pasang kabel dengan benar."&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Konjungsi temporal&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kata penghubung urutan waktu: kemudian, selanjutnya, setelah itu, lalu.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Verba tindakan &amp;amp; kata teknis&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Kata kerja aktif dan istilah khusus sesuai bidang keahlian.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="card"&gt;&lt;h4&gt;Keterangan alat/ukuran&lt;/h4&gt;&lt;p style="font-size:0.92rem;"&gt;Angka, satuan, dan spesifikasi yang harus tepat dan konsisten.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI B: KONSEP EVALUASI INFORMASI ============ --&gt;
  &lt;section class="section" id="materi-b"&gt;
    &lt;div class="eyebrow"&gt;03 — Materi Inti B&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Apa itu Evaluasi Informasi?&lt;/h2&gt;

    &lt;p&gt;&lt;b style="color:var(--off-white);"&gt;Mengevaluasi informasi&lt;/b&gt; berarti menilai apakah informasi yang disajikan dalam sebuah teks layak dipercaya, digunakan, dan diikuti — bukan sekadar memahami isinya. Membaca biasa berhenti pada "apa isi teksnya", sedangkan membaca kritis-evaluatif melangkah lebih jauh: "apakah informasi ini benar, lengkap, masuk akal, dan aman untuk diikuti?"&lt;/p&gt;

    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:30%;"&gt;Aspek&lt;/th&gt;&lt;th&gt;Membaca Biasa (Pemahaman)&lt;/th&gt;&lt;th&gt;Membaca Kritis (Evaluasi)&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Fokus&lt;/td&gt;&lt;td&gt;Mengetahui apa yang harus dilakukan&lt;/td&gt;&lt;td&gt;Menilai apakah langkah tersebut benar, lengkap, dan logis&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Sikap pembaca&lt;/td&gt;&lt;td&gt;Menerima informasi apa adanya&lt;/td&gt;&lt;td&gt;Mempertanyakan dan memeriksa informasi sebelum dipercaya&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Hasil&lt;/td&gt;&lt;td&gt;Paham urutan langkah&lt;/td&gt;&lt;td&gt;Dapat menemukan kekeliruan dan memberi rekomendasi perbaikan&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;div class="panel warn" style="margin-top:22px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Mengapa penting bagi murid SMK?&lt;/b&gt; Teks prosedur yang keliru atau tidak lengkap dalam konteks kejuruan bukan hanya membingungkan, tetapi dapat menyebabkan kegagalan kerja, kerusakan alat, bahkan kecelakaan kerja. Kemampuan mengevaluasi teks prosedur adalah bagian dari kesiapan kerja (job readiness).&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI C: KRITERIA EVALUASI ============ --&gt;
  &lt;section class="section" id="materi-c"&gt;
    &lt;div class="eyebrow"&gt;04 — Materi Inti C&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Kriteria Evaluasi Teks Prosedur&lt;/h2&gt;
    &lt;p class="lead"&gt;Gunakan enam kriteria berikut sebagai "alat ukur" ketika memeriksa sebuah teks prosedur.&lt;/p&gt;

    &lt;div class="criteria"&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;A&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Keakuratan Informasi&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Apakah data, istilah, ukuran, takaran, atau spesifikasi yang digunakan sudah tepat dan sesuai fakta/standar yang berlaku?&lt;/p&gt;
          &lt;div class="q"&gt;Pertanyaan panduan: Apakah angka dan satuan masuk akal? Apakah istilah teknis digunakan secara tepat?&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;B&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Kelengkapan Informasi&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Apakah seluruh alat/bahan dan langkah yang diperlukan untuk mencapai tujuan sudah disebutkan, tanpa ada bagian penting yang hilang?&lt;/p&gt;
          &lt;div class="q"&gt;Pertanyaan panduan: Jika langkah ini benar-benar diikuti, apakah tujuannya bisa tercapai? Adakah langkah yang "meloncat"?&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;C&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Kelogisan &amp;amp; Keruntutan Urutan&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Apakah langkah-langkah disusun dengan urutan yang logis (sebab sebelum akibat) dan tidak bertentangan satu sama lain?&lt;/p&gt;
          &lt;div class="q"&gt;Pertanyaan panduan: Apakah ada langkah yang seharusnya dilakukan lebih dulu tetapi diletakkan belakangan?&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;D&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Kejelasan &amp;amp; Keefektifan Bahasa&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Apakah kalimat mudah dipahami, tidak ambigu (bermakna ganda), dan menggunakan kalimat efektif?&lt;/p&gt;
          &lt;div class="q"&gt;Pertanyaan panduan: Apakah ada kalimat yang bisa ditafsirkan lebih dari satu cara oleh pembaca yang berbeda?&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;E&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Kesesuaian dengan Tujuan&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Apakah seluruh langkah benar-benar mengarah pada tujuan yang dinyatakan di awal teks, atau ada langkah yang tidak relevan?&lt;/p&gt;
          &lt;div class="q"&gt;Pertanyaan panduan: Apakah ada langkah yang tidak berkaitan dengan tujuan prosedur tersebut?&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="crit"&gt;
        &lt;div class="num mono"&gt;F&lt;/div&gt;
        &lt;div class="body"&gt;
          &lt;h4&gt;Keselamatan &amp;amp; Kelayakan Praktik&lt;/h4&gt;
          &lt;p style="margin:0;"&gt;Khusus untuk teks prosedur kejuruan: apakah aspek keselamatan kerja (K3) dan kelayakan alat sudah diperhatikan?&lt;/p&gt;
          &lt;div class="q"&gt;Pertanyaan panduan: Apakah ada risiko keselamatan yang tidak diperingatkan dalam teks?&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ MATERI D: LANGKAH EVALUASI ============ --&gt;
  &lt;section class="section" id="materi-d"&gt;
    &lt;div class="eyebrow"&gt;05 — Materi Inti D&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Langkah-Langkah Mengevaluasi Teks Prosedur&lt;/h2&gt;

    &lt;div class="timeline"&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;01 · Membaca Menyeluruh&lt;/h4&gt;&lt;p&gt;Baca teks prosedur dari awal hingga akhir untuk memahami tujuan dan gambaran umum langkahnya sebelum menilai bagian per bagian.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;02 · Mengidentifikasi Struktur&lt;/h4&gt;&lt;p&gt;Tandai bagian tujuan, alat/bahan, dan langkah-langkah. Struktur yang tidak lengkap sudah menjadi indikasi awal masalah.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;03 · Menguji dengan Kriteria&lt;/h4&gt;&lt;p&gt;Periksa teks menggunakan keenam kriteria (A–F) satu per satu. Catat bagian teks yang tidak memenuhi kriteria tertentu.&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;04 · Mencatat Temuan&lt;/h4&gt;&lt;p&gt;Tuliskan temuan secara spesifik: bagian/kalimat mana yang bermasalah dan mengapa, bukan sekadar "kurang jelas".&lt;/p&gt;&lt;/div&gt;
      &lt;div class="tl-item"&gt;&lt;h4 class="mono"&gt;05 · Menyimpulkan &amp;amp; Merekomendasikan&lt;/h4&gt;&lt;p&gt;Simpulkan apakah teks prosedur tersebut layak diikuti, dan berikan saran perbaikan konkret untuk bagian yang bermasalah.&lt;/p&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ CONTOH PENERAPAN ============ --&gt;
  &lt;section class="section" id="contoh"&gt;
    &lt;div class="eyebrow"&gt;06 — Pemodelan&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Contoh Penerapan: Menganalisis Teks Prosedur Bidang Otomotif Sepeda Motor&lt;/h2&gt;
    &lt;p class="lead"&gt;Guru membacakan dan membahas bersama contoh berikut sebagai model penerapan kriteria evaluasi. Bagian bertanda merah sengaja mengandung kejanggalan untuk dianalisis.&lt;/p&gt;

    &lt;div class="doc-sample"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Prosedur Contoh&lt;/span&gt;&lt;span&gt;Dokumen-01 · TBSM&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3&gt;Prosedur Mengganti Oli Mesin Sepeda Motor&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63;"&gt;&lt;i&gt;Tujuan: Mengganti oli mesin sepeda motor secara berkala agar performa dan usia mesin tetap terjaga.&lt;/i&gt;&lt;/p&gt;
        &lt;p style="margin:10px 0 4px; color:#4b5a63; font-size:0.92rem;"&gt;&lt;b&gt;Alat &amp;amp; bahan:&lt;/b&gt; kunci pas ring 17, wadah penampung oli bekas, oli mesin baru sesuai spesifikasi pabrikan, corong, lap bersih.&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;Panaskan mesin sepeda motor selama beberapa menit agar oli lebih mudah mengalir saat dibuang.&lt;/li&gt;
          &lt;li&gt;Matikan mesin, lalu siapkan wadah penampung tepat di bawah baut pembuangan oli.&lt;/li&gt;
          &lt;li&gt;Buka baut pembuangan oli menggunakan kunci pas ring 17, biarkan oli lama mengalir hingga habis.&lt;/li&gt;
          &lt;li&gt;Pasang kembali baut pembuangan oli setelah oli lama habis menetes.&lt;/li&gt;
          &lt;li&gt;Tuang oli mesin baru sebanyak 5 liter melalui lubang pengisian menggunakan corong.&lt;span class="flag"&gt;JANGGAL&lt;/span&gt;
            &lt;div class="note-margin"&gt;Kriteria A — tidak akurat: kapasitas oli mesin sepeda motor umumnya hanya sekitar 0,8–1,2 liter, bukan 5 liter. Angka ini tidak sesuai spesifikasi standar.&lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;Nyalakan mesin dan periksa kebocoran oli di sekitar baut pembuangan.&lt;/li&gt;
        &lt;/ol&gt;
        &lt;div class="note-margin" style="margin-top:14px;"&gt;Kriteria B — kurang lengkap: teks tidak menyebutkan langkah memeriksa ketinggian oli melalui kaca duga (oil level window) atau stik oli setelah pengisian, padahal langkah ini penting untuk memastikan takaran oli sudah tepat.&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="legend"&gt;
      &lt;span&gt;&lt;span class="dot" style="background:#D94E2A;"&gt;&lt;/span&gt;Bagian yang mengandung kejanggalan (ditandai untuk didiskusikan)&lt;/span&gt;
    &lt;/div&gt;

    &lt;div class="panel" style="margin-top:22px;"&gt;
      &lt;p style="margin:0;"&gt;&lt;b style="color:var(--off-white);"&gt;Simpulan model analisis:&lt;/b&gt; Teks prosedur di atas cukup logis dari segi urutan langkah (Kriteria C terpenuhi), tetapi tidak akurat pada takaran oli yang dituliskan (melanggar Kriteria A) dan kurang lengkap karena tidak ada langkah pengecekan ketinggian oli di akhir (melanggar Kriteria B). Rekomendasi: perbaiki angka takaran oli sesuai spesifikasi motor yang sebenarnya, dan tambahkan langkah memeriksa ketinggian oli melalui kaca duga sebelum menyalakan mesin.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN ============ --&gt;
  &lt;section class="section" id="rangkuman"&gt;
    &lt;div class="eyebrow"&gt;07 — Ringkasan Materi&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Poin-Poin Penting&lt;/h2&gt;
    &lt;div class="summary-box"&gt;
      &lt;ul&gt;
        &lt;li&gt;Mengevaluasi informasi dalam teks prosedur berarti menilai kelayakan teks tersebut untuk dipercaya dan diikuti, bukan sekadar memahami isinya.&lt;/li&gt;
        &lt;li&gt;Enam kriteria evaluasi: keakuratan, kelengkapan, kelogisan urutan, kejelasan bahasa, kesesuaian tujuan, dan keselamatan/kelayakan praktik.&lt;/li&gt;
        &lt;li&gt;Evaluasi dilakukan bertahap: membaca menyeluruh → mengidentifikasi struktur → menguji dengan kriteria → mencatat temuan → menyimpulkan dan merekomendasikan.&lt;/li&gt;
        &lt;li&gt;Kemampuan ini penting bagi murid SMK karena berkaitan langsung dengan keselamatan dan ketepatan kerja di bidang kejuruan.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ TUGAS KELOMPOK ============ --&gt;
  &lt;section class="section" id="tugas-kelompok"&gt;
    &lt;div class="eyebrow"&gt;08 — Lembar Kerja&lt;/div&gt;
    &lt;div class="task-header"&gt;
      &lt;h2&gt;Tugas Kelompok: Evaluasi Teks Prosedur Bidang Sepeda Motor&lt;/h2&gt;
      &lt;span class="badge"&gt;Durasi ± 60 menit&lt;/span&gt;
    &lt;/div&gt;

    &lt;p style="margin-top:18px;"&gt;&lt;b style="color:var(--off-white);"&gt;Tujuan tugas:&lt;/b&gt; Murid secara berkelompok mengevaluasi teks prosedur bidang Teknik Otomotif Sepeda Motor berikut menggunakan enam kriteria yang telah dipelajari, kemudian mempresentasikan hasil evaluasi dan rekomendasi perbaikannya.&lt;/p&gt;

    &lt;div class="doc-sample" style="margin-top:20px;"&gt;
      &lt;div class="doc-head"&gt;&lt;span&gt;Lampiran · Teks Prosedur untuk Dievaluasi Kelompok&lt;/span&gt;&lt;span&gt;Dokumen-02 · TBSM&lt;/span&gt;&lt;/div&gt;
      &lt;div class="doc-body"&gt;
        &lt;h3&gt;Prosedur Memeriksa dan Mengganti Busi Sepeda Motor&lt;/h3&gt;
        &lt;p style="margin-top:-4px; color:#4b5a63;"&gt;&lt;i&gt;Tujuan: Memeriksa kondisi busi dan menggantinya apabila sudah tidak layak pakai agar pembakaran mesin tetap optimal.&lt;/i&gt;&lt;/p&gt;
        &lt;p style="margin:10px 0 4px; color:#4b5a63; font-size:0.92rem;"&gt;&lt;b&gt;Alat &amp;amp; bahan:&lt;/b&gt; kunci busi, sikat kawat, feeler gauge (pengukur celah busi), busi baru sesuai spesifikasi motor.&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;Pastikan mesin sepeda motor dalam kondisi menyala saat akan membuka busi agar posisi piston mudah ditentukan.&lt;/li&gt;
          &lt;li&gt;Buka penutup busi (cap) menggunakan tangan.&lt;/li&gt;
          &lt;li&gt;Lepaskan busi lama menggunakan kunci busi dengan cara memutar searah jarum jam.&lt;/li&gt;
          &lt;li&gt;Periksa kondisi ujung elektroda busi; jika berwarna hitam pekat atau basah, bersihkan menggunakan sikat kawat.&lt;/li&gt;
          &lt;li&gt;Apabila busi sudah aus, retak, atau elektroda sudah menipis, ganti dengan busi baru sesuai spesifikasi pabrikan.&lt;/li&gt;
          &lt;li&gt;Pasang busi baru, kencangkan dengan tangan terlebih dahulu, lalu kencangkan penuh menggunakan kunci busi.&lt;/li&gt;
          &lt;li&gt;Sepeda motor siap digunakan kembali.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;p class="lead" style="margin-top:14px;"&gt;Teks di atas &lt;b style="color:var(--off-white);"&gt;belum dianotasi&lt;/b&gt; — tugas kelompok adalah menemukan sendiri bagian yang bermasalah menggunakan keenam kriteria evaluasi.&lt;/p&gt;

    &lt;h4 style="color:var(--off-white); margin-top:24px;"&gt;Petunjuk Pengerjaan&lt;/h4&gt;
    &lt;ol class="steps-num"&gt;
      &lt;li&gt;&lt;b&gt;Bentuk kelompok&lt;/b&gt; beranggotakan 4–5 orang sesuai pembagian dari guru.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Baca teks prosedur&lt;/b&gt; di atas secara bersama-sama dalam kelompok, lalu identifikasi struktur teks (tujuan, alat/bahan, langkah-langkah).&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Isi Tabel Evaluasi&lt;/b&gt; di bawah ini untuk setiap kriteria: tuliskan temuan, beri skor 1–4, dan berikan alasan.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Rumuskan rekomendasi perbaikan&lt;/b&gt; untuk setiap bagian teks yang dinilai bermasalah.&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Presentasikan hasil&lt;/b&gt; di depan kelas selama maksimal 5 menit per kelompok, dilanjutkan tanya jawab singkat.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Format Tabel Evaluasi Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:22%;"&gt;Kriteria&lt;/th&gt;&lt;th style="width:34%;"&gt;Temuan &amp;amp; Bukti dari Teks&lt;/th&gt;&lt;th style="width:10%;"&gt;Skor (1–4)&lt;/th&gt;&lt;th&gt;Rekomendasi Perbaikan&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;A. Keakuratan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;B. Kelengkapan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;C. Kelogisan urutan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;D. Kejelasan bahasa&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;E. Kesesuaian tujuan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;F. Keselamatan/kelayakan&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;

    &lt;h4 style="color:var(--off-white); margin-top:26px;"&gt;Rubrik Penilaian Kelompok&lt;/h4&gt;
    &lt;table&gt;
      &lt;tr&gt;&lt;th style="width:26%;"&gt;Aspek Penilaian&lt;/th&gt;&lt;th&gt;Skor 4 (Sangat Baik)&lt;/th&gt;&lt;th&gt;Skor 3 (Baik)&lt;/th&gt;&lt;th&gt;Skor 2 (Cukup)&lt;/th&gt;&lt;th&gt;Skor 1 (Kurang)&lt;/th&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Ketepatan analisis kriteria&lt;/td&gt;&lt;td&gt;Seluruh kriteria dianalisis tepat dengan bukti jelas&lt;/td&gt;&lt;td&gt;Sebagian besar kriteria tepat&lt;/td&gt;&lt;td&gt;Analisis dangkal, sebagian kriteria terlewat&lt;/td&gt;&lt;td&gt;Analisis tidak sesuai kriteria&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kualitas rekomendasi&lt;/td&gt;&lt;td&gt;Rekomendasi konkret dan dapat diterapkan&lt;/td&gt;&lt;td&gt;Rekomendasi cukup jelas&lt;/td&gt;&lt;td&gt;Rekomendasi umum/kurang spesifik&lt;/td&gt;&lt;td&gt;Tidak ada rekomendasi&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Kerja sama kelompok&lt;/td&gt;&lt;td&gt;Seluruh anggota aktif berkontribusi&lt;/td&gt;&lt;td&gt;Sebagian besar anggota aktif&lt;/td&gt;&lt;td&gt;Hanya sebagian kecil anggota aktif&lt;/td&gt;&lt;td&gt;Didominasi satu orang&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Presentasi&lt;/td&gt;&lt;td&gt;Jelas, percaya diri, menjawab pertanyaan dengan baik&lt;/td&gt;&lt;td&gt;Jelas namun kurang percaya diri&lt;/td&gt;&lt;td&gt;Kurang jelas/terbata-bata&lt;/td&gt;&lt;td&gt;Tidak dapat menjelaskan hasil&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;hr class="divider-dash"&gt;

  &lt;!-- ============ RANGKUMAN UNTUK BUKU CATATAN ============ --&gt;
  &lt;section class="section" id="catatan-murid"&gt;
    &lt;div class="eyebrow"&gt;09 — Penutup Pembelajaran&lt;/div&gt;
    &lt;h2 class="section-title"&gt;Rangkuman untuk Dicatat di Buku Catatan&lt;/h2&gt;
    &lt;p class="lead"&gt;Sebagai penutup pertemuan, setiap murid menuliskan satu rangkuman ringkas secara mandiri di buku catatan sebagai simpulan pribadi atas materi hari ini.&lt;/p&gt;

    &lt;div class="notebook"&gt;
      &lt;div class="content"&gt;
        &lt;h3&gt;Instruksi Menulis Rangkuman&lt;/h3&gt;
        &lt;p style="margin-top:0;"&gt;Tulis di buku catatan masing-masing, maksimal &lt;b&gt;satu halaman&lt;/b&gt;, mencakup poin-poin berikut:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;Pengertian evaluasi informasi dalam teks prosedur, menurut pemahaman sendiri.&lt;/li&gt;
          &lt;li&gt;Minimal empat dari enam kriteria evaluasi teks prosedur yang telah dipelajari beserta penjelasan singkat.&lt;/li&gt;
          &lt;li&gt;Langkah-langkah mengevaluasi teks prosedur secara berurutan.&lt;/li&gt;
          &lt;li&gt;Satu manfaat konkret mempelajari kemampuan ini bagi bidang keahlian Teknik Otomotif Sepeda Motor.&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p style="margin-bottom:0;"&gt;&lt;i&gt;Rangkuman ditulis dengan kalimat sendiri (bukan menyalin ulang dari materi), dan dikumpulkan pada awal pertemuan berikutnya untuk diperiksa guru.&lt;/i&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

&lt;/main&gt;

&lt;footer&gt;
  &lt;div class="doc-code"&gt;DOK/B.INDO/XI/PROSEDUR-EVAL — Fokus Tujuan Pembelajaran, Materi Inti, Tugas Kelompok TBSM &amp;amp; Rangkuman Buku Catatan, 1× pertemuan (3 JP)&lt;/div&gt;
  &lt;p style="margin:0;"&gt;Referensi: Kurikulum Merdeka — Capaian Pembelajaran Bahasa Indonesia Fase F (Elemen Membaca dan Memirsa); Buku Teks Bahasa Indonesia Kelas XI SMK/MAK Kemendikbudristek.&lt;/p&gt;
&lt;/footer&gt;
&lt;/div&gt;</description><link>http://kitab-investasi.blogspot.com/2026/07/evaluasi-informasi-dalam-teks-prosedur.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-6948960574111861418</guid><pubDate>Thu, 23 Jul 2026 05:29:08 +0000</pubDate><atom:updated>2026-07-23T12:43:21.641+07:00</atom:updated><title>SERTIFIKAT KOMBEL</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Generator Sertifikat&lt;/title&gt;

&lt;link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&amp;display=swap" rel="stylesheet"&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"&gt;&lt;/script&gt;

&lt;style&gt;

body{
    font-family:Arial,sans-serif;
    background:#eef2f7;
    padding:20px;
    max-width:700px;
    margin:auto;
}

.card{
    background:white;
    padding:24px;
    border-radius:20px;
    box-shadow:0 10px 20px rgba(0,0,0,.1);
}

h2{
    text-align:center;
    color:#1e4668;
}

.confirm-box{
    background:#f0f6ff;
    border-left:5px solid #2c7da0;
    padding:16px;
    border-radius:16px;
    margin-bottom:20px;
    text-align:center;
}

.confirm-box p{
    margin-top:0;
    font-weight:bold;
    color:#1e4668;
}

.confirm-buttons{
    display:flex;
    gap:10px;
    margin-top:10px;
}

.confirm-buttons button{
    flex:1;
}

.yes-btn{
    background:#1f8a4c;
}

.yes-btn:hover{
    background:#166638;
}

.no-btn{
    background:#c0392b;
}

.no-btn:hover{
    background:#962d22;
}

input,select,button{
    width:100%;
    padding:12px;
    margin-top:10px;
    border-radius:12px;
    border:1px solid #ccc;
    font-size:16px;
}

button{
    background:#2c7da0;
    color:white;
    border:none;
    cursor:pointer;
    font-weight:bold;
}

button:hover{
    background:#1f5e7a;
}

button:disabled{
    background:#94a3b8;
    cursor:not-allowed;
}

input:disabled,
select:disabled{
    background:#f1f5f9;
}

#preview{
    width:100%;
    border-radius:12px;
    margin-top:10px;
}

.loading{
    display:none;
    margin-top:15px;
    color:#1e4668;
    font-weight:bold;
    text-align:center;
}

.status{
    margin-top:12px;
    font-weight:bold;
}

.success{
    color:#1f8a4c;
}

.error{
    color:#c0392b;
}

&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="card"&gt;

&lt;h2&gt;&#128220; Generator Sertifikat&lt;/h2&gt;

&lt;!-- ================= KONFIRMASI ================= --&gt;

&lt;div class="confirm-box"&gt;

&lt;p&gt;&#128269; Apakah Anda mengikuti pelatihan?&lt;/p&gt;

&lt;div class="confirm-buttons"&gt;

&lt;button class="yes-btn" onclick="confirmIkut()"&gt;
✅ YA, IKUT
&lt;/button&gt;

&lt;button class="no-btn" onclick="confirmTidakIkut()"&gt;
❌ TIDAK
&lt;/button&gt;

&lt;/div&gt;

&lt;div id="statusKonfirmasi" class="status"&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ================= FORM ================= --&gt;

&lt;label&gt;Nama Lengkap&lt;/label&gt;

&lt;input
type="text"
id="nama"
placeholder="Contoh: Ahmad Fauzi"
disabled&gt;

&lt;label&gt;Peran&lt;/label&gt;

&lt;select id="peran" disabled&gt;
    &lt;option&gt;Peserta&lt;/option&gt;
    &lt;option&gt;Narasumber&lt;/option&gt;
&lt;/select&gt;

&lt;img
id="preview"
src="https://lh3.googleusercontent.com/d/1wYfpuHGjH4rw1199lBUM7vvdigBwkJbY"
alt="Template"&gt;

&lt;button
id="downloadBtn"
onclick="generatePDF()"
disabled&gt;

⬇️ UNDUH PDF

&lt;/button&gt;

&lt;div class="loading" id="loading"&gt;
Memproses PDF...
&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

// ================= TEMPLATE (DIUBAH) =================

const FILE_ID =
'1wYfpuHGjH4rw1199lBUM7vvdigBwkJbY';  // &lt;-- ID baru

const TEMPLATE_URL =
`https://lh3.googleusercontent.com/d/${FILE_ID}`;

// ================= UTIL =================

function showLoading(show){

    document.getElementById('loading').style.display =
        show ? 'block' : 'none';

}

function getRomanMonth(monthIndex){

    const romawi = [
        "I","II","III","IV","V","VI",
        "VII","VIII","IX","X","XI","XII"
    ];

    return romawi[monthIndex];

}

function capitalizeEachWord(text){

    return text
        .toLowerCase()
        .replace(/\b\w/g,c=&gt;c.toUpperCase());

}

// ================= KONFIRMASI =================

function confirmIkut(){

    document.getElementById('nama').disabled = false;

    document.getElementById('peran').disabled = false;

    document.getElementById('downloadBtn').disabled = false;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="success"&gt;✅ Konfirmasi diterima. Anda dapat mengunduh sertifikat.&lt;/span&gt;';

}

function confirmTidakIkut(){

    document.getElementById('nama').disabled = true;

    document.getElementById('peran').disabled = true;

    document.getElementById('downloadBtn').disabled = true;

    document.getElementById('statusKonfirmasi').innerHTML =
        '&lt;span class="error"&gt;❌ Anda tidak dapat mengunduh sertifikat.&lt;/span&gt;';

}

// ================= LOAD IMAGE =================

function loadImage(url){

    return new Promise((resolve,reject)=&gt;{

        const img = new Image();

        img.crossOrigin = "anonymous";

        img.onload = ()=&gt;resolve(img);

        img.onerror = ()=&gt;{

            reject(
                new Error(
                    'Template Google Drive gagal dimuat'
                )
            );

        };

        img.src = url + '?t=' + Date.now();

    });

}

// ================= NOMOR =================

async function generateNomor(){

    const now = new Date();

    const bulan =
        getRomanMonth(now.getMonth());

    const tahun =
        now.getFullYear();

    const nomor =
        Math.floor(Math.random()*900)+100;

    return `${nomor}/K/${bulan}/${tahun}`;

}

// ================= PDF =================

async function generatePDF(){

    const namaInput =
        document.getElementById('nama');

    const peranSelect =
        document.getElementById('peran');

    let nama =
        namaInput.value.trim();

    const peran =
        peranSelect.value;

    if(!nama){

        alert('Nama wajib diisi');

        return;

    }

    nama =
        capitalizeEachWord(nama);

    showLoading(true);

    try{

        await document.fonts.ready;

        const img =
            await loadImage(TEMPLATE_URL);

        const canvas =
            document.createElement('canvas');

        canvas.width = img.width;
        canvas.height = img.height;

        const ctx =
            canvas.getContext('2d');

        ctx.drawImage(
            img,
            0,
            0,
            canvas.width,
            canvas.height
        );

        // ================= POSISI =================

        const nomorY =
            canvas.height * 0.235;

        const namaY =
            canvas.height * 0.3990;

        const peranY =
            canvas.height * 0.5420;

        // ================= STYLE =================

        ctx.textAlign = 'center';

        ctx.textBaseline = 'middle';

        ctx.fillStyle = '#000';

        // nomor
        const nomorSertifikat =
            await generateNomor();

        ctx.font =
            `bold ${canvas.width*0.0125}px Montserrat`;

        ctx.fillText(
            nomorSertifikat,
            canvas.width/2,
            nomorY
        );

        // nama auto shrink
        let fontSize =
            canvas.width * 0.031;

        ctx.font =
            `700 ${fontSize}px Montserrat`;

        let textWidth =
            ctx.measureText(nama).width;

        const maxWidth =
            canvas.width - 180;

        while(
            textWidth &gt; maxWidth &amp;&amp;
            fontSize &gt; 20
        ){

            fontSize -= 2;

            ctx.font =
                `700 ${fontSize}px Montserrat`;

            textWidth =
                ctx.measureText(nama).width;

        }

        ctx.fillText(
            nama,
            canvas.width/2,
            namaY
        );

        // peran
        ctx.font =
            `bold ${canvas.width*0.024}px Montserrat`;

        ctx.fillText(
            peran,
            canvas.width/2,
            peranY
        );

        // ================= PDF =================

        const imageData =
            canvas.toDataURL(
                'image/jpeg',
                1.0
            );

        const { jsPDF } =
            window.jspdf;

        const pdf =
            new jsPDF({

                orientation:
                    canvas.width &gt; canvas.height
                    ? 'landscape'
                    : 'portrait',

                unit:'px',

                format:[
                    canvas.width,
                    canvas.height
                ]

            });

        pdf.addImage(
            imageData,
            'JPEG',
            0,
            0,
            canvas.width,
            canvas.height
        );

        const safeName =
            nama.replace(/[^a-z0-9]/gi,'_');

        pdf.save(
            `Sertifikat_${safeName}.pdf`
        );

    }catch(error){

        console.error(error);

        alert(
            '❌ Gagal membuat PDF\n\n' +
            error.message +
            '\n\nPastikan file Google Drive bersifat PUBLIC.'
        );

    }finally{

        showLoading(false);

    }

}

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/07/sertifikat-kombel.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://lh3.googleusercontent.com/d/1wYfpuHGjH4rw1199lBUM7vvdigBwkJbY=s72-c" width="72"/><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-4157946749772995627</guid><pubDate>Wed, 22 Jul 2026 02:45:18 +0000</pubDate><atom:updated>2026-07-22T09:58:50.051+07:00</atom:updated><title>Pengantar Informatika, Budaya Kerja Digital, Etika &amp; Profesi Teknologi Informasi</title><description>
&lt;html lang="id"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;&lt;/meta&gt;
&lt;meta content="width=device-width, initial-scale=1.0" name="viewport"&gt;&lt;/meta&gt;
&lt;title&gt;Modul Informatika X — Pengantar Informatika, Budaya Kerja Digital, Etika &amp; Profesi TI&lt;/title&gt;
&lt;link href="https://fonts.googleapis.com" rel="preconnect"&gt;&lt;/link&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&amp;amp;family=Literata:opsz,wght@18..144,400;18..144,500;18..144,600&amp;amp;family=JetBrains+Mono:wght@400;500&amp;amp;display=swap" rel="stylesheet"&gt;&lt;/link&gt;
&lt;style&gt;
  :root{
    --bg:#EEF1F6;
    --paper:#FFFFFF;
    --ink:#171F30;
    --ink-soft:#4B5568;
    --line:#D8DEEA;

    --c-info:#2B6CB0;      /* Pengantar Informatika */
    --c-info-bg:#E7F0FA;
    --c-budaya:#0C8F80;    /* Budaya Kerja Digital */
    --c-budaya-bg:#E3F5F1;
    --c-etika:#B5570C;     /* Etika Digital */
    --c-etika-bg:#FBEEE2;
    --c-profesi:#6D28D9;   /* Profesi TI */
    --c-profesi-bg:#EFE7FC;

    --font-display:'Space Grotesk', sans-serif;
    --font-body:'Literata', Georgia, serif;
    --font-mono:'JetBrains Mono', monospace;
  }

  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{
    background:var(--bg);
    color:var(--ink);
    font-family:var(--font-body);
    line-height:1.65;
    font-size:16px;
  }
  ::selection{background:var(--c-info); color:#fff;}

  a{color:inherit;}

  /* ---------- Layout shell ---------- */
  .shell{
    display:grid;
    grid-template-columns:280px 1fr;
    max-width:1280px;
    margin:0 auto;
  }
  @media (max-width:900px){
    .shell{grid-template-columns:1fr;}
    .sidebar{position:static; height:auto; order:2;}
  }

  /* ---------- Sidebar ---------- */
  .sidebar{
    position:sticky; top:0; height:100vh;
    padding:28px 20px 20px 28px;
    display:flex; flex-direction:column; gap:22px;
    overflow-y:auto;
    border-right:1px solid var(--line);
  }
  .brand{
    font-family:var(--font-display); font-weight:700; font-size:15px;
    letter-spacing:.02em;
  }
  .brand span{display:block; font-family:var(--font-mono); font-weight:400; font-size:11px; color:var(--ink-soft); margin-top:4px; letter-spacing:.03em;}

  .jp-track{display:flex; flex-direction:column; gap:2px; margin-top:4px;}
  .jp-track .label{font-family:var(--font-mono); font-size:10.5px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:.08em; margin-bottom:6px;}
  .jp-node{
    display:flex; align-items:center; gap:10px;
    font-family:var(--font-mono); font-size:11.5px; color:var(--ink-soft);
    padding:5px 0;
  }
  .jp-dot{width:8px; height:8px; border-radius:50%; background:var(--line); flex-shrink:0;}
  .jp-node.i1 .jp-dot{background:var(--c-info);}
  .jp-node.i2 .jp-dot{background:var(--c-budaya);}
  .jp-node.i3 .jp-dot{background:var(--c-etika);}
  .jp-node.i4 .jp-dot{background:var(--c-profesi);}

  nav.toc{display:flex; flex-direction:column; gap:1px; font-family:var(--font-display); font-size:13.5px;}
  nav.toc .grp-label{font-family:var(--font-mono); font-size:10px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:.08em; margin:14px 0 6px;}
  nav.toc a{
    display:block; padding:7px 10px; border-radius:6px; text-decoration:none;
    color:var(--ink-soft); border-left:2px solid transparent;
  }
  nav.toc a:hover{background:var(--paper); color:var(--ink);}
  nav.toc a.c1{border-left-color:var(--c-info);}
  nav.toc a.c2{border-left-color:var(--c-budaya);}
  nav.toc a.c3{border-left-color:var(--c-etika);}
  nav.toc a.c4{border-left-color:var(--c-profesi);}

  /* ---------- Main ---------- */
  main{padding:36px 40px 100px; min-width:0;}
  @media (max-width:640px){main{padding:24px 18px 80px;}}

  section{scroll-margin-top:24px;}

  .eyebrow{
    font-family:var(--font-mono); font-size:11px; letter-spacing:.1em; text-transform:uppercase;
    color:var(--ink-soft); margin-bottom:8px; display:flex; align-items:center; gap:8px;
  }
  .tag{
    font-family:var(--font-mono); font-size:10.5px; padding:2px 8px; border-radius:999px;
    border:1px solid currentColor;
  }

  h1,h2,h3{font-family:var(--font-display); font-weight:700; line-height:1.15;}
  h1{font-size:clamp(28px,4vw,42px); letter-spacing:-.01em;}
  h2{font-size:26px; margin-bottom:14px;}
  h3{font-size:17px; margin:20px 0 8px;}
  p{margin-bottom:12px; color:var(--ink);}
  strong{font-weight:600;}

  /* ---------- Hero ---------- */
  .hero{padding-bottom:40px; border-bottom:1px solid var(--line); margin-bottom:44px;}
  .hero-top{display:flex; justify-content:space-between; align-items:flex-start; gap:30px; flex-wrap:wrap;}
  .hero p.lede{font-size:16.5px; max-width:56ch; color:var(--ink-soft); margin-top:14px;}
  .meta-row{display:flex; gap:10px; flex-wrap:wrap; margin-top:18px;}
  .meta-chip{
    font-family:var(--font-mono); font-size:11.5px; color:var(--ink-soft);
    border:1px solid var(--line); padding:5px 11px; border-radius:999px; background:var(--paper);
  }

  .hub{flex-shrink:0;}

  /* ---------- Cards / boxes ---------- */
  .card{
    background:var(--paper); border:1px solid var(--line); border-radius:14px;
    padding:22px 26px; margin-bottom:16px;
  }

  .rpp{
    display:grid; grid-template-columns:repeat(4,1fr); gap:0;
    background:var(--paper); border:1px solid var(--line); border-radius:14px; overflow:hidden; margin-bottom:44px;
  }
  .rpp div{padding:16px 18px; border-right:1px solid var(--line);}
  .rpp div:last-child{border-right:none;}
  .rpp .k{font-family:var(--font-mono); font-size:10px; text-transform:uppercase; letter-spacing:.08em; color:var(--ink-soft); margin-bottom:5px;}
  .rpp .v{font-family:var(--font-display); font-weight:600; font-size:14.5px;}
  @media (max-width:700px){.rpp{grid-template-columns:1fr 1fr;} .rpp div{border-bottom:1px solid var(--line);}}

  .obj-list{list-style:none; display:flex; flex-direction:column; gap:10px; margin:16px 0 40px;}
  .obj-list li{
    display:flex; gap:12px; align-items:flex-start; background:var(--paper);
    border:1px solid var(--line); border-radius:10px; padding:12px 16px; font-size:14.5px;
  }
  .obj-list .n{font-family:var(--font-mono); font-size:11px; color:var(--ink-soft); flex-shrink:0; padding-top:2px;}

  /* ---------- Topic sections ---------- */
  .topic{
    border-radius:18px; padding:34px clamp(20px,4vw,40px); margin-bottom:36px;
    border:1px solid var(--line); background:var(--paper);
  }
  .topic .eyebrow .tag{border-color:currentColor;}
  .topic-1{border-top:5px solid var(--c-info);}
  .topic-2{border-top:5px solid var(--c-budaya);}
  .topic-3{border-top:5px solid var(--c-etika);}
  .topic-4{border-top:5px solid var(--c-profesi);}
  .topic-1 .eyebrow, .topic-1 h2{color:var(--c-info);}
  .topic-2 .eyebrow, .topic-2 h2{color:var(--c-budaya);}
  .topic-3 .eyebrow, .topic-3 h2{color:var(--c-etika);}
  .topic-4 .eyebrow, .topic-4 h2{color:var(--c-profesi);}

  .subgrid{display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:14px; margin:18px 0;}
  .pill-card{
    border:1px solid var(--line); border-radius:12px; padding:14px 16px; background:var(--bg);
  }
  .pill-card h4{font-family:var(--font-display); font-size:14px; margin-bottom:5px; color:var(--ink);}
  .pill-card p{font-size:13.5px; margin:0; color:var(--ink-soft);}

  table{width:100%; border-collapse:collapse; margin:16px 0; font-size:14px;}
  th,td{text-align:left; padding:10px 12px; border-bottom:1px solid var(--line); vertical-align:top;}
  th{font-family:var(--font-mono); font-size:10.5px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-soft); font-weight:500;}

  .timeline{margin:20px 0; border-left:2px solid var(--line); padding-left:22px; display:flex; flex-direction:column; gap:18px;}
  .timeline .ev{position:relative;}
  .timeline .ev::before{content:''; position:absolute; left:-27.5px; top:5px; width:9px; height:9px; border-radius:50%; background:var(--c-info);}
  .timeline .ev .era{font-family:var(--font-mono); font-size:11px; color:var(--ink-soft);}
  .timeline .ev h4{font-family:var(--font-display); font-size:14.5px; margin:2px 0 3px;}
  .timeline .ev p{font-size:13.5px; margin:0; color:var(--ink-soft);}

  .callout{
    border-radius:12px; padding:16px 18px; margin:18px 0; font-size:14.5px;
    border:1px dashed var(--line); background:var(--bg);
  }
  .callout b{font-family:var(--font-display);}

  ul.check{list-style:none; display:flex; flex-direction:column; gap:8px; margin:12px 0;}
  ul.check li{padding-left:26px; position:relative; font-size:14.5px;}
  ul.check li::before{content:'✓'; position:absolute; left:0; top:0; font-family:var(--font-mono); font-weight:600;}

  /* ---------- Task blocks ---------- */
  .task{
    border-radius:18px; padding:34px clamp(20px,4vw,40px); margin-bottom:28px; color:#fff;
  }
  .task-group{background:linear-gradient(155deg,#1B2A4A,#101830);}
  .task-solo{background:var(--paper); border:2px solid var(--ink); color:var(--ink);}
  .task .eyebrow{color:#B9C4E0;}
  .task-solo .eyebrow{color:var(--ink-soft);}
  .task h2{color:#fff;}
  .task-solo h2{color:var(--ink);}
  .task p{color:#DCE3F2;}
  .task-solo p{color:var(--ink-soft);}

  .steps{counter-reset:step; display:flex; flex-direction:column; gap:12px; margin:18px 0;}
  .steps .step{counter-increment:step; display:flex; gap:14px; align-items:flex-start;}
  .steps .step::before{
    content:counter(step); font-family:var(--font-mono); font-size:12px; flex-shrink:0;
    width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center;
    background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.35);
  }
  .task-solo .steps .step::before{background:var(--bg); border-color:var(--line); color:var(--ink);}
  .steps .step div{font-size:14.5px;}
  .steps .step strong{display:block; margin-bottom:2px; font-family:var(--font-display); font-size:14.5px;}

  .rubric{width:100%; margin-top:14px; font-size:13.5px; border-collapse:collapse;}
  .rubric th,.rubric td{padding:9px 10px; border-bottom:1px solid rgba(255,255,255,.18); color:#DCE3F2;}
  .rubric th{font-family:var(--font-mono); font-size:10px; text-transform:uppercase; color:#B9C4E0;}

  .deliverable-row{display:flex; gap:10px; flex-wrap:wrap; margin-top:16px;}
  .deliverable-row span{
    font-family:var(--font-mono); font-size:11.5px; padding:6px 12px; border-radius:999px;
    background:rgba(255,255,255,.1); border:1px solid rgba(255,255,255,.3);
  }
  .task-solo .deliverable-row span{background:var(--bg); border-color:var(--line);}

  footer{
    max-width:1280px; margin:0 auto; padding:30px 40px 60px; grid-column:1/-1;
    font-family:var(--font-mono); font-size:12px; color:var(--ink-soft); border-top:1px solid var(--line);
  }

  @media print{
    .sidebar{display:none;}
    .shell{grid-template-columns:1fr;}
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="shell"&gt;

  &lt;!-- ============ SIDEBAR ============ --&gt;
  &lt;aside class="sidebar"&gt;
    &lt;div class="brand"&gt;Modul Informatika&lt;span&gt;Kelas X SMK · Fase E&lt;/span&gt;&lt;/div&gt;

    &lt;div class="jp-track"&gt;
      &lt;div class="label"&gt;Alur 4 JP&lt;/div&gt;
      &lt;div class="jp-node i1"&gt;&lt;span class="jp-dot"&gt;&lt;/span&gt;JP 1 — Pengantar Informatika&lt;/div&gt;
      &lt;div class="jp-node i2"&gt;&lt;span class="jp-dot"&gt;&lt;/span&gt;JP 2 — Budaya Kerja Digital&lt;/div&gt;
      &lt;div class="jp-node i3"&gt;&lt;span class="jp-dot"&gt;&lt;/span&gt;JP 3 — Etika, HAKI &amp;amp; Keamanan&lt;/div&gt;
      &lt;div class="jp-node i4"&gt;&lt;span class="jp-dot"&gt;&lt;/span&gt;JP 4 — Profesi TI &amp;amp; Tugas&lt;/div&gt;
    &lt;/div&gt;

    &lt;nav class="toc"&gt;
      &lt;a href="#tujuan"&gt;Tujuan Pembelajaran&lt;/a&gt;
      &lt;div class="grp-label"&gt;JP 1&lt;/div&gt;
      &lt;a class="c1" href="#materi-1"&gt;01 · Pengantar Informatika&lt;/a&gt;
      &lt;div class="grp-label"&gt;JP 2&lt;/div&gt;
      &lt;a class="c2" href="#materi-2"&gt;02 · Budaya Kerja Digital&lt;/a&gt;
      &lt;div class="grp-label"&gt;JP 3&lt;/div&gt;
      &lt;a class="c3" href="#materi-3"&gt;03 · Etika, HAKI &amp;amp; Keamanan&lt;/a&gt;
      &lt;div class="grp-label"&gt;JP 4&lt;/div&gt;
      &lt;a class="c4" href="#materi-4"&gt;04 · Profesi Teknologi Informasi&lt;/a&gt;
      &lt;div class="grp-label"&gt;Penutup&lt;/div&gt;
      &lt;a href="#tugas-kelompok"&gt;Tugas Kelompok&lt;/a&gt;
      &lt;a href="#tugas-mandiri"&gt;Kesimpulan (Buku)&lt;/a&gt;
      &lt;a href="#refleksi"&gt;Refleksi Cepat&lt;/a&gt;
    &lt;/nav&gt;
  &lt;/aside&gt;

  &lt;!-- ============ MAIN ============ --&gt;
  &lt;main&gt;

    &lt;!-- HERO --&gt;
    &lt;section class="hero"&gt;
      &lt;div class="hero-top"&gt;
        &lt;div&gt;
          &lt;div class="eyebrow"&gt;&lt;span class="tag"&gt;Informatika&lt;/span&gt; Materi Pertemuan · 4 JP (180 menit)&lt;/div&gt;
          &lt;h1&gt;Pengantar Informatika, Budaya Kerja Digital,&lt;br /&gt;Etika &amp;amp; Profesi Teknologi Informasi&lt;/h1&gt;
          &lt;p class="lede"&gt;Empat topik ini adalah satu kesatuan: memahami &lt;em&gt;apa itu&lt;/em&gt; Informatika membuka jalan untuk memahami &lt;em&gt;bagaimana&lt;/em&gt; orang bekerja di dunia digital, &lt;em&gt;aturan main&lt;/em&gt; apa yang harus dipegang, dan &lt;em&gt;ke mana&lt;/em&gt; semua ini bisa membawamu sebagai karier.&lt;/p&gt;
          &lt;div class="meta-row"&gt;
            &lt;span class="meta-chip"&gt;Mapel: Informatika&lt;/span&gt;
            &lt;span class="meta-chip"&gt;Kelas X SMK&lt;/span&gt;
            &lt;span class="meta-chip"&gt;4 JP × 45 menit&lt;/span&gt;
            &lt;span class="meta-chip"&gt;Elemen: Dampak Sosial Informatika&lt;/span&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;svg aria-label="Diagram keterkaitan empat topik" class="hub" height="230" role="img" viewbox="0 0 230 230" width="230" xmlns="http://www.w3.org/2000/svg"&gt;
          &lt;line stroke-width="2" stroke="#D8DEEA" x1="115" x2="115" y1="115" y2="34"&gt;
          &lt;line stroke-width="2" stroke="#D8DEEA" x1="115" x2="196" y1="115" y2="115"&gt;
          &lt;line stroke-width="2" stroke="#D8DEEA" x1="115" x2="115" y1="115" y2="196"&gt;
          &lt;line stroke-width="2" stroke="#D8DEEA" x1="115" x2="34" y1="115" y2="115"&gt;
          &lt;circle cx="115" cy="115" fill="#171F30" r="30"&gt;
          &lt;text fill="#fff" font-family="Space Grotesk" font-size="9" font-weight="700" text-anchor="middle" x="115" y="111"&gt;EKOSISTEM&lt;/text&gt;
          &lt;text fill="#fff" font-family="Space Grotesk" font-size="9" font-weight="700" text-anchor="middle" x="115" y="122"&gt;TI&lt;/text&gt;
          &lt;circle cx="115" cy="34" fill="#E7F0FA" r="24" stroke-width="2" stroke="#2B6CB0"&gt;
          &lt;text fill="#2B6CB0" font-family="Space Grotesk" font-size="8" font-weight="700" text-anchor="middle" x="115" y="31"&gt;01&lt;/text&gt;
          &lt;text fill="#2B6CB0" font-family="Space Grotesk" font-size="7" font-weight="700" text-anchor="middle" x="115" y="41"&gt;Informatika&lt;/text&gt;
          &lt;circle cx="196" cy="115" fill="#E3F5F1" r="24" stroke-width="2" stroke="#0C8F80"&gt;
          &lt;text fill="#0C8F80" font-family="Space Grotesk" font-size="8" font-weight="700" text-anchor="middle" x="196" y="112"&gt;02&lt;/text&gt;
          &lt;text fill="#0C8F80" font-family="Space Grotesk" font-size="6.3" font-weight="700" text-anchor="middle" x="196" y="122"&gt;Budaya Kerja&lt;/text&gt;
          &lt;circle cx="115" cy="196" fill="#FBEEE2" r="24" stroke-width="2" stroke="#B5570C"&gt;
          &lt;text fill="#B5570C" font-family="Space Grotesk" font-size="8" font-weight="700" text-anchor="middle" x="115" y="193"&gt;03&lt;/text&gt;
          &lt;text fill="#B5570C" font-family="Space Grotesk" font-size="7" font-weight="700" text-anchor="middle" x="115" y="203"&gt;Etika&lt;/text&gt;
          &lt;circle cx="34" cy="115" fill="#EFE7FC" r="24" stroke-width="2" stroke="#6D28D9"&gt;
          &lt;text fill="#6D28D9" font-family="Space Grotesk" font-size="8" font-weight="700" text-anchor="middle" x="34" y="112"&gt;04&lt;/text&gt;
          &lt;text fill="#6D28D9" font-family="Space Grotesk" font-size="6.3" font-weight="700" text-anchor="middle" x="34" y="122"&gt;Profesi TI&lt;/text&gt;
        &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/line&gt;&lt;/line&gt;&lt;/line&gt;&lt;/line&gt;&lt;/svg&gt;
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- RPP MINI --&gt;
    &lt;div class="rpp"&gt;
      &lt;div&gt;&lt;div class="k"&gt;Fase / Kelas&lt;/div&gt;&lt;div class="v"&gt;Fase E · X SMK&lt;/div&gt;&lt;/div&gt;
      &lt;div&gt;&lt;div class="k"&gt;Alokasi Waktu&lt;/div&gt;&lt;div class="v"&gt;4 JP (180 menit)&lt;/div&gt;&lt;/div&gt;
      &lt;div&gt;&lt;div class="k"&gt;Model&lt;/div&gt;&lt;div class="v"&gt;Diskusi &amp;amp; Kerja Kelompok&lt;/div&gt;&lt;/div&gt;
      &lt;div&gt;&lt;div class="k"&gt;Penilaian&lt;/div&gt;&lt;div class="v"&gt;Produk + Kesimpulan Tertulis&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- TUJUAN --&gt;
    &lt;section id="tujuan"&gt;
      &lt;div class="eyebrow"&gt;&lt;span class="tag"&gt;Tujuan Pembelajaran&lt;/span&gt;&lt;/div&gt;
      &lt;h2 style="color: var(--ink);"&gt;Setelah pertemuan ini, murid mampu:&lt;/h2&gt;
      &lt;ul class="obj-list"&gt;
        &lt;li&gt;&lt;span class="n"&gt;TP.1&lt;/span&gt; Menjelaskan ruang lingkup Informatika dan bidang-bidang keilmuan yang menyusunnya.&lt;/li&gt;
        &lt;li&gt;&lt;span class="n"&gt;TP.2&lt;/span&gt; Menguraikan perkembangan teknologi digital dan dampaknya terhadap cara manusia bekerja.&lt;/li&gt;
        &lt;li&gt;&lt;span class="n"&gt;TP.3&lt;/span&gt; Menerapkan prinsip etika digital, menghormati hak kekayaan intelektual (HAKI), dan praktik keamanan digital dasar.&lt;/li&gt;
        &lt;li&gt;&lt;span class="n"&gt;TP.4&lt;/span&gt; Mengidentifikasi ragam profesi di bidang Teknologi Informasi beserta kompetensi yang dibutuhkan.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- ================= TOPIK 1 ================= --&gt;
    &lt;section class="topic topic-1" id="materi-1"&gt;
      &lt;div class="eyebrow"&gt;&lt;span class="tag"&gt;JP 1 · 45 menit&lt;/span&gt; 01 — Pengantar Informatika&lt;/div&gt;
      &lt;h2&gt;Apa Itu Informatika, dan Seluas Apa Cakupannya?&lt;/h2&gt;
      &lt;p&gt;&lt;strong&gt;Informatika&lt;/strong&gt; adalah ilmu yang mempelajari bagaimana informasi direpresentasikan, diproses, disimpan, dan dikomunikasikan secara sistematis dengan bantuan komputer. Informatika bukan sekadar "belajar komputer" — ia adalah cara berpikir untuk memecahkan masalah secara terstruktur (disebut &lt;em&gt;computational thinking&lt;/em&gt; atau berpikir komputasional), yang kemudian diwujudkan lewat algoritma, program, dan sistem.&lt;/p&gt;

      &lt;h3&gt;Tujuh Bidang Ilmu dalam Informatika&lt;/h3&gt;
      &lt;div class="subgrid"&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Berpikir Komputasional&lt;/h4&gt;&lt;p&gt;Kemampuan memecah masalah kompleks menjadi langkah-langkah logis dan sistematis.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Teknologi Informasi &amp;amp; Komunikasi&lt;/h4&gt;&lt;p&gt;Penggunaan perangkat lunak dan platform digital untuk produktivitas sehari-hari.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Sistem Komputer&lt;/h4&gt;&lt;p&gt;Perangkat keras, perangkat lunak, dan cara keduanya bekerja sama memproses data.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Jaringan Komputer &amp;amp; Internet&lt;/h4&gt;&lt;p&gt;Bagaimana perangkat saling terhubung dan bertukar data melalui jaringan.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Analisis Data&lt;/h4&gt;&lt;p&gt;Mengolah data mentah menjadi informasi yang bermakna untuk pengambilan keputusan.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Algoritma &amp;amp; Pemrograman&lt;/h4&gt;&lt;p&gt;Menyusun instruksi logis yang dapat dieksekusi komputer untuk menyelesaikan tugas.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Dampak Sosial Informatika&lt;/h4&gt;&lt;p&gt;Pengaruh teknologi terhadap ekonomi, budaya, etika, dan kehidupan sosial masyarakat.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;h3&gt;Perkembangan Teknologi Digital&lt;/h3&gt;
      &lt;p&gt;Perkembangan komputer dan revolusi industri berjalan beriringan, mengubah cara manusia bekerja di setiap era:&lt;/p&gt;
      &lt;div class="timeline"&gt;
        &lt;div class="ev"&gt;&lt;div class="era"&gt;1780-an — Revolusi Industri 1.0&lt;/div&gt;&lt;h4&gt;Mekanisasi &amp;amp; Mesin Uap&lt;/h4&gt;&lt;p&gt;Tenaga manusia digantikan mesin mekanis untuk produksi massal.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="ev"&gt;&lt;div class="era"&gt;1870-an — Revolusi Industri 2.0&lt;/div&gt;&lt;h4&gt;Listrik &amp;amp; Produksi Massal&lt;/h4&gt;&lt;p&gt;Lini produksi (assembly line) dan tenaga listrik mempercepat industri.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="ev"&gt;&lt;div class="era"&gt;1970-an — Revolusi Industri 3.0&lt;/div&gt;&lt;h4&gt;Komputer &amp;amp; Otomasi&lt;/h4&gt;&lt;p&gt;Komputer, elektronik, dan internet mulai mengotomasi proses kerja.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="ev"&gt;&lt;div class="era"&gt;2010-an — Revolusi Industri 4.0&lt;/div&gt;&lt;h4&gt;Konektivitas &amp;amp; Kecerdasan Buatan&lt;/h4&gt;&lt;p&gt;IoT, big data, cloud computing, dan AI mengintegrasikan dunia fisik dan digital.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="ev"&gt;&lt;div class="era"&gt;Saat ini — Menuju 5.0&lt;/div&gt;&lt;h4&gt;Teknologi Berpusat pada Manusia&lt;/h4&gt;&lt;p&gt;Teknologi cerdas dipadukan kembali dengan sentuhan dan nilai kemanusiaan.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="callout"&gt;&lt;b&gt;Contoh nyata di sekitar kita:&lt;/b&gt; aplikasi ojek daring memakai algoritma pencocokan rute, sekolah memakai sistem informasi akademik, rumah sakit memakai rekam medis elektronik, petani memakai sensor IoT untuk memantau lahan — semua ini adalah wujud nyata Informatika.&lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- ================= TOPIK 2 ================= --&gt;
    &lt;section class="topic topic-2" id="materi-2"&gt;
      &lt;div class="eyebrow"&gt;&lt;span class="tag"&gt;JP 2 · 45 menit&lt;/span&gt; 02 — Budaya Kerja Digital&lt;/div&gt;
      &lt;h2&gt;Bekerja dengan Cara Baru di Dunia yang Terhubung&lt;/h2&gt;
      &lt;p&gt;&lt;strong&gt;Budaya kerja digital&lt;/strong&gt; adalah pola pikir, sikap, dan kebiasaan kerja yang terbentuk karena teknologi mengubah cara kita berkolaborasi, berkomunikasi, dan menghasilkan karya. Budaya ini tidak menggantikan etos kerja lama, tetapi menambahkan lapisan baru: kolaboratif, adaptif, dan berbasis data.&lt;/p&gt;

      &lt;h3&gt;Karakteristik Utama Budaya Kerja Digital&lt;/h3&gt;
      &lt;div class="subgrid"&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Kolaborasi Daring&lt;/h4&gt;&lt;p&gt;Bekerja bersama lewat cloud (Google Workspace, Microsoft 365) tanpa harus berada di ruang yang sama.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Fleksibilitas Kerja&lt;/h4&gt;&lt;p&gt;Pola kerja jarak jauh (remote) dan hybrid semakin umum lintas industri.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Berbasis Data&lt;/h4&gt;&lt;p&gt;Keputusan diambil berdasarkan data dan bukti, bukan sekadar asumsi.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Pembelajaran Berkelanjutan&lt;/h4&gt;&lt;p&gt;Teknologi cepat berubah, sehingga belajar hal baru menjadi kebiasaan, bukan pengecualian.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Budaya Paperless&lt;/h4&gt;&lt;p&gt;Dokumen dan arsip beralih ke bentuk digital untuk efisiensi dan keberlanjutan.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Berbagi Pengetahuan&lt;/h4&gt;&lt;p&gt;Dokumentasi kerja dan wawasan dibagikan terbuka lewat wiki, forum, atau grup tim.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;h3&gt;Soft Skill yang Dibutuhkan&lt;/h3&gt;
      &lt;table&gt;
        &lt;tr&gt;&lt;th&gt;Kompetensi&lt;/th&gt;&lt;th&gt;Contoh Penerapan&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Komunikasi digital&lt;/td&gt;&lt;td&gt;Menulis pesan kerja yang jelas dan sopan di email, chat, atau video call.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Manajemen waktu&lt;/td&gt;&lt;td&gt;Mengatur tenggat kerja menggunakan aplikasi seperti Trello atau Google Calendar.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kolaborasi tim&lt;/td&gt;&lt;td&gt;Mengedit dokumen bersama secara real-time tanpa tumpang tindih pekerjaan.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Berpikir kritis &amp;amp; kreatif&lt;/td&gt;&lt;td&gt;Mengevaluasi informasi digital sebelum menggunakannya untuk mengambil keputusan.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Adaptasi teknologi baru&lt;/td&gt;&lt;td&gt;Cepat mempelajari aplikasi atau alat kerja yang baru diperkenalkan.&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;

      &lt;div class="callout"&gt;&lt;b&gt;Nilai profesional yang tetap relevan:&lt;/b&gt; disiplin terhadap tenggat waktu digital, tanggung jawab menjaga data yang dikelola, serta transparansi proses kerja — nilai-nilai lama yang dibungkus cara kerja baru.&lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- ================= TOPIK 3 ================= --&gt;
    &lt;section class="topic topic-3" id="materi-3"&gt;
      &lt;div class="eyebrow"&gt;&lt;span class="tag"&gt;JP 3 · 45 menit&lt;/span&gt; 03 — Etika Digital, HAKI &amp;amp; Keamanan&lt;/div&gt;
      &lt;h2&gt;Aturan Main di Dunia Digital&lt;/h2&gt;
      &lt;p&gt;Semakin besar kekuatan teknologi, semakin besar pula tanggung jawab menggunakannya. Bagian ini membahas tiga pilar: &lt;strong&gt;etika digital&lt;/strong&gt; (bagaimana bersikap), &lt;strong&gt;HAKI&lt;/strong&gt; (menghargai karya orang lain), dan &lt;strong&gt;keamanan digital&lt;/strong&gt; (melindungi diri dan data).&lt;/p&gt;

      &lt;h3&gt;Etika Digital (Netiket)&lt;/h3&gt;
      &lt;ul&gt;
        &lt;li&gt;Bersikap sopan dan menghargai perbedaan pendapat saat berinteraksi daring.&lt;/li&gt;
        &lt;li&gt;Tidak menyebarkan ujaran kebencian, perundungan siber (cyberbullying), atau konten SARA.&lt;/li&gt;
        &lt;li&gt;Memeriksa kebenaran informasi sebelum membagikannya, untuk mencegah penyebaran hoaks.&lt;/li&gt;
        &lt;li&gt;Menyadari bahwa jejak digital (digital footprint) bersifat permanen dan dapat memengaruhi reputasi di masa depan.&lt;/li&gt;
      &lt;/ul&gt;

      &lt;h3&gt;Hak Kekayaan Intelektual (HAKI)&lt;/h3&gt;
      &lt;p&gt;HAKI melindungi hasil karya cipta seseorang — termasuk perangkat lunak, tulisan, gambar, musik, dan desain — dari penggunaan tanpa izin. Beberapa jenis lisensi perangkat lunak yang perlu dikenali:&lt;/p&gt;
      &lt;table&gt;
        &lt;tr&gt;&lt;th&gt;Jenis Lisensi&lt;/th&gt;&lt;th&gt;Penjelasan&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Proprietary (berbayar)&lt;/td&gt;&lt;td&gt;Kode sumber tertutup, penggunaan diatur ketat oleh pemilik, contoh: Microsoft Office.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Freeware&lt;/td&gt;&lt;td&gt;Gratis digunakan, tetapi kode sumber tetap tertutup dan hak cipta melekat pada pembuat.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Shareware&lt;/td&gt;&lt;td&gt;Boleh dicoba gratis dalam batas waktu/fitur tertentu sebelum harus membeli lisensi penuh.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Open Source&lt;/td&gt;&lt;td&gt;Kode sumber terbuka dan boleh dimodifikasi, dengan syarat mengikuti ketentuan lisensinya, contoh: Linux.&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
      &lt;p&gt;Dalam konteks tugas sekolah, &lt;strong&gt;plagiarisme&lt;/strong&gt; — menyalin karya orang lain tanpa mencantumkan sumber — adalah pelanggaran HAKI. Kebiasaan baik: selalu mencantumkan sumber referensi dan memahami lisensi &lt;em&gt;Creative Commons&lt;/em&gt; saat menggunakan gambar atau materi dari internet.&lt;/p&gt;

      &lt;h3&gt;Keamanan Digital&lt;/h3&gt;
      &lt;div class="subgrid"&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Kata sandi kuat&lt;/h4&gt;&lt;p&gt;Kombinasi huruf, angka, simbol, dan berbeda untuk tiap akun.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Autentikasi dua faktor (2FA)&lt;/h4&gt;&lt;p&gt;Lapisan keamanan tambahan selain kata sandi, misalnya kode OTP.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Waspada phishing&lt;/h4&gt;&lt;p&gt;Tidak sembarangan mengklik tautan atau memberi data pribadi ke sumber tak dikenal.&lt;/p&gt;&lt;/div&gt;
        &lt;div class="pill-card"&gt;&lt;h4&gt;Cadangkan data (backup)&lt;/h4&gt;&lt;p&gt;Menyimpan salinan data penting untuk berjaga dari kehilangan atau serangan siber.&lt;/p&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- ================= TOPIK 4 ================= --&gt;
    &lt;section class="topic topic-4" id="materi-4"&gt;
      &lt;div class="eyebrow"&gt;&lt;span class="tag"&gt;JP 4 · 45 menit&lt;/span&gt; 04 — Profesi Teknologi Informasi&lt;/div&gt;
      &lt;h2&gt;Ke Mana Semua Ini Bisa Membawamu?&lt;/h2&gt;
      &lt;p&gt;Industri teknologi informasi menawarkan ragam jalur karier yang terus berkembang. Setiap profesi menekankan kombinasi berbeda antara kemampuan teknis (&lt;em&gt;hard skill&lt;/em&gt;) dan kemampuan bekerja sama (&lt;em&gt;soft skill&lt;/em&gt;) yang sudah dibahas di JP 2.&lt;/p&gt;

      &lt;table&gt;
        &lt;tr&gt;&lt;th&gt;Profesi&lt;/th&gt;&lt;th&gt;Fokus Pekerjaan&lt;/th&gt;&lt;th&gt;Kompetensi Kunci&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Software / Web Developer&lt;/td&gt;&lt;td&gt;Membangun aplikasi atau situs web.&lt;/td&gt;&lt;td&gt;Logika pemrograman, bahasa pemrograman&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Mobile App Developer&lt;/td&gt;&lt;td&gt;Membangun aplikasi untuk perangkat seluler.&lt;/td&gt;&lt;td&gt;Pemrograman mobile, desain UI&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Network Engineer / Administrator&lt;/td&gt;&lt;td&gt;Merancang dan menjaga jaringan komputer.&lt;/td&gt;&lt;td&gt;Pemahaman protokol jaringan, troubleshooting&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Database Administrator&lt;/td&gt;&lt;td&gt;Mengelola dan mengamankan basis data organisasi.&lt;/td&gt;&lt;td&gt;SQL, manajemen data&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Data Analyst / Data Scientist&lt;/td&gt;&lt;td&gt;Mengolah data menjadi wawasan untuk keputusan bisnis.&lt;/td&gt;&lt;td&gt;Statistik, visualisasi data&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;UI/UX Designer&lt;/td&gt;&lt;td&gt;Merancang tampilan dan pengalaman pengguna produk digital.&lt;/td&gt;&lt;td&gt;Desain, empati pengguna&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Cyber Security Specialist&lt;/td&gt;&lt;td&gt;Melindungi sistem dari ancaman dan serangan siber.&lt;/td&gt;&lt;td&gt;Analisis risiko, keamanan jaringan&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;IT Support / Helpdesk&lt;/td&gt;&lt;td&gt;Membantu pengguna mengatasi masalah perangkat dan sistem.&lt;/td&gt;&lt;td&gt;Troubleshooting, komunikasi&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Cloud Engineer&lt;/td&gt;&lt;td&gt;Mengelola infrastruktur dan layanan berbasis cloud.&lt;/td&gt;&lt;td&gt;Sistem cloud, otomasi&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Game Developer&lt;/td&gt;&lt;td&gt;Merancang dan membangun permainan digital.&lt;/td&gt;&lt;td&gt;Pemrograman, desain kreatif&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;

      &lt;h3&gt;Jalur Menuju Profesi TI&lt;/h3&gt;
      &lt;ul &gt;
        &lt;li&gt;Pendidikan formal: SMK jurusan RPL/TKJ, D3/D4/S1 bidang Informatika atau Ilmu Komputer.&lt;/li&gt;
        &lt;li&gt;Sertifikasi industri: misalnya sertifikasi jaringan, cloud, atau keamanan siber dari penyedia teknologi global.&lt;/li&gt;
        &lt;li&gt;Jalur mandiri: bootcamp, kursus daring, dan portofolio proyek pribadi.&lt;/li&gt;
        &lt;li&gt;Peluang kerja lintas batas: banyak profesi TI kini bisa dikerjakan secara remote untuk perusahaan di berbagai negara.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- ============ TUGAS KELOMPOK ============ --&gt;
    &lt;section class="task task-group" id="tugas-kelompok"&gt;
      &lt;div class="eyebrow"&gt;&lt;span class="tag" style="border-color: #B9C4E0;"&gt;Tugas Kelompok&lt;/span&gt; Penerapan JP 1–4&lt;/div&gt;
      &lt;h2&gt;Investigasi Profesi &amp;amp; Budaya Kerja Digital&lt;/h2&gt;
      &lt;p&gt;Bekerja dalam kelompok untuk menghubungkan keempat materi hari ini: memilih satu profesi TI, lalu menelusuri ruang lingkup keilmuannya, budaya kerjanya, serta isu etika yang mungkin dihadapinya.&lt;/p&gt;

      &lt;div class="steps"&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Bentuk kelompok&lt;/strong&gt;4–5 murid per kelompok, tentukan pembagian peran (peneliti, penulis, desainer, juru bicara).&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Pilih satu profesi TI&lt;/strong&gt;Contoh: Web Developer, Data Analyst, Cyber Security Specialist, UI/UX Designer, Network Engineer, dsb — satu profesi per kelompok, tidak boleh sama dengan kelompok lain.&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Lakukan riset singkat&lt;/strong&gt;Cari informasi tentang deskripsi pekerjaan, bidang Informatika yang mendasarinya, kompetensi yang dibutuhkan, dan jenjang kariernya.&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Kaitkan dengan budaya kerja&lt;/strong&gt;Jelaskan bagaimana profesi tersebut menerapkan budaya kerja digital (kolaborasi, fleksibilitas, dsb.) dalam praktiknya.&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Identifikasi isu etika&lt;/strong&gt;Sebutkan satu isu etika, HAKI, atau keamanan digital yang relevan dengan profesi tersebut, dan bagaimana idealnya disikapi.&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Susun &amp;amp; presentasikan&lt;/strong&gt;Tuangkan hasil riset ke dalam poster atau slide presentasi sederhana, lalu presentasikan di depan kelas (5–7 menit per kelompok).&lt;/div&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="deliverable-row"&gt;
        &lt;span&gt;Produk: Poster / Infografis / Slide&lt;/span&gt;
        &lt;span&gt;Waktu pengerjaan: ± 60 menit&lt;/span&gt;
        &lt;span&gt;Presentasi: 5–7 menit/kelompok&lt;/span&gt;
      &lt;/div&gt;

      &lt;table class="rubric"&gt;
        &lt;tr&gt;&lt;th&gt;Aspek Penilaian&lt;/th&gt;&lt;th&gt;Indikator&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Pemahaman konsep&lt;/td&gt;&lt;td&gt;Kaitan antara profesi, bidang Informatika, dan budaya kerja dijelaskan dengan tepat.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kelengkapan isi&lt;/td&gt;&lt;td&gt;Deskripsi kerja, kompetensi, jenjang karier, dan isu etika tercakup lengkap.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Kerja sama tim&lt;/td&gt;&lt;td&gt;Pembagian peran jelas dan seluruh anggota berkontribusi.&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Presentasi&lt;/td&gt;&lt;td&gt;Penyampaian jelas, percaya diri, dan mampu menjawab pertanyaan.&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/section&gt;

    &lt;!-- ============ TUGAS MANDIRI / KESIMPULAN ============ --&gt;
    &lt;section class="task task-solo" id="tugas-mandiri"&gt;
      &lt;div class="eyebrow"&gt;Tugas Mandiri · Penutup&lt;/div&gt;
      &lt;h2&gt;Tulis Kesimpulan Ringkas di Buku Catatan&lt;/h2&gt;
      &lt;p&gt;Sebagai penutup pembelajaran, setiap murid menuliskan satu kesimpulan ringkas secara mandiri di buku catatan sebagai rangkuman pemahaman pribadi terhadap materi hari ini.&lt;/p&gt;
      &lt;div class="steps"&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Tulis dengan bahasa sendiri&lt;/strong&gt;Bukan menyalin ulang dari modul, tetapi merangkum apa yang benar-benar dipahami.&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Cakup keempat topik&lt;/strong&gt;Singgung ruang lingkup Informatika, budaya kerja digital, etika/HAKI/keamanan, dan profesi TI dalam satu rangkaian kesimpulan.&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Minimal 150 kata&lt;/strong&gt;Ditulis dalam 1 paragraf utuh di buku catatan, rapi dan mudah dibaca.&lt;/div&gt;&lt;/div&gt;
        &lt;div class="step"&gt;&lt;div&gt;&lt;strong&gt;Kumpulkan&lt;/strong&gt;Difoto dan dikirim ke guru, atau diperlihatkan langsung pada pertemuan berikutnya.&lt;/div&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- ============ REFLEKSI ============ --&gt;
    &lt;section class="card" id="refleksi"&gt;
      &lt;div class="eyebrow"&gt;Refleksi Cepat&lt;/div&gt;
      &lt;h3 style="margin-top: 0;"&gt;Sebelum menutup pertemuan, tanyakan pada diri sendiri:&lt;/h3&gt;
      &lt;ul &gt;
        &lt;li&gt;Bidang Informatika mana yang paling menarik perhatianku, dan mengapa?&lt;/li&gt;
        &lt;li&gt;Kebiasaan kerja digital apa yang sudah kulakukan, dan apa yang perlu kulatih?&lt;/li&gt;
        &lt;li&gt;Satu praktik keamanan digital apa yang akan mulai kuterapkan mulai hari ini?&lt;/li&gt;
        &lt;li&gt;Profesi TI mana yang ingin kuketahui lebih dalam?&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;

  &lt;/main&gt;

  &lt;footer&gt;Modul Informatika Kelas X SMK · Pertemuan 4 JP · Elemen Dampak Sosial Informatika&lt;/footer&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description><link>http://kitab-investasi.blogspot.com/2026/07/pengantar-informatika-budaya-kerja.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9000860041661554971.post-8908856282371387948</guid><pubDate>Fri, 17 Jul 2026 03:50:29 +0000</pubDate><atom:updated>2026-07-17T10:50:29.936+07:00</atom:updated><title>MATERI DAN TUJUAN PEMBELAJARAN Informatika Kelas X SMK Semester 1 2026-2027</title><description>&lt;h2 style="text-align: justify;"&gt;&amp;nbsp;Informatika Kelas X SMK Semester 1&lt;/h2&gt;
&lt;p data-end="374" data-start="351" style="text-align: justify;"&gt;&lt;strong data-end="374" data-start="351"&gt;18 Pertemuan × 4 JP&lt;/strong&gt;&lt;/p&gt;
&lt;div class="TyagGW_tableContainer"&gt;&lt;div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"&gt;&lt;table class="w-fit min-w-(--thread-content-width)" data-end="4713" data-start="376" style="text-align: justify;"&gt;&lt;thead data-end="426" data-start="376"&gt;&lt;tr data-end="426" data-start="376"&gt;&lt;th class="last:pe-10" data-col-size="sm" data-end="388" data-start="376"&gt;Pertemuan&lt;/th&gt;&lt;th class="last:pe-10" data-col-size="md" data-end="403" data-start="388"&gt;Judul Materi&lt;/th&gt;&lt;th class="last:pe-10" data-col-size="xl" data-end="426" data-start="403"&gt;Tujuan Pembelajaran&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody data-end="4713" data-start="478"&gt;&lt;tr data-end="792" data-start="478"&gt;&lt;td data-col-size="sm" data-end="486" data-start="478"&gt;&lt;strong data-end="485" data-start="480"&gt;1&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="576" data-start="486"&gt;&lt;strong data-end="575" data-start="488"&gt;Pengantar Informatika, Budaya Kerja Digital, Etika, dan Profesi Teknologi Informasi&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="792" data-start="576"&gt;Peserta didik mampu menjelaskan ruang lingkup Informatika, perkembangan teknologi digital, profesi di bidang TIK, serta menerapkan etika digital, hak kekayaan intelektual, dan keamanan dalam penggunaan teknologi.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="1046" data-start="793"&gt;&lt;td data-col-size="sm" data-end="801" data-start="793"&gt;&lt;strong data-end="800" data-start="795"&gt;2&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="850" data-start="801"&gt;&lt;strong data-end="849" data-start="803"&gt;Sistem Komputer dan Arsitektur Von Neumann&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="1046" data-start="850"&gt;Peserta didik mampu menjelaskan komponen sistem komputer, model input-proses-output, fungsi perangkat keras, perangkat lunak, brainware, serta hubungan antar komponennya dalam sistem komputer.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="1273" data-start="1047"&gt;&lt;td data-col-size="sm" data-end="1055" data-start="1047"&gt;&lt;strong data-end="1054" data-start="1049"&gt;3&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="1115" data-start="1055"&gt;&lt;strong data-end="1114" data-start="1057"&gt;Sistem Operasi, Manajemen File, dan Penyimpanan Cloud&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="1273" data-start="1115"&gt;Peserta didik mampu mengelola sistem operasi, file, folder, media penyimpanan, serta memanfaatkan layanan cloud storage untuk mendukung pekerjaan digital.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="1531" data-start="1274"&gt;&lt;td data-col-size="sm" data-end="1282" data-start="1274"&gt;&lt;strong data-end="1281" data-start="1276"&gt;4&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="1338" data-start="1282"&gt;&lt;strong data-end="1337" data-start="1284"&gt;Jaringan Komputer, Internet, dan Keamanan Digital&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="1531" data-start="1338"&gt;Peserta didik mampu menjelaskan konsep jaringan komputer, konektivitas internet, perangkat jaringan, komunikasi data, serta menerapkan keamanan dasar dan enkripsi dalam penggunaan jaringan.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="1758" data-start="1532"&gt;&lt;td data-col-size="sm" data-end="1540" data-start="1532"&gt;&lt;strong data-end="1539" data-start="1534"&gt;5&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="1596" data-start="1540"&gt;&lt;strong data-end="1595" data-start="1542"&gt;Pencarian Informasi Digital dan Kolaborasi Daring&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="1758" data-start="1596"&gt;Peserta didik mampu memanfaatkan mesin pencari, peramban, layanan komunikasi digital, dan media kolaborasi daring secara efektif, aman, dan bertanggung jawab.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="1989" data-start="1759"&gt;&lt;td data-col-size="sm" data-end="1767" data-start="1759"&gt;&lt;strong data-end="1766" data-start="1761"&gt;6&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="1838" data-start="1767"&gt;&lt;strong data-end="1837" data-start="1769"&gt;Pengenalan Aplikasi Pengolah Kata untuk Administrasi Perkantoran&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="1989" data-start="1838"&gt;Peserta didik mampu membuat, mengedit, memformat, dan menyimpan dokumen administrasi menggunakan aplikasi pengolah kata sesuai standar perkantoran.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="2234" data-start="1990"&gt;&lt;td data-col-size="sm" data-end="1998" data-start="1990"&gt;&lt;strong data-end="1997" data-start="1992"&gt;7&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="2057" data-start="1998"&gt;&lt;strong data-end="2056" data-start="2000"&gt;Fitur Lanjut Pengolah Kata untuk Dokumen Profesional&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="2234" data-start="2057"&gt;Peserta didik mampu menggunakan style, heading, daftar isi otomatis, tabel, gambar, mail merge, referensi, dan fitur otomatis lainnya untuk menghasilkan dokumen profesional.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="2450" data-start="2235"&gt;&lt;td data-col-size="sm" data-end="2243" data-start="2235"&gt;&lt;strong data-end="2242" data-start="2237"&gt;8&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="2293" data-start="2243"&gt;&lt;strong data-end="2292" data-start="2245"&gt;Integrasi Dokumen dan Otomasi Pengolah Kata&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="2450" data-start="2293"&gt;Peserta didik mampu mengintegrasikan berbagai objek, menggunakan template, formulir, serta fitur otomatis untuk meningkatkan efisiensi pembuatan dokumen.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="2630" data-start="2451"&gt;&lt;td data-col-size="sm" data-end="2459" data-start="2451"&gt;&lt;strong data-end="2458" data-start="2453"&gt;9&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="2504" data-start="2459"&gt;&lt;strong data-end="2503" data-start="2461"&gt;Ulangan Bab I – Aplikasi Pengolah Kata&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="2630" data-start="2504"&gt;Peserta didik mampu menunjukkan penguasaan kompetensi penggunaan aplikasi pengolah kata melalui asesmen teori dan praktik.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="2847" data-start="2631"&gt;&lt;td data-col-size="sm" data-end="2640" data-start="2631"&gt;&lt;strong data-end="2639" data-start="2633"&gt;10&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="2695" data-start="2640"&gt;&lt;strong data-end="2694" data-start="2642"&gt;Pengenalan Aplikasi Pengolah Angka (Spreadsheet)&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="2847" data-start="2695"&gt;Peserta didik mampu mengolah data menggunakan format sel, rumus dasar, fungsi matematika, logika, dan statistik sederhana pada aplikasi spreadsheet.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="3066" data-start="2848"&gt;&lt;td data-col-size="sm" data-end="2857" data-start="2848"&gt;&lt;strong data-end="2856" data-start="2850"&gt;11&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="2906" data-start="2857"&gt;&lt;strong data-end="2905" data-start="2859"&gt;Analisis Data dan Fitur Lanjut Spreadsheet&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="3066" data-start="2906"&gt;Peserta didik mampu menerapkan fungsi lanjutan, lookup, sort, filter, conditional formatting, grafik, dan PivotTable untuk menganalisis data secara efektif.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="3277" data-start="3067"&gt;&lt;td data-col-size="sm" data-end="3076" data-start="3067"&gt;&lt;strong data-end="3075" data-start="3069"&gt;12&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="3123" data-start="3076"&gt;&lt;strong data-end="3122" data-start="3078"&gt;Ulangan Bab II – Aplikasi Pengolah Angka&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="3277" data-start="3123"&gt;Peserta didik mampu menunjukkan penguasaan kompetensi pengolahan dan analisis data menggunakan aplikasi spreadsheet melalui asesmen teori dan praktik.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="3491" data-start="3278"&gt;&lt;td data-col-size="sm" data-end="3287" data-start="3278"&gt;&lt;strong data-end="3286" data-start="3280"&gt;13&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="3334" data-start="3287"&gt;&lt;strong data-end="3333" data-start="3289"&gt;Aplikasi Pengolah Presentasi Profesional&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="3491" data-start="3334"&gt;Peserta didik mampu merancang presentasi yang komunikatif menggunakan tema, slide master, multimedia, animasi, transisi, hyperlink, dan fitur kolaborasi.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="3735" data-start="3492"&gt;&lt;td data-col-size="sm" data-end="3501" data-start="3492"&gt;&lt;strong data-end="3500" data-start="3494"&gt;14&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="3564" data-start="3501"&gt;&lt;strong data-end="3563" data-start="3503"&gt;Integrasi Aplikasi Perkantoran dan Produktivitas Digital&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="3735" data-start="3564"&gt;Peserta didik mampu mengintegrasikan dokumen pengolah kata, spreadsheet, dan presentasi serta memanfaatkan layanan cloud untuk menghasilkan dokumen kerja yang terpadu.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="3995" data-start="3736"&gt;&lt;td data-col-size="sm" data-end="3745" data-start="3736"&gt;&lt;strong data-end="3744" data-start="3738"&gt;15&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="3801" data-start="3745"&gt;&lt;strong data-end="3800" data-start="3747"&gt;Berpikir Komputasional dalam Penyelesaian Masalah&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="3995" data-start="3801"&gt;Peserta didik mampu menerapkan dekomposisi, pengenalan pola, abstraksi, dan algoritma untuk menyelesaikan permasalahan yang melibatkan data dalam konteks pekerjaan dan kehidupan sehari-hari.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="4204" data-start="3996"&gt;&lt;td data-col-size="sm" data-end="4005" data-start="3996"&gt;&lt;strong data-end="4004" data-start="3998"&gt;16&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="4064" data-start="4005"&gt;&lt;strong data-end="4063" data-start="4007"&gt;Algoritma Searching dan Sorting pada Pengolahan Data&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="4204" data-start="4064"&gt;Peserta didik mampu menerapkan algoritma pencarian dan pengurutan data sebagai dasar pengolahan informasi secara sistematis dan efisien.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="4477" data-start="4205"&gt;&lt;td data-col-size="sm" data-end="4214" data-start="4205"&gt;&lt;strong data-end="4213" data-start="4207"&gt;17&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="4261" data-start="4214"&gt;&lt;strong data-end="4260" data-start="4216"&gt;Proyek Terintegrasi Aplikasi Perkantoran&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="4477" data-start="4261"&gt;Peserta didik mampu menghasilkan proyek administrasi digital berupa laporan, analisis data, dan presentasi dengan mengintegrasikan aplikasi pengolah kata, spreadsheet, dan presentasi sesuai kebutuhan dunia kerja.&lt;/td&gt;&lt;/tr&gt;&lt;tr data-end="4713" data-start="4478"&gt;&lt;td data-col-size="sm" data-end="4487" data-start="4478"&gt;&lt;strong data-end="4486" data-start="4480"&gt;18&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="md" data-end="4546" data-start="4487"&gt;&lt;strong data-end="4545" data-start="4489"&gt;Asesmen Sumatif Akhir Semester dan Presentasi Proyek&lt;/strong&gt;&lt;/td&gt;&lt;td data-col-size="xl" data-end="4713" data-start="4546"&gt;Peserta didik mampu mempresentasikan hasil proyek, menyusun portofolio digital, serta menunjukkan penguasaan kompetensi semester melalui asesmen praktik dan teori.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 data-end="4732" data-section-id="1dfkpdp" data-start="4715" style="text-align: justify;"&gt;Pembagian Bab&lt;/h3&gt;
&lt;ul data-end="5180" data-start="4734"&gt;
&lt;li data-end="4838" data-section-id="h0ktz3" data-start="4734" style="text-align: justify;"&gt;
&lt;strong data-end="4746" data-start="4736"&gt;Bab I:&lt;/strong&gt; Konsep Dasar Informatika, Sistem Komputer, Jaringan, dan Kolaborasi Digital (Pertemuan 1–5)
&lt;/li&gt;
&lt;li data-end="4891" data-section-id="198n676" data-start="4839" style="text-align: justify;"&gt;
&lt;strong data-end="4852" data-start="4841"&gt;Bab II:&lt;/strong&gt; Aplikasi Pengolah Kata (Pertemuan 6–9)
&lt;/li&gt;
&lt;li data-end="4960" data-section-id="1344r2i" data-start="4892" style="text-align: justify;"&gt;
&lt;strong data-end="4906" data-start="4894"&gt;Bab III:&lt;/strong&gt; Aplikasi Pengolah Angka/Spreadsheet (Pertemuan 10–12)
&lt;/li&gt;
&lt;li data-end="5047" data-section-id="1hhpm7y" data-start="4961" style="text-align: justify;"&gt;
&lt;strong data-end="4974" data-start="4963"&gt;Bab IV:&lt;/strong&gt; Aplikasi Presentasi dan Integrasi Aplikasi Perkantoran (Pertemuan 13–14)
&lt;/li&gt;
&lt;li data-end="5101" data-section-id="1rl7t2e" data-start="5048" style="text-align: justify;"&gt;
&lt;strong data-end="5060" data-start="5050"&gt;Bab V:&lt;/strong&gt; Berpikir Komputasional (Pertemuan 15–16)
&lt;/li&gt;
&lt;li data-end="5180" data-section-id="10ph39r" data-start="5102" style="text-align: justify;"&gt;
&lt;strong data-end="5115" data-start="5104"&gt;Bab VI:&lt;/strong&gt; Proyek Terintegrasi dan Asesmen Akhir Semester (Pertemuan 17–18)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end="5589" data-is-last-node="" data-is-only-node="" data-start="5182" style="text-align: justify;"&gt;Struktur ini lebih sesuai untuk pembelajaran SMK karena sekitar &lt;strong data-end="5398" data-start="5246"&gt;65–70% waktu pembelajaran difokuskan pada kompetensi aplikasi perkantoran (Word, Spreadsheet, Presentasi, integrasi dokumen, dan kolaborasi digital)&lt;/strong&gt;, sementara konsep dasar Informatika, sistem komputer, jaringan, dan berpikir komputasional tetap diberikan sebagai fondasi yang mendukung keterampilan kerja di lingkungan perkantoran modern.&lt;/p&gt;</description><link>http://kitab-investasi.blogspot.com/2026/07/materi-dan-tujuan-pembelajaran.html</link><thr:total>0</thr:total><author>nof_rizal07@yahoo.co.id (abang_cool)</author></item></channel></rss>