<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5341061453048343895</id><updated>2026-04-18T18:17:03.384+08:00</updated><category term="Berita"/><category term="Kesihatan"/><category term="Info Berguna"/><category term="Guru"/><category term="Download"/><category term="COVID-19"/><category term="KKM"/><category term="KPM"/><category term="Sekolah"/><category term="Pendidikan"/><category term="Perkhidmatan Awam"/><category term="Alamat"/><category term="Murid"/><category term="Islam"/><category term="Panduan"/><category term="Pejabat Pos Selangor"/><category term="Kenyataan Media"/><category term="Pejabat Pos Perak"/><category term="Pejabat Pos Johor"/><category term="Sekolah Berasrama Penuh"/><category term="Tips Berguna"/><category term="Alat Online"/><category term="KSSR"/><category term="Sarawak"/><category term="aplikasi"/><category term="Kluster"/><category term="Bangunan"/><category term="Pejabat Pos Sarawak"/><category term="Sabah"/><category term="Tempat Menarik"/><category term="Selangor"/><category term="Kewangan"/><category term="Negeri Sembilan"/><category term="KSSM"/><category term="Keselamatan"/><category term="PDRM"/><category term="KSSR Semakan 2017"/><category term="Pulau Pinang"/><category term="Perak"/><category term="Polis"/><category term="Kalendar"/><category term="Pahang"/><category term="Divider RPH"/><category term="Pejabat Pos Kedah"/><category term="Pejabat Pos Sabah"/><category term="Putrajaya"/><category term="Terengganu"/><category term="Johor"/><category term="Melaka"/><category term="Pejabat Pos Pahang"/><category term="Kuala Lumpur"/><category term="Pejabat Pos"/><category term="Agensi"/><category term="Pelaporan PBD"/><category term="Kedah"/><category term="Kelantan"/><category term="Keputusan"/><category term="Pejabat Pos Penang"/><category term="JPA"/><category term="Kalkulator"/><category term="Kemudahan Awam"/><category term="Perlis"/><category term="Tutorial"/><category term="Fail Rph"/><category term="Viral"/><category term="DLP"/><category term="Jerebu"/><category term="Pejabat Pos Negeri Sembilan"/><category term="Peperiksaan"/><category term="Cuti"/><category term="Hukum &amp; Fatwa"/><category term="Poslaju"/><category term="PPD Sarawak"/><category term="PdPc"/><category term="Gaji"/><category term="BSN"/><category term="Hospital"/><category term="Pejabat Pos Kelantan"/><category term="Pejabat Pos Melaka"/><category term="Pejabat Pos Terengganu"/><category term="PPD"/><category term="Pencen"/><category term="KSSM Semakan 2017"/><category term="Kerjaya"/><category term="SOP"/><category term="PPD Sabah"/><category term="jpj"/><category term="Pekeliling"/><category term="TAHUN 1"/><category term="KWSP"/><category term="Kehakiman"/><category term="Politik"/><category term="Tular"/><category term="Bank Islam"/><category term="Jabatan Pendaftaran Negara"/><category term="VIDEO"/><category term="DELIMa KPM"/><category term="Protokol"/><category term="TAHUN 3"/><category term="Nama Pilihan Lelaki"/><category term="AADK"/><category term="Ringkasan Tugas"/><category term="TAHUN 2"/><category term="DSKP KSSR"/><category term="Ekonomi"/><category term="Koleksi"/><category term="LPPSA"/><category term="Prasekolah"/><category term="Tabung Haji"/><category term="ASB"/><category term="Bahagian Teknologi Pendidikan"/><category term="Bomba"/><category term="Eco Shop"/><category term="Kanak-kanak"/><category term="Klinik Kesihatan"/><category term="LHDN"/><category term="Matematik"/><category term="PUSPAKOM"/><category term="Permata"/><category term="Pusat Servis"/><category term="Sukan"/><category term="Suruhanjaya Pilihan Raya"/><category term="TAHUN 4"/><category term="TINGKATAN 4"/><category term="peguam"/><category term="ASNB"/><category term="BI"/><category term="Bank Rakyat"/><category term="Buku Teks"/><category term="CIMB BANK"/><category term="CITY-LINK EXPRESS"/><category term="Cerita Seram"/><category term="Fakta Menarik"/><category term="GDEX"/><category term="Huawei Service Center"/><category term="JKM"/><category term="Jadual Berbuka Puasa"/><category term="KLINIK PERGIGIAN"/><category term="Kastam"/><category term="Little Caliphs"/><category term="Maybank"/><category term="NATIONWIDE EXPRESS"/><category term="Pihak Berkuasa Tempatan"/><category term="Pingat Kebesaran"/><category term="Public Bank"/><category term="Sekolah Kluster Kecemerlangan"/><category term="TAHUN 5"/><category term="TINGKATAN 5"/><category term="Teknologi"/><category term="Tokoh"/><category term="Toyota"/><category term="Aplikasi Web"/><category term="Cerita Lawak"/><category term="Darjah Kebesaran"/><category term="Hospital Swasta"/><category term="Insuran"/><category term="Mahkamah Majistret"/><category term="Mahkamah Rendah"/><category term="Mahkamah Sesyen"/><category term="OKU"/><category term="PKG"/><category term="PTPTN"/><category term="Pejabat Pos Mini"/><category term="Pusat Kegiatan Guru"/><category term="Rela"/><category term="TAHUN 6"/><category term="Taman Tempatan"/><category term="Agrobank"/><category term="Asrama"/><category term="Bantuan"/><category term="DSKP KSSM"/><category term="Google Classroom"/><category term="Kolej Komuniti"/><category term="Lembaga Pertubuhan Peladang"/><category term="PRU14"/><category term="Prudential"/><category term="RISDA"/><category term="RPT"/><category term="Rph"/><category term="SENHENG"/><category term="SIJIL SIMPANAN PREMIUM (SSP)"/><category term="TINGKATAN 1"/><category term="TM Point"/><category term="Tahfiz"/><category term="masjid"/><category term="Dokumen Penjajaran Kurikulum"/><category term="Genius Aulad"/><category term="JPSM"/><category term="PDK"/><category term="Pejabat Agama Islam Daerah"/><category term="Pelancongan"/><category term="Pos ArRahnu"/><category term="Sambutan"/><category term="Vivo Service Center"/><category term="aL-ikhsaN"/><category term="Anugerah"/><category term="Gaji dan Pencen"/><category term="Hutan Lipur"/><category term="PPD Johor"/><category term="PPD Pahang"/><category term="PPD Perak"/><category term="Samsung Express Service Center"/><category term="BBM"/><category term="JAKIM"/><category term="KBD"/><category term="Kelas"/><category term="PPD Kelantan"/><category term="PPD Selangor"/><category term="Pendidikan Khas"/><category term="Raja Melayu"/><category term="Semasa"/><category term="haiwan"/><category term="Alam Sekitar"/><category term="KBT"/><category term="Labuan"/><category term="Merdeka"/><category term="PPD Kedah"/><category term="PPD Pulau Pinang"/><category term="TINGKATAN 2"/><category term="TINGKATAN 3"/><category term="CEFR"/><category term="Digital Learning"/><category term="Kalendar 2022"/><category term="Kedutaan"/><category term="Lagu"/><category term="PPD Terengganu"/><category term="PT3"/><category term="Perhilitan"/><category term="SENQ"/><category term="Sejarah"/><category term="Soalan Lazim"/><category term="Veterinar"/><category term="IPT"/><category term="Kalendar 2021"/><category term="Modul"/><category term="Modul Guru"/><category term="Penjawat Awam"/><category term="Permohonan"/><category term="Surat"/><category term="Apps"/><category term="Bencana"/><category term="Borang"/><category term="DBKL"/><category term="Kedutaan Malaysia Luar Negara"/><category term="Kolej Matrikulasi"/><category term="NUTP KPPK"/><category term="PKP"/><category term="PPD Negeri Sembilan"/><category term="Pendidikan Sivik"/><category term="SPM"/><category term="SUPER MINDS"/><category term="Tips"/><category term="Tools"/><category term="UPSR"/><category term="Worksheet"/><category term="kalendar 2019"/><category term="Aktiviti"/><category term="Al-Awfar"/><category term="DPK 2.0"/><category term="Digital Tools"/><category term="Institut Perguruan"/><category term="MPV"/><category term="Mahkamah"/><category term="Sekolah Seni"/><category term="BM"/><category term="Bahasa Melayu"/><category term="Belanjawan"/><category term="Doa"/><category term="Free Tools"/><category term="HRMIS"/><category term="Hari Lahir"/><category term="Hartanah"/><category term="Kebersihan"/><category term="Kesihatan Mental"/><category term="Kompleks Sukan"/><category term="Penerbangan"/><category term="SSPA"/><category term="TASKA"/><category term="ASB2"/><category term="ATM"/><category term="Alam Semesta"/><category term="Automotif"/><category term="BNM"/><category term="Bank Negara"/><category term="Bendera Malaysia"/><category term="Blogger Tips"/><category term="Buku"/><category term="Ebit Lew"/><category term="Flash Card"/><category term="Ibu Bapa"/><category term="Imigresen"/><category term="Info Semasa"/><category term="Jabatan Alam Sekitar"/><category term="Jalur Gemilang"/><category term="KBAT"/><category term="KDN"/><category term="KPDNHEP"/><category term="KSPK"/><category term="Kalendar 2020"/><category term="Keluarga"/><category term="Lokasi"/><category term="MPAK"/><category term="MPEI"/><category term="MPET"/><category term="Mewarna"/><category term="PPD Kuala Lumpur"/><category term="PPD Melaka"/><category term="Pendidikan Muzik"/><category term="Pertanian"/><category term="Produktiviti"/><category term="QR CODE"/><category term="Sains"/><category term="Tazkirah"/><category term="Tips Simpanan"/><category term="UTC"/><category term="UiTM"/><category term="Vokasional"/><category term="Waktu Solat"/><category term="telekomunikasi"/><category term="test eyes"/><category term="uji mata"/><category term="Bendera"/><category term="Cuaca"/><category term="DBP"/><category term="DIY"/><category term="Disiplin"/><category term="Emis/SMPP"/><category term="GCR"/><category term="Generator"/><category term="Gerhana"/><category term="Honda"/><category term="Istana"/><category term="JTK"/><category term="Jabatan Landskap Negara"/><category term="Jawatan Kosong"/><category term="Jawatan Luar Norma"/><category term="KBS"/><category term="KELAS PERALIHAN"/><category term="KSKP"/><category term="Kalendar 2024"/><category term="Khidmat Pos Lain"/><category term="Kokurikulum"/><category term="MITI"/><category term="MT"/><category term="PASTI"/><category term="Pelajar"/><category term="Pertandingan"/><category term="Petua"/><category term="Pilihanraya"/><category term="Poster"/><category term="SBP"/><category term="SPLKPM"/><category term="SPR"/><category term="SRITI"/><category term="STAM"/><category term="Servis"/><category term="UPKK"/><category term="Zakat"/><category term="kod gitar"/><category term="2026"/><category term="AES AWAS"/><category term="APDM"/><category term="APM"/><category term="ASK"/><category term="ASRAMA HARIAN"/><category term="Agama"/><category term="Android Phone"/><category term="BBM Interaktif"/><category term="Bantuan Sekolah"/><category term="Bisnes Online"/><category term="Carta"/><category term="Currency"/><category term="Darab"/><category term="Dialek"/><category term="Diet"/><category term="Elaun"/><category term="English"/><category term="FRIM"/><category term="Fail Koko"/><category term="Fail Panitia"/><category term="Gaya Hidup"/><category term="Hiburan"/><category term="Homeopathy"/><category term="JKKN"/><category term="JKR"/><category term="Jabatan Agama Islam Negeri"/><category term="Jabatan Pelajaran Negeri"/><category term="Jual Tanah"/><category term="KATS"/><category term="KBDMA &amp; TED"/><category term="KSSMPK"/><category term="Kalendar 2023"/><category term="Kecerdasan Pelbagai"/><category term="Kereta"/><category term="Kewangan Islam"/><category term="Klinik Veterinar"/><category term="Komuniti"/><category term="Lifestyle"/><category term="MARA"/><category term="MESTECC"/><category term="MET"/><category term="MKKM"/><category term="MOF"/><category term="MRSM"/><category term="Mahkamah Tinggi"/><category term="MyGovuc"/><category term="Nilai Tempat"/><category term="PAK21"/><category term="PAROL"/><category term="PENDUDUK"/><category term="PENJARA"/><category term="POPULASI"/><category term="PPD Barat Daya"/><category term="PPD Seberang Perai Selatan"/><category term="PPD Seberang Perai Tengah"/><category term="PPD Seberang Perai Utara"/><category term="PPD Timur Laut"/><category term="PUSAKA"/><category term="Pasar Malam"/><category term="Pejabat Daerah dan Tanah"/><category term="Pejabat Laut"/><category term="Pejabat Pendidikan Daerah"/><category term="Pengurusan Stres"/><category term="Perbankan Internet"/><category term="Perodua"/><category term="Persaraan"/><category term="Phone"/><category term="Pinjaman"/><category term="Proton"/><category term="Psikologi"/><category term="Resipi"/><category term="SME Corp"/><category term="SMITI"/><category term="SPAD"/><category term="SRA"/><category term="SSM"/><category term="STEM"/><category term="Sekolah Rendah"/><category term="Shopping"/><category term="Syarikat Air"/><category term="TEKUN"/><category term="Tahap 1"/><category term="Tips Kereta"/><category term="Tourism"/><category term="UPP"/><category term="UPSR 2018"/><category term="UPSR 2019"/><category term="UPUOnline"/><category term="astronomi"/><category term="cari beza"/><category term="dcs"/><category term="deco"/><category term="direktori"/><category term="e-Penyata Gaji"/><category term="hotline"/><category term="lebuhraya"/><category term="lirik"/><category term="spot number"/><category term="2022"/><category term="ADHD Dewasa"/><category term="ADHD Inatentif"/><category term="ADHD Malaysia"/><category term="AI Tools"/><category term="AKPK"/><category term="AOC"/><category term="APAD"/><category term="Acer DX900"/><category term="Airport"/><category term="Akademi Kenegaraan"/><category term="Akronim"/><category term="Aktiviti Sekolah"/><category term="Alat Digital"/><category term="Android"/><category term="Anxiety"/><category term="Apps Cikgu Digital"/><category term="Apps Guru"/><category term="Apps Malaysia"/><category term="Apps Sekolah"/><category term="BAP"/><category term="BMI"/><category term="BSH"/><category term="BSTEM"/><category term="BTPN"/><category term="Bahagi"/><category term="Bahan Guru"/><category term="Bajet"/><category term="Bajet Kahwin"/><category term="Banding Nombor"/><category term="Bank"/><category term="Bantuan Awal Persekolahan"/><category term="Bantuan Kerajaan"/><category term="Belajar Gitar"/><category term="Beli Rumah Pertama"/><category term="Bengkel Rasmi"/><category term="Berbuka Puasa"/><category term="Bing AI"/><category term="Biro Pengaduan Awam"/><category term="Bisnes"/><category term="Bundar Nombor"/><category term="Burnout vs Malas"/><category term="CDM"/><category term="CKHT"/><category term="CRK"/><category term="CT Scan"/><category term="CUEPACS"/><category term="Checklist Kehamilan"/><category term="Chord Gitar"/><category term="Cikgu"/><category term="Cikgu Digital"/><category term="Comic"/><category term="Countdown Pencen"/><category term="Cukai"/><category term="Cukai Jalan"/><category term="Cuti Umum"/><category term="DASS-21"/><category term="DHL"/><category term="DSR"/><category term="Daiso"/><category term="Darah Tinggi"/><category term="Depression"/><category term="Dewan Rakyat"/><category term="Didi &amp; Friends"/><category term="Digi Store"/><category term="Digital Maker Hub"/><category term="Dokumen Rasmi"/><category term="Doodles"/><category term="Driver"/><category term="Duit"/><category term="E-dagang"/><category term="ELEWSMART"/><category term="Empangan"/><category term="Evolusi Manusia"/><category term="Fakta Psikologi"/><category term="Fakta Sains"/><category term="Faraid"/><category term="Farmasi"/><category term="Fisioterapi"/><category term="Fitness"/><category term="Food Review"/><category term="GIMNASTIK"/><category term="GLC"/><category term="GPS"/><category term="GPS Tools"/><category term="Game Edukasi"/><category term="Game Sekolah Rendah"/><category term="Gaya Hidup Sihat"/><category term="Generator Surat"/><category term="Geologi"/><category term="Get Smart Plus 3"/><category term="Gitar"/><category term="Google Meet"/><category term="Gred DG12"/><category term="HR"/><category term="Hal Ehwal Murid"/><category term="Halal"/><category term="Hantaran"/><category term="Hardware"/><category term="Hari Akademia"/><category term="Hari Malaysia"/><category term="Harta Pusaka"/><category term="Hatyai"/><category term="Hektar ke Ekar"/><category term="Hiasan Kelas"/><category term="Hobi"/><category term="Homestay"/><category term="Hotel Wakaf"/><category term="Hotlink"/><category term="Hukum Islam"/><category term="IDME"/><category term="IKM"/><category term="ILKBS"/><category term="Ibu Mengandung"/><category term="Imsak"/><category term="Info Kerajaan"/><category term="Inovasi Digital"/><category term="Invois &amp; Resit"/><category term="J&amp;T Express"/><category term="JAKEL"/><category term="JAS"/><category term="JPWP Labuan"/><category term="JPWP Putrajaya"/><category term="JUPEM"/><category term="Jabatan Perdana Menteri"/><category term="Jabatan Pertanian Sabah"/><category term="Jadual Gaji"/><category term="Jadual Waktu"/><category term="Jalan Jalan Cari Makan"/><category term="Jalan Raya"/><category term="Jawatan Dalam Norma"/><category term="Jual Kereta"/><category term="KETSA"/><category term="KIU"/><category term="KKMM"/><category term="KKR"/><category term="KKTM"/><category term="KLN"/><category term="KOLAM RENANG"/><category term="KPD"/><category term="KPKT"/><category term="KPLB"/><category term="KPWKM"/><category term="KSPK 2026"/><category term="KWP"/><category term="Kaison"/><category term="Kajian"/><category term="Kalendar 2018"/><category term="Kalendar 2026"/><category term="Kalkulator Digital"/><category term="Kalkulator EDD"/><category term="Kalkulator Viral"/><category term="Kalori"/><category term="Kamus"/><category term="Karaoke"/><category term="KeTTHA"/><category term="Kecemasan"/><category term="Kedai"/><category term="Kedai Murah"/><category term="Kehamilan"/><category term="Keibubapaan"/><category term="Keletihan Mental"/><category term="Kem Wawasan Negara"/><category term="Kenaikan Gaji"/><category term="Kenaikan Pangkat"/><category term="Kerajaan"/><category term="Kereta Terpakai"/><category term="Kerjaya &amp; Pendidikan"/><category term="Kesihatan Emosi"/><category term="Klinik"/><category term="Kolam Air Panas"/><category term="Kolej"/><category term="Kraftangan"/><category term="Kurier"/><category term="Kurikulum 2027"/><category term="LINUS"/><category term="LKIM"/><category term="LKTN"/><category term="LPNM"/><category term="LTAT"/><category term="Laporan Kursus"/><category term="Lawyer Fee"/><category term="Leonardo AI"/><category term="Logo"/><category term="MENTARI"/><category term="MINDEF"/><category term="MJII"/><category term="MKA"/><category term="MKN"/><category term="MOA"/><category term="MOBIM"/><category term="MOHR"/><category term="MOT"/><category term="MOTAC"/><category term="MP3"/><category term="MSN"/><category term="Mahkamah Rayuan"/><category term="Makan Best"/><category term="Makanan Malaysia"/><category term="Mammografi"/><category term="Market Value"/><category term="Masalah Tidur"/><category term="Maxis Store"/><category term="Media Sosial"/><category term="Midjourney"/><category term="Mileage"/><category term="Minit Curai"/><category term="Misteri Tubuh Badan"/><category term="Modul KPM"/><category term="Motivasi"/><category term="Mr DIY"/><category term="Muzik"/><category term="Muzium"/><category term="MyBayarSaman"/><category term="MyPPB"/><category term="MyPortfolio"/><category term="Mydin"/><category term="NGO"/><category term="Nama Yang Dilarang"/><category term="Neurosains"/><category term="Nilai Digit"/><category term="Ninja Van"/><category term="Ninja Warrior"/><category term="Nokia"/><category term="Nota Serah Tugas"/><category term="Note 10+"/><category term="Omar &amp; Hana"/><category term="Oppo Service Center"/><category term="Overtime"/><category term="PAGN"/><category term="PAK-21"/><category term="PAV"/><category term="PDF Generator"/><category term="PK07/3"/><category term="PNB"/><category term="PPD Alor Gajah"/><category term="PPD Bachok"/><category term="PPD Bagan Datuk"/><category term="PPD Baling"/><category term="PPD Baram"/><category term="PPD Batang Padang"/><category term="PPD Batu Pahat"/><category term="PPD Bau"/><category term="PPD Beaufort"/><category term="PPD Belaga"/><category term="PPD Bentong"/><category term="PPD Bera"/><category term="PPD Besut"/><category term="PPD Betong"/><category term="PPD Bintulu"/><category term="PPD Cameron Highlands"/><category term="PPD Dalat"/><category term="PPD Daro"/><category term="PPD Dungun"/><category term="PPD Gombak"/><category term="PPD Gua Musang"/><category term="PPD Hilir Perak"/><category term="PPD Hulu Langat"/><category term="PPD Hulu Perak"/><category term="PPD Hulu Selangor"/><category term="PPD Hulu Terengganu"/><category term="PPD Jasin"/><category term="PPD Jeli"/><category term="PPD Jempol / Jelebu"/><category term="PPD Jerantut"/><category term="PPD Johor Bahru"/><category term="PPD Julau"/><category term="PPD Kanowit"/><category term="PPD Kapit"/><category term="PPD Kemaman"/><category term="PPD Keningau"/><category term="PPD Kinabatangan"/><category term="PPD Kinta Selatan"/><category term="PPD Kinta Utara"/><category term="PPD Klang"/><category term="PPD Kluang"/><category term="PPD Kota Belud"/><category term="PPD Kota Bharu"/><category term="PPD Kota Kinabalu"/><category term="PPD Kota Marudu"/><category term="PPD Kota Setar"/><category term="PPD Kota Tinggi"/><category term="PPD Krian"/><category term="PPD Kuala Kangsar"/><category term="PPD Kuala Krai"/><category term="PPD Kuala Langat"/><category term="PPD Kuala Muda / Yan"/><category term="PPD Kuala Nerus"/><category term="PPD Kuala Penyu"/><category term="PPD Kuala Pilah"/><category term="PPD Kuala Selangor"/><category term="PPD Kuala Terengganu"/><category term="PPD Kuantan"/><category term="PPD Kubang Pasu"/><category term="PPD Kuching"/><category term="PPD Kudat"/><category term="PPD Kulai"/><category term="PPD Kulim / Bandar Baharu"/><category term="PPD Kunak"/><category term="PPD Labuk &amp; Sugut"/><category term="PPD Lahad Datu"/><category term="PPD Langkawi"/><category term="PPD Larut / Matang / Selama"/><category term="PPD Lawas"/><category term="PPD Limbang"/><category term="PPD Lipis"/><category term="PPD Lubok Antu"/><category term="PPD Lundu"/><category term="PPD Machang"/><category term="PPD Manjung"/><category term="PPD Maradong"/><category term="PPD Maran"/><category term="PPD Marang"/><category term="PPD Melaka Tengah"/><category term="PPD Mersing"/><category term="PPD Miri"/><category term="PPD Muar"/><category term="PPD Mukah"/><category term="PPD Padang Terap"/><category term="PPD Padawan"/><category term="PPD Papar"/><category term="PPD Pasir Gudang"/><category term="PPD Pasir Mas"/><category term="PPD Pasir Putih"/><category term="PPD Pekan"/><category term="PPD Penampang"/><category term="PPD Pendang"/><category term="PPD Pensiangan"/><category term="PPD Perak Tengah"/><category term="PPD Perlis"/><category term="PPD Petaling Perdana"/><category term="PPD Petaling Utama"/><category term="PPD Pitas"/><category term="PPD Pontian"/><category term="PPD Port Dickson"/><category term="PPD Ranau"/><category term="PPD Raub"/><category term="PPD Rembau"/><category term="PPD Rompin"/><category term="PPD Sabak Bernam"/><category term="PPD Samarahan"/><category term="PPD Sandakan"/><category term="PPD Saratok"/><category term="PPD Sarikei"/><category term="PPD Segamat"/><category term="PPD Selangau"/><category term="PPD Semporna"/><category term="PPD Sepang"/><category term="PPD Seremban"/><category term="PPD Serian"/><category term="PPD Setiu"/><category term="PPD Sibu"/><category term="PPD Sik"/><category term="PPD Simunjan"/><category term="PPD Sipitang"/><category term="PPD Song"/><category term="PPD Sri Aman"/><category term="PPD Subis"/><category term="PPD Tambunan"/><category term="PPD Tampin"/><category term="PPD Tanah Merah"/><category term="PPD Tangkak"/><category term="PPD Tatau/Sebauh"/><category term="PPD Tawau"/><category term="PPD Temerloh"/><category term="PPD Tenom"/><category term="PPD Tongod"/><category term="PPD Tuaran"/><category term="PPD Tumpat"/><category term="PPSMI"/><category term="PPW Bangsar Pudu"/><category term="PPW Keramat"/><category term="PPW Sentul"/><category term="PTPB"/><category term="PUSPEN"/><category term="Pantun"/><category term="Parking"/><category term="Passport"/><category term="PdP Matematik"/><category term="Pejabat Agama Johor"/><category term="Pejabat Agama Negeri Sembilan"/><category term="Pejabat Agama Perak"/><category term="Pejabat Agama Selangor"/><category term="Pejabat Pendaftar Pertubuhan"/><category term="Pekerja"/><category term="Pelaburan"/><category term="Pemulihan"/><category term="Pemulihan Khas"/><category term="Pencemaran"/><category term="Pengajian Tinggi"/><category term="Penggawa"/><category term="Penguatkuasa"/><category term="Pengurusan Diri"/><category term="Penilaian Tanah"/><category term="Penjagaan Kereta"/><category term="Perkahwinan"/><category term="Perkakas Rumah"/><category term="Perniagaan"/><category term="Perniagaan Kecil"/><category term="Perpustakaan"/><category term="Persatuan"/><category term="Pertubuhan"/><category term="Perubatan"/><category term="Perumahan"/><category term="Pinjaman Perumahan"/><category term="Politeknik"/><category term="Poster Maker"/><category term="Prompt Generator"/><category term="Prudential BSN"/><category term="Psikologi Kerja"/><category term="Psikologi Tidur"/><category term="Pusat Teknologi Pendidikan Bahagian"/><category term="Puzzle Maker"/><category term="RAHNU"/><category term="RBT"/><category term="RPGT"/><category term="RPT 2026"/><category term="Ramadan"/><category term="Rancangan Pelajaran Tahunan"/><category term="Reality Check"/><category term="Rekreasi"/><category term="Resale Value"/><category term="Revenge Bedtime Procrastination"/><category term="Road Tax"/><category term="Rumah Peranginan"/><category term="SBT"/><category term="SEGAK"/><category term="SEKOLAH MEMANDU"/><category term="SKUASY"/><category term="SMKA"/><category term="SOW"/><category term="SPAN"/><category term="SPANM"/><category term="SPRM"/><category term="SPSK"/><category term="SSQS"/><category term="STPM"/><category term="Sains Otak"/><category term="Saman"/><category term="Samsung"/><category term="Santai"/><category term="Sekolah Amanah"/><category term="Sekolah Asli"/><category term="Sekolah Berprestasi Tinggi"/><category term="Sekolah Dalam Hospital"/><category term="Sekolah Menengah Kebangsaan Agama"/><category term="Sekolah Model Khas"/><category term="Sekolah Pendidikan"/><category term="Sekolah Pondok"/><category term="Sekolah Sukan Malaysia"/><category term="Sekolah Sukan Negeri"/><category term="Self-Compassion"/><category term="Semakan Online"/><category term="Senarai Semak"/><category term="Sewa Rumah"/><category term="Shopee"/><category term="Sijil"/><category term="Simpanan"/><category term="Sistem Kehadiran"/><category term="Siswazah"/><category term="Slip Gaji"/><category term="Stress"/><category term="TINGKATAN 6"/><category term="TMK"/><category term="TMUA"/><category term="TUDM"/><category term="TVET"/><category term="Tabiat Buruk"/><category term="Tadika"/><category term="Tadika Sang Kancil"/><category term="Tahap 2"/><category term="Takaful"/><category term="Takwim"/><category term="Taman Bandaran"/><category term="Taman Wilayah"/><category term="Template Surat Rasmi"/><category term="Tenancy Agreement"/><category term="TikTok Shop"/><category term="Time-Based"/><category term="Tips Beli Kereta"/><category term="Tips Duit"/><category term="Tips Kesihatan"/><category term="Tips Lulus Loan"/><category term="Tips Pemandu"/><category term="Tips Travel"/><category term="Tips Tuan Rumah"/><category term="Trafik"/><category term="Transformasi Pendidikan"/><category term="Travel"/><category term="Tribunal"/><category term="Tuntutan Perjalanan"/><category term="UAI"/><category term="UPBA"/><category term="UPU"/><category term="Ujian Psikologi"/><category term="Umrah"/><category term="Unit Converter"/><category term="Utiliti"/><category term="VLE"/><category term="Vape"/><category term="Wanita"/><category term="Wasiat"/><category term="YIK"/><category term="badan berkanun"/><category term="bluecube"/><category term="brain games"/><category term="celcom"/><category term="e-Daftar"/><category term="e-Operasi"/><category term="e-waste"/><category term="find difference"/><category term="gutu"/><category term="hotel"/><category term="i-keep"/><category term="iOS"/><category term="moratorium"/><category term="ools"/><category term="stesen minyak"/><category term="test memory"/><category term="unicef"/><category term="​Inovasi Digital"/><title type='text'>Layanlah!!! | Berita Terkini | Tips Berguna | Maklumat</title><subtitle type='html'>Blog Layanlah!!! memaparkan pelbagai maklumat seperti berita terkini, tips berguna, maklumat semasa, info semasa, trick, hint, nasihat, maklumat am dan sebagainya</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3738</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-8027335006705156821</id><published>2026-01-20T22:25:00.010+08:00</published><updated>2026-01-20T23:18:38.401+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Banding Nombor"/><category scheme="http://www.blogger.com/atom/ns#" term="BBM Interaktif"/><category scheme="http://www.blogger.com/atom/ns#" term="Kecerdasan Pelbagai"/><category scheme="http://www.blogger.com/atom/ns#" term="Matematik"/><category scheme="http://www.blogger.com/atom/ns#" term="TAHUN 6"/><title type='text'>Duel Gergasi Nombor: Cara Mudah Membanding Nombor Hingga Juta (Game Interaktif)</title><content type='html'>&lt;title&gt;Duel Gergasi Nombor: Game Banding Nombor Juta (Standard Malaysia)&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Latihan membanding nombor interaktif menggunakan teknik Mulut Buaya. Lengkap dengan bimbingan nilai tempat dari Sa hingga Juta. Sesuai untuk murid Tahun 1-6.&quot;&gt;

&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.7; color: #333; max-width: 850px; margin: 0 auto; padding: 20px;&quot;&gt;

    &lt;h1 style=&quot;font-size: 28px; color: #a855f7; text-align: center; margin-bottom: 25px;&quot;&gt;
        Duel Gergasi Nombor: Cara Mudah Membanding Nilai Nombor
    &lt;/h1&gt;

    &lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #f3e8ff; background: #faf5ff; border-radius: 15px; text-align: center;&quot;&gt;
        &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #7e22ce;&quot;&gt;Cari Buku Latihan Matematik &amp; Bahan Bantu Mengajar?&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-weight: bold; padding: 8px 15px; border: 2px solid #ee4d2d; border-radius: 8px; display: inline-block;&quot;&gt;Cek di Shopee &amp;raquo;&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 30px;&quot;&gt;
        &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpcLCyCBLr7NqIm67CngL_lAWK8WN6F3hX4cQxmJ_7TMPnY_kPCUnRE2HH2zQuw7x6hqgAFBMoI3pfG5D6bGs4pRV_2XzIx5hvB4ockedaoNQFcjot8zfm9DPcc2GfRdLLDoIFrBNpEyQ2SOFS9qGII2mdBmEYc02M5kngavFTyDQHgzoQXkWeNRxEwQ/s783/banding%20nombor.png&quot;&gt;
            &lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpcLCyCBLr7NqIm67CngL_lAWK8WN6F3hX4cQxmJ_7TMPnY_kPCUnRE2HH2zQuw7x6hqgAFBMoI3pfG5D6bGs4pRV_2XzIx5hvB4ockedaoNQFcjot8zfm9DPcc2GfRdLLDoIFrBNpEyQ2SOFS9qGII2mdBmEYc02M5kngavFTyDQHgzoQXkWeNRxEwQ/s783/banding%20nombor.png&quot; style=&quot;width: 100%; max-width: 600px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);&quot; alt=&quot;Duel Gergasi Nombor Banding Matematik&quot;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;

    &lt;p&gt;Adakah anak atau murid anda keliru menentukan nombor mana yang lebih besar? Di &lt;strong&gt;Layanlah.com&lt;/strong&gt;, kami perkenalkan &lt;strong&gt;Duel Gergasi Nombor V3.1&lt;/strong&gt;. Game ini melatih murid membandingkan bilangan digit dan nilai tempat secara sistematik menggunakan metafora &#39;Mulut Buaya&#39;.&lt;/p&gt;

    &lt;div id=&quot;duel-banding-v3&quot; style=&quot;max-width: 800px; margin: 30px auto; background: #fdf4ff; border: 5px solid #a855f7; border-radius: 35px; overflow: hidden; box-shadow: 0 15px 0 #7e22ce;&quot;&gt;
        &lt;div style=&quot;background: #a855f7; color: white; padding: 15px; text-align: center; display: flex; justify-content: space-between; align-items: center;&quot;&gt;
            &lt;div style=&quot;text-align: left; padding-left: 10px;&quot;&gt;
                &lt;h2 style=&quot;margin:0; font-size: 18px; color:white !important;&quot;&gt;DUEL BANDING V3.1&lt;/h2&gt;
                &lt;p id=&quot;p_display_name&quot; style=&quot;margin:0; font-size: 11px; opacity: 0.9;&quot;&gt;Edisi Bimbingan Nilai Tempat&lt;/p&gt;
            &lt;/div&gt;
            &lt;div style=&quot;display: flex; align-items: center; gap: 10px;&quot;&gt;
                &lt;button onclick=&quot;location.reload()&quot; style=&quot;background: #ef4444; color: white; border: none; padding: 5px 10px; border-radius: 8px; font-size: 10px; cursor: pointer; font-weight: bold;&quot;&gt;MENU&lt;/button&gt;
                &lt;div style=&quot;background: #fbbf24; color: #92400e; padding: 5px 12px; border-radius: 12px; font-weight: bold; margin-right: 10px; font-size: 14px;&quot;&gt;SKOR: &lt;span id=&quot;d_score&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&quot;d_start_screen&quot; style=&quot;padding: 30px; text-align: center; background: white;&quot;&gt;
            &lt;h3 style=&quot;color: #0369a1;&quot;&gt;Nama Kadet Matematik:&lt;/h3&gt;
            &lt;input type=&quot;text&quot; id=&quot;d_player_name&quot; placeholder=&quot;Masukkan nama...&quot; style=&quot;width: 70%; padding: 12px; border-radius: 12px; border: 3px solid #a855f7; margin-bottom: 20px; font-size: 16px; text-align: center;&quot;&gt;
            &lt;br&gt;
            &lt;button onclick=&quot;initDuel()&quot; style=&quot;background: #a855f7; color: white; border: none; padding: 15px 40px; border-radius: 15px; font-size: 20px; font-weight: bold; cursor: pointer;&quot;&gt;MULA MISI&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;d_game_screen&quot; style=&quot;display:none; padding: 20px;&quot;&gt;
            &lt;div id=&quot;panel-kawalan&quot; style=&quot;background: white; padding: 15px; border-radius: 20px; border: 2px solid #d8b4fe; text-align: center; margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold; color: #64748b;&quot;&gt;HAD MAKSIMUM:&lt;/label&gt;&lt;br&gt;
                &lt;select id=&quot;d_limit&quot; onchange=&quot;clickCount=0;janaDuaNombor()&quot; style=&quot;padding: 5px; border-radius: 8px; font-size: 12px; margin-bottom: 5px;&quot;&gt;
                    &lt;option value=&quot;10&quot;&gt;Sa&lt;/option&gt;&lt;option value=&quot;100&quot;&gt;Puluh&lt;/option&gt;&lt;option value=&quot;1000&quot;&gt;Ratus&lt;/option&gt;&lt;option value=&quot;10000&quot;&gt;Ribu&lt;/option&gt;&lt;option value=&quot;100000&quot;&gt;P.Ribu&lt;/option&gt;&lt;option value=&quot;1000000&quot;&gt;R.Ribu&lt;/option&gt;&lt;option value=&quot;10000000&quot; selected&gt;Juta&lt;/option&gt;
                &lt;/select&gt;&lt;br&gt;
                &lt;button onclick=&quot;janaDuaNombor()&quot; style=&quot;background: #3b82f6; color: white; border: none; padding: 10px 25px; border-radius: 12px; font-weight: bold; cursor: pointer;&quot;&gt;JANA NOMBOR RAWAK&lt;/button&gt;
            &lt;/div&gt;
            &lt;div id=&quot;arena-banding&quot; style=&quot;display:none; background: #fff; padding: 20px; border-radius: 25px; border: 3px dashed #a855f7; text-align: center;&quot;&gt;
                &lt;p id=&quot;d_instr&quot; style=&quot;font-size: 13px; color: #7e22ce; margin-bottom: 20px; font-weight: bold; background: #fdf4ff; padding: 10px; border-radius: 10px; min-height: 40px;&quot;&gt;&lt;/p&gt;
                &lt;div id=&quot;grid-container&quot; style=&quot;display: flex; flex-direction: column; align-items: center; gap: 10px; margin-bottom: 20px; overflow-x: auto; padding: 10px;&quot;&gt;
                    &lt;div id=&quot;row_a&quot; style=&quot;display: flex; gap: 5px;&quot;&gt;&lt;/div&gt;&lt;div id=&quot;row_b&quot; style=&quot;display: flex; gap: 5px;&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div style=&quot;margin: 20px 0; display: flex; justify-content: center; align-items: center; gap: 20px;&quot;&gt;
                    &lt;div style=&quot;font-size: 12px; color: #3b82f6; font-weight: bold;&quot;&gt;NOMBOR A&lt;/div&gt;
                    &lt;div id=&quot;drop_simbol&quot; style=&quot;width: 70px; height: 70px; border: 4px dashed #a855f7; border-radius: 15px; display: flex; align-items: center; justify-content: center; font-size: 35px; background: #faf5ff;&quot;&gt;?&lt;/div&gt;
                    &lt;div style=&quot;font-size: 12px; color: #ef4444; font-weight: bold;&quot;&gt;NOMBOR B&lt;/div&gt;
                &lt;/div&gt;
                &lt;div id=&quot;d_choices&quot; style=&quot;display: flex; justify-content: center; gap: 30px;&quot;&gt;
                    &lt;div style=&quot;text-align: center;&quot;&gt;&lt;div draggable=&quot;true&quot; ondragstart=&quot;drag(event)&quot; id=&quot;sym_gt&quot; style=&quot;cursor:grab; background: #22c55e; color: white; width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; border-radius: 12px; font-size: 30px; font-weight: bold; box-shadow: 0 4px 0 #15803d;&quot;&gt;&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; margin-top: 5px; color: #15803d; font-weight: bold;&quot;&gt;lebih besar&lt;/div&gt;&lt;/div&gt;
                    &lt;div style=&quot;text-align: center;&quot;&gt;&lt;div draggable=&quot;true&quot; ondragstart=&quot;drag(event)&quot; id=&quot;sym_lt&quot; style=&quot;cursor:grab; background: #eab308; color: white; width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; border-radius: 12px; font-size: 30px; font-weight: bold; box-shadow: 0 4px 0 #a16207;&quot;&gt;&lt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; margin-top: 5px; color: #a16207; font-weight: bold;&quot;&gt;lebih kecil&lt;/div&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div id=&quot;d_feedback&quot; style=&quot;margin-top: 15px; min-height: 40px; font-weight: bold; font-size: 16px;&quot;&gt;&lt;/div&gt;
                &lt;button id=&quot;btn_next&quot; onclick=&quot;janaDuaNombor()&quot; style=&quot;display:none; margin-top: 10px; background: #a855f7; color: white; border: none; padding: 10px 25px; border-radius: 10px; cursor: pointer; font-weight: bold;&quot;&gt;TERUSKAN&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
    let score = 0; let nA, nB; let clickCount = 0;
    function initDuel() { player = document.getElementById(&#39;d_player_name&#39;).value || &quot;Kadet&quot;; document.getElementById(&#39;p_display_name&#39;).innerText = &quot;Kadet: &quot; + player; document.getElementById(&#39;d_start_screen&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;d_game_screen&#39;).style.display = &#39;block&#39;; }
    function janaDuaNombor() {
        clickCount++; const limit = parseInt(document.getElementById(&#39;d_limit&#39;).value);
        if (clickCount % 3 === 0) { nA = Math.floor(Math.random() * limit).toString(); nB = Math.floor(Math.random() * (limit / 10)).toString(); } 
        else if (clickCount % 2 === 0) { let pfx = Math.floor(Math.random() * 9) + 1; let sLen = limit.toString().length - 2; nA = pfx + Math.floor(Math.random() * Math.pow(10, sLen)).toString().padStart(sLen, &#39;0&#39;); nB = pfx + Math.floor(Math.random() * Math.pow(10, sLen)).toString().padStart(sLen, &#39;0&#39;); } 
        else { nA = Math.floor(Math.random() * limit).toString(); nB = Math.floor(Math.random() * limit).toString(); }
        while(nA === nB) nB = Math.floor(Math.random() * limit).toString();
        document.getElementById(&#39;arena-banding&#39;).style.display = &#39;block&#39;; document.getElementById(&#39;d_feedback&#39;).innerText = &quot;&quot;; document.getElementById(&#39;btn_next&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;d_choices&#39;).style.display = &#39;flex&#39;; document.getElementById(&#39;drop_simbol&#39;).innerText = &quot;?&quot;; document.getElementById(&#39;drop_simbol&#39;).style.background = &quot;#faf5ff&quot;;
        susunKotak(); mulaBimbingan();
    }
    function susunKotak() {
        const rA = document.getElementById(&#39;row_a&#39;); const rB = document.getElementById(&#39;row_b&#39;);
        rA.innerHTML = &#39;&lt;div style=&quot;width:70px; font-size:9px; display:flex; align-items:center; color:#3b82f6; font-weight:bold;&quot;&gt;A&lt;/div&gt;&#39;;
        rB.innerHTML = &#39;&lt;div style=&quot;width:70px; font-size:9px; display:flex; align-items:center; color:#ef4444; font-weight:bold;&quot;&gt;B&lt;/div&gt;&#39;;
        const maxL = Math.max(nA.length, nB.length); const sA = nA.padStart(maxL, &#39; &#39;); const sB = nB.padStart(maxL, &#39; &#39;);
        for(let i=0; i&lt;maxL; i++) { rA.innerHTML += buatK(sA[i], i, &#39;a&#39;); rB.innerHTML += buatK(sB[i], i, &#39;b&#39;); }
    }
    function buatK(v, id, t) { let bg = v === &#39; &#39; ? &#39;transparent&#39; : &#39;#f8fafc&#39;; let bd = v === &#39; &#39; ? &#39;none&#39; : &#39;2px solid #cbd5e1&#39;; return &#39;&lt;div id=&quot;digit_&#39;+t+&#39;_&#39;+id+&#39;&quot; style=&quot;width:35px; height:50px; background:&#39;+bg+&#39;; border:&#39;+bd+&#39;; display:flex; align-items:center; justify-content:center; font-size:22px; font-weight:bold; border-radius:8px;&quot;&gt;&#39;+v+&#39;&lt;/div&gt;&#39;; }
    function mulaBimbingan() {
        const ins = document.getElementById(&#39;d_instr&#39;);
        if(nA.length !== nB.length) { ins.innerHTML = &quot;Langkah 1: Bilangan digit tidak sama. Nombor &quot; + (nA.length &gt; nB.length ? &quot;A&quot; : &quot;B&quot;) + &quot; mempunyai lebih banyak digit.&quot;; highlightD(); }
        else { ins.innerHTML = &quot;Langkah 1: Bilangan digit sama. Mari banding dari nilai tempat terbesar (Kiri).&quot;; scanB(); }
    }
    function highlightD() { const maxL = Math.max(nA.length, nB.length); for(let i=0; i&lt;maxL; i++) { if(document.getElementById(&#39;digit_a_&#39;+i).innerText !== &#39; &#39;) document.getElementById(&#39;digit_a_&#39;+i).style.background = &quot;#e0f2fe&quot;; if(document.getElementById(&#39;digit_b_&#39;+i).innerText !== &#39; &#39;) document.getElementById(&#39;digit_b_&#39;+i).style.background = &quot;#fee2e2&quot;; } }
    function scanB() { const maxL = Math.max(nA.length, nB.length); let f = false; for(let i=0; i&lt;maxL; i++) { const dA = document.getElementById(&#39;digit_a_&#39;+i); const dB = document.getElementById(&#39;digit_b_&#39;+i); if(nA[i] !== nB[i] &amp;&amp; !f) { dA.style.background = &quot;#fef08a&quot;; dB.style.background = &quot;#fef08a&quot;; dA.style.borderColor = &quot;#ca8a04&quot;; dB.style.borderColor = &quot;#ca8a04&quot;; f = true; } } }
    function drag(ev) { ev.dataTransfer.setData(&quot;text&quot;, ev.target.innerText); }
    const dropZ = document.getElementById(&#39;drop_simbol&#39;); dropZ.ondragover = (e) =&gt; e.preventDefault();
    dropZ.ondrop = (ev) =&gt; { ev.preventDefault(); const d = ev.dataTransfer.getData(&quot;text&quot;); ev.target.innerText = d; checkJ(d); };
    function checkJ(v) {
        const bt = (parseInt(nA) &gt; parseInt(nB)) ? &quot;&gt;&quot; : &quot;&lt;&quot;; const fb = document.getElementById(&#39;d_feedback&#39;);
        if(v === bt) { score++; document.getElementById(&#39;d_score&#39;).innerText = score; fb.innerHTML = &quot;&lt;span style=&#39;color:green&#39;&gt;BETUL!&lt;/span&gt;&quot;; document.getElementById(&#39;btn_next&#39;).style.display = &#39;inline-block&#39;; document.getElementById(&#39;d_choices&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;drop_simbol&#39;).style.background = &quot;#dcfce7&quot;; }
        else { fb.innerHTML = &quot;&lt;span style=&#39;color:red&#39;&gt;SALAH! Perhatikan kotak kuning.&lt;/span&gt;&quot;; setTimeout(() =&gt; { document.getElementById(&#39;drop_simbol&#39;).innerText = &quot;?&quot;; }, 1000); }
    }
    &lt;/script&gt;

    &lt;h3 style=&quot;color: #a855f7; margin-top: 40px;&quot;&gt;Soalan Lazim (FAQ) Membanding Nombor&lt;/h3&gt;
    &lt;div style=&quot;background: #fdf4ff; padding: 20px; border-radius: 15px;&quot;&gt;
        &lt;p&gt;&lt;strong&gt;S: Kenapa sistem beri nombor dengan digit yang sama?&lt;/strong&gt;&lt;br&gt;
        J: Ini untuk melatih murid membandingkan nilai tempat satu-persatu dari kiri ke kanan sehingga menemui perbezaan.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;S: Bolehkah apps ini digunakan untuk murid Tahun 1?&lt;/strong&gt;&lt;br&gt;
        J: Ya, cikgu hanya perlu tukar had maksimum kepada &#39;Sa&#39; atau &#39;Puluh&#39; di bahagian pilihan tahap.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin: 30px 0; padding: 15px; border: 1px solid #d1d8e0; border-radius: 12px; text-align: center; background: #fff;&quot;&gt;
        &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #7e22ce;&quot;&gt;Ganjaran Motivasi: Sticker &amp; Cop Ulasan Guru&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-weight: bold;&quot;&gt;Cek di Shopee &amp;raquo;&lt;/a&gt;
    &lt;/div&gt;
    &lt;p style=&quot;text-align: center; font-size: 11px; color: #999;&quot;&gt;Layanlah.com - Sumber Bahan Bantu Mengajar Kreatif.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/8027335006705156821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/duel-gergasi-nombor-banding-matematik.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8027335006705156821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8027335006705156821'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/duel-gergasi-nombor-banding-matematik.html' title='Duel Gergasi Nombor: Cara Mudah Membanding Nombor Hingga Juta (Game Interaktif)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpcLCyCBLr7NqIm67CngL_lAWK8WN6F3hX4cQxmJ_7TMPnY_kPCUnRE2HH2zQuw7x6hqgAFBMoI3pfG5D6bGs4pRV_2XzIx5hvB4ockedaoNQFcjot8zfm9DPcc2GfRdLLDoIFrBNpEyQ2SOFS9qGII2mdBmEYc02M5kngavFTyDQHgzoQXkWeNRxEwQ/s72-c/banding%20nombor.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-3914034740448978591</id><published>2026-01-20T13:12:00.011+08:00</published><updated>2026-01-20T20:54:26.062+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="BBM Interaktif"/><category scheme="http://www.blogger.com/atom/ns#" term="Bundar Nombor"/><category scheme="http://www.blogger.com/atom/ns#" term="Game Sekolah Rendah"/><category scheme="http://www.blogger.com/atom/ns#" term="Kecerdasan Pelbagai"/><category scheme="http://www.blogger.com/atom/ns#" term="Matematik"/><category scheme="http://www.blogger.com/atom/ns#" term="PdP Matematik"/><title type='text'>Misi Penyelamatan Nombor: Cara Mudah Ajar Anak Bundar (Game Interaktif Matematik)</title><content type='html'>&lt;title&gt;Misi Penyelamatan Nombor: Game Bundar Lengkap (Sa - Juta)&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Latihan bundar interaktif 3 mod (Demo, Latihan, Cabaran). Nilai tempat lengkap dari Sa hingga Juta mengikut silibus Matematik KSSR.&quot;&gt;

&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.7; color: #333; max-width: 850px; margin: 0 auto; padding: 20px;&quot;&gt;

    &lt;h1 style=&quot;font-size: 28px; color: #0284c7; text-align: center; margin-bottom: 25px;&quot;&gt;
        Misi Penyelamatan Nombor: Mod Demo, Latihan &amp; Cabaran (Hingga Juta)
    &lt;/h1&gt;

    &lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #e5e7eb; background: #f0f9ff; border-radius: 15px; text-align: center;&quot;&gt;
        &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #0284c7;&quot;&gt;Cari Buku Latihan Matematik &amp; Sticker Ganjaran Murah?&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-weight: bold; padding: 8px 15px; border: 2px solid #ee4d2d; border-radius: 8px; display: inline-block;&quot;&gt;Cek di Shopee &amp;raquo;&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 30px;&quot;&gt;
        &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6_tytVaBSdtVR33Qj2iVD9qDkMro5FlMtaYqQ5u-u51JqgVbsvJSAx3EKbZwfaAjOKs37bcOetxBIRRSNuGF4sze-TofgLElxvGkL6WJVGnczFGyzurjrq1QITqGJdp6r6g_GuqzKcEbPiZpBoY_YMFwqV72yJnskjheljg3Y4XOqqeRhBA1ERSRCo6Q/s791/bundar%20nombor.png&quot;&gt;
            &lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6_tytVaBSdtVR33Qj2iVD9qDkMro5FlMtaYqQ5u-u51JqgVbsvJSAx3EKbZwfaAjOKs37bcOetxBIRRSNuGF4sze-TofgLElxvGkL6WJVGnczFGyzurjrq1QITqGJdp6r6g_GuqzKcEbPiZpBoY_YMFwqV72yJnskjheljg3Y4XOqqeRhBA1ERSRCo6Q/s791/bundar%20nombor.png&quot; style=&quot;width: 100%; max-width: 600px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);&quot; alt=&quot;Misi Penyelamatan Nombor&quot;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;

    &lt;p&gt;Kuasai tajuk &lt;strong&gt;Bundar Nombor&lt;/strong&gt; dengan cara yang paling menyeronokkan! Alat interaktif ini menyediakan 3 mod pembelajaran: &lt;strong&gt;Mod Demo&lt;/strong&gt; untuk memerhati, &lt;strong&gt;Mod Latihan&lt;/strong&gt; untuk mencuba, dan &lt;strong&gt;Mod Cabaran&lt;/strong&gt; untuk menguji kecekapan. Kini lengkap dari nilai tempat Sa sehingga Juta!&lt;/p&gt;

    &lt;div id=&quot;mission-rescue-v3&quot; style=&quot;max-width: 800px; margin: 30px auto; background: #f0f9ff; border: 5px solid #0284c7; border-radius: 35px; overflow: hidden; box-shadow: 0 15px 0 #075985;&quot;&gt;
        &lt;div style=&quot;background: #0284c7; color: white; padding: 15px; text-align: center; display: flex; justify-content: space-between; align-items: center;&quot;&gt;
            &lt;div style=&quot;text-align: left; padding-left: 10px;&quot;&gt;
                &lt;h2 style=&quot;margin:0; font-size: 18px; color:white !important;&quot;&gt;MISI BUNDAR V3.5&lt;/h2&gt;
                &lt;p id=&quot;p_display_name&quot; style=&quot;margin:0; font-size: 11px; opacity: 0.9;&quot;&gt;Pilih mod permainan&lt;/p&gt;
            &lt;/div&gt;
            &lt;div style=&quot;display: flex; align-items: center; gap: 10px;&quot;&gt;
                &lt;button onclick=&quot;goHome()&quot; style=&quot;background: #ef4444; color: white; border: none; padding: 5px 10px; border-radius: 8px; font-size: 10px; cursor: pointer; font-weight: bold;&quot;&gt;MENU UTAMA&lt;/button&gt;
                &lt;div style=&quot;background: #fbbf24; color: #92400e; padding: 5px 12px; border-radius: 12px; font-weight: bold; margin-right: 10px; font-size: 14px;&quot;&gt;SKOR: &lt;span id=&quot;m_score&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&quot;m_start_screen&quot; style=&quot;padding: 30px; text-align: center; background: white;&quot;&gt;
            &lt;h3 style=&quot;color: #0369a1;&quot;&gt;Nama Kadet Matematik:&lt;/h3&gt;
            &lt;input type=&quot;text&quot; id=&quot;m_player_name&quot; placeholder=&quot;Masukkan nama...&quot; style=&quot;width: 70%; padding: 12px; border-radius: 12px; border: 3px solid #0284c7; margin-bottom: 20px; font-size: 16px; text-align: center;&quot;&gt;
            &lt;div style=&quot;display: grid; gap: 10px; max-width: 320px; margin: 0 auto;&quot;&gt;
                &lt;button onclick=&quot;initGame(&#39;demo&#39;)&quot; style=&quot;background: #a855f7; color: white; border: none; padding: 12px; border-radius: 12px; font-weight: bold; cursor: pointer; box-shadow: 0 4px 0 #7e22ce;&quot;&gt;1. MOD DEMO (AUTO)&lt;/button&gt;
                &lt;button onclick=&quot;initGame(&#39;guide&#39;)&quot; style=&quot;background: #3b82f6; color: white; border: none; padding: 12px; border-radius: 12px; font-weight: bold; cursor: pointer; box-shadow: 0 4px 0 #1d4ed8;&quot;&gt;2. MOD LATIHAN (GERAK)&lt;/button&gt;
                &lt;button onclick=&quot;initGame(&#39;test&#39;)&quot; style=&quot;background: #22c55e; color: white; border: none; padding: 12px; border-radius: 12px; font-weight: bold; cursor: pointer; box-shadow: 0 4px 0 #15803d;&quot;&gt;3. MOD CABARAN (TAIP)&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&quot;m_game_screen&quot; style=&quot;display:none; padding: 20px;&quot;&gt;
            &lt;div id=&quot;setup-panel&quot; style=&quot;background: white; padding: 15px; border-radius: 20px; border: 2px solid #0ea5e9; text-align: center; margin-bottom: 15px;&quot;&gt;
                &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;&lt;label style=&quot;font-size: 11px; font-weight: bold; color: #64748b;&quot;&gt;HAD MAKSIMUM:&lt;/label&gt;&lt;br&gt;
                &lt;select id=&quot;m_max_limit&quot; onchange=&quot;generateRandomNum()&quot; style=&quot;padding: 5px; border-radius: 8px; font-size: 12px;&quot;&gt;
                    &lt;option value=&quot;10&quot;&gt;Sa (1-9)&lt;/option&gt;&lt;option value=&quot;100&quot;&gt;Puluh&lt;/option&gt;&lt;option value=&quot;1000&quot;&gt;Ratus&lt;/option&gt;&lt;option value=&quot;10000&quot;&gt;Ribu&lt;/option&gt;&lt;option value=&quot;100000&quot;&gt;P.Ribu&lt;/option&gt;&lt;option value=&quot;1000000&quot;&gt;R.Ribu&lt;/option&gt;&lt;option value=&quot;10000000&quot; selected&gt;Juta&lt;/option&gt;
                &lt;/select&gt;&lt;/div&gt;
                &lt;div style=&quot;margin: 10px 0;&quot;&gt;&lt;input type=&quot;number&quot; id=&quot;m_input_num&quot; style=&quot;font-size: 24px; width: 160px; text-align: center; border: 2px solid #0369a1; border-radius: 10px; padding: 5px;&quot;&gt;
                &lt;button onclick=&quot;generateRandomNum()&quot; style=&quot;padding: 10px; border-radius: 10px; cursor: pointer; background: #f8fafc; border: 1px solid #cbd5e1;&quot;&gt;RAWAK&lt;/button&gt;&lt;/div&gt;
                &lt;div id=&quot;target-btns&quot; style=&quot;display: flex; justify-content: center; gap: 5px; flex-wrap: wrap;&quot;&gt;
                    &lt;button onclick=&quot;setupSimulation(1, &#39;SA&#39;)&quot; class=&quot;btn-target&quot;&gt;SA&lt;/button&gt;&lt;button onclick=&quot;setupSimulation(10, &#39;PULUH&#39;)&quot; class=&quot;btn-target&quot;&gt;PULUH&lt;/button&gt;&lt;button onclick=&quot;setupSimulation(100, &#39;RATUS&#39;)&quot; class=&quot;btn-target&quot;&gt;RATUS&lt;/button&gt;&lt;button onclick=&quot;setupSimulation(1000, &#39;RIBU&#39;)&quot; class=&quot;btn-target&quot;&gt;RIBU&lt;/button&gt;&lt;button onclick=&quot;setupSimulation(10000, &#39;P.RIBU&#39;)&quot; class=&quot;btn-target&quot;&gt;P.RIBU&lt;/button&gt;&lt;button onclick=&quot;setupSimulation(100000, &#39;R.RIBU&#39;)&quot; class=&quot;btn-target&quot;&gt;R.RIBU&lt;/button&gt;&lt;button onclick=&quot;setupSimulation(1000000, &#39;JUTA&#39;)&quot; class=&quot;btn-target&quot;&gt;JUTA&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div id=&quot;m_sim_area&quot; style=&quot;display:none; background: white; padding: 20px; border-radius: 25px; border: 3px dashed #0369a1; text-align: center;&quot;&gt;
                &lt;div id=&quot;m_quest_text&quot; style=&quot;font-size: 16px; color: #0369a1; margin-bottom: 10px; background: #e0f2fe; padding: 10px; border-radius: 10px; font-weight: bold;&quot;&gt;&lt;/div&gt;
                &lt;p id=&quot;m_instr&quot; style=&quot;font-size: 13px; color: #64748b; margin-bottom: 10px;&quot;&gt;&lt;/p&gt;
                &lt;div id=&quot;m_digit_display&quot; style=&quot;display: flex; justify-content: center; gap: 8px; font-size: 32px; margin: 30px 0; min-height: 100px; align-items: center; flex-wrap: wrap;&quot;&gt;&lt;/div&gt;
                &lt;div id=&quot;m_flashlight_zone&quot;&gt;&lt;div id=&quot;m_flashlight&quot; draggable=&quot;true&quot; style=&quot;width: 60px; height: 60px; background: #fde047; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; cursor: grab; border: 3px solid #ca8a04; box-shadow: 0 0 20px #facc15; font-weight:bold;&quot;&gt;LAMPU&lt;/div&gt;&lt;/div&gt;
                &lt;div id=&quot;m_answer_zone&quot; style=&quot;display:none; margin: 20px 0;&quot;&gt;
                    &lt;div style=&quot;background: #fef9c3; padding: 10px; border-radius: 10px; font-size: 13px; color: #854d0e; border: 1px solid #facc15; margin-bottom: 15px;&quot;&gt;TIPS: Jiran 0-4 (+0 Sasaran) | Jiran 5-9 (+1 Sasaran)&lt;/div&gt;
                    &lt;input type=&quot;number&quot; id=&quot;m_user_ans&quot; placeholder=&quot;Taip jawapan...&quot; style=&quot;padding: 12px; width: 80%; border: 3px solid #22c55e; border-radius: 10px; font-size: 24px; text-align: center;&quot;&gt;
                    &lt;br&gt;&lt;button onclick=&quot;checkUserAnswer()&quot; style=&quot;margin-top:10px; background:#22c55e; color:white; border:none; padding:12px 25px; border-radius:12px; cursor:pointer; font-weight:bold;&quot;&gt;SEMAK JAWAPAN&lt;/button&gt;
                &lt;/div&gt;
                &lt;div id=&quot;m_hill_viz&quot; style=&quot;display:none;&quot;&gt;
                    &lt;div style=&quot;height: 60px; border-bottom: 3px solid #0369a1; position: relative; overflow: hidden; background: #f8fafc;&quot;&gt;&lt;div id=&quot;m_car&quot; style=&quot;position: absolute; bottom: 0; left: 0; transition: 1.5s; font-size: 15px; font-weight:bold; color:#0284c7;&quot;&gt;KERETA&lt;/div&gt;&lt;/div&gt;
                    &lt;p id=&quot;m_final_msg&quot; style=&quot;margin-top: 10px; font-size: 16px; font-weight: bold;&quot;&gt;&lt;/p&gt;
                    &lt;button onclick=&quot;closeSim()&quot; id=&quot;btn_next&quot; style=&quot;display:none; background: #0369a1; color: white; border: none; padding: 10px 20px; border-radius: 10px; cursor: pointer; font-weight: bold;&quot;&gt;SOALAN SETERUSNYA&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;style&gt;.btn-target { background: #facc15; color: #854d0e; border: none; padding: 6px 10px; border-radius: 8px; font-size: 10px; font-weight: bold; cursor: pointer; box-shadow: 0 3px 0 #ca8a04; margin: 2px; } @keyframes bounce-up { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-12px); } }&lt;/style&gt;

    &lt;script&gt;
    let score = 0; let player = &quot;&quot;; let currentNum = &quot;&quot;; let targetPlace = 0; let gameMode = &quot;&quot;;
    function goHome() { if(confirm(&quot;Kembali ke menu utama?&quot;)) { location.reload(); } }
    function initGame(mode) { gameMode = mode; player = document.getElementById(&#39;m_player_name&#39;).value || &quot;Kadet&quot;; document.getElementById(&#39;m_start_screen&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;m_game_screen&#39;).style.display = &#39;block&#39;; document.getElementById(&#39;p_display_name&#39;).innerText = &quot;Kadet: &quot; + player + &quot; [&quot; + mode.toUpperCase() + &quot;]&quot;; generateRandomNum(); }
    function generateRandomNum() { const limit = parseInt(document.getElementById(&#39;m_max_limit&#39;).value); const min = Math.max(1, limit / 10); document.getElementById(&#39;m_input_num&#39;).value = Math.floor(Math.random() * (limit - min)) + min; }
    function setupSimulation(place, label) {
        targetPlace = place; currentNum = document.getElementById(&#39;m_input_num&#39;).value;
        const len = currentNum.length; let tIdx = -1;
        if(place === 1) tIdx = len - 1; else tIdx = len - (Math.round(Math.log10(place)) + 1);
        if(tIdx &lt; 0) return alert(&quot;Nombor tidak cukup besar untuk nilai tempat ini!&quot;);
        document.getElementById(&#39;m_sim_area&#39;).style.display = &#39;block&#39;; document.getElementById(&#39;m_hill_viz&#39;).style.display = &#39;none&#39;;
        document.getElementById(&#39;m_answer_zone&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;m_flashlight_zone&#39;).style.display = &#39;block&#39;;
        document.getElementById(&#39;m_flashlight&#39;).style.transform = &quot;none&quot;;
        document.getElementById(&#39;m_quest_text&#39;).innerHTML = &quot;Bundar &quot; + parseInt(currentNum).toLocaleString() + &quot; kepada &quot; + label + &quot; terdekat&quot;;
        document.getElementById(&#39;m_instr&#39;).innerHTML = (gameMode === &#39;demo&#39;) ? &quot;Memulakan Analisis...&quot; : &quot;Tarik Lampu ke Jiran Sebelah Kanan Sasaran&quot;;
        renderDigits(tIdx); if(gameMode === &#39;demo&#39;) { runAutoDemo(tIdx); }
    }
    function renderDigits(tIdx) {
        const display = document.getElementById(&#39;m_digit_display&#39;); display.innerHTML = &#39;&#39;; const jIdx = tIdx + 1;
        currentNum.split(&#39;&#39;).forEach((d, i) =&gt; {
            const div = document.createElement(&#39;div&#39;); div.innerText = d;
            div.style = &quot;padding: 10px 15px; border-radius: 12px; background: #f1f5f9; position: relative; min-width: 40px; text-align: center; transition: 0.5s;&quot;;
            if(i === tIdx) { div.style.background = &quot;#0284c7&quot;; div.style.color = &quot;white&quot;; div.innerHTML += &#39;&lt;div style=&quot;font-size:8px; position:absolute; bottom:-16px; left:0; width:100%; color:#0284c7; font-weight:bold;&quot;&gt;SASARAN&lt;/div&gt;&#39;; }
            if(i === jIdx) { div.id = &quot;m_jiran_box&quot;; div.style.border = &quot;3px dashed #ef4444&quot;; div.ondragover = (e) =&gt; e.preventDefault(); div.ondrop = () =&gt; processLogic(parseInt(d), tIdx); }
            display.appendChild(div);
        });
        if(jIdx &gt;= currentNum.length &amp;&amp; targetPlace === 1) { setTimeout(() =&gt; processLogic(0, tIdx), 1500); }
    }
    function runAutoDemo(tIdx) {
        const light = document.getElementById(&#39;m_flashlight&#39;); const jiran = document.getElementById(&#39;m_jiran_box&#39;); if(!jiran) return;
        const rJ = jiran.getBoundingClientRect(); const rL = light.getBoundingClientRect();
        setTimeout(() =&gt; { light.style.transition = &quot;1.5s ease-in-out&quot;; light.style.transform = &quot;translate(&quot; + (rJ.left - rL.left) + &quot;px, &quot; + (rJ.top - rL.top - 20) + &quot;px)&quot;; setTimeout(() =&gt; processLogic(parseInt(currentNum[tIdx+1]), tIdx), 1700); }, 500);
    }
    function processLogic(jVal, tIdx) {
        document.getElementById(&#39;m_flashlight_zone&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;m_hill_viz&#39;).style.display = &#39;block&#39;;
        const display = document.getElementById(&#39;m_digit_display&#39;); const sasaranEl = display.children[tIdx];
        if(jVal &gt;= 5) { document.getElementById(&#39;m_car&#39;).style.left = &quot;80%&quot;; document.getElementById(&#39;m_final_msg&#39;).innerHTML = &quot;Jiran (&quot; + jVal + &quot;) Kaya! &lt;br&gt;&lt;span style=&#39;color:green&#39;&gt;Sasaran +1&lt;/span&gt;&quot;; sasaranEl.innerHTML += &#39;&lt;div style=&quot;position:absolute; top:-35px; left:0; width:100%; color:green; font-weight:bold; animation: bounce-up 0.5s infinite;&quot;&gt;+1&lt;/div&gt;&#39;; }
        else { document.getElementById(&#39;m_car&#39;).style.left = &quot;0%&quot;; document.getElementById(&#39;m_final_msg&#39;).innerHTML = &quot;Jiran (&quot; + jVal + &quot;) Miskin. &lt;br&gt;&lt;span style=&#39;color:red&#39;&gt;Sasaran Kekal (+0)&lt;/span&gt;&quot;; sasaranEl.innerHTML += &#39;&lt;div style=&quot;position:absolute; top:-35px; left:0; width:100%; color:red; font-weight:bold;&quot;&gt;+0&lt;/div&gt;&#39;; }
        if(gameMode === &#39;test&#39;) { setTimeout(() =&gt; { document.getElementById(&#39;m_hill_viz&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;m_answer_zone&#39;).style.display = &#39;block&#39;; }, 2000); } else { showFinalResult(tIdx); }
    }
    function showFinalResult(tIdx) {
        const result = Math.round(parseInt(currentNum) / targetPlace) * targetPlace; const resStr = result.toString().padStart(currentNum.length, &#39;0&#39;);
        const display = document.getElementById(&#39;m_digit_display&#39;);
        setTimeout(() =&gt; {
            currentNum.split(&#39;&#39;).forEach((d, i) =&gt; {
                if (i &gt; tIdx) { display.children[i].innerText = &quot;0&quot;; display.children[i].style.opacity = &quot;0.3&quot;; display.children[i].style.background = &quot;#cbd5e1&quot;; }
                else if (i === tIdx) { display.children[i].innerText = resStr[i]; display.children[i].style.background = &quot;#fbbf24&quot;; display.children[i].style.color = &quot;#92400e&quot;; display.children[i].style.transform = &quot;scale(1.1)&quot;; }
            });
            document.getElementById(&#39;m_final_msg&#39;).innerHTML += &quot;&lt;br&gt;&lt;div style=&#39;font-size:25px; color:#0284c7;&#39;&gt;JAWAPAN: &quot; + result.toLocaleString() + &quot;&lt;/div&gt;&quot;;
            document.getElementById(&#39;btn_next&#39;).style.display = &#39;inline-block&#39;; if(gameMode !== &#39;demo&#39;) { score++; document.getElementById(&#39;m_score&#39;).innerText = score; }
        }, 1500);
    }
    function checkUserAnswer() {
        const uAns = document.getElementById(&#39;m_user_ans&#39;).value; const cAns = Math.round(parseInt(currentNum) / targetPlace) * targetPlace;
        if(parseInt(uAns) === cAns) { alert(&quot;Jawapan betul!&quot;); score++; document.getElementById(&#39;m_score&#39;).innerText = score; closeSim(); }
        else { alert(&quot;Cuba lagi!&quot;); }
    }
    function closeSim() { document.getElementById(&#39;m_sim_area&#39;).style.display = &#39;none&#39;; document.getElementById(&#39;m_user_ans&#39;).value = &quot;&quot;; generateRandomNum(); }
    &lt;/script&gt;

    &lt;h3 style=&quot;color: #0284c7; margin-top: 40px;&quot;&gt;❓ Soalan Lazim (FAQ)&lt;/h3&gt;
    &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;&lt;strong&gt;S: Apa kelebihan Mod Demo?&lt;/strong&gt;&lt;br&gt;J: Membantu murid melihat simulasi langkah-demi-langkah secara automatik untuk memahami konsep &#39;Jiran Kaya/Miskin&#39;.&lt;/div&gt;
    &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;&lt;strong&gt;S: Bolehkah apps ini digunakan untuk Tahun 6?&lt;/strong&gt;&lt;br&gt;J: Ya, pilih had maksimum &#39;Juta&#39; untuk berlatih membundar nombor sehingga 7 digit.&lt;/div&gt;

    &lt;div style=&quot;margin: 30px 0; padding: 15px; border: 1px solid #d1d8e0; border-radius: 12px; text-align: center; background: #fdfdfd;&quot;&gt;
        &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #0284c7;&quot;&gt;🎖️ Sticker Ganjaran &amp; Hadiah Galakan Murid&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-weight: bold;&quot;&gt;Cek di Shopee &amp;raquo;&lt;/a&gt;
    &lt;/div&gt;
    &lt;p style=&quot;text-align: center; font-size: 11px; color: #999;&quot;&gt;Layanlah.com - Sumber BBM Interaktif Guru Malaysia.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/3914034740448978591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/misi-penyelamatan-nombor-game-bundar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/3914034740448978591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/3914034740448978591'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/misi-penyelamatan-nombor-game-bundar.html' title='Misi Penyelamatan Nombor: Cara Mudah Ajar Anak Bundar (Game Interaktif Matematik)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6_tytVaBSdtVR33Qj2iVD9qDkMro5FlMtaYqQ5u-u51JqgVbsvJSAx3EKbZwfaAjOKs37bcOetxBIRRSNuGF4sze-TofgLElxvGkL6WJVGnczFGyzurjrq1QITqGJdp6r6g_GuqzKcEbPiZpBoY_YMFwqV72yJnskjheljg3Y4XOqqeRhBA1ERSRCo6Q/s72-c/bundar%20nombor.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-8872930170256950989</id><published>2026-01-20T11:16:00.006+08:00</published><updated>2026-01-20T11:25:57.508+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="BBM"/><category scheme="http://www.blogger.com/atom/ns#" term="Free Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Game Edukasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Matematik"/><category scheme="http://www.blogger.com/atom/ns#" term="Nilai Digit"/><category scheme="http://www.blogger.com/atom/ns#" term="Nilai Tempat"/><category scheme="http://www.blogger.com/atom/ns#" term="Sekolah Rendah"/><title type='text'>Math-Geni: Game Nilai Tempat &amp; Nilai Digit Matematik Sekolah Rendah</title><content type='html'>&lt;title&gt;Math-Geni V3.2: Game Nilai Tempat &amp; Digit (Visual Feedback)&lt;/title&gt;

&lt;div style=&quot;font-family: &#39;Segoe UI&#39;, sans-serif; line-height: 1.7; color: #333; max-width: 800px; margin: 0 auto; padding: 10px;&quot;&gt;

    &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 25px;&quot;&gt;
        &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-vrNx1z5318C5Z-B5j23DY5NkUJTk-1QeQEw1ZyzHbZjt9kRc3oQebRURtuZoN1Af4jffGw37DfaS7Qj3lU_3RI3d-tX6ylrIgbzrDyxNYAzw7qt3Mb8rmfJEF-TO8hflZJ7vHmBRPqyxUCvtSkmgIXurnrWvAVv6tPkVE2GgDvjW2AqmV7LgzS2zPOw/s782/nilai%20tempat%20nilai%20digit.png&quot;&gt;
            &lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-vrNx1z5318C5Z-B5j23DY5NkUJTk-1QeQEw1ZyzHbZjt9kRc3oQebRURtuZoN1Af4jffGw37DfaS7Qj3lU_3RI3d-tX6ylrIgbzrDyxNYAzw7qt3Mb8rmfJEF-TO8hflZJ7vHmBRPqyxUCvtSkmgIXurnrWvAVv6tPkVE2GgDvjW2AqmV7LgzS2zPOw/s782/nilai%20tempat%20nilai%20digit.png&quot; width=&quot;100%&quot; style=&quot;border-radius: 15px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);&quot; alt=&quot;Math-Geni Nilai Tempat dan Nilai Digit&quot;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #ddd; background: #fffcf0; border-radius: 12px; text-align: center;&quot;&gt;
        &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold;&quot;&gt;📚 Perlukan Buku Latihan Matematik Tahun 1 - Tahun 6?&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-weight: bold;&quot;&gt;Cek Katalog Shopee &amp;raquo;&lt;/a&gt;
    &lt;/div&gt;

    &lt;div id=&quot;math-geni-app&quot; style=&quot;max-width: 100%; margin: 20px auto; border: 5px solid #2980b9; border-radius: 30px; overflow: hidden; box-shadow: 0 15px 0 #1a5276; background: white;&quot;&gt;
        
        &lt;div style=&quot;background: #2980b9; color: white; padding: 20px; text-align: center;&quot;&gt;
            &lt;h2 style=&quot;margin:0; color:white !important; font-family: &#39;Arial Black&#39;, sans-serif;&quot;&gt;🧮 MATH-GENI V3.2&lt;/h2&gt;
            &lt;p id=&quot;player-info&quot; style=&quot;margin:5px 0 0 0; font-size: 14px; font-weight: bold;&quot;&gt;Sedia untuk cabaran Juta?&lt;/p&gt;
        &lt;/div&gt;

        &lt;div id=&quot;start-screen&quot; style=&quot;padding: 40px; text-align: center;&quot;&gt;
            &lt;input type=&quot;text&quot; id=&quot;player-name&quot; placeholder=&quot;Masukkan Nama Murid...&quot; style=&quot;width: 85%; padding: 15px; border-radius: 15px; border: 2px solid #2980b9; margin-bottom: 20px; font-size: 16px; text-align: center;&quot;&gt;
            &lt;br&gt;
            &lt;label style=&quot;font-weight: bold; color: #1a5276; font-size: 13px;&quot;&gt;PILIH TAHAP BELAJAR:&lt;/label&gt;&lt;br&gt;
            &lt;select id=&quot;level-select&quot; style=&quot;width: 90%; padding: 12px; border-radius: 12px; margin: 10px 0; font-size: 14px; border: 2px solid #2980b9;&quot;&gt;
                &lt;option value=&quot;100&quot;&gt;Ratus (Tahun 1-2)&lt;/option&gt;
                &lt;option value=&quot;1000&quot;&gt;Ribu (Tahun 2-3)&lt;/option&gt;
                &lt;option value=&quot;10000&quot;&gt;Puluh Ribu (Tahun 3-4)&lt;/option&gt;
                &lt;option value=&quot;100000&quot;&gt;Ratus Ribu (Tahun 5)&lt;/option&gt;
                &lt;option value=&quot;1000000&quot;&gt;Juta (Tahun 6)&lt;/option&gt;
            &lt;/select&gt;
            &lt;br&gt;&lt;br&gt;
            &lt;button onclick=&quot;startGame()&quot; style=&quot;background: #27ae60; color: white; border: none; padding: 15px 40px; border-radius: 15px; font-size: 18px; font-weight: bold; cursor: pointer; box-shadow: 0 5px 0 #1e8449;&quot;&gt;MULA BERMAIN! 🚀&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;game-screen&quot; style=&quot;display:none; padding: 20px;&quot;&gt;
            &lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 15px;&quot;&gt;
                &lt;div style=&quot;background: #ebf5fb; padding: 10px; border-radius: 15px; text-align: center; border: 2px solid #2980b9;&quot;&gt;
                    &lt;div style=&quot;font-size: 9px; font-weight: bold; color:#2980b9;&quot;&gt;SKOR NILAI TEMPAT&lt;/div&gt;
                    &lt;div id=&quot;score-tempat&quot; style=&quot;font-size: 24px; font-weight:bold; color: #2980b9;&quot;&gt;0&lt;/div&gt;
                &lt;/div&gt;
                &lt;div style=&quot;background: #fef9e7; padding: 10px; border-radius: 15px; text-align: center; border: 2px solid #f1c40f;&quot;&gt;
                    &lt;div style=&quot;font-size: 9px; font-weight: bold; color:#b7950b;&quot;&gt;SKOR NILAI DIGIT&lt;/div&gt;
                    &lt;div id=&quot;score-digit&quot; style=&quot;font-size: 24px; font-weight:bold; color: #f1c40f;&quot;&gt;0&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div style=&quot;display: flex; gap: 5px; margin-bottom: 15px;&quot;&gt;
                &lt;button onclick=&quot;switchTab(&#39;tempat&#39;)&quot; id=&quot;t-btn&quot; style=&quot;flex:1; padding:12px; border-radius:12px; border:none; background:#2980b9; color:white; cursor:pointer; font-weight:bold;&quot;&gt;NILAI TEMPAT&lt;/button&gt;
                &lt;button onclick=&quot;switchTab(&#39;digit&#39;)&quot; id=&quot;d-btn&quot; style=&quot;flex:1; padding:12px; border-radius:12px; border:none; background:#ccc; color:#333; cursor:pointer; font-weight:bold;&quot;&gt;NILAI DIGIT&lt;/button&gt;
            &lt;/div&gt;

            &lt;div id=&quot;play-area&quot; style=&quot;background: #fff; padding: 20px; border-radius: 20px; text-align: center; border: 1px solid #eee;&quot;&gt;
                &lt;h1 id=&quot;target-num&quot; style=&quot;font-size: 38px; margin: 10px 0; color: #2c3e50; letter-spacing: 2px;&quot;&gt;0&lt;/h1&gt;
                
                &lt;div id=&quot;area-tempat&quot;&gt;
                    &lt;div id=&quot;pool&quot; style=&quot;display: flex; justify-content: center; gap: 8px; margin-bottom: 15px; min-height: 45px; border: 2px dashed #ddd; padding: 10px; border-radius: 15px;&quot;&gt;&lt;/div&gt;
                    &lt;div id=&quot;zones&quot; style=&quot;display: flex; justify-content: center; gap: 5px; flex-wrap: wrap;&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;div id=&quot;area-digit&quot; style=&quot;display:none;&quot;&gt;
                    &lt;div id=&quot;inputs-digit&quot; style=&quot;display: flex; flex-direction: column; gap: 8px; margin-top:15px;&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;button onclick=&quot;checkAnswer()&quot; style=&quot;width: 100%; background: #2980b9; color: white; border: none; padding: 15px; border-radius: 15px; font-weight: bold; margin-top: 20px; cursor: pointer; box-shadow: 0 4px 0 #1a5276;&quot;&gt;SEMAK JAWAPAN ✔️&lt;/button&gt;
                &lt;p id=&quot;msg&quot; style=&quot;margin-top: 15px; font-weight: bold; font-size: 18px;&quot;&gt;&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
    //&lt;![CDATA[
    let scoreT = 0; let scoreD = 0;
    let mode = &#39;tempat&#39;; let targetStr = &quot;&quot;;

    function startGame() {
        const name = document.getElementById(&#39;player-name&#39;).value || &quot;Murid&quot;;
        document.getElementById(&#39;player-info&#39;).innerText = &quot;Pemain: &quot; + name;
        document.getElementById(&#39;start-screen&#39;).style.display = &#39;none&#39;;
        document.getElementById(&#39;game-screen&#39;).style.display = &#39;block&#39;;
        newQ();
    }

    function switchTab(m) {
        mode = m;
        document.getElementById(&#39;t-btn&#39;).style.background = m === &#39;tempat&#39; ? &#39;#2980b9&#39; : &#39;#ccc&#39;;
        document.getElementById(&#39;t-btn&#39;).style.color = m === &#39;tempat&#39; ? &#39;white&#39; : &#39;#333&#39;;
        document.getElementById(&#39;d-btn&#39;).style.background = m === &#39;digit&#39; ? &#39;#2980b9&#39; : &#39;#ccc&#39;;
        document.getElementById(&#39;d-btn&#39;).style.color = m === &#39;digit&#39; ? &#39;white&#39; : &#39;#333&#39;;
        document.getElementById(&#39;area-tempat&#39;).style.display = m === &#39;tempat&#39; ? &#39;block&#39; : &#39;none&#39;;
        document.getElementById(&#39;area-digit&#39;).style.display = m === &#39;digit&#39; ? &#39;block&#39; : &#39;none&#39;;
        newQ();
    }

    function newQ() {
        const max = parseInt(document.getElementById(&#39;level-select&#39;).value);
        const n = Math.floor(Math.random() * (max - (max/10))) + (max/10);
        targetStr = n.toString();
        document.getElementById(&#39;target-num&#39;).innerText = n.toLocaleString();
        document.getElementById(&#39;msg&#39;).innerText = &quot;&quot;;
        mode === &#39;tempat&#39; ? setT() : setD();
    }

    function setT() {
        const pool = document.getElementById(&#39;pool&#39;); pool.innerHTML = &#39;&#39;;
        const zones = document.getElementById(&#39;zones&#39;); zones.innerHTML = &#39;&#39;;
        const labels = [&#39;SA&#39;, &#39;PULUH&#39;, &#39;RATUS&#39;, &#39;RIBU&#39;, &#39;P. RIBU&#39;, &#39;R. RIBU&#39;, &#39;JUTA&#39;];
        targetStr.split(&#39;&#39;).sort(() =&gt; Math.random() - 0.5).forEach(d =&gt; {
            const item = document.createElement(&#39;div&#39;);
            item.innerText = d; item.draggable = true;
            item.className = &quot;drag-item&quot;;
            item.style = &quot;width:35px; height:35px; background:#2980b9; color:white; border-radius:5px; display:flex; align-items:center; justify-content:center; cursor:move; font-weight:bold;&quot;;
            item.ondragstart = (e) =&gt; e.dataTransfer.setData(&#39;text&#39;, d);
            pool.appendChild(item);
        });
        for(let i = targetStr.length - 1; i &gt;= 0; i--) {
            const z = document.createElement(&#39;div&#39;);
            z.className = &quot;drop-zone-box&quot;;
            z.style = &quot;width:50px; height:75px; border:2px solid #2980b9; border-radius:8px; background:#f4faff; transition: 0.3s;&quot;;
            z.innerHTML = `&lt;div style=&quot;font-size:7px; font-weight:bold; padding:3px; color:#2980b9;&quot;&gt;${labels[i]}&lt;/div&gt;&lt;div class=&quot;drop-val&quot; style=&quot;font-size:24px; font-weight:bold; color:#333;&quot;&gt;&lt;/div&gt;`;
            z.ondragover = (e) =&gt; e.preventDefault();
            z.ondrop = (e) =&gt; { 
                z.querySelector(&#39;.drop-val&#39;).innerText = e.dataTransfer.getData(&#39;text&#39;);
                z.style.background = &quot;#f4faff&quot;; // reset color on drop
            };
            zones.appendChild(z);
        }
    }

    function setD() {
        const cont = document.getElementById(&#39;inputs-digit&#39;); cont.innerHTML = &#39;&#39;;
        const rev = targetStr.split(&#39;&#39;).reverse();
        rev.forEach((d, i) =&gt; {
            const row = document.createElement(&#39;div&#39;);
            row.style = &quot;margin-bottom:8px;&quot;;
            row.innerHTML = `&lt;span style=&quot;font-size:12px;&quot;&gt;Nilai digit &lt;b&gt;${d}&lt;/b&gt;:&lt;/span&gt; &lt;input type=&quot;number&quot; class=&quot;d-input&quot; data-ans=&quot;${d * Math.pow(10, i)}&quot; style=&quot;width:110px; padding:6px; border-radius:8px; border:1px solid #f1c40f; text-align:center; transition: 0.3s;&quot;&gt;`;
            cont.prepend(row);
        });
    }

    function checkAnswer() {
        let correct = true;
        if(mode === &#39;tempat&#39;) {
            const boxes = document.querySelectorAll(&#39;.drop-zone-box&#39;);
            boxes.forEach((box, idx) =&gt; {
                const val = box.querySelector(&#39;.drop-val&#39;).innerText;
                if(val !== targetStr[idx]) {
                    correct = false;
                    box.style.background = &quot;#fadbd8&quot;; // Red background
                    box.style.borderColor = &quot;#e74c3c&quot;;
                } else {
                    box.style.background = &quot;#d4efdf&quot;; // Green background
                    box.style.borderColor = &quot;#27ae60&quot;;
                }
            });
        } else {
            document.querySelectorAll(&#39;.d-input&#39;).forEach(input =&gt; {
                if(parseInt(input.value) !== parseInt(input.getAttribute(&#39;data-ans&#39;))) {
                    correct = false;
                    input.style.borderColor = &quot;#e74c3c&quot;;
                    input.style.background = &quot;#fadbd8&quot;;
                } else {
                    input.style.borderColor = &quot;#27ae60&quot;;
                    input.style.background = &quot;#d4efdf&quot;;
                }
            });
        }
        if(correct) {
            if(mode === &#39;tempat&#39;) { scoreT++; document.getElementById(&#39;score-tempat&#39;).innerText = scoreT; }
            else { scoreD++; document.getElementById(&#39;score-digit&#39;).innerText = scoreD; }
            document.getElementById(&#39;msg&#39;).innerHTML = &quot;BETUL! 👍 +1 MATA&quot;;
            document.getElementById(&#39;msg&#39;).style.color = &quot;#27ae60&quot;;
            setTimeout(newQ, 1200);
        } else {
            document.getElementById(&#39;msg&#39;).innerHTML = &quot;ADA YANG SALAH! ❌ Perbaiki kotak merah.&quot;;
            document.getElementById(&#39;msg&#39;).style.color = &quot;#e74c3c&quot;;
        }
    }
    //]]&gt;
    &lt;/script&gt;

    &lt;div style=&quot;margin: 25px 0; padding: 15px; border: 1px solid #d1d8e0; border-radius: 12px; text-align: center;&quot;&gt;
        &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold;&quot;&gt;🎖️ Koleksi Gadjet Pembelajaran &amp; Alat Tulis Murah&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-weight: bold;&quot;&gt;Lihat Katalog Shopee &amp;raquo;&lt;/a&gt;
    &lt;/div&gt;

&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/8872930170256950989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/math-geni-nilai-tempat-nilai-digit.html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8872930170256950989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8872930170256950989'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/math-geni-nilai-tempat-nilai-digit.html.html' title='Math-Geni: Game Nilai Tempat &amp; Nilai Digit Matematik Sekolah Rendah'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-vrNx1z5318C5Z-B5j23DY5NkUJTk-1QeQEw1ZyzHbZjt9kRc3oQebRURtuZoN1Af4jffGw37DfaS7Qj3lU_3RI3d-tX6ylrIgbzrDyxNYAzw7qt3Mb8rmfJEF-TO8hflZJ7vHmBRPqyxUCvtSkmgIXurnrWvAVv6tPkVE2GgDvjW2AqmV7LgzS2zPOw/s72-c/nilai%20tempat%20nilai%20digit.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-4066677717001851744</id><published>2026-01-19T23:36:00.005+08:00</published><updated>2026-01-20T00:04:29.586+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="BBM"/><category scheme="http://www.blogger.com/atom/ns#" term="Free Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Generator"/><category scheme="http://www.blogger.com/atom/ns#" term="Guru"/><category scheme="http://www.blogger.com/atom/ns#" term="Hiasan Kelas"/><category scheme="http://www.blogger.com/atom/ns#" term="Poster Maker"/><title type='text'>Giant Poster Maker: Bina Poster Gergasi Guna Printer A4 (Percuma!)</title><content type='html'>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.min.js&quot;&gt;&lt;/script&gt;

&lt;div style=&quot;color: #333333; font-family: sans-serif; line-height: 1.6; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Urusan hiasan kelas dan persiapan majlis kini lebih mudah dengan &lt;b&gt;Giant Poster Maker Pro V2.1&lt;/b&gt;. Tool ini membolehkan anda menjana poster gergasi daripada fail &lt;b&gt;PDF, JPG, atau PNG&lt;/b&gt; dengan sistem &lt;b&gt;Smart-Fit&lt;/b&gt; yang memastikan gambar tidak &#39;stretch&#39; atau herot.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;background: rgb(249, 250, 251); border-radius: 12px; border: 1px solid rgb(229, 231, 235); margin: 20px 0px; padding: 15px; text-align: center;&quot;&gt;
    &lt;p style=&quot;font-size: 13px; font-weight: bold; margin: 0px 0px 10px;&quot;&gt;🛒 Stok Kertas Tebal (100gsm-160gsm) &amp;amp; Gam Stik Murah&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; style=&quot;color: #ee4d2d; font-weight: bold; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Lihat Katalog Shopee »&lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; margin-bottom: 30px; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2_gBPoHltejcYvmnACmKEZN8z6WJ683_Ea_El3ylMAfnseKHXf4fOk3GNB3qhaRS5BVY7iGETznX_95HXyKQoGcoR6rcdIeHhy3kXpvemwfq8v7nvKfYQBKpa_JVhScHG3ryOo_9EEWKNCAr6b0tO4fR91Ybt5lYFfoeBvDFHa_HsSHQnTCxKUmj6zKY/s762/poster%20generator.png&quot;&gt;
        &lt;img alt=&quot;Giant Poster Maker Pro V2.1&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2_gBPoHltejcYvmnACmKEZN8z6WJ683_Ea_El3ylMAfnseKHXf4fOk3GNB3qhaRS5BVY7iGETznX_95HXyKQoGcoR6rcdIeHhy3kXpvemwfq8v7nvKfYQBKpa_JVhScHG3ryOo_9EEWKNCAr6b0tO4fR91Ybt5lYFfoeBvDFHa_HsSHQnTCxKUmj6zKY/s762/poster%20generator.png&quot; width=&quot;350&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div id=&quot;poster-maker-v2&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 25px; border: 2px solid rgb(39, 174, 96); box-shadow: rgba(0, 0, 0, 0.1) 0px 15px 45px; font-family: &amp;quot;Segoe UI&amp;quot;, sans-serif; margin: 20px auto; max-width: 850px; overflow: hidden;&quot;&gt;
    
    &lt;div style=&quot;background: rgb(39, 174, 96); color: white; padding: 25px; text-align: center;&quot;&gt;
        &lt;h2 style=&quot;color: white; font-size: 22px; margin: 0px;&quot;&gt;🖼️ GIANT POSTER MAKER PRO V2.1&lt;/h2&gt;
        &lt;p style=&quot;font-size: 11px; margin: 5px 0px 0px; opacity: 0.9;&quot;&gt;PDF Support | Smart-Fit Technology | Orientation Control&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;padding: 25px;&quot;&gt;
        &lt;div style=&quot;display: grid; gap: 20px; grid-template-columns: 1fr 1fr; margin-bottom: 20px;&quot;&gt;
            &lt;div&gt;
                &lt;label style=&quot;display: block; font-size: 12px; font-weight: bold; margin-bottom: 8px;&quot;&gt;1. MUAT NAIK FAIL (PDF/JPG/PNG):&lt;/label&gt;
                &lt;input accept=&quot;image/*,application/pdf&quot; id=&quot;f_input&quot; style=&quot;border-radius: 10px; border: 1px solid rgb(221, 221, 221); padding: 10px; width: 100%;&quot; type=&quot;file&quot; /&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label style=&quot;display: block; font-size: 12px; font-weight: bold; margin-bottom: 8px;&quot;&gt;2. ORIENTASI KERTAS:&lt;/label&gt;
                &lt;select id=&quot;f_orient&quot; onchange=&quot;updatePreview()&quot; style=&quot;border-radius: 10px; border: 1px solid rgb(204, 204, 204); padding: 10px; width: 100%;&quot;&gt;
                    &lt;option value=&quot;p&quot;&gt;A4 Menegak (Portrait)&lt;/option&gt;
                    &lt;option value=&quot;l&quot;&gt;A4 Melintang (Landscape)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: grid; gap: 20px; grid-template-columns: 1fr 1fr; margin-bottom: 20px;&quot;&gt;
            &lt;div&gt;
                &lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;LEBAR (Bilangan Kertas):&lt;/label&gt;
                &lt;input id=&quot;f_cols&quot; oninput=&quot;updatePreview()&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(204, 204, 204); padding: 10px; width: 100%;&quot; type=&quot;number&quot; value=&quot;3&quot; /&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;TINGGI (Bilangan Kertas):&lt;/label&gt;
                &lt;input id=&quot;f_rows&quot; oninput=&quot;updatePreview()&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(204, 204, 204); padding: 10px; width: 100%;&quot; type=&quot;number&quot; value=&quot;3&quot; /&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&quot;preview-container&quot; style=&quot;background: rgb(240, 240, 240); border-radius: 15px; border: 2px dashed rgb(204, 204, 204); min-height: 200px; padding: 20px; position: relative; text-align: center;&quot;&gt;
            &lt;p style=&quot;color: #666666; font-size: 10px; font-weight: bold; margin-bottom: 10px;&quot;&gt;PREVIEW KEDUDUKAN GAMBAR PADA GRID:&lt;/p&gt;
            &lt;div id=&quot;grid-visual&quot; style=&quot;background: white; border: 1px solid rgb(51, 51, 51); box-shadow: rgba(0, 0, 0, 0.1) 0px 5px 15px; display: inline-grid; position: relative;&quot;&gt;
                &lt;/div&gt;
        &lt;/div&gt;

        &lt;button id=&quot;f_btn&quot; onclick=&quot;processAndGenerate()&quot; style=&quot;background: rgb(39, 174, 96); border-radius: 15px; border: medium; box-shadow: rgb(30, 132, 73) 0px 6px 0px; color: white; cursor: pointer; font-size: 18px; font-weight: bold; margin-top: 20px; padding: 18px; width: 100%;&quot;&gt;📥 JANA POSTER (SMART FIT)&lt;/button&gt;
        &lt;p id=&quot;f_loading&quot; style=&quot;color: #27ae60; display: none; font-weight: bold; margin-top: 10px; text-align: center;&quot;&gt;Memproses fail... Sila tunggu sebentar.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;canvas id=&quot;f_canvas&quot; style=&quot;display: none;&quot;&gt;&lt;/canvas&gt;

&lt;script&gt;
//&lt;![CDATA[
let sourceImg = null;

document.getElementById(&#39;f_input&#39;).addEventListener(&#39;change&#39;, async function(e) {
    const file = e.target.files[0];
    if (!file) return;
    if (file.type === &quot;application/pdf&quot;) {
        const fileReader = new FileReader();
        fileReader.onload = async function() {
            const typedarray = new Uint8Array(this.result);
            const pdfjsLib = window[&#39;pdfjs-dist/build/pdf&#39;];
            pdfjsLib.GlobalWorkerOptions.workerSrc = &#39;https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.worker.min.js&#39;;
            const pdf = await pdfjsLib.getDocument(typedarray).promise;
            const page = await pdf.getPage(1);
            const viewport = page.getViewport({scale: 2});
            const canvas = document.createElement(&#39;canvas&#39;);
            const context = canvas.getContext(&#39;2d&#39;);
            canvas.height = viewport.height; canvas.width = viewport.width;
            await page.render({canvasContext: context, viewport: viewport}).promise;
            sourceImg = new Image(); sourceImg.src = canvas.toDataURL();
            sourceImg.onload = updatePreview;
        };
        fileReader.readAsArrayBuffer(file);
    } else {
        sourceImg = new Image(); sourceImg.src = URL.createObjectURL(file);
        sourceImg.onload = updatePreview;
    }
});

function updatePreview() {
    if (!sourceImg) return;
    const cols = parseInt(document.getElementById(&#39;f_cols&#39;).value);
    const rows = parseInt(document.getElementById(&#39;f_rows&#39;).value);
    const orient = document.getElementById(&#39;f_orient&#39;).value;
    const grid = document.getElementById(&#39;grid-visual&#39;);
    const paperW = orient === &#39;p&#39; ? 210 : 297; const paperH = orient === &#39;p&#39; ? 297 : 210;
    const cellSize = 40;
    grid.style.gridTemplateColumns = `repeat(${cols}, ${cellSize}px)`;
    grid.style.gridTemplateRows = `repeat(${rows}, ${cellSize * (paperH/paperW)}px)`;
    grid.innerHTML = &#39;&#39;;
    for (let i = 0; i &lt; cols * rows; i++) {
        const cell = document.createElement(&#39;div&#39;);
        cell.style.border = &quot;1px solid #ddd&quot;; grid.appendChild(cell);
    }
    const imgOverlay = document.createElement(&#39;img&#39;);
    imgOverlay.src = sourceImg.src; imgOverlay.style.position = &quot;absolute&quot;;
    imgOverlay.style.top = &quot;50%&quot;; imgOverlay.style.left = &quot;50%&quot;; imgOverlay.style.transform = &quot;translate(-50%, -50%)&quot;;
    const containerRatio = (cols * paperW) / (rows * paperH);
    const imgRatio = sourceImg.width / sourceImg.height;
    if (imgRatio &gt; containerRatio) { imgOverlay.style.width = &quot;100%&quot;; imgOverlay.style.height = &quot;auto&quot;; }
    else { imgOverlay.style.height = &quot;100%&quot;; imgOverlay.style.width = &quot;auto&quot;; }
    imgOverlay.style.opacity = &quot;0.6&quot;; grid.appendChild(imgOverlay);
}

async function processAndGenerate() {
    if (!sourceImg) { alert(&quot;Sila muat naik fail!&quot;); return; }
    document.getElementById(&#39;f_btn&#39;).disabled = true;
    document.getElementById(&#39;f_loading&#39;).style.display = &#39;block&#39;;
    const { jsPDF } = window.jspdf;
    const cols = parseInt(document.getElementById(&#39;f_cols&#39;).value);
    const rows = parseInt(document.getElementById(&#39;f_rows&#39;).value);
    const orient = document.getElementById(&#39;f_orient&#39;).value;
    const pdf = new jsPDF(orient, &#39;mm&#39;, &#39;a4&#39;);
    const paperW = orient === &#39;p&#39; ? 210 : 297; const paperH = orient === &#39;p&#39; ? 297 : 210;
    const margin = 10;
    const printableW = paperW - (margin * 2); const printableH = paperH - (margin * 2);
    const totalGridW = cols * printableW; const totalGridH = rows * printableH;
    const scale = Math.min(totalGridW / sourceImg.width, totalGridH / sourceImg.height);
    const finalW = sourceImg.width * scale; const finalH = sourceImg.height * scale;
    const offsetX = (totalGridW - finalW) / 2; const offsetY = (totalGridH - finalH) / 2;
    const canvas = document.getElementById(&#39;f_canvas&#39;); const ctx = canvas.getContext(&#39;2d&#39;);

    // Page 1: Guide
    pdf.setFontSize(14); pdf.text(&quot;PANDUAN PEMASANGAN POSTER&quot;, paperW/2, 20, {align:&#39;center&#39;});
    pdf.addImage(sourceImg.src, &#39;JPEG&#39;, paperW*0.2, 30, paperW*0.6, (sourceImg.height/sourceImg.width)*(paperW*0.6));

    for (let r = 0; r &lt; rows; r++) {
        for (let c = 0; c &lt; cols; c++) {
            pdf.addPage();
            const sX = (c * printableW - offsetX) / scale; const sY = (r * printableH - offsetY) / scale;
            const sW = printableW / scale; const sH = printableH / scale;
            canvas.width = printableW * 4; canvas.height = printableH * 4;
            ctx.fillStyle = &quot;white&quot;; ctx.fillRect(0, 0, canvas.width, canvas.height);
            ctx.drawImage(sourceImg, sX, sY, sW, sH, 0, 0, canvas.width, canvas.height);
            pdf.addImage(canvas.toDataURL(&#39;image/jpeg&#39;, 0.8), &#39;JPEG&#39;, margin, margin, printableW, printableH);
            
            // GLUE GUIDES
            pdf.setDrawColor(180); pdf.setLineDashPattern([2, 2], 0);
            if (c &lt; cols - 1) { 
                pdf.line(paperW - margin, margin, paperW - margin, paperH - margin);
                pdf.setFontSize(6); pdf.text(&quot;TAMPAL DI SINI&quot;, paperW - margin + 2, paperH/2, {angle: 90});
            }
            if (r &lt; rows - 1) { 
                pdf.line(margin, paperH - margin, paperW - margin, paperH - margin);
                pdf.setFontSize(6); pdf.text(&quot;TAMPAL DI SINI&quot;, paperW/2, paperH - margin + 4, {align:&#39;center&#39;});
            }
            pdf.setFontSize(8); pdf.setTextColor(150);
            pdf.text(`B:${r+1} K:${c+1}`, paperW/2, paperH - 5, {align:&#39;center&#39;});
        }
    }
    pdf.save(&quot;Giant_Poster_Layanlah_V2.pdf&quot;);
    document.getElementById(&#39;f_btn&#39;).disabled = false;
    document.getElementById(&#39;f_loading&#39;).style.display = &#39;none&#39;;
}
//]]&gt;
&lt;/script&gt;


&lt;div style=&quot;background: #fdfdfd; border: 1px solid #e1e8ed; border-radius: 20px; padding: 25px; margin-top: 30px; box-shadow: 0 4px 15px rgba(0,0,0,0.05);&quot;&gt;
    
    &lt;h3 style=&quot;color: #27ae60; border-bottom: 2px solid #27ae60; display: inline-block; padding-bottom: 5px; margin-bottom: 20px;&quot;&gt;
        &lt;i class=&quot;fas fa-list-ol&quot;&gt;&lt;/i&gt; CARA PENGGUNAAN GIANT POSTER MAKER
    &lt;/h3&gt;

    &lt;div style=&quot;display: flex; flex-direction: column; gap: 15px;&quot;&gt;
        &lt;div style=&quot;display: flex; align-items: flex-start; gap: 10px;&quot;&gt;
            &lt;span style=&quot;background: #27ae60; color: white; border-radius: 50%; width: 25px; height: 25px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 12px; font-weight: bold;&quot;&gt;1&lt;/span&gt;
            &lt;p style=&quot;margin: 0; font-size: 14px;&quot;&gt;&lt;strong&gt;Muat Naik Fail:&lt;/strong&gt; Pilih gambar (JPG/PNG) atau fail PDF yang ingin dijadikan poster gergasi.&lt;/p&gt;
        &lt;/div&gt;
        &lt;div style=&quot;display: flex; align-items: flex-start; gap: 10px;&quot;&gt;
            &lt;span style=&quot;background: #27ae60; color: white; border-radius: 50%; width: 25px; height: 25px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 12px; font-weight: bold;&quot;&gt;2&lt;/span&gt;
            &lt;p style=&quot;margin: 0; font-size: 14px;&quot;&gt;&lt;strong&gt;Pilih Orientasi:&lt;/strong&gt; Pilih &lt;b&gt;Portrait&lt;/b&gt; (A4 Menegak) atau &lt;b&gt;Landscape&lt;/b&gt; (A4 Melintang).&lt;/p&gt;
        &lt;/div&gt;
        &lt;div style=&quot;display: flex; align-items: flex-start; gap: 10px;&quot;&gt;
            &lt;span style=&quot;background: #27ae60; color: white; border-radius: 50%; width: 25px; height: 25px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 12px; font-weight: bold;&quot;&gt;3&lt;/span&gt;
            &lt;p style=&quot;margin: 0; font-size: 14px;&quot;&gt;&lt;strong&gt;Tentukan Saiz:&lt;/strong&gt; Masukkan bilangan kepingan A4 (Lebar x Tinggi). Semak kedudukan gambar pada kotak &lt;b&gt;Preview&lt;/b&gt;.&lt;/p&gt;
        &lt;/div&gt;
        &lt;div style=&quot;display: flex; align-items: flex-start; gap: 10px;&quot;&gt;
            &lt;span style=&quot;background: #27ae60; color: white; border-radius: 50%; width: 25px; height: 25px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 12px; font-weight: bold;&quot;&gt;4&lt;/span&gt;
            &lt;p style=&quot;margin: 0; font-size: 14px;&quot;&gt;&lt;strong&gt;Jana PDF:&lt;/strong&gt; Klik butang &#39;Jana Poster&#39;. Anda akan dapat fail PDF mengandungi rujukan penuh &amp; kepingan poster.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #eef9f1; border-left: 5px solid #27ae60; padding: 15px; border-radius: 10px; margin-top: 25px;&quot;&gt;
        &lt;h4 style=&quot;margin: 0 0 10px 0; color: #1e8449; font-size: 16px;&quot;&gt;&lt;i class=&quot;fas fa-lightbulb&quot;&gt;&lt;/i&gt; TIPS PRO LAYANLAH:&lt;/h4&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 13px; line-height: 1.6; color: #2c3e50;&quot;&gt;
            &lt;li&gt;&lt;strong&gt;Ruang Gam:&lt;/strong&gt; Gunting lebihan putih bertanda &#39;TAMPAL DI SINI&#39; untuk cantuman yang kemas.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Jenis Kertas:&lt;/strong&gt; Gunakan kertas &lt;b&gt;120gsm - 160gsm&lt;/b&gt; untuk poster yang lebih tegak dan tidak mudah koyak.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Cantuman:&lt;/strong&gt; Gunakan &lt;i&gt;Glue Stick&lt;/i&gt; berkualiti supaya kertas tidak mengelembung (berkedut) akibat basah.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Laminate:&lt;/strong&gt; Digalakkan untuk laminate setiap kepingan sebelum disambung supaya poster nampak &lt;i&gt;Premium&lt;/i&gt;.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div style=&quot;border-radius: 12px; border: 1px solid rgb(209, 216, 224); margin: 25px 0px; padding: 15px; text-align: center;&quot;&gt;
    &lt;p style=&quot;font-size: 13px; font-weight: bold; margin: 0px 0px 10px;&quot;&gt;🎖️ Frame Poster &amp;amp; Aksesori Hiasan Kelas Murah&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; style=&quot;color: #3498db; font-weight: bold; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Cek Katalog Shopee »&lt;/a&gt;
&lt;/div&gt;

&lt;div style=&quot;color: #999999; font-size: 11px; margin-top: 20px; text-align: center;&quot;&gt;
    Disclaimer: Sistem ini memproses fail secara &#39;local&#39; di peranti anda. Layanlah tidak menyimpan sebarang fail yang dimuat naik. Kami adalah rakan affiliate Shopee.
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/4066677717001851744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/giant-poster-maker-gergasi-a4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4066677717001851744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4066677717001851744'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/giant-poster-maker-gergasi-a4.html' title='Giant Poster Maker: Bina Poster Gergasi Guna Printer A4 (Percuma!)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2_gBPoHltejcYvmnACmKEZN8z6WJ683_Ea_El3ylMAfnseKHXf4fOk3GNB3qhaRS5BVY7iGETznX_95HXyKQoGcoR6rcdIeHhy3kXpvemwfq8v7nvKfYQBKpa_JVhScHG3ryOo_9EEWKNCAr6b0tO4fR91Ybt5lYFfoeBvDFHa_HsSHQnTCxKUmj6zKY/s72-c/poster%20generator.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-3732418756163166591</id><published>2026-01-19T23:02:00.007+08:00</published><updated>2026-01-19T23:03:06.080+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Aktiviti Sekolah"/><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="BBM"/><category scheme="http://www.blogger.com/atom/ns#" term="Free Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Guru"/><category scheme="http://www.blogger.com/atom/ns#" term="Puzzle Maker"/><title type='text'>Ultimate Puzzle Generator: Cara Mudah Buat Puzzle Sendiri Untuk Murid!</title><content type='html'>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;

&lt;div style=&quot;font-family: &#39;Segoe UI&#39;, sans-serif; line-height: 1.7; color: #333; max-width: 800px; margin: 0 auto; padding: 20px;&quot;&gt;
    &lt;h1 style=&quot;text-align: center; color: #2c3e50;&quot;&gt;🧩 Ultimate Puzzle Generator: Bina BBM Puzzle Sendiri!&lt;/h1&gt;
    
    &lt;div style=&quot;text-align: center; margin-bottom: 30px;&quot;&gt;
        &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJnTyFtUBfXZa8szz5Y8FapZ_4an3KozMphDwJ0Bm9Knc8sdyybv-x83NNvx9BdHcH7GfkUEhYfdL63mvgg1zD0c7FsrCRM6yn_wu4hbrU02KSEHhHtXym3WLTj4w6dCFvdvI6S7XcZ5r9bw-w_ejdz0teerbSEjmc85cIiZiWRSjeqXJCK2Js_YWRNw/s783/puzzle%20generator.png&quot;&gt;
            &lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJnTyFtUBfXZa8szz5Y8FapZ_4an3KozMphDwJ0Bm9Knc8sdyybv-x83NNvx9BdHcH7GfkUEhYfdL63mvgg1zD0c7FsrCRM6yn_wu4hbrU02KSEHhHtXym3WLTj4w6dCFvdvI6S7XcZ5r9bw-w_ejdz0teerbSEjmc85cIiZiWRSjeqXJCK2Js_YWRNw/s783/puzzle%20generator.png&quot; style=&quot;width: 100%; border-radius: 15px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);&quot; alt=&quot;Puzzle Generator Layanlah&quot;&gt;
        &lt;/a&gt;
    &lt;/div&gt;

    &lt;p&gt;Tukar mana-mana gambar menjadi aktiviti puzzle yang menyeronokkan untuk murid anda! Sesuai untuk set induksi, aktiviti kumpulan, atau bahan bantu mengajar (BBM) yang interaktif.&lt;/p&gt;

    &lt;div id=&quot;puzzle-app&quot; style=&quot;background: #ffffff; border: 2px solid #2c3e50; border-radius: 25px; overflow: hidden; box-shadow: 0 15px 45px rgba(0,0,0,0.1); margin: 30px 0;&quot;&gt;
        &lt;div style=&quot;background: #2c3e50; color: white; padding: 20px; text-align: center;&quot;&gt;
            &lt;h2 style=&quot;margin:0; color:white !important;&quot;&gt;🎨 PUZZLE MAKER PRO&lt;/h2&gt;
        &lt;/div&gt;

        &lt;div style=&quot;padding: 25px;&quot;&gt;
            &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
                &lt;label style=&quot;font-weight:bold; display:block; margin-bottom:10px;&quot;&gt;1. MUAT NAIK GAMBAR (JPG/PNG):&lt;/label&gt;
                &lt;input type=&quot;file&quot; id=&quot;imageInput&quot; accept=&quot;image/*&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:10px;&quot;&gt;
            &lt;/div&gt;

            &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
                &lt;label style=&quot;font-weight:bold; display:block; margin-bottom:10px;&quot;&gt;2. PILIH TAHAP KESUKARAN (GRID):&lt;/label&gt;
                &lt;select id=&quot;gridSelect&quot; style=&quot;width:100%; padding:12px; border-radius:10px; border:1px solid #ccc;&quot;&gt;
                    &lt;option value=&quot;2&quot;&gt;MUDAH (2 x 2 = 4 Kepingan)&lt;/option&gt;
                    &lt;option value=&quot;3&quot; selected&gt;SEDERHANA (3 x 3 = 9 Kepingan)&lt;/option&gt;
                    &lt;option value=&quot;4&quot;&gt;CABARAN (4 x 4 = 16 Kepingan)&lt;/option&gt;
                    &lt;option value=&quot;5&quot;&gt;PAKAR (5 x 5 = 25 Kepingan)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div id=&quot;previewContainer&quot; style=&quot;display:none; text-align:center; margin-bottom:20px; border: 1px dashed #ccc; padding: 10px; border-radius: 10px;&quot;&gt;
                &lt;p style=&quot;font-size: 11px; font-weight: bold; color: #666;&quot;&gt;PREVIEW GAMBAR:&lt;/p&gt;
                &lt;img id=&quot;imgPreview&quot; style=&quot;max-width: 100%; max-height: 200px; border-radius: 5px;&quot;&gt;
            &lt;/div&gt;

            &lt;button onclick=&quot;generatePuzzlePDF()&quot; id=&quot;btnGenerate&quot; style=&quot;width:100%; background:#e67e22; color:white; border:none; padding:18px; border-radius:15px; font-weight:bold; font-size: 18px; cursor:pointer; box-shadow: 0 6px 0 #b35d10; transition: 0.2s;&quot;&gt;📥 JANA PDF PUZZLE&lt;/button&gt;
            &lt;p id=&quot;loadingText&quot; style=&quot;display:none; text-align:center; color:#e67e22; font-weight:bold; margin-top:10px;&quot;&gt;Sila tunggu, sistem sedang memproses gambar...&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;h3 style=&quot;color: #2c3e50;&quot;&gt;Cara Guna:&lt;/h3&gt;
    &lt;ol&gt;
        &lt;li&gt;Pilih gambar yang menarik (gambar tokoh, peta, atau objek).&lt;/li&gt;
        &lt;li&gt;Pilih bilangan grid. Lagi besar nombor, lagi banyak kepingan puzzle.&lt;/li&gt;
        &lt;li&gt;Klik butang Jana. Fail PDF akan mengandungi &lt;b&gt;Gambar Penuh&lt;/b&gt; (sebagai rujukan) dan &lt;b&gt;Kepingan Puzzle&lt;/b&gt; di mukasurat seterusnya.&lt;/li&gt;
        &lt;li&gt;Print dan gunting mengikut garisan grid yang disediakan.&lt;/li&gt;
    &lt;/ol&gt;
&lt;/div&gt;

&lt;canvas id=&quot;workCanvas&quot; style=&quot;display:none;&quot;&gt;&lt;/canvas&gt;

&lt;script&gt;
// PREVIEW IMAGE
document.getElementById(&#39;imageInput&#39;).onchange = function (evt) {
    const [file] = evt.target.files;
    if (file) {
        document.getElementById(&#39;imgPreview&#39;).src = URL.createObjectURL(file);
        document.getElementById(&#39;previewContainer&#39;).style.display = &#39;block&#39;;
    }
}

async function generatePuzzlePDF() {
    const { jsPDF } = window.jspdf;
    const fileInput = document.getElementById(&#39;imageInput&#39;);
    const gridSize = parseInt(document.getElementById(&#39;gridSelect&#39;).value);
    
    if (fileInput.files.length === 0) {
        alert(&quot;Sila muat naik gambar terlebih dahulu!&quot;);
        return;
    }

    document.getElementById(&#39;btnGenerate&#39;).disabled = true;
    document.getElementById(&#39;loadingText&#39;).style.display = &#39;block&#39;;

    const file = fileInput.files[0];
    const img = new Image();
    img.src = URL.createObjectURL(file);

    img.onload = function() {
        const canvas = document.getElementById(&#39;workCanvas&#39;);
        const ctx = canvas.getContext(&#39;2d&#39;);
        const pdf = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);
        
        // 1. PAGE 1: GAMBAR RUJUKAN
        pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        pdf.text(&quot;RUJUKAN PUZZLE (GAMBAR ASAL)&quot;, 105, 20, {align: &#39;center&#39;});
        
        // Calculate aspect ratio to fit A4
        let imgWidth = 170;
        let imgHeight = (img.height / img.width) * imgWidth;
        if (imgHeight &gt; 220) {
            imgHeight = 220;
            imgWidth = (img.width / img.height) * imgHeight;
        }
        
        pdf.addImage(img, &#39;JPEG&#39;, (210-imgWidth)/2, 30, imgWidth, imgHeight);
        pdf.rect((210-imgWidth)/2, 30, imgWidth, imgHeight);

        // 2. PAGE 2: KEPINGAN PUZZLE
        pdf.addPage();
        pdf.text(&quot;KEPINGAN PUZZLE (SILA GUNTING)&quot;, 105, 20, {align: &#39;center&#39;});
        
        const pieceW = img.width / gridSize;
        const pieceH = img.height / gridSize;
        const pdfPieceW = imgWidth / gridSize;
        const pdfPieceH = imgHeight / gridSize;
        const startX = (210 - imgWidth) / 2;
        const startY = 30;

        canvas.width = pieceW;
        canvas.height = pieceH;

        for (let row = 0; row &lt; gridSize; row++) {
            for (let col = 0; col &lt; gridSize; col++) {
                // Clear and Draw slice
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                ctx.drawImage(img, col * pieceW, row * pieceH, pieceW, pieceH, 0, 0, pieceW, pieceH);
                
                // Get Base64 of the slice
                const sliceData = canvas.toDataURL(&#39;image/jpeg&#39;, 0.8);
                
                // Add to PDF
                const xPos = startX + (col * pdfPieceW);
                const yPos = startY + (row * pdfPieceH);
                
                pdf.addImage(sliceData, &#39;JPEG&#39;, xPos, yPos, pdfPieceW, pdfPieceH);
                pdf.setDrawColor(200); // Light gray line for cutting
                pdf.rect(xPos, yPos, pdfPieceW, pdfPieceH);
            }
        }

        pdf.save(&quot;Layanlah_Puzzle_Generator.pdf&quot;);
        
        document.getElementById(&#39;btnGenerate&#39;).disabled = false;
        document.getElementById(&#39;loadingText&#39;).style.display = &#39;none&#39;;
    };
}
&lt;/script&gt;

&lt;div style=&quot;margin: 30px 0; padding: 15px; border: 1px solid #d1d8e0; border-radius: 12px; text-align: center;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold;&quot;&gt;🛒 Cari Kertas Khas (Glossy) Untuk Print Puzzle?&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-weight: bold;&quot;&gt;Cek di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/3732418756163166591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/ultimate-puzzle-generator-percuma.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/3732418756163166591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/3732418756163166591'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/ultimate-puzzle-generator-percuma.html' title='Ultimate Puzzle Generator: Cara Mudah Buat Puzzle Sendiri Untuk Murid!'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJnTyFtUBfXZa8szz5Y8FapZ_4an3KozMphDwJ0Bm9Knc8sdyybv-x83NNvx9BdHcH7GfkUEhYfdL63mvgg1zD0c7FsrCRM6yn_wu4hbrU02KSEHhHtXym3WLTj4w6dCFvdvI6S7XcZ5r9bw-w_ejdz0teerbSEjmc85cIiZiWRSjeqXJCK2Js_YWRNw/s72-c/puzzle%20generator.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-1920438150778789329</id><published>2026-01-19T22:51:00.006+08:00</published><updated>2026-01-19T22:55:33.972+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Free Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Generator"/><category scheme="http://www.blogger.com/atom/ns#" term="Guru"/><category scheme="http://www.blogger.com/atom/ns#" term="Laporan Kursus"/><category scheme="http://www.blogger.com/atom/ns#" term="Minit Curai"/><category scheme="http://www.blogger.com/atom/ns#" term="PDF Generator"/><category scheme="http://www.blogger.com/atom/ns#" term="PK07/3"/><category scheme="http://www.blogger.com/atom/ns#" term="SPSK"/><title type='text'>Minit Curai Digital (ISO PK 07/3): Jana Laporan Kursus Cepat &amp; Rasmi</title><content type='html'>&lt;title&gt;Minit Curai Digital (ISO PK 07/3): Jana Laporan Kursus Cepat &amp; Rasmi&lt;/title&gt;
&lt;meta content=&quot;Jana Minit Curai Digital mengikut format ISO SPSK PK 07/3 dengan pantas dan mudah. Tool percuma ini membolehkan guru-guru hasilkan laporan kursus, mesyuarat atau bengkel secara online, siap untuk cetak atau hantar PDF.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;https://www.layanlah.com/2024/07/minit-curai-digital-iso-pk073.html&quot; rel=&quot;canonical&quot;&gt;&lt;/link&gt;

&lt;div style=&quot;color: #333333; font-family: &amp;quot;Segoe UI&amp;quot;, sans-serif; line-height: 1.7; margin: 0px auto; max-width: 800px; padding: 20px;&quot;&gt;

    &lt;h1 style=&quot;color: #2c3e50; font-size: 28px; margin-bottom: 25px; text-align: center;&quot;&gt;
        📝 Minit Curai Digital (ISO PK 07/3): Jana Laporan Kursus Cepat &amp;amp; Rasmi
    &lt;/h1&gt;

    &lt;div class=&quot;separator&quot; style=&quot;clear: both; margin-bottom: 30px; text-align: center;&quot;&gt;
        &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWxXiQjWujm2cvYVUEbWkQo-B08pPkNSlGJWwYsaO8JYksUaTemkoj_njmnzxlmyyJ7dnJBR1FpNF5yMJZZ3xG-GCFpAKhJoPKW8JsZVnsyy9uNHdp6B8HSyLN5wCkFQ6LhlYP1rejpBMU6H94n467M4KdtdlpzrsnKNSDAmHu3tdOG9tEgXtqbWxew8I/s775/minit%20curai.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;/a&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWxXiQjWujm2cvYVUEbWkQo-B08pPkNSlGJWwYsaO8JYksUaTemkoj_njmnzxlmyyJ7dnJBR1FpNF5yMJZZ3xG-GCFpAKhJoPKW8JsZVnsyy9uNHdp6B8HSyLN5wCkFQ6LhlYP1rejpBMU6H94n467M4KdtdlpzrsnKNSDAmHu3tdOG9tEgXtqbWxew8I/s775/minit%20curai.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBgdAZkgohjXD_bJTvfyGbfIT6Aeho1G7EaV65hcGSL7h-f2fAwgOiVcew8HVMiiWFT2P2X89fqnW7MOnFlzu5VfWkRy6qFGB7aQbTAV3fbR0RyJa2NilVX6gGMrjWMvpsOC6cfvlR0Cek-G5PoHkg8k7Mlovmpy5Urf90Ebo3SZctakgeU9hyphenhyphensj-4Fkk/s775/minit%20curai.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Minit Curai Digital (ISO PK 07/3): Jana Laporan Kursus Cepat &amp;amp; Rasmi&quot; border=&quot;0&quot; data-original-height=&quot;457&quot; data-original-width=&quot;775&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBgdAZkgohjXD_bJTvfyGbfIT6Aeho1G7EaV65hcGSL7h-f2fAwgOiVcew8HVMiiWFT2P2X89fqnW7MOnFlzu5VfWkRy6qFGB7aQbTAV3fbR0RyJa2NilVX6gGMrjWMvpsOC6cfvlR0Cek-G5PoHkg8k7Mlovmpy5Urf90Ebo3SZctakgeU9hyphenhyphensj-4Fkk/s16000/minit%20curai.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
    &lt;/div&gt;

    &lt;p style=&quot;margin-bottom: 15px;&quot;&gt;Salam perpaduan dan salam sejahtera buat semua guru-guru yang sentiasa komited berkhidmat! Setiap kali pulang dari kursus, bengkel, atau mesyuarat di luar, pastinya tugas menyediakan **Minit Curai** menanti. Dokumen rasmi ini penting untuk makluman Guru Besar/Pengetua dan rujukan fail sekolah.&lt;/p&gt;

    &lt;p style=&quot;margin-bottom: 15px;&quot;&gt;Kini, urusan ini menjadi lebih mudah dengan **Minit Curai Digital (Edisi ISO PK 07/3)** daripada Layanlah.com! Tool ini direka khas untuk menjana minit curai anda secara pantas, mudah, dan yang paling penting, mengikut format Sistem Pengurusan Kualiti (SPSK PK 07/3) yang digunakan di kebanyakan sekolah di Malaysia.&lt;/p&gt;

    &lt;h2 style=&quot;color: #e67e22; font-size: 22px; margin-bottom: 15px; margin-top: 30px;&quot;&gt;
        ✨ Kelebihan Minit Curai Digital Layanlah
    &lt;/h2&gt;
    &lt;ul style=&quot;list-style-type: disc; margin-bottom: 20px; margin-left: 20px;&quot;&gt;
        &lt;li&gt;&lt;b&gt;Format Rasmi ISO PK 07/3:&lt;/b&gt; Template yang dihasilkan adalah selaras dengan piawaian Sistem Pengurusan Kualiti Sekolah (SPSK).&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Mudah Digunakan:&lt;/b&gt; Hanya isi maklumat yang diperlukan dalam borang interaktif. Antara muka yang mesra pengguna, sesuai untuk kegunaan di komputer atau telefon pintar.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Penjanaan Pantas:&lt;/b&gt; Taip maklumat sekali, klik butang, dan minit curai anda siap dalam format PDF yang kemas dan sedia untuk dicetak.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Auto-Nombor Isi Penting:&lt;/b&gt; Sistem akan secara automatik menomborkan poin-poin penting yang anda masukkan, menjimatkan masa dan memastikan keseragaman.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Sedia untuk Cetak &amp;amp; Kongsi:&lt;/b&gt; Fail PDF boleh terus dicetak atau dikongsi melalui emel/aplikasi mesej kepada pihak pengurusan sekolah.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Jimat Masa &amp;amp; Kertas:&lt;/b&gt; Elakkan kesilapan format atau perlu menaip semula. Kurangkan penggunaan kertas dengan versi digital ini.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p style=&quot;font-weight: bold; margin-bottom: 25px; text-align: center;&quot;&gt;
        Jangan buang masa lagi! Sediakan minit curai anda dengan pantas dan efisien sekarang!
    &lt;/p&gt;

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

    &lt;div id=&quot;minit-curai-app&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 20px; border: 2px solid rgb(44, 62, 80); box-shadow: rgba(0, 0, 0, 0.1) 0px 15px 40px; font-family: &amp;quot;Segoe UI&amp;quot;, sans-serif; margin: 20px auto; max-width: 800px; overflow: hidden;&quot;&gt;
        
        &lt;div style=&quot;background: rgb(44, 62, 80); color: white; padding: 25px; text-align: center;&quot;&gt;
            &lt;h2 style=&quot;color: white; font-size: 22px; margin: 0px;&quot;&gt;📝 MINIT CURAI DIGITAL (ISO PK 07/3)&lt;/h2&gt;
            &lt;p style=&quot;font-size: 11px; margin: 5px 0px 0px; opacity: 0.8;&quot;&gt;Pantas, Mudah &amp;amp; Mengikut Format Kualiti Sekolah&lt;/p&gt;
        &lt;/div&gt;

        &lt;div style=&quot;background: rgb(253, 253, 253); padding: 25px;&quot;&gt;
            &lt;div style=&quot;display: grid; gap: 15px; grid-template-columns: 1fr 1fr; margin-bottom: 20px;&quot;&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label style=&quot;color: #2c3e50; font-size: 11px; font-weight: bold;&quot;&gt;NAMA SEKOLAH:&lt;/label&gt;
                    &lt;input id=&quot;m_school&quot; placeholder=&quot;Cth: SMK Tampin&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 10px; width: 100%;&quot; type=&quot;text&quot; /&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label style=&quot;color: #2c3e50; font-size: 11px; font-weight: bold;&quot;&gt;RUJUKAN FAIL (OPSYENAL):&lt;/label&gt;
                    &lt;input id=&quot;m_ref&quot; placeholder=&quot;Cth: JPNNS.600-...&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 10px; width: 100%;&quot; type=&quot;text&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;TAJUK MESYUARAT / KURSUS:&lt;/label&gt;
                &lt;input id=&quot;m_title&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 12px; width: 100%;&quot; type=&quot;text&quot; /&gt;
            &lt;/div&gt;

            &lt;div style=&quot;display: grid; gap: 10px; grid-template-columns: 1fr 1fr 1fr; margin-bottom: 15px;&quot;&gt;
                &lt;div&gt;
                    &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;TARIKH:&lt;/label&gt;
                    &lt;input id=&quot;m_date&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 10px; width: 100%;&quot; type=&quot;date&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;TEMPAT:&lt;/label&gt;
                    &lt;input id=&quot;m_venue&quot; placeholder=&quot;Lokasi/Link&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 10px; width: 100%;&quot; type=&quot;text&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;PENGERUSI:&lt;/label&gt;
                    &lt;input id=&quot;m_boss&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 10px; width: 100%;&quot; type=&quot;text&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;hr style=&quot;border-color: rgb(238, 238, 238) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #eee; border-width: 1px 0px 0px; border: 0; margin: 20px 0px;&quot; /&gt;

            &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;PERKARA / ISU PENTING (Satu perkara satu baris):&lt;/label&gt;
                &lt;textarea id=&quot;m_issues&quot; rows=&quot;5&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 12px; width: 100%;&quot;&gt;&lt;/textarea&gt;
            &lt;/div&gt;

            &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;TINDAKAN SUSULAN:&lt;/label&gt;
                &lt;textarea id=&quot;m_action&quot; placeholder=&quot;Cth: Maklumkan kepada GPK Kurikulum, Jalankan LDP...&quot; rows=&quot;3&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 12px; width: 100%;&quot;&gt;&lt;/textarea&gt;
            &lt;/div&gt;

            &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;NAMA GURU PELAPOR:&lt;/label&gt;
                &lt;input id=&quot;m_name&quot; style=&quot;border-radius: 8px; border: 1px solid rgb(221, 221, 221); margin-top: 5px; padding: 10px; width: 100%;&quot; type=&quot;text&quot; /&gt;
            &lt;/div&gt;

            &lt;button onclick=&quot;generatePDF()&quot; style=&quot;background: rgb(230, 126, 34); border-radius: 12px; border: medium; box-shadow: rgb(179, 93, 16) 0px 6px 0px; color: white; cursor: pointer; font-size: 16px; font-weight: bold; padding: 18px; width: 100%;&quot;&gt;📥 JANA &amp;amp; DOWNLOAD PDF&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
    &lt;script&gt;
    function generatePDF() {
        const { jsPDF } = window.jspdf;
        let doc = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);
        
        const school = document.getElementById(&#39;m_school&#39;).value || &quot;NAMA SEKOLAH&quot;;
        const ref = document.getElementById(&#39;m_ref&#39;).value || &quot;-&quot;;
        const title = document.getElementById(&#39;m_title&#39;).value || &quot;-&quot;;
        const date = document.getElementById(&#39;m_date&#39;).value;
        const venue = document.getElementById(&#39;m_venue&#39;).value || &quot;-&quot;;
        const boss = document.getElementById(&#39;m_boss&#39;).value || &quot;-&quot;;
        const issues = document.getElementById(&#39;m_issues&#39;).value.split(&#39;\n&#39;).filter(i =&gt; i.trim());
        const action = document.getElementById(&#39;m_action&#39;).value;
        const reporter = document.getElementById(&#39;m_name&#39;).value || &quot;GURU PELAPOR&quot;;

        // --- DESIGN PDF (SPSK PK 07/3) ---
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.setFontSize(12);
        doc.text(school.toUpperCase(), 105, 15, { align: &#39;center&#39; });
        doc.setFontSize(10); doc.text(&quot;MINIT CURAI (PK 07/3)&quot;, 105, 21, { align: &#39;center&#39; });
        
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.setFontSize(9);
        doc.text(`Rujukan Fail: ${ref}`, 15, 30);
        
        // Table Grid
        doc.setLineWidth(0.3);
        doc.rect(15, 35, 180, 25); // Header Box
        doc.line(15, 47, 195, 47); // Horizontal divider
        
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;TAJUK:&quot;, 18, 40); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.text(title, 35, 40, {maxWidth: 155});
        
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;TARIKH:&quot;, 18, 52); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.text(date || &quot;-&quot;, 35, 52);
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;TEMPAT:&quot;, 70, 52); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.text(venue, 88, 52);
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;PENGERUSI:&quot;, 135, 52); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.text(boss, 158, 52);

        // Main Content Box
        doc.rect(15, 60, 180, 120);
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.text(&quot;PERKARA / ISU PENTING:&quot;, 18, 67);
        
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        let y = 75;
        issues.forEach((issue, index) =&gt; {
            let lines = doc.splitTextToSize(`${index + 1}. ${issue}`, 170);
            doc.text(lines, 18, y);
            y += (lines.length * 5);
        });

        // Action Box
        doc.rect(15, 180, 180, 30);
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.text(&quot;TINDAKAN SUSULAN:&quot;, 18, 187);
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.text(action, 18, 194, {maxWidth: 170});

        // Signature Area
        doc.text(&quot;Disediakan oleh:&quot;, 15, 225);
        doc.text(&quot;......................................................&quot;, 15, 240);
        doc.text(`( ${reporter.toUpperCase()} )`, 15, 245);
        
        doc.text(&quot;Ulasan Guru Besar / Pengetua:&quot;, 110, 225);
        doc.text(&quot;......................................................&quot;, 110, 240);
        doc.text(&quot;Tarikh:&quot;, 110, 250);

        doc.save(`Minit_Curai_${reporter}.pdf`);
    }
    &lt;/script&gt;

    &lt;h2 style=&quot;color: #e67e22; font-size: 22px; margin-bottom: 15px; margin-top: 40px;&quot;&gt;
        💡 Tips Menggunakan Minit Curai Digital
    &lt;/h2&gt;
    &lt;ul style=&quot;list-style-type: disc; margin-bottom: 20px; margin-left: 20px;&quot;&gt;
        &lt;li&gt;&lt;b&gt;Isi Segera:&lt;/b&gt; Sebaik sahaja selesai kursus, terus isikan maklumat semasa ingatan masih segar.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Fokus Isi Penting:&lt;/b&gt; Minit curai tidak memerlukan semua perincian. Tumpukan pada isu utama dan tindakan yang perlu diambil.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Satu Poin Satu Baris:&lt;/b&gt; Untuk memudahkan sistem auto-nombor, taip setiap isu penting dalam baris yang berasingan dalam kotak &#39;Perkara / Isu Penting&#39;.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Semak Sebelum Hantar:&lt;/b&gt; Pastikan semua maklumat betul sebelum menjana dan menghantar PDF.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h2 style=&quot;color: #2c3e50; font-size: 22px; margin-bottom: 15px; margin-top: 40px;&quot;&gt;
        ❓ Soalan Lazim (FAQ)
    &lt;/h2&gt;
    &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
        &lt;b style=&quot;color: #e67e22;&quot;&gt;S: Adakah tool ini mengikut format rasmi KPM?&lt;/b&gt;&lt;br /&gt;
        J: Ya, template PDF yang dihasilkan adalah berdasarkan format Sistem Pengurusan Kualiti Sekolah (SPSK PK 07/3) yang standard di kebanyakan JPN dan PPD.
    &lt;/div&gt;
    &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
        &lt;b style=&quot;color: #e67e22;&quot;&gt;S: Bolehkah saya guna di telefon bimbit?&lt;/b&gt;&lt;br /&gt;
        J: Tentu sekali! Tool ini direka responsif dan berfungsi dengan baik pada pelbagai saiz skrin termasuk telefon pintar dan tablet.
    &lt;/div&gt;
    &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
        &lt;b style=&quot;color: #e67e22;&quot;&gt;S: Perlukah saya install aplikasi lain?&lt;/b&gt;&lt;br /&gt;
        J: Tidak perlu. Tool ini berfungsi sepenuhnya di dalam pelayar web anda. Tiada pemasangan aplikasi tambahan diperlukan.
    &lt;/div&gt;

    &lt;p style=&quot;color: #2c3e50; font-size: 16px; font-weight: bold; margin-top: 30px; text-align: center;&quot;&gt;
        Urusan minit curai kini lebih mudah dan efisien! Selamat bertugas!
    &lt;/p&gt;

    &lt;div style=&quot;background: rgb(254, 254, 254); border-radius: 15px; border: 1px solid rgb(209, 216, 224); margin: 30px 0px; padding: 18px; text-align: center;&quot;&gt;
        &lt;p style=&quot;color: #34495e; font-size: 14px; font-weight: bold; margin: 0px 0px 12px;&quot;&gt;🛍️ Cari Gadjet Digital Terbaik untuk Pembelajaran?&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; style=&quot;background: rgb(236, 240, 241); border-radius: 8px; color: #3498db; display: inline-block; font-size: 15px; font-weight: bold; padding: 10px 20px; text-decoration: none; transition: background 0.3s;&quot; target=&quot;_blank&quot;&gt;
            Cek Tawaran Istimewa di Shopee »
        &lt;/a&gt;
    &lt;/div&gt;

    &lt;div style=&quot;color: #999999; font-size: 11px; margin-top: 25px; text-align: center;&quot;&gt;
        Disclaimer: Tool ini adalah untuk membantu dalam penyediaan minit curai. Layanlah.com tidak bertanggungjawab atas sebarang isu berkaitan maklumat yang dimasukkan oleh pengguna. Kami adalah rakan affiliate Shopee.
    &lt;/div&gt;

&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/1920438150778789329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/minit-curai-digital-iso-pk073.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/1920438150778789329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/1920438150778789329'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/minit-curai-digital-iso-pk073.html' title='Minit Curai Digital (ISO PK 07/3): Jana Laporan Kursus Cepat &amp; Rasmi'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBgdAZkgohjXD_bJTvfyGbfIT6Aeho1G7EaV65hcGSL7h-f2fAwgOiVcew8HVMiiWFT2P2X89fqnW7MOnFlzu5VfWkRy6qFGB7aQbTAV3fbR0RyJa2NilVX6gGMrjWMvpsOC6cfvlR0Cek-G5PoHkg8k7Mlovmpy5Urf90Ebo3SZctakgeU9hyphenhyphensj-4Fkk/s72-c/minit%20curai.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-8833157377100515750</id><published>2026-01-19T22:25:00.005+08:00</published><updated>2026-01-19T22:34:03.968+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="BBM"/><category scheme="http://www.blogger.com/atom/ns#" term="Bing AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Free Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Generator"/><category scheme="http://www.blogger.com/atom/ns#" term="Guru"/><category scheme="http://www.blogger.com/atom/ns#" term="Leonardo AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Midjourney"/><category scheme="http://www.blogger.com/atom/ns#" term="Prompt Generator"/><title type='text'>Mega AI Prompt Generator: Bina Prompt Imej AI Profesional Cuma Taip &amp; Pilih (Percuma!)</title><content type='html'>&lt;title&gt;Mega AI Prompt Generator: Bina Prompt Imej AI Profesional (Percuma!)&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Tool Mega AI Prompt Generator percuma untuk jana prompt imej premium Midjourney, Bing &amp; Leonardo. Pilih gaya visual, lokasi &amp; saiz dengan mudah.&quot;&gt;

&lt;div style=&quot;font-family: &#39;Segoe UI&#39;, sans-serif; line-height: 1.7; color: #333; max-width: 800px; margin: 0 auto; padding: 10px;&quot;&gt;

    &lt;div style=&quot;text-align: center; margin-bottom: 25px;&quot;&gt;
        &lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3bc9xS9eKKAHYTl8hs2diHmVBZ2iG2PtE6rgRkPzxIMpUc3cH2fq2WwxbCwrjHb5Dwul6Da6C_JujZZsoimc0BOeMqRiMygwclHPqQQbhon7dT67tStPgoP5YiwpeE5c7gYvqvQjK9wTkP4_IOW0m1-euGlZDquLG_8soP6afpPEMCIXkn-u3S_f0FOw/s1600/prompt%20generator.png&quot; alt=&quot;Mega AI Prompt Generator&quot; style=&quot;width: 100%; max-width: 766px; border-radius: 15px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);&quot;&gt;
    &lt;/div&gt;

    &lt;h1 style=&quot;font-size: 26px; color: #2c3e50; text-align: center; margin-bottom: 20px;&quot;&gt;🚀 Mega AI Prompt Generator: Pro Imej Cuma Pilih &amp; Klik!&lt;/h1&gt;

    &lt;p&gt;Penat mencuba pelbagai prompt tapi hasil AI tidak memuaskan? Gunakan &lt;b&gt;Mega AI Prompt Generator&lt;/b&gt;. Kami telah menyuntik parameter teknikal &#39;High-End&#39; ke dalam setiap pilihan untuk memastikan hasil imej anda bertaraf profesional!&lt;/p&gt;

    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css&quot;&gt;
    
    &lt;div id=&quot;mega-prompt-tool&quot; style=&quot;background: #ffffff; border: 2px solid #2c3e50; border-radius: 25px; overflow: hidden; box-shadow: 0 15px 45px rgba(0,0,0,0.1); margin: 30px 0;&quot;&gt;
        &lt;div style=&quot;background: #2c3e50; color: white; padding: 20px; text-align: center;&quot;&gt;
            &lt;h2 style=&quot;margin:0; color:white !important; font-size: 20px;&quot;&gt;🏦 AI PROMPT ENGINE V2.0&lt;/h2&gt;
        &lt;/div&gt;

        &lt;div style=&quot;padding: 25px;&quot;&gt;
            &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
                &lt;label style=&quot;font-weight:bold; font-size: 13px; color: #2c3e50;&quot;&gt;&lt;i class=&quot;fas fa-pencil-alt&quot;&gt;&lt;/i&gt; 1. APA SUBJEK UTAMA ANDA?&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;subj&quot; placeholder=&quot;Cth: Seorang guru wanita berbaju kurung...&quot; style=&quot;width:100%; padding:12px; border:2px solid #eee; border-radius:10px; box-sizing:border-box; margin-top:5px;&quot;&gt;
            &lt;/div&gt;

            &lt;label style=&quot;font-weight:bold; font-size: 13px; color: #2c3e50;&quot;&gt;&lt;i class=&quot;fas fa-palette&quot;&gt;&lt;/i&gt; 2. PILIH GAYA VISUAL (Pilih satu atau taip sendiri)&lt;/label&gt;
            &lt;div style=&quot;display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 12px; margin: 12px 0;&quot;&gt;
                &lt;div onclick=&quot;selectTheme(&#39;Photorealistic, 8k, ultra-detailed, cinematic lighting&#39;, this)&quot; class=&quot;t-card&quot; style=&quot;border: 2px solid #eee; border-radius: 12px; cursor: pointer; text-align: center; padding: 8px; transition: 0.3s;&quot;&gt;
                    &lt;img src=&quot;https://images.unsplash.com/photo-1542831371-29b0f74f9713?w=150&amp;h=100&amp;fit=crop&quot; style=&quot;width: 100%; border-radius: 8px;&quot;&gt;
                    &lt;div style=&quot;font-size: 10px; font-weight: bold; margin-top: 5px;&quot;&gt;REALISTIC&lt;/div&gt;
                &lt;/div&gt;
                &lt;div onclick=&quot;selectTheme(&#39;Disney Pixar 3D animation style, vibrant, expressive&#39;, this)&quot; class=&quot;t-card&quot; style=&quot;border: 2px solid #eee; border-radius: 12px; cursor: pointer; text-align: center; padding: 8px; transition: 0.3s;&quot;&gt;
                    &lt;img src=&quot;https://images.unsplash.com/photo-1550745165-9bc0b252726f?w=150&amp;h=100&amp;fit=crop&quot; style=&quot;width: 100%; border-radius: 8px;&quot;&gt;
                    &lt;div style=&quot;font-size: 10px; font-weight: bold; margin-top: 5px;&quot;&gt;3D PIXAR&lt;/div&gt;
                &lt;/div&gt;
                &lt;div onclick=&quot;selectTheme(&#39;Studio Ghibli hand-drawn anime style, lush scenery&#39;, this)&quot; class=&quot;t-card&quot; style=&quot;border: 2px solid #eee; border-radius: 12px; cursor: pointer; text-align: center; padding: 8px; transition: 0.3s;&quot;&gt;
                    &lt;img src=&quot;https://images.unsplash.com/photo-1541512416146-3cf58d6b27cc?w=150&amp;h=100&amp;fit=crop&quot; style=&quot;width: 100%; border-radius: 8px;&quot;&gt;
                    &lt;div style=&quot;font-size: 10px; font-weight: bold; margin-top: 5px;&quot;&gt;GHIBLI&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;input type=&quot;text&quot; id=&quot;customStyle&quot; placeholder=&quot;Atau taip gaya lain (Cth: Cyberpunk, Oil Painting...)&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:10px; box-sizing:border-box; margin-bottom: 20px;&quot;&gt;

            &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
                &lt;label style=&quot;font-weight:bold; font-size: 13px; color: #2c3e50;&quot;&gt;&lt;i class=&quot;fas fa-map-marker-alt&quot;&gt;&lt;/i&gt; 3. DI MANA LOKASINYA? (Pilih atau taip sendiri)&lt;/label&gt;
                &lt;select id=&quot;setting&quot; style=&quot;width:100%; padding:10px; border-radius:10px; margin-top:5px; border:1px solid #ccc;&quot;&gt;
                    &lt;option value=&quot;in a modern bright classroom&quot;&gt;Bilik Darjah Moden&lt;/option&gt;
                    &lt;option value=&quot;on a minimalist office desk&quot;&gt;Meja Kerja Pejabat&lt;/option&gt;
                    &lt;option value=&quot;against a simple white background&quot;&gt;Latar Belakang Putih&lt;/option&gt;
                    &lt;option value=&quot;in a beautiful enchanted forest&quot;&gt;Hutan Magis&lt;/option&gt;
                &lt;/select&gt;
                &lt;input type=&quot;text&quot; id=&quot;customSetting&quot; placeholder=&quot;Atau taip lokasi sendiri (Cth: Di bulan, Di tepi pantai...)&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:10px; box-sizing:border-box; margin-top:8px;&quot;&gt;
            &lt;/div&gt;

            &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
                &lt;label style=&quot;font-weight:bold; font-size: 13px; color: #2c3e50;&quot;&gt;&lt;i class=&quot;fas fa-expand-arrows-alt&quot;&gt;&lt;/i&gt; 4. NISBAH GAMBAR (RATIO)&lt;/label&gt;
                &lt;select id=&quot;ratio&quot; style=&quot;width:100%; padding:10px; border-radius:10px; margin-top:5px; border:1px solid #ccc;&quot;&gt;
                    &lt;option value=&quot;--ar 16:9&quot;&gt;Landscape (16:9)&lt;/option&gt;
                    &lt;option value=&quot;--ar 9:16&quot;&gt;Portrait (9:16)&lt;/option&gt;
                    &lt;option value=&quot;--ar 1:1&quot;&gt;Square (1:1)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;button onclick=&quot;generateMegaPrompt()&quot; style=&quot;width:100%; background:#e67e22; color:white; border:none; padding:18px; border-radius:15px; font-weight:bold; margin-top:10px; cursor:pointer; font-size: 16px; box-shadow: 0 5px 0 #b35d10;&quot;&gt;✨ JANA PROMPT LENGKAP&lt;/button&gt;

            &lt;div id=&quot;output-box&quot; style=&quot;display:none; margin-top: 25px; padding: 20px; background: #f9f9f9; border: 2px dashed #e67e22; border-radius: 15px;&quot;&gt;
                &lt;p style=&quot;font-size: 11px; font-weight: bold; color: #e67e22; margin-bottom: 8px;&quot;&gt;SALIN PROMPT DI BAWAH:&lt;/p&gt;
                &lt;div id=&quot;finalText&quot; style=&quot;font-size: 14px; color: #333; margin-bottom: 15px; font-style: italic; line-height: 1.5;&quot;&gt;&lt;/div&gt;
                &lt;button onclick=&quot;copyPrompt()&quot; style=&quot;background:#2c3e50; color:white; border:none; padding:10px 20px; border-radius:8px; cursor:pointer; font-weight: bold;&quot;&gt;&lt;i class=&quot;fas fa-copy&quot;&gt;&lt;/i&gt; Copy Prompt&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        let selectedStyle = &quot;&quot;;
        function selectTheme(val, el) {
            selectedStyle = val;
            document.querySelectorAll(&#39;.t-card&#39;).forEach(c =&gt; c.style.borderColor = &quot;#eee&quot;);
            el.style.borderColor = &quot;#e67e22&quot;;
        }
        function generateMegaPrompt() {
            const subj = document.getElementById(&#39;subj&#39;).value || &quot;subject&quot;;
            const style = document.getElementById(&#39;customStyle&#39;).value || selectedStyle || &quot;Photorealistic, 8k&quot;;
            const loc = document.getElementById(&#39;customSetting&#39;).value || document.getElementById(&#39;setting&#39;).value;
            const rat = document.getElementById(&#39;ratio&#39;).value;
            
            // AUTOMATIC PRO QUALITY LOGIC
            const result = `${style} of ${subj}, ${loc}, masterpiece, 8k, highly detailed, cinematic lighting, sharp focus, intricate details ${rat}`;
            
            document.getElementById(&#39;finalText&#39;).innerText = result;
            document.getElementById(&#39;output-box&#39;).style.display = &#39;block&#39;;
            window.scrollTo({ top: document.getElementById(&#39;output-box&#39;).offsetTop, behavior: &#39;smooth&#39; });
        }
        function copyPrompt() {
            navigator.clipboard.writeText(document.getElementById(&#39;finalText&#39;).innerText);
            alert(&quot;Prompt berjaya disalin! Jom tampal kat AI.&quot;);
        }
    &lt;/script&gt;

    &lt;div style=&quot;margin: 30px 0; padding: 15px; border: 1px solid #d1d8e0; border-radius: 12px; text-align: center;&quot;&gt;
        &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold;&quot;&gt;🛍️ Dapatkan Gadjet Pejabat &amp; Sekolah Murah&lt;/p&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-weight: bold;&quot;&gt;Lihat Katalog Shopee &amp;raquo;&lt;/a&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-top: 20px; font-size: 11px; color: #999; text-align: center;&quot;&gt;
        Disclaimer: Tool ini hanya membantu membina prompt. Layanlah tidak bertanggungjawab atas hasil imej oleh pihak ketiga. Kami adalah rakan affiliate Shopee.
    &lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/8833157377100515750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/mega-ai-prompt-generator-percuma.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8833157377100515750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8833157377100515750'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/mega-ai-prompt-generator-percuma.html' title='Mega AI Prompt Generator: Bina Prompt Imej AI Profesional Cuma Taip &amp; Pilih (Percuma!)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3bc9xS9eKKAHYTl8hs2diHmVBZ2iG2PtE6rgRkPzxIMpUc3cH2fq2WwxbCwrjHb5Dwul6Da6C_JujZZsoimc0BOeMqRiMygwclHPqQQbhon7dT67tStPgoP5YiwpeE5c7gYvqvQjK9wTkP4_IOW0m1-euGlZDquLG_8soP6afpPEMCIXkn-u3S_f0FOw/s72-c/prompt%20generator.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-4721036537574855276</id><published>2026-01-18T22:18:00.006+08:00</published><updated>2026-01-18T22:53:52.261+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Kerajaan"/><category scheme="http://www.blogger.com/atom/ns#" term="NGO"/><category scheme="http://www.blogger.com/atom/ns#" term="Pendidikan"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><title type='text'>Generator Mock Cheque Sampul Surat : Jana Cek Replika &amp; Auto-Ejaan Ringgit</title><content type='html'>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;

&lt;div style=&quot;font-family: sans-serif; line-height: 1.6; color: #333; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Urusan majlis penyampaian sumbangan kini lebih mudah dengan &lt;strong&gt;Generator Mock Cheque Smart Layanlah&lt;/strong&gt;. Sistem ini direka untuk menjana cek replika secara profesional dengan fungsi &lt;strong&gt;Smart Auto-Fit&lt;/strong&gt; yang menjimatkan kertas cetakan anda.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #e5e7eb; background: #f9fafb; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #2d3436;&quot;&gt;✉️ Stok Sampul Surat &amp; Kertas Tebal (Glossy) Murah&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Lihat di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 25px;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx71Tu0QWr11NnvjRPDRTVQYDePBGsIi1aVxzRl_3zahvXybHKbRR9-P3_wVuGif8Nuq0vu6GqL1gxwlO_x3Pt9cSUbHCenqbXfjxVqSHUbsWoG9I9SpbAvMPtD0godz5d4sdBGRPBMGQzbXam1qTh4Npi_30AXhyjg-TaYMiZadDC56Vn3XIFfn5S7FY/s761/CEK%20REPLIKA.png&quot;&gt;
        &lt;img alt=&quot;Mock Cheque Generator Ultimate&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx71Tu0QWr11NnvjRPDRTVQYDePBGsIi1aVxzRl_3zahvXybHKbRR9-P3_wVuGif8Nuq0vu6GqL1gxwlO_x3Pt9cSUbHCenqbXfjxVqSHUbsWoG9I9SpbAvMPtD0godz5d4sdBGRPBMGQzbXam1qTh4Npi_30AXhyjg-TaYMiZadDC56Vn3XIFfn5S7FY/s320/CEK%20REPLIKA.png&quot; width=&quot;350&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div id=&quot;cheque-smart-app&quot; style=&quot;max-width: 850px; margin: 20px auto; border-radius: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; background: #ffffff; box-shadow: 0 20px 50px rgba(0,0,0,0.1); border: 2px solid #2c3e50; overflow: hidden;&quot;&gt;
    
    &lt;div style=&quot;background: #2c3e50; color: #ffffff; padding: 25px; text-align: center;&quot;&gt;
        &lt;h2 style=&quot;margin: 0; font-size: 22px; color: #ffffff !important;&quot;&gt;🏦 MOCK CHEQUE SMART GENERATOR&lt;/h2&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; font-size: 11px; opacity: 0.8;&quot;&gt;Auto-Fit A4 | Auto-Ejaan | Live Preview&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; padding: 25px; gap: 20px;&quot;&gt;
        &lt;div style=&quot;flex: 1; min-width: 300px;&quot;&gt;
            &lt;div style=&quot;margin-bottom: 12px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;PERKARA (TUJUAN):&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;perkara&quot; oninput=&quot;livePreview()&quot; placeholder=&quot;Cth: HADIAH KECERIAAN&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 12px;&quot;&gt;
                &lt;div&gt;
                    &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;PENYUMBANG:&lt;/label&gt;
                    &lt;input type=&quot;text&quot; id=&quot;sender&quot; oninput=&quot;livePreview()&quot; placeholder=&quot;PIBG SMK TAMPIN&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;TARIKH:&lt;/label&gt;
                    &lt;input type=&quot;date&quot; id=&quot;c_date&quot; oninput=&quot;livePreview()&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 12px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;VIP &amp; JAWATAN:&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;vip_name&quot; oninput=&quot;livePreview()&quot; placeholder=&quot;Nama VIP&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px; margin-bottom:5px;&quot;&gt;
                &lt;input type=&quot;text&quot; id=&quot;vip_title&quot; oninput=&quot;livePreview()&quot; placeholder=&quot;Jawatan VIP&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 12px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;NILAI (RM):&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;amount&quot; oninput=&quot;updateEjaan(); livePreview()&quot; placeholder=&quot;150.00&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
                &lt;p id=&quot;ejaan_text&quot; style=&quot;font-size: 10px; color: #e67e22; font-style: italic; margin-top:3px;&quot;&gt;Sila masukkan nilai...&lt;/p&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 12px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;SAIZ SAMPUL:&lt;/label&gt;
                &lt;select id=&quot;env_size&quot; onchange=&quot;toggleCustomSize(); livePreview()&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
                    &lt;option value=&quot;dl&quot;&gt;DL Standard (Muat 3 keping dlm A4)&lt;/option&gt;
                    &lt;option value=&quot;c5&quot;&gt;C5 Half A4 (Muat 2 keping dlm A4)&lt;/option&gt;
                    &lt;option value=&quot;custom&quot;&gt;KUSTOM (Saiz Sendiri)&lt;/option&gt;
                &lt;/select&gt;
                &lt;div id=&quot;custom_inputs&quot; style=&quot;display:none; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 8px;&quot;&gt;
                    &lt;input type=&quot;number&quot; id=&quot;c_width&quot; oninput=&quot;livePreview()&quot; placeholder=&quot;Lebar(cm)&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
                    &lt;input type=&quot;number&quot; id=&quot;c_height&quot; oninput=&quot;livePreview()&quot; placeholder=&quot;Tinggi(cm)&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 12px;&quot;&gt;
                &lt;label style=&quot;font-size: 11px; font-weight: bold;&quot;&gt;PENERIMA (Pukal):&lt;/label&gt;
                &lt;textarea id=&quot;receivers&quot; rows=&quot;2&quot; oninput=&quot;livePreview()&quot; style=&quot;width:100%; padding:8px; border:1px solid #ccc; border-radius:6px;&quot; placeholder=&quot;SITI BINTI ALI&amp;#10;AHMAD BIN ABU&quot;&gt;&lt;/textarea&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;flex: 1.2; min-width: 320px; background: #fff; padding: 15px; border-radius: 15px; border: 1px dashed #2c3e50;&quot;&gt;
            &lt;p style=&quot;font-size: 10px; font-weight: bold; text-align: center; color: #7f8c8d; margin-bottom:10px;&quot;&gt;LIVE PREVIEW&lt;/p&gt;
            &lt;div id=&quot;preview-box&quot; style=&quot;width: 100%; aspect-ratio: 2.1/1; border: 2px solid #333; position: relative; padding: 12px; box-sizing: border-box; background: #fdfdfd; overflow: hidden;&quot;&gt;
                &lt;div id=&quot;pre-perkara&quot; style=&quot;position: absolute; left: 15px; top: 15px; width: 55%; font-size: 10px; font-weight: bold; text-align: left;&quot;&gt;[PERKARA]&lt;/div&gt;
                &lt;div style=&quot;position: absolute; top: 12px; right: 10px; display: flex; gap: 1px;&quot;&gt;
                   &lt;script&gt;for(i=0;i&lt;8;i++) document.write(&#39;&lt;div style=&quot;width:9px; height:11px; border:1px solid #000; font-size:7px; text-align:center;&quot;&gt;-&lt;/div&gt;&#39;);&lt;/script&gt;
                &lt;/div&gt;
                &lt;div style=&quot;margin-top: 35px; font-size: 10px;&quot;&gt;PAY: &lt;span id=&quot;pre-name&quot; style=&quot;border-bottom: 1px solid #000; display: inline-block; width: 60%;&quot;&gt;[PENERIMA]&lt;/span&gt;&lt;/div&gt;
                &lt;div style=&quot;margin-top: 8px; font-size: 9px;&quot;&gt;RINGGIT: &lt;span id=&quot;pre-ejaan&quot; style=&quot;font-style: italic; border-bottom: 1px solid #000; display: inline-block; width: 55%; font-size: 8px;&quot;&gt;[EJAAN]&lt;/span&gt;&lt;/div&gt;
                &lt;div style=&quot;position: absolute; right: 15px; top: 40px; border: 1px solid #000; padding: 4px; font-weight: bold; font-size: 11px;&quot;&gt;RM &lt;span id=&quot;pre-amount&quot;&gt;0.00&lt;/span&gt;&lt;/div&gt;
                &lt;div id=&quot;pre-sender&quot; style=&quot;margin-top: 20px; font-size: 9px; font-weight: bold;&quot;&gt;[PENYUMBANG]&lt;/div&gt;
                &lt;div style=&quot;position: absolute; bottom: 35px; right: 15px; text-align: center; border-top: 1px solid #000; width: 120px;&quot;&gt;
                    &lt;div id=&quot;pre-vip-name&quot; style=&quot;font-size: 8px; font-weight: bold; padding-top: 2px;&quot;&gt;[VIP NAME]&lt;/div&gt;
                    &lt;div id=&quot;pre-vip-title&quot; style=&quot;font-size: 7px;&quot;&gt;[JAWATAN]&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;button onclick=&quot;generateCheques()&quot; style=&quot;width: 100%; background: #2c3e50; color: white; border: none; padding: 18px; border-radius: 12px; font-weight: bold; cursor: pointer; font-size: 16px; margin-top: 20px;&quot;&gt;📥 GENERATE &amp; SMART AUTO-FIT&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
//&lt;![CDATA[
function toggleCustomSize() {
    const isCustom = document.getElementById(&#39;env_size&#39;).value === &#39;custom&#39;;
    document.getElementById(&#39;custom_inputs&#39;).style.display = isCustom ? &#39;grid&#39; : &#39;none&#39;;
}
function updateEjaan() {
    const amt = document.getElementById(&#39;amount&#39;).value;
    document.getElementById(&#39;ejaan_text&#39;).innerText = (amt &gt; 0 ? numberToMalayText(amt) + &quot; Ringgit Sahaja&quot; : &quot;Sila masukkan nilai...&quot;);
}
function livePreview() {
    document.getElementById(&#39;pre-perkara&#39;).innerText = document.getElementById(&#39;perkara&#39;).value || &quot;[PERKARA]&quot;;
    document.getElementById(&#39;pre-sender&#39;).innerText = &quot;PENYUMBANG: &quot; + (document.getElementById(&#39;sender&#39;).value || &quot;[PENYUMBANG]&quot;);
    document.getElementById(&#39;pre-name&#39;).innerText = document.getElementById(&#39;receivers&#39;).value.split(&#39;\n&#39;)[0] || &quot;[PENERIMA]&quot;;
    document.getElementById(&#39;pre-amount&#39;).innerText = document.getElementById(&#39;amount&#39;).value || &quot;0.00&quot;;
    document.getElementById(&#39;pre-ejaan&#39;).innerText = (document.getElementById(&#39;amount&#39;).value &gt; 0 ? numberToMalayText(document.getElementById(&#39;amount&#39;).value) : &quot;[EJAAN RINGGIT]&quot;);
    document.getElementById(&#39;pre-vip-name&#39;).innerText = document.getElementById(&#39;vip_name&#39;).value || &quot;[NAMA VIP]&quot;;
    document.getElementById(&#39;pre-vip-title&#39;).innerText = document.getElementById(&#39;vip_title&#39;).value || &quot;[JAWATAN]&quot;;
}
function numberToMalayText(n) {
    if (!n) return &quot;&quot;;
    const units = [&quot;&quot;, &quot;Satu&quot;, &quot;Dua&quot;, &quot;Tiga&quot;, &quot;Empat&quot;, &quot;Lima&quot;, &quot;Enam&quot;, &quot;Tujuh&quot;, &quot;Lapan&quot;, &quot;Sembilan&quot;];
    const teens = [&quot;Sepuluh&quot;, &quot;Sebelas&quot;, &quot;Dua Belas&quot;, &quot;Tiga Belas&quot;, &quot;Empat Belas&quot;, &quot;Lima Belas&quot;, &quot;Enam Belas&quot;, &quot;Tujuh Belas&quot;, &quot;Lapan Belas&quot;, &quot;Sembilan Belas&quot;];
    const tens = [&quot;&quot;, &quot;&quot;, &quot;Dua Puluh&quot;, &quot;Tiga Puluh&quot;, &quot;Empat Puluh&quot;, &quot;Lima Puluh&quot;, &quot;Enam Puluh&quot;, &quot;Tujuh Puluh&quot;, &quot;Lapan Puluh&quot;, &quot;Sembilan Puluh&quot;];
    let num = parseInt(n);
    function convert(n) {
        let res = &quot;&quot;;
        if (n &gt;= 1000) { res += convert(Math.floor(n / 1000)) + &quot; Ribu &quot;; n %= 1000; }
        if (n &gt;= 100) { if (Math.floor(n / 100) === 1) res += &quot;Seratus &quot;; else res += units[Math.floor(n / 100)] + &quot; Ratus &quot;; n %= 100; }
        if (n &gt;= 20) { res += tens[Math.floor(n / 10)] + &quot; &quot;; n %= 10; }
        if (n &gt;= 10) { res += teens[n - 10] + &quot; &quot;; n = 0; }
        if (n &gt; 0) res += units[n] + &quot; &quot;;
        return res.trim();
    }
    return convert(num).replace(&quot;Satu Puluh&quot;, &quot;Sepuluh&quot;).replace(&quot;Satu Ratus&quot;, &quot;Seratus&quot;) || &quot;Sifar&quot;;
}

async function generateCheques() {
    const { jsPDF } = window.jspdf;
    const names = document.getElementById(&#39;receivers&#39;).value.split(&#39;\n&#39;).filter(x =&gt; x.trim());
    if(names.length === 0) { alert(&quot;Sila isi nama!&quot;); return; }
    
    const perkara = document.getElementById(&#39;perkara&#39;).value || &quot;-&quot;;
    const sender = document.getElementById(&#39;sender&#39;).value || &quot;-&quot;;
    const amount = document.getElementById(&#39;amount&#39;).value || &quot;0.00&quot;;
    const vName = document.getElementById(&#39;vip_name&#39;).value || &quot;&quot;;
    const vTitle = document.getElementById(&#39;vip_title&#39;).value || &quot;&quot;;
    const dateInput = document.getElementById(&#39;c_date&#39;).value;
    
    // FIX DATE LOGIC - ADD LEADING ZEROS
    let dateStr = &quot;00000000&quot;;
    if(dateInput) {
        let d = new Date(dateInput);
        let dd = String(d.getDate()).padStart(2, &#39;0&#39;);
        let mm = String(d.getMonth() + 1).padStart(2, &#39;0&#39;);
        let yyyy = d.getFullYear();
        dateStr = dd + mm + yyyy;
    }

    const ejaan = numberToMalayText(amount) + &quot; Ringgit Sahaja&quot;;

    let w = 210, h = 95;
    if(document.getElementById(&#39;env_size&#39;).value === &#39;c5&#39;) { w = 210; h = 140; }
    else if(document.getElementById(&#39;env_size&#39;).value === &#39;custom&#39;) { 
        w = parseFloat(document.getElementById(&#39;c_width&#39;).value) * 10 || 210; 
        h = parseFloat(document.getElementById(&#39;c_height&#39;).value) * 10 || 95; 
    }

    let pdf = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);
    let currentY = 10;

    for (let i = 0; i &lt; names.length; i++) {
        if (currentY + h &gt; 280) { pdf.addPage(); currentY = 10; }
        const startX = (210 - w) / 2;
        const startY = currentY;

        pdf.setDrawColor(0); pdf.rect(startX, startY, w, h);
        pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;); pdf.setFontSize(13);
        pdf.text(perkara.toUpperCase(), startX + 5, startY + 12, { maxWidth: w - 60 });

        let dX = startX + w - 48;
        for(let j=0; j&lt;8; j++){
            pdf.rect(dX + (j*5), startY + 5, 4.5, 6.5);
            pdf.setFontSize(9); pdf.text(dateStr[j] || &quot;&quot;, dX + (j*5) + 1.2, startY + 10);
        }

        pdf.setFontSize(11); pdf.text(&quot;PAY:&quot;, startX + 10, startY + 35);
        pdf.line(startX + 22, startY + 36, startX + w - 60, startY + 36);
        pdf.text(names[i].toUpperCase(), startX + 24, startY + 34);

        pdf.rect(startX + w - 50, startY + 28, 40, 10);
        pdf.setFontSize(12); pdf.text(&quot;RM &quot; + amount, startX + w - 47, startY + 35);

        pdf.setFontSize(10); pdf.text(&quot;RINGGIT:&quot;, startX + 10, startY + 48);
        pdf.setFont(&quot;helvetica&quot;, &quot;italic&quot;); pdf.setFontSize(9);
        pdf.text(ejaan.toUpperCase(), startX + 30, startY + 47);
        pdf.line(startX + 28, startY + 49, startX + w - 10, startY + 49);

        pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;); pdf.setFontSize(10);
        pdf.text(&quot;PENYUMBANG: &quot; + sender.toUpperCase(), startX + 10, startY + h - 5);

        let signX = startX + w - 85; let signY = startY + h - 20;
        pdf.line(signX, signY, startX + w - 10, signY);
        let vipFS = 10; pdf.setFontSize(vipFS);
        while(pdf.getTextWidth(vName.toUpperCase()) &gt; 70 &amp;&amp; vipFS &gt; 7) { vipFS -= 0.5; pdf.setFontSize(vipFS); }
        pdf.text(vName.toUpperCase(), startX + w - 47.5, signY - 2, { align: &#39;center&#39; });
        let titleFS = 8; pdf.setFontSize(titleFS);
        while(pdf.getTextWidth(vTitle.toUpperCase()) &gt; 70 &amp;&amp; titleFS &gt; 6) { titleFS -= 0.5; pdf.setFontSize(titleFS); }
        pdf.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        pdf.text(vTitle.toUpperCase(), startX + w - 47.5, signY + 5, { align: &#39;center&#39; });

        currentY += h + 5;
    }
    pdf.save(&quot;Mock_Cheque_SmartPrint.pdf&quot;);
}
//]]&gt;
&lt;/script&gt;

&lt;div style=&quot;margin: 25px 0; padding: 15px; border: 1px solid #d1d8e0; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #2d3436;&quot;&gt;🎁 Set Hadiah &amp; Trofi Majlis di Shopee&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Cek Katalog Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div style=&quot;margin-top: 20px; font-size: 11px; color: #999; text-align: center; font-family: sans-serif;&quot;&gt;
    Disclaimer: Tool ini hanya untuk tujuan simbolik majlis sahaja. Layanlah tidak bertanggungjawab atas penyalahgunaan dokumen. Kami adalah rakan affiliate Shopee.
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/4721036537574855276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-mock-cheque-pibg-ngo-percuma.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4721036537574855276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4721036537574855276'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-mock-cheque-pibg-ngo-percuma.html' title='Generator Mock Cheque Sampul Surat : Jana Cek Replika &amp; Auto-Ejaan Ringgit'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx71Tu0QWr11NnvjRPDRTVQYDePBGsIi1aVxzRl_3zahvXybHKbRR9-P3_wVuGif8Nuq0vu6GqL1gxwlO_x3Pt9cSUbHCenqbXfjxVqSHUbsWoG9I9SpbAvMPtD0godz5d4sdBGRPBMGQzbXam1qTh4Npi_30AXhyjg-TaYMiZadDC56Vn3XIFfn5S7FY/s72-c/CEK%20REPLIKA.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-4495791651387276802</id><published>2026-01-18T09:51:00.025+08:00</published><updated>2026-01-18T21:52:44.430+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Download"/><category scheme="http://www.blogger.com/atom/ns#" term="Guru"/><category scheme="http://www.blogger.com/atom/ns#" term="Pendidikan"/><category scheme="http://www.blogger.com/atom/ns#" term="RPT"/><category scheme="http://www.blogger.com/atom/ns#" term="RPT 2026"/><category scheme="http://www.blogger.com/atom/ns#" term="Sekolah Rendah"/><title type='text'>Koleksi Lengkap RPT 2026 Sekolah Rendah (KSSR Semakan) Semua Subjek</title><content type='html'>&lt;div style=&quot;color: #333333; font-family: sans-serif; line-height: 1.6; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Dapatkan koleksi lengkap &lt;b&gt;97 Fail RPT 2026&lt;/b&gt; bagi semua subjek sekolah rendah. Fail-fail ini disusun secara sistematik mengikut subjek dan tahun bagi memudahkan urusan para guru menyediakan Fail Rekod Mengajar.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijYmhXcI6iorozasheuInK7Dn4l5yqNXbuBdemOoa1E0hsqO6bACF8Ldv9bj3rQ6_YQVhb1RdNTCjydTyvYvY-iC-W9bTnd4OoQ_k1DR4KCKNZ_Z5DZeHjntLb5tBcgs-g63C2aPCA-ilrFPGD3Qwe70xsizv1YcoaZz5D7EwfYMVh4C-bv6lCKdJD6jw/s777/cover%20rpt.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Koleksi Lengkap RPT 2026 Sekolah Rendah (KSSR Semakan) Semua Subjek&quot; border=&quot;0&quot; data-original-height=&quot;470&quot; data-original-width=&quot;777&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijYmhXcI6iorozasheuInK7Dn4l5yqNXbuBdemOoa1E0hsqO6bACF8Ldv9bj3rQ6_YQVhb1RdNTCjydTyvYvY-iC-W9bTnd4OoQ_k1DR4KCKNZ_Z5DZeHjntLb5tBcgs-g63C2aPCA-ilrFPGD3Qwe70xsizv1YcoaZz5D7EwfYMVh4C-bv6lCKdJD6jw/s16000/cover%20rpt.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: #f4cccc;&quot;&gt;SILA LAPORKAN DI DALAM KOMEN JIKA ADA PAUTAN YANG TIDAK BERFUNGSI&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;

&lt;div style=&quot;background: rgb(249, 250, 251); border-radius: 12px; border: 1px solid rgb(229, 231, 235); margin: 20px 0px; padding: 15px; text-align: center;&quot;&gt;
    &lt;p style=&quot;font-size: 13px; font-weight: bold; margin: 0px 0px 10px;&quot;&gt;📑 Keperluan Guru: Fail Rekod Mengajar &amp;amp; Divider Set&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; style=&quot;color: #ee4d2d; font-weight: bold; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Lihat Katalog Shopee »&lt;/a&gt;
&lt;/div&gt;

&lt;div style=&quot;max-width: 100%; overflow-x: auto;&quot;&gt;
    &lt;table style=&quot;border-collapse: collapse; font-family: sans-serif; font-size: 13px; width: 100%;&quot;&gt;
        &lt;thead&gt;
            &lt;tr style=&quot;background-color: #2c3e50; color: white;&quot;&gt;
                &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px; text-align: left;&quot;&gt;Subjek &amp;amp; Tahun (RPT/SOW 2026)&lt;/th&gt;
                &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px; text-align: center;&quot;&gt;Pautan Google Drive&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr style=&quot;background-color: #fce4ec;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;BAHASA MELAYU&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/file/d/1bQSnigEGk2n0x-OMocSRaxwJgPqWU5Tr/view?usp=drive_link&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1bQSnigEGk2n0x-OMocSRaxwJgPqWU5Tr&amp;amp;usp=drive_copya2KxxDC9WpxB_GuzmJhghC&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1hvquvCmuCdmDvKoeaMTlZMD5KQhOHWoB&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1xYov-w3O4kcPXNK3DDqhflotblg42mBR&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1a1DWC2X-YglqJ1KsRRUe0I8SFW29AmVk&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1bcbLRmJlnTx4hfHbnyoucoHVyS3S-tS4&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

            &lt;tr style=&quot;background-color: #e3f2fd;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;SOW ENGLISH&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;SOW English Year 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1al5Ou9wrwaAwy_M81jucZybgqpEwecAQ&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;SOW English Year 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1r9oOJPtYK9fCaZogHt-CdlxEY-ILqcAU&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;SOW English Year 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1RnbV_RVdWFRO_2-tE1-34F4CrYp-5CQ5&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;SOW English Year 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1OW8iowJu_nHZfgrveLTj7KPSIKgBxw3l&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;SOW English Year 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1cY2J_3rtvpNaW92-6gvgmDnkTpJzFyei&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;SOW English Year 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1-WzzDeUJLhE4ybfzuFgeSLHcUkRzx6jm&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

            &lt;tr style=&quot;background-color: #e8f5e9;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;SCIENCE DLP&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Science DLP Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1yWsfU8BmNZbG_i1zBFwnyJc6xNpUNpMB&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Science DLP Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=13f4ktd5O8qK_sPo1_9OrToyFXQ31rJ8X&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Science DLP Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1ZcLYZDOEpzzZbmxD-Ih-teoNu9HemDOZ&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Science DLP Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1sh4G_oPRfdG22PSmeaOhANi-190kJbdr&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Science DLP Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1m6OW5K2ywzEny45PAQlXUCM7reSx9FxY&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Science DLP Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=13deEl2szRIjvOC6CKtVl9kv5GdCcAhSK&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

            &lt;tr style=&quot;background-color: #fff3e0;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;MATHEMATICS DLP&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Mathematics DLP Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=175P8SpWdWRjosrRXrhHZ-tnNISqjiPoY&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Mathematics DLP Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1BvkgPTKK_2P7xbDONHiv4opgGA7d_Wcf&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Mathematics DLP Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1IwkbRERJHnRlPxnE48dJc6jv6XA7j05L&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Mathematics DLP Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=18c_GnmhmswTQwybtK7uQ4oX4QOeiGxmx&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Mathematics DLP Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1vMFGKrhZ7x3Ct5YYt-bF4GLOstojrRWe&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Mathematics DLP Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1msYKimGV5zX68AEZn1RCx7sUPyc7bSE2&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

            &lt;tr style=&quot;background-color: #efebe9;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;REKABENTUK DAN TEKNOLOGI (RBT)&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT RBT Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1VktL8kbfqc2iL_895b-cEZ4wyAWiAYmK&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT RBT Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1vDzUXJgsBDbc1VSR423PSl7NdaBjUwVW&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT RBT Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=18YFNElEXZbBcQPRhNdMzZGSFcTf_WA_n&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

            &lt;tr style=&quot;background-color: #f1f8e9;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;PENDIDIKAN ISLAM&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Islam Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1Su1Z5d9Hz2lJ4Cs4R13hnXVb-_KauQg4&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Islam Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=19K2V8fmZp8QEOgXihXteRRsK8djvgxjI&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Islam Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1Gx7E9C3M13VMGOlgRpHWU8sZOFeqFHjD&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Islam Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1gDM-ylKsBfEVNjy9e_mOwzxf4ddc9wLF&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Islam Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1ZGz9p-WtoDfSPeUauCjxkfm8Pv7OQIrw&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Islam Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1eyvOvr5CL5k9M4Y3UcJLTCt1ig_Nkxk3&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Islam Pra Sekolah&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1ZfzFTQr-rf3i1taJgYP8QzaNlWEGaZwM&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

          
          
          
          
          
          
          
          
          
            &lt;tr style=&quot;background-color: #f3e5f5;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;PENDIDIKAN MORAL&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Moral Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1SYeTyWHQGmz89rW5yrYRWto1UXDzesII&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Moral Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1Ik0IHrnv4BT09Em6mrKs7IQ0nrG3U3Kx&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Moral Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1QBYJpGCqXLxR9QYQB8pK1tt0BkuNlpKn&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Moral Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1RlRbVAG1Go04_XKWUTyE6eUasyVtV_4m&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Moral Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1OgC16U120P0vGv6rQjWoenf1gKZNukWH&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Moral Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1SgkkscKAe0HOuYR9FGPqjPrkS-p8H7wQ&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

          
          
          
          
          
          
          
          
          
          
          
            &lt;tr style=&quot;background-color: #fffde7;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;PENDIDIKAN KESIHATAN&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Kesihatan Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=161-na6OsvI4OiZXapTxHkmNaOXAPlpaO&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Kesihatan Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=17Dl2TCcBeb9aY-iuAiU6oUQ09egdfUtd&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Kesihatan Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1aHTLxY91YhNkvJz5v3p_wy5KqzW5m_F9&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Kesihatan Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=113jTQQSss7xPno6kFfpoH04f2TkUrbvQ&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Kesihatan Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=13klwfjWy882F8TFw_NlgqhMS_aFqAv8v&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Kesihatan Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1hIAUoyDdyCQ9gNN0zgcnGXVzQ4NIGyrC&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

          
          
          
          
          
          
          
          
          
          
          
            &lt;tr style=&quot;background-color: #e0f2f1;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;PENDIDIKAN JASMANI&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Jasmani Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1VLGF5pFq9Tq7TKXUQkK5_dip-XSVd-M9&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Jasmani Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1gqQ0dAnPKOoZAvRIcfBmBn_ilSfClRGw&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Jasmani Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1qpP2qMCALlaOp6aqmPkAnkJC-4tP0XuK&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Jasmani Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1h-lu6GqgVoM37eZT-gSu2RXZlqMuzFvc&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Jasmani Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=12ldk1ZpH52ScKk28Vsp8kvcrRF6esmBB&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Jasmani Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1AcuiW5q5Y4bM9cUbZylTlurFnC88_t5l&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

          
          
          
          
          
          
          
          
          
            &lt;tr style=&quot;background-color: #fce4ec;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;PENDIDIKAN SENI VISUAL (PSV)&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT PSV Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1OSh6qAfHa2HgKcH73L1ec44eoldVRauh&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT PSV Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1lJ-gYQBY77jKTJVG9K3FVPkkFXGsxfgr&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT PSV Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1cTV8NWIjLAMN8jLxvRQ9P0AgbAgDkcHr&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT PSV Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=17IDx3ZM30ix02Gf2gnJf7auIkepXamFk&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT PSV Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1dcMJmUXT3lhzDrSEijuzUMDnKcu_CBmW&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT PSV Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1oLidzH-WsozTBRIrlogtk1LbNVSa2Pz1&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
          
          
          
          
          
          
          

            &lt;tr style=&quot;background-color: #fff9c4;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;PENDIDIKAN MUZIK&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Muzik Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1boxIu_YVycW_4q_ViHR-SIooVJIWLyi5&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Muzik Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1uaAiIH-yypOZUHAewed2f5ipBGiPVODp&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Muzik Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1OmOZhZUsQo93TdvAKnwEQAXkC6W6-yBn&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Muzik Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=10uCkeIv65z_ys46YKE5QSq7qdb5bEpgd&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Muzik Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1wwPIanjcCEie2f9KINObeZ8tsY6sAT21&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Pendidikan Muzik Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1fo64dta_Btp0ZRNFkAVycKbG7OhjoxFV&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
          
          
          
          

            &lt;tr style=&quot;background-color: #f1f8e9;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;SEJARAH&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sejarah Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1qEIibiMXu1CeTegUwE0UccwcPPJcVX94&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sejarah Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=15dbSIczkDkENRtaj-OyX2CTMJ7-VE2Nn&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sejarah Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1Fq2KTOFH3MmsnbYhPvQ19_iH9QVPi4pJ&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

            &lt;tr style=&quot;background-color: #e8f5e9;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;SAINS&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sains Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1z5fO60jau7hEWiqEndAqqGPbaIT9LZtP&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sains Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=15P0kaFGNbYeJmgyZ0lD8UyLThXkVQ4Qq&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sains Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1sXq3rXO7LksKRdX5FxqZMj56Ey8C4-My&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sains Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=10yzpN78x7t6FxBGrFfroSIg7kZhX70f_&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sains Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1zA5US_WzFSSlnLtEHPR8Ne8XcFs-Tzbf&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Sains Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1aPswmjx4EfGEl2sUmHE9jz_VIiO2Bei6&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
          
          
          
          
          

            &lt;tr style=&quot;background-color: #fff3e0;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;MATEMATIK&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Matematik Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1LQFz8GcdDuBJ3QGfSLwlQMB2lhAYCikf&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Matematik Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1COsAUyu56hjfs141oLPO2RBCvvXs2KVb&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Matematik Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1TtEm99srzVuj4TBoT2g8d7yOsq3TQjlb&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Matematik Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1vXoHVf5Gwp_KE_ljuGRB4sx7e2VVOzkm&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Matematik Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=147F-M4ApXFnh81S0KD0R2d9baBQUQ4u-&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT Matematik Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1hwnfOi1vcnGEz8p8BaG1MAxld_hsQ2_3&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

          
          
          
          
          
            &lt;tr style=&quot;background-color: #e3f2fd;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;ENGLISH&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;English Year 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1ZSrNFFtDS3_YtvSTFg9LIxB8uRdPUsfi&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;English Year 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1E4F0gGbRdRrtW6b-XP8vueN19wMi4h3e&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;English Year 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1OVjjvmG2ALiER-ZYDA6_OJ-qhgGOkCGF&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;English Year 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=12LgQZmM1XeS8e0QJc81bzIKE6SBS4jJ8&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;English Year 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1WSloKfpzM9V5dmaZAyAY6uttnL-sc_AU&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;English Year 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1gIC8sGr37mKcHfCmcJEsaMQ4czavWKKj&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
          
          
          
          

            &lt;tr style=&quot;background-color: #fce4ec;&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;font-weight: bold; padding: 10px;&quot;&gt;BAHASA MELAYU SJK&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM SJK Tahun 1&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1jtxIhi2NtCNCRIip-cUDutt9fuujSwXz&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM SJK Tahun 2&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1kYI9qs0K1BdvBtV94Izl1EW2fZ_kZxu9&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM SJK Tahun 3&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1oq3yjnSQzN7F5BcJRtZkhgJQjNgGCY4D&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM SJK Tahun 4&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1NzioscL8lw8xCmCa-n83ZV_nW6IxIqUq&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM SJK Tahun 5&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1m0IfXovxvz80kZDqr13AWiMlLKcoqpUy&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;RPT BM SJK Tahun 6&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://drive.google.com/open?id=1UHdlc61DTp3B9be6lNDKb1L2UNkoMaSQ&amp;amp;usp=drive_copy&quot; target=&quot;_blank&quot;&gt;Muat Turun&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;/div&gt;

&lt;div style=&quot;border-radius: 12px; border: 1px solid rgb(209, 216, 224); margin: 25px 0px; padding: 15px; text-align: center;&quot;&gt;
    &lt;p style=&quot;font-size: 13px; font-weight: bold; margin: 0px 0px 10px;&quot;&gt;👗 Koleksi Baju Kurung &amp;amp; Batik Guru 2026&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; style=&quot;color: #3498db; font-weight: bold; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Cek Corak Terkini di Shopee »&lt;/a&gt;
&lt;/div&gt;

&lt;div style=&quot;color: #999999; font-size: 11px; margin-top: 20px; text-align: center;&quot;&gt;
    Disclaimer: Layanlah tidak bertanggungjawab atas segala risiko muat turun. Pautan ini dikumpul untuk tujuan perkongsian ilmu. 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/4495791651387276802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/koleksi-rpt-2026-sekolah-rendah-lengkap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4495791651387276802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4495791651387276802'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/koleksi-rpt-2026-sekolah-rendah-lengkap.html' title='Koleksi Lengkap RPT 2026 Sekolah Rendah (KSSR Semakan) Semua Subjek'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijYmhXcI6iorozasheuInK7Dn4l5yqNXbuBdemOoa1E0hsqO6bACF8Ldv9bj3rQ6_YQVhb1RdNTCjydTyvYvY-iC-W9bTnd4OoQ_k1DR4KCKNZ_Z5DZeHjntLb5tBcgs-g63C2aPCA-ilrFPGD3Qwe70xsizv1YcoaZz5D7EwfYMVh4C-bv6lCKdJD6jw/s72-c/cover%20rpt.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-7524241358590658994</id><published>2026-01-17T00:28:00.009+08:00</published><updated>2026-01-17T00:51:04.480+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Guru"/><category scheme="http://www.blogger.com/atom/ns#" term="Pendidikan"/><category scheme="http://www.blogger.com/atom/ns#" term="Sijil"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><title type='text'>Generator Sijil Penghargaan Percuma 2026: Buat &amp; Download PDF</title><content type='html'>&lt;div style=&quot;font-family: sans-serif; line-height: 1.6; color: #333; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Penghasilan sijil secara pukal kini lebih kemas dengan &lt;strong&gt;Generator Sijil Pro Layanlah&lt;/strong&gt;. Versi terbaru ini telah dioptimumkan susun aturnya untuk format Portrait dan Landscape bagi memastikan kedudukan nama, tarikh, dan tandatangan tersusun dengan sempurna.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #e5e7eb; background: #f9fafb; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #2d3436;&quot;&gt;🖨️ Stok Sijil Habis? Beli Kertas Sijil Tebal &amp; Frame Emas&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Lihat Keperluan Sijil di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 25px;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNLcxJlnCGb5GHj2_SQrnnQF7mkL_gwoTYeUXLqxYUT3RfLAMXxOS2KYtqek7TbV2XJa-zTyGyDKYi4_eFHasWRXBGRqubzSI2VrxJCYQJ9jvulHVjOeuRGJ4IyxP1GvDiCvF_msg8Hxnj_YUcv39URDP0lneuDJrOwhHf7HDAFA3P8RCDEULM7eddWEE/s1100/1000001704.jpg&quot;&gt;
        &lt;img alt=&quot;Sijil Generator Pro Layanlah dengan susunan kemas&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNLcxJlnCGb5GHj2_SQrnnQF7mkL_gwoTYeUXLqxYUT3RfLAMXxOS2KYtqek7TbV2XJa-zTyGyDKYi4_eFHasWRXBGRqubzSI2VrxJCYQJ9jvulHVjOeuRGJ4IyxP1GvDiCvF_msg8Hxnj_YUcv39URDP0lneuDJrOwhHf7HDAFA3P8RCDEULM7eddWEE/s320/1000001704.jpg&quot; width=&quot;350&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

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

&lt;div id=&quot;cert-ultimate-app&quot; style=&quot;max-width: 600px; margin: 20px auto; border-radius: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; background: #ffffff; box-shadow: 0 15px 40px rgba(0,0,0,0.1); border: 2px solid #2c3e50; overflow: hidden;&quot;&gt;
    &lt;div style=&quot;background: #2c3e50; color: #ffffff; padding: 25px; text-align: center;&quot;&gt;
        &lt;h2 style=&quot;margin: 0; font-size: 22px; color: #ffffff !important;&quot;&gt;🎓 GENERATOR SIJIL PRO (BULK)&lt;/h2&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; font-size: 11px; opacity: 0.8;&quot;&gt;Susunan Kemas | Auto-Scale Nama&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;padding: 25px;&quot;&gt;
        &lt;div style=&quot;margin-bottom: 15px; display: grid; grid-template-columns: 1fr 1fr; gap: 10px;&quot;&gt;
            &lt;div onclick=&quot;setOrient(&#39;p&#39;)&quot; id=&quot;btnP&quot; style=&quot;padding:10px; border:2px solid #2c3e50; border-radius:8px; text-align:center; cursor:pointer; background:#2c3e50; color:white; font-size:12px; font-weight:bold;&quot;&gt;Portrait&lt;/div&gt;
            &lt;div onclick=&quot;setOrient(&#39;l&#39;)&quot; id=&quot;btnL&quot; style=&quot;padding:10px; border:2px solid #eee; border-radius:8px; text-align:center; cursor:pointer; font-size:12px; font-weight:bold;&quot;&gt;Landscape&lt;/div&gt;
        &lt;/div&gt;
        &lt;input type=&quot;hidden&quot; id=&quot;orientation&quot; value=&quot;p&quot;&gt;

        &lt;div style=&quot;margin-bottom: 15px; border: 2px dashed #ddd; padding: 10px; border-radius: 10px; text-align: center;&quot;&gt;
            &lt;label style=&quot;font-size: 11px; font-weight: bold; display: block; margin-bottom: 5px;&quot;&gt;LOGO ORGANISASI:&lt;/label&gt;
            &lt;input type=&quot;file&quot; id=&quot;logoUpload&quot; accept=&quot;image/*&quot; style=&quot;font-size: 11px;&quot;&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
            &lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;JENIS SIJIL:&lt;/label&gt;
            &lt;select id=&quot;certType&quot; style=&quot;width:100%; padding:10px; border-radius:8px; border:1px solid #ddd;&quot;&gt;
                &lt;option value=&quot;SIJIL PENGHARGAAN&quot;&gt;Sijil Penghargaan&lt;/option&gt;
                &lt;option value=&quot;SIJIL PENCAPAIAN&quot;&gt;Sijil Pencapaian&lt;/option&gt;
                &lt;option value=&quot;SIJIL PENYERTAAN&quot;&gt;Sijil Penyertaan&lt;/option&gt;
            &lt;/select&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
            &lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;SENARAI NAMA (Satu baris satu nama):&lt;/label&gt;
            &lt;textarea id=&quot;nameList&quot; rows=&quot;4&quot; style=&quot;width:100%; padding:10px; border-radius:8px; border:1px solid #ddd;&quot; placeholder=&quot;NAMA PENERIMA...&quot;&gt;&lt;/textarea&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
            &lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;TUJUAN &amp; TEMPLATE AYAT:&lt;/label&gt;
            &lt;select id=&quot;purposeTemplate&quot; onchange=&quot;useTemplate()&quot; style=&quot;width:100%; padding:10px; border-radius:8px; margin-bottom:5px; border:1px solid #ddd;&quot;&gt;
                &lt;option value=&quot;&quot;&gt;-- Pilih Template Ayat --&lt;/option&gt;
                &lt;option value=&quot;Atas sumbangan dan khidmat bakti yang telah diberikan sepanjang program berlangsung.&quot;&gt;Sumbangan Bakti&lt;/option&gt;
                &lt;option value=&quot;Kerana telah menunjukkan prestasi yang cemerlang dan komitmen yang tinggi.&quot;&gt;Prestasi Cemerlang&lt;/option&gt;
                &lt;option value=&quot;Atas penyertaan aktif dalam menjayakan kejohanan dan aktiviti yang dijalankan.&quot;&gt;Penyertaan Aktif&lt;/option&gt;
            &lt;/select&gt;
            &lt;textarea id=&quot;tujuan&quot; rows=&quot;2&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:8px;&quot; placeholder=&quot;Ayat penghargaan...&quot;&gt;&lt;/textarea&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 15px;&quot;&gt;
            &lt;div&gt;&lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;NAMA MAJLIS:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;acara&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:8px;&quot;&gt;&lt;/div&gt;
            &lt;div&gt;&lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;TARIKH:&lt;/label&gt;&lt;input type=&quot;date&quot; id=&quot;tarikh&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:8px;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 25px;&quot;&gt;
            &lt;div&gt;&lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;PENANDATANGAN:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;signBy&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:8px;&quot;&gt;&lt;/div&gt;
            &lt;div&gt;
                &lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;JAWATAN:&lt;/label&gt;
                &lt;select id=&quot;jawatanSelect&quot; onchange=&quot;setJawatan(this.value)&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:8px;&quot;&gt;
                    &lt;option value=&quot;&quot;&gt;-- Pilih --&lt;/option&gt;
                    &lt;option value=&quot;Guru Besar&quot;&gt;Guru Besar&lt;/option&gt;
                    &lt;option value=&quot;Pengetua&quot;&gt;Pengetua&lt;/option&gt;
                    &lt;option value=&quot;Pengerusi&quot;&gt;Pengerusi&lt;/option&gt;
                    &lt;option value=&quot;Lain-lain&quot;&gt;Taip Manual...&lt;/option&gt;
                &lt;/select&gt;
                &lt;input type=&quot;text&quot; id=&quot;jawatanManual&quot; style=&quot;width:100%; padding:10px; border:1px solid #ddd; border-radius:8px; display:none; margin-top:5px;&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button id=&quot;btnPDF&quot; onclick=&quot;generateBulkCert()&quot; style=&quot;width: 100%; background: #2c3e50; color: white; border: none; padding: 18px; border-radius: 12px; font-weight: bold; cursor: pointer;&quot;&gt;📥 JANA &amp; DOWNLOAD PDF PUKAL&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 25px 0; padding: 15px; border: 1px solid #d1d8e0; background: #ffffff; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold;&quot;&gt;🏅 Frame Sijil Eksklusif &amp; Kertas Sijil Gold Foil&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Beli Keperluan Sijil di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div style=&quot;padding: 20px; border: 2px dashed #2c3e50; border-radius: 10px; text-align: center; font-family: sans-serif; background: #fff;&quot;&gt;
    &lt;p style=&quot;font-weight: bold;&quot;&gt;Bantu Rakan Guru!&lt;/p&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;Kongsikan tool ini untuk memudahkan kerja rakan sekerja anda.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin-top: 20px; font-size: 11px; color: #999; text-align: center; font-family: sans-serif;&quot;&gt;
    Disclaimer: Layanlah tidak bertanggungjawab atas penyalahgunaan dokumen. Kami adalah rakan affiliate Shopee.
&lt;/div&gt;

&lt;script&gt;
//&lt;![CDATA[
    function setOrient(o) {
        document.getElementById(&#39;orientation&#39;).value = o;
        document.getElementById(&#39;btnP&#39;).style.background = (o === &#39;p&#39;) ? &#39;#2c3e50&#39; : &#39;#ffffff&#39;;
        document.getElementById(&#39;btnP&#39;).style.color = (o === &#39;p&#39;) ? &#39;#ffffff&#39; : &#39;#2c3e50&#39;;
        document.getElementById(&#39;btnL&#39;).style.background = (o === &#39;l&#39;) ? &#39;#2c3e50&#39; : &#39;#ffffff&#39;;
        document.getElementById(&#39;btnL&#39;).style.color = (o === &#39;l&#39;) ? &#39;#ffffff&#39; : &#39;#2c3e50&#39;;
        document.getElementById(&#39;btnP&#39;).style.border = (o === &#39;p&#39;) ? &#39;2px solid #2c3e50&#39; : &#39;2px solid #eee&#39;;
        document.getElementById(&#39;btnL&#39;).style.border = (o === &#39;l&#39;) ? &#39;2px solid #2c3e50&#39; : &#39;2px solid #eee&#39;;
    }
    function setJawatan(v) { document.getElementById(&#39;jawatanManual&#39;).style.display = (v === &#39;Lain-lain&#39;) ? &#39;block&#39; : &#39;none&#39;; }
    function useTemplate() { document.getElementById(&#39;tujuan&#39;).value = document.getElementById(&#39;purposeTemplate&#39;).value; }

    async function generateBulkCert() {
        const btn = document.getElementById(&#39;btnPDF&#39;);
        const names = document.getElementById(&#39;nameList&#39;).value.trim().split(&#39;\n&#39;).filter(n =&gt; n.trim() !== &quot;&quot;);
        if (names.length === 0) { alert(&quot;Sila isi nama!&quot;); return; }

        btn.innerText = &quot;Sila Tunggu...&quot;; btn.disabled = true;

        const { jsPDF } = window.jspdf;
        const orient = document.getElementById(&#39;orientation&#39;).value;
        const doc = new jsPDF({ orientation: (orient === &#39;p&#39; ? &#39;portrait&#39; : &#39;landscape&#39;) });
        
        const type = document.getElementById(&#39;certType&#39;).value;
        const tujuan = document.getElementById(&#39;tujuan&#39;).value;
        const majlis = document.getElementById(&#39;acara&#39;).value;
        const rawDate = document.getElementById(&#39;tarikh&#39;).value;
        const tarikhStr = rawDate ? new Date(rawDate).toLocaleDateString(&#39;ms-MY&#39;, { day:&#39;numeric&#39;, month:&#39;long&#39;, year:&#39;numeric&#39; }) : &quot;&quot;;
        const sign = document.getElementById(&#39;signBy&#39;).value;
        const jawatan = document.getElementById(&#39;jawatanSelect&#39;).value === &#39;Lain-lain&#39; ? document.getElementById(&#39;jawatanManual&#39;).value : document.getElementById(&#39;jawatanSelect&#39;).value;

        const logoFile = document.getElementById(&#39;logoUpload&#39;).files[0];
        let logoBase64 = null;
        if (logoFile) {
            logoBase64 = await new Promise(resolve =&gt; {
                const reader = new FileReader();
                reader.onload = e =&gt; resolve(e.target.result);
                reader.readAsDataURL(logoFile);
            });
        }

        const width = doc.internal.pageSize.getWidth();
        const height = doc.internal.pageSize.getHeight();
        const centerX = width / 2;

        for (let i = 0; i &lt; names.length; i++) {
            if (i &gt; 0) doc.addPage();
            doc.setTextColor(0, 0, 0); doc.setDrawColor(44, 62, 80);

            // Border
            doc.setLineWidth(1.5); doc.rect(10, 10, width - 20, height - 20);
            doc.setLineWidth(0.5); doc.rect(13, 13, width - 26, height - 26);

            // Logo (Spacing adjusted)
            if (logoBase64) doc.addImage(logoBase64, &#39;PNG&#39;, centerX - 15, 20, 30, 30);

            // Judul (Y:65)
            doc.setFont(&quot;times&quot;, &quot;bold&quot;); doc.setFontSize(35);
            doc.text(type, centerX, 65, { align: &quot;center&quot; });

            // &quot;Dengan ini disahkan...&quot; (Y:80)
            doc.setFontSize(15); doc.setFont(&quot;times&quot;, &quot;italic&quot;);
            doc.text(&quot;Dengan ini disahkan bahawa&quot;, centerX, 80, { align: &quot;center&quot; });

            // Nama (Y:100 + Auto Scale)
            let fontSizeNama = 28;
            doc.setFont(&quot;times&quot;, &quot;bold&quot;); doc.setFontSize(fontSizeNama);
            let nameUpper = names[i].toUpperCase();
            while (doc.getTextWidth(nameUpper) &gt; (width - 60) &amp;&amp; fontSizeNama &gt; 10) {
                fontSizeNama -= 1; doc.setFontSize(fontSizeNama);
            }
            doc.text(nameUpper, centerX, 100, { align: &quot;center&quot; });

            // Tujuan (Y:115)
            doc.setFontSize(14); doc.setFont(&quot;times&quot;, &quot;normal&quot;);
            let splitTujuan = doc.splitTextToSize(tujuan, width - 60);
            doc.text(splitTujuan, centerX, 115, { align: &quot;center&quot; });

            // Jarak Luas untuk Landscape di bawah
            let bottomY = height - 55; // Garisan Tandatangan

            // Majlis &amp; Tarikh (Diletakkan tengah antara tujuan &amp; sign)
            doc.setFont(&quot;times&quot;, &quot;bold&quot;); doc.setFontSize(14);
            doc.text(majlis, centerX, bottomY - 25, { align: &quot;center&quot; });
            doc.setFontSize(12);
            doc.text(&quot;Tarikh: &quot; + tarikhStr, centerX, bottomY - 18, { align: &quot;center&quot; });

            // Ruangan Sign (Bottom Spacing Optimized)
            doc.setLineWidth(0.5);
            doc.line(centerX - 45, bottomY, centerX + 45, bottomY);
            doc.setFont(&quot;times&quot;, &quot;bold&quot;); doc.text(sign, centerX, bottomY + 8, { align: &quot;center&quot; });
            doc.setFont(&quot;times&quot;, &quot;normal&quot;); doc.text(jawatan, centerX, bottomY + 14, { align: &quot;center&quot; });
        }

        doc.save(`Sijil_Pukal_Layanlah.pdf`);
        btn.innerText = &quot;📥 JANA &amp; DOWNLOAD PDF PUKAL&quot;; btn.disabled = false;
    }
//]]&gt;
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/7524241358590658994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/enerator-sijil-penghargaan-percuma-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/7524241358590658994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/7524241358590658994'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/enerator-sijil-penghargaan-percuma-online.html' title='Generator Sijil Penghargaan Percuma 2026: Buat &amp; Download PDF'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNLcxJlnCGb5GHj2_SQrnnQF7mkL_gwoTYeUXLqxYUT3RfLAMXxOS2KYtqek7TbV2XJa-zTyGyDKYi4_eFHasWRXBGRqubzSI2VrxJCYQJ9jvulHVjOeuRGJ4IyxP1GvDiCvF_msg8Hxnj_YUcv39URDP0lneuDJrOwhHf7HDAFA3P8RCDEULM7eddWEE/s72-c/1000001704.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-25685192780999434</id><published>2026-01-16T23:53:00.005+08:00</published><updated>2026-01-17T00:17:19.701+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Gaya Hidup"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Kewangan"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><title type='text'>Kalkulator Duit Kutu 2026: Jana Jadual Giliran &amp; Simpan PDF</title><content type='html'>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js&quot;&gt;&lt;/script&gt;

&lt;div style=&quot;font-family: sans-serif; line-height: 1.6; color: #333; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Adakah anda &quot;Ibu Kutu&quot; yang mencari cara adil untuk agihan giliran? &lt;strong&gt;Kalkulator Duit Kutu Pro&lt;/strong&gt; kini hadir dengan fungsi **Agihan Rawak** dan penjanaan **PDF** yang sangat profesional.&lt;/p&gt;
    &lt;p&gt;Hanya masukkan senarai nama dan jumlah caruman, sistem akan mengira pecahan amaun bulanan secara automatik. Sesuai untuk pengurusan kewangan kumpulan yang lebih telus.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #e5e7eb; background: #f9fafb; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #2d3436;&quot;&gt;💰 Simpan Duit Lebih Teratur: Tabung Besi &amp; Binder Budget Viral&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Cek Pilihan Tabung di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 25px;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFNLKBzBeJTSQn9pUlAZFy_rL5-67G6glAXiPFAl2O50LkaUQmjibNwrYPBCzwpinWyoSV4JKCCBKGJwZ-Js4PC21nhdC14vZU1nxwab3PlUsN_fpUk8_Xq9k27h8Xw5_j5p8avD_DH3ki28LonZddvxHXLP6QaYZskYGIYgv7vF2oZkLX50grL23_seg/s1100/1000001702.jpg&quot;&gt;
        &lt;img alt=&quot;Kalkulator Duit Kutu Pro dengan jadual nama ahli dan jumlah bulanan&quot; border=&quot;0&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFNLKBzBeJTSQn9pUlAZFy_rL5-67G6glAXiPFAl2O50LkaUQmjibNwrYPBCzwpinWyoSV4JKCCBKGJwZ-Js4PC21nhdC14vZU1nxwab3PlUsN_fpUk8_Xq9k27h8Xw5_j5p8avD_DH3ki28LonZddvxHXLP6QaYZskYGIYgv7vF2oZkLX50grL23_seg/s320/1000001702.jpg&quot; width=&quot;320&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div id=&quot;kutu-app-v4&quot; style=&quot;max-width: 550px; margin: 20px auto; border-radius: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; background: #ffffff; box-shadow: 0 15px 40px rgba(0,0,0,0.1); border: 2px solid #3498db; overflow: hidden;&quot;&gt;
    
    &lt;div style=&quot;background: #3498db; color: #ffffff; padding: 25px; text-align: center;&quot;&gt;
        &lt;h2 style=&quot;margin: 0; font-size: 20px; color: #ffffff !important;&quot;&gt;💰 PENGURUS DUIT KUTU PRO&lt;/h2&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; font-size: 11px; opacity: 0.9;&quot;&gt;Sistem Agihan &amp; Simpan PDF&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;padding: 25px;&quot;&gt;
        &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
            &lt;label style=&quot;font-size: 12px; font-weight: bold; color: #3498db;&quot;&gt;NAMA KUMPULAN:&lt;/label&gt;
            &lt;input type=&quot;text&quot; id=&quot;kutuTitle&quot; placeholder=&quot;Cth: Kutu Pejabat 2026&quot; style=&quot;width:100%; padding:10px; border:2px solid #3498db; border-radius:8px; box-sizing:border-box;&quot;&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
            &lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;NAMA AHLI (Satu baris satu nama):&lt;/label&gt;
            &lt;textarea id=&quot;memberList&quot; rows=&quot;5&quot; style=&quot;width:100%; padding:10px; border-radius:8px; border:1px solid #ddd; font-family:sans-serif;&quot; placeholder=&quot;Nama Ahli 1&amp;#10;Nama Ahli 2...&quot;&gt;&lt;/textarea&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 20px;&quot;&gt;
            &lt;div&gt;&lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;RM Sebulan:&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;kutuAmount&quot; value=&quot;100&quot; style=&quot;width:100%; padding:10px; border-radius:8px; border:1px solid #ddd;&quot;&gt;&lt;/div&gt;
            &lt;div&gt;&lt;label style=&quot;font-size: 12px; font-weight: bold;&quot;&gt;Tarikh Mula:&lt;/label&gt;&lt;input type=&quot;date&quot; id=&quot;startDate&quot; style=&quot;width:100%; padding:10px; border-radius:8px; border:1px solid #ddd;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: flex; gap: 10px; margin-bottom: 25px;&quot;&gt;
            &lt;button onclick=&quot;prepKutu(&#39;manual&#39;)&quot; style=&quot;flex:1; background: #f39c12; color: white; border: none; padding: 12px; border-radius: 8px; font-weight: bold; cursor: pointer;&quot;&gt;MOD MANUAL&lt;/button&gt;
            &lt;button onclick=&quot;prepKutu(&#39;rawak&#39;)&quot; style=&quot;flex:1; background: #2ecc71; color: white; border: none; padding: 12px; border-radius: 8px; font-weight: bold; cursor: pointer;&quot;&gt;MOD RAWAK&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;resultArea&quot; style=&quot;display:none; border-top: 2px dashed #eee; padding-top: 20px;&quot;&gt;
            &lt;div style=&quot;background: #ebf5fb; padding: 15px; border-radius: 12px; text-align: center; margin-bottom: 20px;&quot;&gt;
                &lt;div id=&quot;displayTitle&quot; style=&quot;font-weight: bold; color: #3498db; margin-bottom: 5px;&quot;&gt;&lt;/div&gt;
                &lt;div style=&quot;font-size: 11px;&quot;&gt;JUMLAH CARUMAN PENUH&lt;/div&gt;
                &lt;div style=&quot;font-size: 28px; font-weight: 800; color: #2c3e50;&quot;&gt;RM &lt;span id=&quot;totalDisplay&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 13px; margin-bottom: 20px;&quot;&gt;
                &lt;thead style=&quot;background: #3498db; color: white;&quot;&gt;
                    &lt;tr&gt;&lt;th style=&quot;padding: 10px; text-align: left;&quot;&gt;Bulan&lt;/th&gt;&lt;th style=&quot;padding: 10px; text-align: left;&quot;&gt;Nama Ahli&lt;/th&gt;&lt;th style=&quot;padding: 10px; text-align: right;&quot;&gt;Dapat (RM)&lt;/th&gt;&lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody id=&quot;kutuTableBody&quot;&gt;&lt;/tbody&gt;
            &lt;/table&gt;
            &lt;button id=&quot;btnPDF&quot; onclick=&quot;downloadKutuPDF()&quot; style=&quot;width: 100%; background: #e74c3c; color: white; border: none; padding: 15px; border-radius: 12px; font-weight: bold; cursor: pointer;&quot;&gt;📥 SIMPAN JADUAL (PDF)&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;qrcode&quot; style=&quot;display:none;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
//&lt;![CDATA[
    let finalSchedule = [];

    function prepKutu(mode) {
        const title = document.getElementById(&#39;kutuTitle&#39;).value.trim() || &quot;JADUAL DUIT KUTU&quot;;
        const nameText = document.getElementById(&#39;memberList&#39;).value.trim();
        const names = nameText.split(&#39;\n&#39;).filter(n =&gt; n.trim() !== &quot;&quot;);
        const amount = parseFloat(document.getElementById(&#39;kutuAmount&#39;).value);
        const start = document.getElementById(&#39;startDate&#39;).value;

        if (names.length &lt; 2 || !amount || !start) { alert(&quot;Sila isi nama (min 2 orang), amaun &amp; tarikh!&quot;); return; }

        const totalKutipan = amount * names.length;
        document.getElementById(&#39;displayTitle&#39;).innerText = title.toUpperCase();
        document.getElementById(&#39;totalDisplay&#39;).innerText = totalKutipan.toLocaleString();
        
        const tableBody = document.getElementById(&#39;kutuTableBody&#39;);
        tableBody.innerHTML = &quot;&quot;;
        finalSchedule = [];

        let workingNames = [...names];
        if (mode === &#39;rawak&#39;) workingNames.sort(() =&gt; Math.random() - 0.5);

        let currentDate = new Date(start);
        for (let i = 0; i &lt; names.length; i++) {
            let monthLabel = currentDate.toLocaleString(&#39;ms-MY&#39;, { month: &#39;long&#39;, year: &#39;numeric&#39; });
            let nameVal = (mode === &#39;rawak&#39;) ? workingNames[i] : &quot;&quot;;
            
            let rowHtml = `&lt;tr&gt;&lt;td style=&quot;padding:10px; border-bottom:1px solid #eee;&quot;&gt;${monthLabel}&lt;/td&gt;&lt;td style=&quot;padding:10px; border-bottom:1px solid #eee;&quot;&gt;`;
            if (mode === &#39;rawak&#39;) {
                rowHtml += `&lt;strong&gt;${nameVal}&lt;/strong&gt;`;
            } else {
                rowHtml += `&lt;select onchange=&quot;updateManualName(${i}, this.value)&quot; style=&quot;width:100%; padding:5px;&quot;&gt;
                    &lt;option value=&quot;&quot;&gt;-- Pilih --&lt;/option&gt;
                    ${names.map(n =&gt; `&lt;option value=&quot;${n}&quot;&gt;${n}&lt;/option&gt;`).join(&#39;&#39;)}
                &lt;/select&gt;`;
            }
            rowHtml += `&lt;/td&gt;&lt;td style=&quot;padding:10px; border-bottom:1px solid #eee; text-align:right;&quot;&gt;${totalKutipan.toLocaleString()}&lt;/td&gt;&lt;/tr&gt;`;
            tableBody.innerHTML += rowHtml;
            finalSchedule.push({ month: monthLabel, name: nameVal, total: totalKutipan });
            currentDate.setMonth(currentDate.getMonth() + 1);
        }
        document.getElementById(&#39;resultArea&#39;).style.display = &quot;block&quot;;
    }

    function updateManualName(index, val) { finalSchedule[index].name = val; }

    function downloadKutuPDF() {
        const btn = document.getElementById(&#39;btnPDF&#39;);
        btn.innerText = &quot;Sila Tunggu...&quot;;
        btn.disabled = true;

        try {
            const { jsPDF } = window.jspdf;
            const doc = new jsPDF();
            const title = document.getElementById(&#39;kutuTitle&#39;).value.trim() || &quot;JADUAL DUIT KUTU&quot;;
            const totalStr = document.getElementById(&#39;totalDisplay&#39;).innerText;
            const currentUrl = window.location.href;

            // Generate QR Code Offline
            const qrContainer = document.getElementById(&quot;qrcode&quot;);
            qrContainer.innerHTML = &quot;&quot;;
            new QRCode(qrContainer, { text: currentUrl, width: 100, height: 100 });

            setTimeout(() =&gt; {
                const qrCanvas = qrContainer.querySelector(&#39;canvas&#39;);
                const qrImgData = qrCanvas.toDataURL(&quot;image/png&quot;);

                doc.setFontSize(18); doc.setTextColor(52, 152, 219);
                doc.text(title.toUpperCase(), 14, 20);
                
                doc.setFontSize(10); doc.setTextColor(0, 0, 0);
                doc.text(&quot;Rujukan: Layanlah | Jumlah Penuh: RM &quot; + totalStr, 14, 28);

                doc.autoTable({
                    startY: 35,
                    head: [[&#39;Bulan&#39;, &#39;Nama Penerima&#39;, &#39;Amaun Dapat (RM)&#39;]],
                    body: finalSchedule.map(s =&gt; [s.month, s.name || &quot;Belum dipilih&quot;, &quot;RM &quot; + s.total.toLocaleString()]),
                    headStyles: { fillColor: [52, 152, 219] },
                    columnStyles: { 2: { halign: &#39;right&#39; } }
                });

                const finalY = doc.lastAutoTable.finalY + 10;
                doc.setFontSize(8); doc.setTextColor(150);
                doc.text(&quot;Scan untuk guna kalkulator:&quot;, 155, finalY + 5);
                doc.addImage(qrImgData, &#39;PNG&#39;, 165, finalY + 8, 25, 25);

                doc.save(`${title.replace(/\s+/g, &#39;_&#39;)}.pdf`);
                btn.innerText = &quot;📥 SIMPAN JADUAL (PDF)&quot;;
                btn.disabled = false;
            }, 500);

        } catch (e) {
            alert(&quot;Ralat PDF: Sila cuba lagi.&quot;);
            btn.innerText = &quot;📥 SIMPAN JADUAL (PDF)&quot;;
            btn.disabled = false;
        }
    }
//]]&gt;
&lt;/script&gt;

&lt;div style=&quot;margin: 25px 0; padding: 15px; border: 1px solid #d1d8e0; background: #ffffff; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold;&quot;&gt;📖 Planner &amp; Buku Catatan Kewangan (Terlaris)&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Beli Planner di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div style=&quot;padding: 20px; border: 2px dashed #3498db; border-radius: 10px; text-align: center; font-family: sans-serif; background: #fff;&quot;&gt;
    &lt;p style=&quot;font-weight: bold; color: #2980b9;&quot;&gt;Bantu Ibu Kutu Lain!&lt;/p&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;Tinggalkan komen anda di bawah jika tool ini sangat memudahkan urusan group kutu anda!&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/25685192780999434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-duit-kutu-jadual-giliran.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/25685192780999434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/25685192780999434'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-duit-kutu-jadual-giliran.html' title='Kalkulator Duit Kutu 2026: Jana Jadual Giliran &amp; Simpan PDF'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFNLKBzBeJTSQn9pUlAZFy_rL5-67G6glAXiPFAl2O50LkaUQmjibNwrYPBCzwpinWyoSV4JKCCBKGJwZ-Js4PC21nhdC14vZU1nxwab3PlUsN_fpUk8_Xq9k27h8Xw5_j5p8avD_DH3ki28LonZddvxHXLP6QaYZskYGIYgv7vF2oZkLX50grL23_seg/s72-c/1000001702.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-2860683921151782978</id><published>2026-01-16T23:14:00.003+08:00</published><updated>2026-01-16T23:24:49.583+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Gaya Hidup"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Lifestyle"/><category scheme="http://www.blogger.com/atom/ns#" term="ools"/><category scheme="http://www.blogger.com/atom/ns#" term="Pendidikan"/><title type='text'>Kalkulator Upah Jahit 2026: Kira Anggaran &amp; Sebut Harga (Boleh Edit)</title><content type='html'>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;div style=&quot;font-family: sans-serif; line-height: 1.6; color: #333; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Adakah anda sedang mengira kos untuk tempahan baju raya atau majlis? &lt;strong&gt;Kalkulator Upah Jahit 2026&lt;/strong&gt; ini menyediakan anggaran harga bagi pelbagai jenis pakaian termasuk Baju Kurung, Baju Melayu, Kebaya, dan Kurta.&lt;/p&gt;
    &lt;p&gt;Tukang jahit boleh mengubah harga dasar secara fleksibel, dan pelanggan boleh memuat turun sebut harga (quotation) dalam format PDF secara percuma.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #e5e7eb; background: #f9fafb; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #2d3436;&quot;&gt;🧵 Alatan Jahit Terlaris: Gunting Kain &amp; Kapur Penanda&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Cek Promosi Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 25px;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh33lSlD_gfjgRSkgMLq5itlTRu5c7GsWna1OxRQRl9ys9V9lxxXBO2_pI2FzreTT8ee_ilClis16swvWgpE2evqpd4WiFhe6N4TzyPQT6BMoooS3ct73E9MAyONDRK28iH1bd99r1wO4girchXVvApB1p7hD2fL0EXIiyG8K1RF5G1d3rBw9UpcFzxE-w/s1100/1000001700.jpg&quot;&gt;
        &lt;img alt=&quot;Kalkulator Upah Jahit Baju Melayu Kurung Kebaya 2026&quot; border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh33lSlD_gfjgRSkgMLq5itlTRu5c7GsWna1OxRQRl9ys9V9lxxXBO2_pI2FzreTT8ee_ilClis16swvWgpE2evqpd4WiFhe6N4TzyPQT6BMoooS3ct73E9MAyONDRK28iH1bd99r1wO4girchXVvApB1p7hD2fL0EXIiyG8K1RF5G1d3rBw9UpcFzxE-w/s320/1000001700.jpg&quot; width=&quot;350&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div id=&quot;tailor-app-final&quot; style=&quot;max-width: 550px; margin: 20px auto; border-radius: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; background: #ffffff; box-shadow: 0 15px 40px rgba(0,0,0,0.2); border: 2px solid #2d3436; overflow: hidden;&quot;&gt;
    
    &lt;div style=&quot;background: #2d3436; color: #ffffff; padding: 25px; text-align: center;&quot;&gt;
        &lt;h2 style=&quot;margin: 0; font-size: 22px; color: #ffffff !important;&quot;&gt;✂️ KALKULATOR UPAH JAHIT&lt;/h2&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; font-size: 11px; color: #bdc3c7;&quot;&gt;Versi Lengkap: Kurung, Kebaya, B.Melayu, Kurta&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;padding: 25px;&quot;&gt;
        &lt;details style=&quot;margin-bottom: 25px; background: #fff9db; border: 2px solid #fab005; border-radius: 12px; padding: 12px;&quot;&gt;
            &lt;summary style=&quot;font-size: 13px; font-weight: bold; cursor: pointer; color: #e67e22;&quot;&gt;⚙️ TETAPAN HARGA DASAR (EDIT DI SINI)&lt;/summary&gt;
            &lt;div style=&quot;padding-top: 15px; display: grid; grid-template-columns: 1fr 1fr; gap: 10px;&quot;&gt;
                &lt;div style=&quot;font-size: 11px;&quot;&gt;B.Kurung (RM)&lt;input type=&quot;number&quot; id=&quot;base_kurung&quot; value=&quot;45&quot; onchange=&quot;kiraUpah()&quot; style=&quot;width:100%;&quot;&gt;&lt;/div&gt;
                &lt;div style=&quot;font-size: 11px;&quot;&gt;B.Melayu (RM)&lt;input type=&quot;number&quot; id=&quot;base_melayu&quot; value=&quot;65&quot; onchange=&quot;kiraUpah()&quot; style=&quot;width:100%;&quot;&gt;&lt;/div&gt;
                &lt;div style=&quot;font-size: 11px;&quot;&gt;Kebaya (RM)&lt;input type=&quot;number&quot; id=&quot;base_kebaya&quot; value=&quot;60&quot; onchange=&quot;kiraUpah()&quot; style=&quot;width:100%;&quot;&gt;&lt;/div&gt;
                &lt;div style=&quot;font-size: 11px;&quot;&gt;Kurta (RM)&lt;input type=&quot;number&quot; id=&quot;base_kurta&quot; value=&quot;40&quot; onchange=&quot;kiraUpah()&quot; style=&quot;width:100%;&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/details&gt;

        &lt;label style=&quot;display: block; font-weight: bold; margin-bottom: 8px;&quot;&gt;Pilih Jenis Pakaian:&lt;/label&gt;
        &lt;select id=&quot;bajuType&quot; onchange=&quot;kiraUpah()&quot; style=&quot;width: 100%; padding: 12px; border: 2px solid #dfe4ea; border-radius: 10px; margin-bottom: 20px;&quot;&gt;
            &lt;option value=&quot;kurung&quot;&gt;Baju Kurung (Biasa/Moden)&lt;/option&gt;
            &lt;option value=&quot;melayu&quot;&gt;Baju Melayu (Cekak Musang/Teluk Belanga)&lt;/option&gt;
            &lt;option value=&quot;kebaya&quot;&gt;Baju Kebaya / Keledek&lt;/option&gt;
            &lt;option value=&quot;kurta&quot;&gt;Baju Kurta / Kemeja Ringkas&lt;/option&gt;
        &lt;/select&gt;

        &lt;label style=&quot;display: block; font-weight: bold; margin-bottom: 12px;&quot;&gt;Pilihan Tambahan:&lt;/label&gt;
        &lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 25px;&quot;&gt;
            &lt;div onclick=&quot;toggleAddon(&#39;addLining&#39;)&quot; id=&quot;card_addLining&quot; style=&quot;padding: 12px; border: 2px solid #eee; border-radius: 12px; text-align: center; cursor: pointer;&quot;&gt;
                Lining (+RM15)&lt;input type=&quot;checkbox&quot; id=&quot;addLining&quot; style=&quot;display:none;&quot; onchange=&quot;kiraUpah()&quot;&gt;
            &lt;/div&gt;
            &lt;div onclick=&quot;toggleAddon(&#39;addManik&#39;)&quot; id=&quot;card_addManik&quot; style=&quot;padding: 12px; border: 2px solid #eee; border-radius: 12px; text-align: center; cursor: pointer;&quot;&gt;
                Manik (+RM20)&lt;input type=&quot;checkbox&quot; id=&quot;addManik&quot; style=&quot;display:none;&quot; onchange=&quot;kiraUpah()&quot;&gt;
            &lt;/div&gt;
            &lt;div onclick=&quot;toggleAddon(&#39;addLace&#39;)&quot; id=&quot;card_addLace&quot; style=&quot;padding: 12px; border: 2px solid #eee; border-radius: 12px; text-align: center; cursor: pointer;&quot;&gt;
                Lace (+RM25)&lt;input type=&quot;checkbox&quot; id=&quot;addLace&quot; style=&quot;display:none;&quot; onchange=&quot;kiraUpah()&quot;&gt;
            &lt;/div&gt;
            &lt;div onclick=&quot;toggleAddon(&#39;addPesak&#39;)&quot; id=&quot;card_addPesak&quot; style=&quot;padding: 12px; border: 2px solid #eee; border-radius: 12px; text-align: center; cursor: pointer;&quot;&gt;
                Pesak/Saku (+RM5)&lt;input type=&quot;checkbox&quot; id=&quot;addPesak&quot; style=&quot;display:none;&quot; onchange=&quot;kiraUpah()&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;background: #2d3436; color: white; padding: 25px; border-radius: 20px; text-align: center;&quot;&gt;
            &lt;div style=&quot;font-size: 11px; text-transform: uppercase; opacity: 0.7;&quot;&gt;Jumlah Anggaran Upah&lt;/div&gt;
            &lt;div style=&quot;font-size: 40px; font-weight: 800; margin: 5px 0;&quot;&gt;RM &lt;span id=&quot;totalUpah&quot;&gt;45&lt;/span&gt;&lt;/div&gt;
            &lt;div id=&quot;breakdown&quot; style=&quot;font-size: 11px; color: #bdc3c7;&quot;&gt;Harga dasar sahaja&lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: flex; gap: 10px; margin-top: 20px;&quot;&gt;
            &lt;button onclick=&quot;downloadTailorPDF()&quot; style=&quot;flex: 2; background: #e74c3c; color: white; border: none; padding: 15px; border-radius: 12px; font-weight: bold; cursor: pointer;&quot;&gt;📥 SIMPAN PDF&lt;/button&gt;
            &lt;button onclick=&quot;resetTailor()&quot; style=&quot;flex: 1; background: #f1f2f6; color: #7f8c8d; border: none; padding: 15px; border-radius: 12px; font-weight: bold; cursor: pointer;&quot;&gt;RESET&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div style=&quot;padding: 20px; border: 2px dashed #ccc; border-radius: 10px; text-align: center; font-family: sans-serif; margin-top: 30px;&quot;&gt;
    &lt;p style=&quot;font-weight: bold;&quot;&gt;Berapa upah jahit di kawasan anda?&lt;/p&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;Tuliskan jenis baju, harga upah, dan lokasi anda di komen bawah!&lt;/p&gt;
&lt;/div&gt;

&lt;script&gt;
//&lt;![CDATA[
    function toggleAddon(id) {
        const cb = document.getElementById(id);
        const card = document.getElementById(&#39;card_&#39; + id);
        cb.checked = !cb.checked; // Tukar status tick
        
        // Tukar Warna Kad
        if(cb.checked) {
            card.style.background = &quot;#2ecc71&quot;;
            card.style.color = &quot;white&quot;;
            card.style.borderColor = &quot;#27ae60&quot;;
        } else {
            card.style.background = &quot;#ffffff&quot;;
            card.style.color = &quot;#333&quot;;
            card.style.borderColor = &quot;#eeeeee&quot;;
        }
        kiraUpah(); // Panggil fungsi kira
    }

    function kiraUpah() {
        const b_kurung = parseFloat(document.getElementById(&#39;base_kurung&#39;).value) || 0;
        const b_melayu = parseFloat(document.getElementById(&#39;base_melayu&#39;).value) || 0;
        const b_kebaya = parseFloat(document.getElementById(&#39;base_kebaya&#39;).value) || 0;
        const b_kurta = parseFloat(document.getElementById(&#39;base_kurta&#39;).value) || 0;

        const type = document.getElementById(&#39;bajuType&#39;).value;
        let total = 0;
        let label = &quot;&quot;;

        if(type === &#39;kurung&#39;) { total = b_kurung; label = &quot;Dasar B.Kurung RM&quot;+b_kurung; }
        else if(type === &#39;melayu&#39;) { total = b_melayu; label = &quot;Dasar B.Melayu RM&quot;+b_melayu; }
        else if(type === &#39;kebaya&#39;) { total = b_kebaya; label = &quot;Dasar Kebaya RM&quot;+b_kebaya; }
        else { total = b_kurta; label = &quot;Dasar Kurta RM&quot;+b_kurta; }

        if(document.getElementById(&#39;addLining&#39;).checked) { total += 15; label += &quot; + Lining RM15&quot;; }
        if(document.getElementById(&#39;addManik&#39;).checked) { total += 20; label += &quot; + Manik RM20&quot;; }
        if(document.getElementById(&#39;addLace&#39;).checked) { total += 25; label += &quot; + Lace RM25&quot;; }
        if(document.getElementById(&#39;addPesak&#39;).checked) { total += 5; label += &quot; + Pesak RM5&quot;; }

        document.getElementById(&#39;totalUpah&#39;).innerText = total;
        document.getElementById(&#39;breakdown&#39;).innerText = label;
    }

    function resetTailor() {
        [&#39;addLining&#39;, &#39;addManik&#39;, &#39;addLace&#39;, &#39;addPesak&#39;].forEach(id =&gt; {
            const cb = document.getElementById(id);
            cb.checked = false;
            const card = document.getElementById(&#39;card_&#39; + id);
            card.style.background = &quot;#ffffff&quot;;
            card.style.color = &quot;#333&quot;;
            card.style.borderColor = &quot;#eeeeee&quot;;
        });
        document.getElementById(&#39;bajuType&#39;).value = &#39;kurung&#39;;
        kiraUpah();
    }

    function downloadTailorPDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();
        const total = document.getElementById(&#39;totalUpah&#39;).innerText;
        const breakdown = document.getElementById(&#39;breakdown&#39;).innerText;
        const typeText = document.getElementById(&#39;bajuType&#39;).options[document.getElementById(&#39;bajuType&#39;).selectedIndex].text;

        doc.setFontSize(18);
        doc.text(&quot;ANGGARAN SEBUT HARGA JAHIT&quot;, 14, 20);
        doc.setFontSize(10);
        doc.text(&quot;Laman Rujukan: Layanlah&quot;, 14, 28);
        doc.autoTable({
            startY: 35,
            head: [[&#39;Kategori&#39;, &#39;Butiran&#39;]],
            body: [[&#39;Jenis Baju&#39;, typeText], [&#39;Perincian Kos&#39;, breakdown], [&#39;JUMLAH BESAR&#39;, &#39;RM &#39; + total]],
            headStyles: { fillColor: [45, 52, 54] }
        });
        doc.save(&quot;SebutHarga_Jahit.pdf&quot;);
    }
//]]&gt;
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/2860683921151782978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-anggaran-upah-jahit-malaysia.html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2860683921151782978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2860683921151782978'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-anggaran-upah-jahit-malaysia.html.html' title='Kalkulator Upah Jahit 2026: Kira Anggaran &amp; Sebut Harga (Boleh Edit)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh33lSlD_gfjgRSkgMLq5itlTRu5c7GsWna1OxRQRl9ys9V9lxxXBO2_pI2FzreTT8ee_ilClis16swvWgpE2evqpd4WiFhe6N4TzyPQT6BMoooS3ct73E9MAyONDRK28iH1bd99r1wO4girchXVvApB1p7hD2fL0EXIiyG8K1RF5G1d3rBw9UpcFzxE-w/s72-c/1000001700.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-2268103325711059860</id><published>2026-01-16T22:44:00.005+08:00</published><updated>2026-01-16T22:52:05.183+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Pendidikan"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><title type='text'>Kalkulator Tempahan Baju: Kira Saiz Auto &amp; Export PDF (Percuma)</title><content type='html'>&lt;div style=&quot;font-family: sans-serif; line-height: 1.6; color: #333; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Adakah anda sedang menguruskan tempahan baju untuk pasukan atau kelas? &lt;strong&gt;Kalkulator Tempahan Baju&lt;/strong&gt; ini membantu anda merekod pesanan dengan lebih sistematik tanpa perlu mengira manual.&lt;/p&gt;
    &lt;p&gt;Tool ini dilengkapi dengan fungsi &lt;strong&gt;Custom PDF Title&lt;/strong&gt;, di mana anda boleh menamakan laporan anda sendiri sebelum dimuat turun. Sangat sesuai untuk kegunaan guru kelas dan urusetia organisasi.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #e5e7eb; background: #f9fafb; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #2d3436;&quot;&gt;👕 Rekomendasi: T-Shirt Microfiber Kualiti Tinggi (Sesuai Cetakan)&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #ee4d2d; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Cek Harga Borong di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin-bottom: 25px;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiczHnlqBtkrKGYLGt3SaDgX0oIVzGL-2VCpkHJyhsANhDztNe5QzYtpUIESbZnk7dbuG80LFoH7r5HycAQlAvThy79OJJEa0L617WYPEdslPEB_1GyBVFeZ2Yh8DzYCjCkSw4qctoac1VV_36mDmNbij50-Ws8I2amNoCttAixBWW1JAUh-XBNelsV3Fg/s1460/1000001698.jpg&quot;&gt;
        &lt;img alt=&quot;Kalkulator Tempahan Baju dengan fungsi export PDF dan custom tajuk laporan&quot; border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiczHnlqBtkrKGYLGt3SaDgX0oIVzGL-2VCpkHJyhsANhDztNe5QzYtpUIESbZnk7dbuG80LFoH7r5HycAQlAvThy79OJJEa0L617WYPEdslPEB_1GyBVFeZ2Yh8DzYCjCkSw4qctoac1VV_36mDmNbij50-Ws8I2amNoCttAixBWW1JAUh-XBNelsV3Fg/s320/1000001698.jpg&quot; title=&quot;Kalkulator Tempahan Baju Pro Layanlah&quot; width=&quot;350&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;order-app-pro&quot; style=&quot;max-width: 550px; margin: 20px auto; padding: 0; border-radius: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; background: #ffffff; box-shadow: 0 15px 35px rgba(0,0,0,0.1); border: 2px solid #2ecc71; overflow: hidden;&quot;&gt;
    
    &lt;div style=&quot;background: #2ecc71; color: white; padding: 20px; text-align: center;&quot;&gt;
        &lt;h3 style=&quot;margin: 0; font-size: 20px;&quot;&gt;👕 Tempahan Baju Pro&lt;/h3&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; font-size: 12px; opacity: 0.9;&quot;&gt;Urus saiz &amp; jana PDF dengan tajuk sendiri&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;padding: 25px;&quot;&gt;
        &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
            &lt;label style=&quot;display: block; font-size: 12px; font-weight: bold; color: #27ae60; margin-bottom: 5px;&quot;&gt;TAJUK LAPORAN (UNTUK PDF):&lt;/label&gt;
            &lt;input type=&quot;text&quot; id=&quot;pdfTitle&quot; placeholder=&quot;Cth: Tempahan Baju Kelas 5A&quot; style=&quot;width: 100%; padding: 12px; border: 2px solid #ecf0f1; border-radius: 10px; box-sizing: border-box; font-weight: bold; color: #2c3e50;&quot;&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: flex; gap: 8px; margin-bottom: 10px;&quot;&gt;
            &lt;input type=&quot;text&quot; id=&quot;custName&quot; placeholder=&quot;Nama Pemesan&quot; style=&quot;flex: 2; padding: 12px; border: 2px solid #ecf0f1; border-radius: 10px;&quot;&gt;
            &lt;select id=&quot;custSize&quot; style=&quot;flex: 1; padding: 12px; border: 2px solid #ecf0f1; border-radius: 10px; background: white;&quot;&gt;
                &lt;option value=&quot;XS&quot;&gt;XS&lt;/option&gt;&lt;option value=&quot;S&quot;&gt;S&lt;/option&gt;&lt;option value=&quot;M&quot;&gt;M&lt;/option&gt;
                &lt;option value=&quot;L&quot;&gt;L&lt;/option&gt;&lt;option value=&quot;XL&quot;&gt;XL&lt;/option&gt;&lt;option value=&quot;2XL&quot;&gt;2XL&lt;/option&gt;
                &lt;option value=&quot;3XL&quot;&gt;3XL&lt;/option&gt;&lt;option value=&quot;Lain-lain&quot;&gt;Lain-lain&lt;/option&gt;
            &lt;/select&gt;
        &lt;/div&gt;
        &lt;input type=&quot;text&quot; id=&quot;customSizeInput&quot; placeholder=&quot;Taip saiz...&quot; style=&quot;width: 100%; padding: 12px; border: 2px solid #ecf0f1; border-radius: 10px; margin-bottom: 10px; display: none;&quot;&gt;
        
        &lt;div style=&quot;display: flex; gap: 8px; margin-bottom: 25px;&quot;&gt;
            &lt;button onclick=&quot;addOrder()&quot; style=&quot;flex: 3; background: #2ecc71; color: white; border: none; padding: 15px; border-radius: 12px; font-weight: bold; cursor: pointer; box-shadow: 0 4px 0 #27ae60;&quot;&gt;TAMBAH NAMA&lt;/button&gt;
            &lt;button onclick=&quot;resetApp()&quot; style=&quot;flex: 1; background: #95a5a6; color: white; border: none; padding: 15px; border-radius: 12px; font-weight: bold; cursor: pointer;&quot;&gt;RESET&lt;/button&gt;
        &lt;/div&gt;

        &lt;div style=&quot;max-height: 200px; overflow-y: auto; border: 1px solid #f1f1f1; border-radius: 10px; margin-bottom: 20px;&quot;&gt;
            &lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 13px;&quot;&gt;
                &lt;thead style=&quot;background: #f8f9fa; position: sticky; top: 0;&quot;&gt;
                    &lt;tr&gt;&lt;th style=&quot;padding: 10px; border-bottom: 1px solid #ddd; text-align: left;&quot;&gt;Nama&lt;/th&gt;&lt;th style=&quot;padding: 10px; border-bottom: 1px solid #ddd;&quot;&gt;Saiz&lt;/th&gt;&lt;th style=&quot;padding: 10px; border-bottom: 1px solid #ddd;&quot;&gt;Hapus&lt;/th&gt;&lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody id=&quot;orderBody&quot;&gt;&lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/div&gt;

        &lt;div style=&quot;background: #f1f9f4; padding: 15px; border-radius: 12px; border: 1px solid #d4edda;&quot;&gt;
            &lt;div id=&quot;summaryDisplay&quot; style=&quot;font-size: 13px; display: grid; grid-template-columns: 1fr 1fr; gap: 5px; color: #155724;&quot;&gt;&lt;/div&gt;
            &lt;div style=&quot;margin-top: 10px; font-weight: bold; border-top: 1px solid #c3e6cb; padding-top: 10px; text-align: right; color: #155724;&quot;&gt;Total: &lt;span id=&quot;grandTotal&quot; style=&quot;font-size: 18px;&quot;&gt;0&lt;/span&gt; helai&lt;/div&gt;
        &lt;/div&gt;

        &lt;button onclick=&quot;downloadPDF()&quot; style=&quot;width: 100%; background: #e74c3c; color: white; border: none; padding: 18px; border-radius: 12px; font-weight: bold; cursor: pointer; margin-top: 20px; box-shadow: 0 4px 0 #c0392b;&quot;&gt;📥 MUAT TURUN PDF&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 25px 0; padding: 15px; border: 1px solid #d1d8e0; background: #ffffff; border-radius: 12px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #2d3436;&quot;&gt;🖊️ Alat Tulis Murah untuk Urusetia&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color: #3498db; text-decoration: none; font-size: 14px; font-weight: bold;&quot;&gt;Cek Clipboard &amp; Pen di Shopee &amp;raquo;&lt;/a&gt;
&lt;/div&gt;

&lt;div style=&quot;padding: 20px; border: 2px dashed #2ecc71; border-radius: 10px; text-align: center; font-family: sans-serif; background: #fff; margin-bottom: 20px;&quot;&gt;
    &lt;p style=&quot;font-weight: bold; color: #27ae60;&quot;&gt;Tool ini membantu anda?&lt;/p&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;Jika anda suka tool ini, sila tinggalkan komen di bawah. Maklum balas anda membantu saya membina lebih banyak tools percuma!&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin-top: 20px; font-size: 11px; color: #999; text-align: center; font-family: sans-serif;&quot;&gt;
    Disclaimer: Kami adalah rakan affiliate Shopee dan mungkin mendapat komisen kecil dari klik anda. Fail PDF diproses secara lokal dan privasi anda terjaga.
&lt;/div&gt;

&lt;script&gt;
//&lt;![CDATA[
    let orders = [];
    document.getElementById(&#39;custSize&#39;).addEventListener(&#39;change&#39;, function() {
        document.getElementById(&#39;customSizeInput&#39;).style.display = (this.value === &#39;Lain-lain&#39;) ? &#39;block&#39; : &#39;none&#39;;
    });

    function addOrder() {
        const nameInput = document.getElementById(&#39;custName&#39;);
        const name = nameInput.value.trim();
        let size = document.getElementById(&#39;custSize&#39;).value;
        if (size === &#39;Lain-lain&#39;) size = document.getElementById(&#39;customSizeInput&#39;).value.trim();
        
        if (!name || !size) { alert(&quot;Sila masukkan nama dan saiz!&quot;); return; }
        
        orders.push({ name, size });
        nameInput.value = &quot;&quot;;
        updateDisplay();
    }

    function resetApp() {
        if(confirm(&quot;Padam semua data dalam senarai?&quot;)) {
            orders = [];
            updateDisplay();
        }
    }

    function removeOrder(index) { orders.splice(index, 1); updateDisplay(); }

    function updateDisplay() {
        const body = document.getElementById(&#39;orderBody&#39;);
        const summary = document.getElementById(&#39;summaryDisplay&#39;);
        body.innerHTML = &quot;&quot;; summary.innerHTML = &quot;&quot;;
        let counts = {};
        orders.forEach((o, i) =&gt; {
            body.innerHTML += `&lt;tr&gt;&lt;td style=&quot;padding:10px; border-bottom:1px solid #eee;&quot;&gt;${o.name}&lt;/td&gt;&lt;td style=&quot;padding:10px; border-bottom:1px solid #eee; text-align:center;&quot;&gt;${o.size}&lt;/td&gt;&lt;td style=&quot;padding:10px; border-bottom:1px solid #eee; text-align:center;&quot;&gt;&lt;button onclick=&quot;removeOrder(${i})&quot; style=&quot;border:none; background:none; cursor:pointer;&quot;&gt;❌&lt;/button&gt;&lt;/td&gt;&lt;/tr&gt;`;
            counts[o.size] = (counts[o.size] || 0) + 1;
        });
        for (let s in counts) summary.innerHTML += `&lt;div&gt;&lt;strong&gt;${s}:&lt;/strong&gt; ${counts[s]} helai&lt;/div&gt;`;
        document.getElementById(&#39;grandTotal&#39;).innerText = orders.length;
    }

    async function downloadPDF() {
        if (orders.length === 0) { alert(&quot;Senarai masih kosong!&quot;); return; }
        const customTitle = document.getElementById(&#39;pdfTitle&#39;).value.trim() || &quot;Senarai Tempahan Baju&quot;;
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();
        
        doc.setFontSize(18);
        doc.text(customTitle, 14, 20);
        doc.setFontSize(10);
        doc.text(`Dijana melalui Layanlah pada: ${new Date().toLocaleDateString()}`, 14, 28);
        
        let summaryData = [];
        let counts = {};
        orders.forEach(o =&gt; counts[o.size] = (counts[o.size] || 0) + 1);
        for (let s in counts) summaryData.push([s, counts[s]]);
        
        doc.autoTable({ startY: 35, head: [[&#39;Saiz&#39;, &#39;Jumlah&#39;]], body: summaryData, headStyles: {fillColor: [46, 204, 113]} });
        doc.autoTable({ startY: doc.lastAutoTable.finalY + 10, head: [[&#39;Nama Pemesan&#39;, &#39;Saiz&#39;]], body: orders.map(o =&gt; [o.name, o.size]), headStyles: {fillColor: [52, 152, 219]} });
        
        doc.save(`${customTitle.replace(/\s+/g, &#39;_&#39;)}.pdf`);
    }
//]]&gt;
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/2268103325711059860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-tempahan-baju-saiz-pdf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2268103325711059860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2268103325711059860'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-tempahan-baju-saiz-pdf.html' title='Kalkulator Tempahan Baju: Kira Saiz Auto &amp; Export PDF (Percuma)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiczHnlqBtkrKGYLGt3SaDgX0oIVzGL-2VCpkHJyhsANhDztNe5QzYtpUIESbZnk7dbuG80LFoH7r5HycAQlAvThy79OJJEa0L617WYPEdslPEB_1GyBVFeZ2Yh8DzYCjCkSw4qctoac1VV_36mDmNbij50-Ws8I2amNoCttAixBWW1JAUh-XBNelsV3Fg/s72-c/1000001698.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-2169084915427403891</id><published>2026-01-16T22:05:00.000+08:00</published><updated>2026-01-16T22:05:04.880+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Pendidikan"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Utiliti"/><title type='text'>Random Name Picker Malaysia: Pilih Nama &amp; Buang (Elimination Mode)</title><content type='html'>&lt;div style=&quot;font-family: sans-serif; line-height: 1.6; color: #333; margin-bottom: 25px;&quot;&gt;
    &lt;p&gt;Adakah anda mencari cara adil untuk membuat cabutan bertuah atau memanggil nama pelajar? &lt;strong&gt;Random Name Picker Malaysia&lt;/strong&gt; ini direka dengan fungsi &lt;em&gt;Elimination Mode&lt;/em&gt; yang unik.&lt;/p&gt;
    &lt;p&gt;Berbeza dengan pemilih rawak biasa, tool ini akan &lt;strong&gt;membuang nama yang terpilih&lt;/strong&gt; secara automatik dari senarai. Ini memastikan setiap orang hanya mempunyai satu peluang untuk menang. Sangat sesuai untuk kegunaan guru, penganjur majlis, dan aktiviti kelas.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;margin: 20px 0; padding: 15px; border: 1px solid #ffdbd3; background: #fffcfb; border-radius: 10px; text-align: center; font-family: sans-serif;&quot;&gt;
    &lt;p style=&quot;margin: 0 0 10px 0; font-size: 13px; font-weight: bold; color: #ee4d2d;&quot;&gt;🔥 Baucar Shopee Eksklusif Hari Ini!&lt;/p&gt;
    &lt;p style=&quot;font-size: 12px; margin-bottom: 12px;&quot;&gt;Sebelum mulakan cabutan, pastikan anda tuntut baucar penghantaran percuma di sini:&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;background: #ee4d2d; color: #fff !important; padding: 10px 20px; border-radius: 5px; text-decoration: none; font-weight: bold; font-size: 14px; display: inline-block;&quot;&gt;AMBIL BAUCAR SHOPEE&lt;/a&gt;
&lt;/div&gt;

&lt;script src=&quot;https://cdn.jsdelivr.net/npm/canvas-confetti@1.6.0/dist/confetti.browser.min.js&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;elimination-app&quot; style=&quot;max-width: 500px; margin: 30px auto; padding: 0; border: 2px solid #3498db; border-radius: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; background: #ffffff; box-shadow: 0 15px 35px rgba(0,0,0,0.1); overflow: hidden;&quot;&gt;
    
    &lt;div style=&quot;width: 100%; text-align: center; background: #f8f9fa;&quot;&gt;
        &lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTTNYoCMOC-CPBYOz5dLH8BCJXn-x2QMOIhHIGkJpVokokLkHGyT8fSWP8_y3zOPq9_fgU9AI4T68K1SvVqIYeu-Y3Ld63ZwXpOhHcXEBJkPZr2DnTlPy7S_UjIaEAQ2GKUSeVTK-olBnncptT8I1D5bXxAYpFRUQ5WN8s3foMs6lA2ro_Sb9ytAu8elY/s1100/1000001695.jpg&quot; style=&quot;width: 100%; height: auto; display: block;&quot; alt=&quot;Banner Layanlah&quot; /&gt;
    &lt;/div&gt;

    &lt;div style=&quot;padding: 25px;&quot;&gt;
        &lt;h2 style=&quot;text-align: center; color: #2c3e50; margin: 0 0 5px 0; font-size: 22px;&quot;&gt;🎲 Elimination Picker&lt;/h2&gt;
        &lt;p style=&quot;text-align: center; font-size: 12px; color: #95a5a6; margin-bottom: 25px;&quot;&gt;Nama terpilih akan dibuang secara automatik&lt;/p&gt;

        &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
            &lt;label style=&quot;display: block; font-weight: bold; margin-bottom: 8px; color: #34495e;&quot;&gt;Senarai Nama:&lt;/label&gt;
            &lt;textarea id=&quot;namesInput&quot; rows=&quot;6&quot; style=&quot;width: 100%; padding: 12px; border-radius: 10px; border: 2px solid #ecf0f1; box-sizing: border-box; font-size: 14px; outline: none; transition: 0.3s;&quot; placeholder=&quot;Masukkan nama, satu nama setiap baris...&quot;&gt;&lt;/textarea&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: flex; gap: 12px; margin-bottom: 25px;&quot;&gt;
            &lt;button onclick=&quot;pickWinner()&quot; id=&quot;btnPick&quot; style=&quot;flex: 2; background: #3498db; color: white; border: none; padding: 15px; border-radius: 12px; font-weight: bold; cursor: pointer; font-size: 16px; box-shadow: 0 4px 0 #2980b9;&quot;&gt;PILIH NAMA&lt;/button&gt;
            &lt;button onclick=&quot;resetApp()&quot; style=&quot;flex: 1; background: #95a5a6; color: white; border: none; padding: 15px; border-radius: 12px; font-weight: bold; cursor: pointer;&quot;&gt;RESET&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;resultBox&quot; style=&quot;display: none; text-align: center; padding: 25px; background: #f1f9ff; border: 3px dashed #3498db; border-radius: 15px; margin-bottom: 20px; animation: bounceIn 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55);&quot;&gt;
            &lt;div style=&quot;font-size: 14px; color: #3498db; font-weight: bold; text-transform: uppercase;&quot;&gt;Terpilih:&lt;/div&gt;
            &lt;div id=&quot;winnerName&quot; style=&quot;font-size: 32px; font-weight: 900; color: #2c3e50; margin: 15px 0;&quot;&gt;-&lt;/div&gt;
            &lt;div style=&quot;font-size: 11px; color: #e74c3c; font-weight: bold;&quot;&gt;(Dibuang dari senarai)&lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;display: flex; justify-content: space-around; background: #f8f9fa; padding: 12px; border-radius: 12px; border: 1px solid #eee;&quot;&gt;
            &lt;div style=&quot;text-align: center;&quot;&gt;&lt;div style=&quot;font-size: 10px; color: #7f8c8d;&quot;&gt;BAKI&lt;/div&gt;&lt;div id=&quot;countRemaining&quot; style=&quot;font-weight: bold; color: #2c3e50;&quot;&gt;0&lt;/div&gt;&lt;/div&gt;
            &lt;div style=&quot;border-left: 1px solid #ddd;&quot;&gt;&lt;/div&gt;
            &lt;div style=&quot;text-align: center;&quot;&gt;&lt;div style=&quot;font-size: 10px; color: #7f8c8d;&quot;&gt;KELUAR&lt;/div&gt;&lt;div id=&quot;countPicked&quot; style=&quot;font-weight: bold; color: #2c3e50;&quot;&gt;0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;hr style=&quot;border: 0; border-top: 1px dashed #ccc; margin: 40px 0;&quot; /&gt;

&lt;div style=&quot;background: #f9f9f9; padding: 20px; border-radius: 10px; font-family: sans-serif; margin-bottom: 30px;&quot;&gt;
    &lt;h3 style=&quot;color: #2c3e50; margin-top: 0;&quot;&gt;FAQ &amp; Panduan&lt;/h3&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;&lt;strong&gt;Bagaimana cara menggunakan tool ini?&lt;/strong&gt;&lt;br/&gt;Masukkan senarai nama dalam kotak yang disediakan (satu nama satu baris). Klik butang &#39;PILIH NAMA&#39;. Sistem akan memilih seorang pemenang dan membuang nama tersebut agar tidak terpilih lagi.&lt;/p&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;&lt;strong&gt;Adakah data saya disimpan?&lt;/strong&gt;&lt;br/&gt;Tidak. Tool ini berjalan sepenuhnya dalam pelayar anda. Tiada data nama yang dihantar ke pelayan kami.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;padding: 25px; border: 2px solid #ee4d2d; border-radius: 15px; text-align: center; background: #fff5f2; font-family: sans-serif; margin-bottom: 20px;&quot;&gt;
    &lt;h4 style=&quot;color: #ee4d2d; margin-top: 0;&quot;&gt;☕ Sokong Blog Layanlah!&lt;/h4&gt;
    &lt;p style=&quot;font-size: 14px; line-height: 1.5;&quot;&gt;Jika tool ini membantu urusan anda, sudi kiranya anda menyokong kami dengan klik butang di bawah sebelum membeli-belah di Shopee. Setiap klik anda sangat bermakna bagi kami!&lt;/p&gt;
    &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;background: #ee4d2d; color: white !important; padding: 12px 25px; border-radius: 50px; text-decoration: none; font-weight: bold; display: inline-block; margin: 10px 0; box-shadow: 0 4px 10px rgba(238,77,45,0.3);&quot;&gt;BELANJA KOPI VIA SHOPEE&lt;/a&gt;
    &lt;p style=&quot;font-size: 11px; color: #777; margin-top: 10px;&quot;&gt;(Pautan Affiliate Shopee Malaysia)&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;font-size: 11px; color: #aaa; text-align: center; font-style: italic; font-family: sans-serif;&quot;&gt;
    Disclaimer: Tool ini disediakan untuk tujuan hiburan dan pendidikan sahaja. Layanlah tidak bertanggungjawab atas sebarang keputusan rasmi yang dibuat menggunakan sistem ini.
&lt;/div&gt;

&lt;style&gt;
    @keyframes bounceIn { 0% { transform: scale(0); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }
    #btnPick:active { transform: translateY(3px); box-shadow: none; }
&lt;/style&gt;

&lt;script&gt;
    let remainingNames = [];
    let pickedCount = 0;

    function pickWinner() {
        const input = document.getElementById(&#39;namesInput&#39;);
        const winnerDisplay = document.getElementById(&#39;winnerName&#39;);
        const resultBox = document.getElementById(&#39;resultBox&#39;);
        const btnPick = document.getElementById(&#39;btnPick&#39;);

        if (remainingNames.length === 0 &amp;&amp; pickedCount === 0) {
            remainingNames = input.value.split(&#39;\n&#39;).map(name =&gt; name.trim()).filter(name =&gt; name !== &quot;&quot;);
        }

        if (remainingNames.length === 0) {
            alert(&quot;Sila masukkan senarai nama!&quot;);
            return;
        }

        btnPick.disabled = true;
        winnerDisplay.innerText = &quot;Berpusing...&quot;;
        resultBox.style.display = &quot;block&quot;;

        setTimeout(() =&gt; {
            const randomIndex = Math.floor(Math.random() * remainingNames.length);
            const winner = remainingNames[randomIndex];
            remainingNames.splice(randomIndex, 1);
            pickedCount++;

            winnerDisplay.innerText = winner;
            document.getElementById(&#39;countRemaining&#39;).innerText = remainingNames.length;
            document.getElementById(&#39;countPicked&#39;).innerText = pickedCount;
            input.value = remainingNames.join(&#39;\n&#39;);
            
            confetti({ particleCount: 150, spread: 70, origin: { y: 0.6 } });

            btnPick.disabled = false;
            if(remainingNames.length === 0) btnPick.innerText = &quot;SENARAI TAMAT&quot;;
        }, 700);
    }

    function resetApp() {
        if(confirm(&quot;Reset semua?&quot;)) {
            remainingNames = [];
            pickedCount = 0;
            document.getElementById(&#39;namesInput&#39;).value = &quot;&quot;;
            document.getElementById(&#39;resultBox&#39;).style.display = &quot;none&quot;;
            document.getElementById(&#39;countRemaining&#39;).innerText = &quot;0&quot;;
            document.getElementById(&#39;countPicked&#39;).innerText = &quot;0&quot;;
            document.getElementById(&#39;btnPick&#39;).disabled = false;
            document.getElementById(&#39;btnPick&#39;).innerText = &quot;PILIH NAMA&quot;;
        }
    }
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/2169084915427403891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/random-name-picker-elimination-malaysia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2169084915427403891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2169084915427403891'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/random-name-picker-elimination-malaysia.html' title='Random Name Picker Malaysia: Pilih Nama &amp; Buang (Elimination Mode)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTTNYoCMOC-CPBYOz5dLH8BCJXn-x2QMOIhHIGkJpVokokLkHGyT8fSWP8_y3zOPq9_fgU9AI4T68K1SvVqIYeu-Y3Ld63ZwXpOhHcXEBJkPZr2DnTlPy7S_UjIaEAQ2GKUSeVTK-olBnncptT8I1D5bXxAYpFRUQ5WN8s3foMs6lA2ro_Sb9ytAu8elY/s72-c/1000001695.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-1204233805431886906</id><published>2026-01-16T00:16:00.018+08:00</published><updated>2026-01-16T20:09:19.390+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Bahan Guru"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="PAK-21"/><category scheme="http://www.blogger.com/atom/ns#" term="PdPc"/><category scheme="http://www.blogger.com/atom/ns#" term="Sekolah"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><title type='text'>Generator Agihan Kumpulan Murid Automatik (PAK-21) &amp; Adil</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4WOwEzcHd9VdHc3oumpoB4S4Ol5yt1ms1UAZaN39p9cWskjCdr5vQGBijrdlvervWVA4d4s7a3CpCisScjDfekkWo3g3_pJbFqdxww9SdT2FkEhc9WT1Cc0o350LVpciGNuiY4x0UDWllpvWr074Yg0imow7GVk8K32ggHlWN6wZe8cBxMQ-PD78LMnE/s1100/1000001680.jpg&quot;&gt;
        &lt;img alt=&quot;Generator Agihan Kumpulan Murid Hybrid&quot; border=&quot;0&quot; data-original-height=&quot;614&quot; data-original-width=&quot;1100&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4WOwEzcHd9VdHc3oumpoB4S4Ol5yt1ms1UAZaN39p9cWskjCdr5vQGBijrdlvervWVA4d4s7a3CpCisScjDfekkWo3g3_pJbFqdxww9SdT2FkEhc9WT1Cc0o350LVpciGNuiY4x0UDWllpvWr074Yg0imow7GVk8K32ggHlWN6wZe8cBxMQ-PD78LMnE/s640/1000001680.jpg&quot; width=&quot;640&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;h2&gt;Edisi Pantas: Generator Kumpulan Murid Hybrid&lt;/h2&gt;

&lt;p&gt;Kini lebih fleksibel! Anda boleh memilih untuk mengagihkan murid secara rawak sepenuhnya, atau mengasingkan jantina dengan &lt;b&gt;satu klik sahaja&lt;/b&gt;. Tiada lagi leceh taip L/P atau tarik satu-persatu. Pilih cara yang paling pantas untuk anda.&lt;/p&gt;

&lt;hr /&gt;

&lt;style&gt;
    .drag-container { display: flex; gap: 15px; flex-wrap: wrap; margin-top: 15px; }
    .drop-zone { flex: 1; min-width: 200px; min-height: 120px; background: #fdfdfd; border: 2px dashed #bbb; border-radius: 12px; padding: 10px; }
    .drop-zone h4 { text-align: center; margin: 0 0 10px 0; font-size: 13px; color: #555; }
    .name-tag { background: #fff; color: #333; padding: 5px 10px; margin: 4px; border-radius: 6px; display: inline-flex; align-items: center; gap: 5px; cursor: move; font-size: 12px; border: 1px solid #ddd; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
    .btn-l { background: #2196f3; color: white; border: none; border-radius: 3px; cursor: pointer; padding: 2px 6px; font-size: 10px; }
    .btn-p { background: #f06292; color: white; border: none; border-radius: 3px; cursor: pointer; padding: 2px 6px; font-size: 10px; }
    .zone-males { border-color: #2196f3; background: #e3f2fd; }
    .zone-females { border-color: #f06292; background: #fce4ec; }
    .zone-pool { border-color: #757575; background: #ffffff; width: 100%; min-height: 80px; }
    #displayNama { background: #fff; border: 2px solid #ff4757; height: 60px; display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: bold; border-radius: 8px; margin-bottom: 10px; }
&lt;/style&gt;

&lt;div style=&quot;background: #ffffff; padding: 20px; border-radius: 15px; border: 2px solid #1a73e8; font-family: sans-serif; max-width: 750px; margin: 10px auto; box-shadow: 0 5px 15px rgba(0,0,0,0.05);&quot;&gt;
    &lt;textarea id=&quot;rawNames&quot; rows=&quot;4&quot; style=&quot;width: 100%; border-radius: 8px; border: 1px solid #ccc; padding: 10px; box-sizing: border-box;&quot; placeholder=&quot;1. Tampal senarai nama murid di sini...&quot;&gt;&lt;/textarea&gt;
    &lt;button onclick=&quot;generateHybridTags()&quot; style=&quot;width: 100%; background: #34a853; color: white; padding: 12px; border: none; border-radius: 8px; margin-top: 10px; cursor: pointer; font-weight: bold;&quot;&gt;TUKAR JADI KAD NAMA&lt;/button&gt;

    &lt;div class=&quot;drag-container&quot;&gt;
        &lt;div class=&quot;drop-zone zone-pool&quot; id=&quot;pool&quot; ondrop=&quot;drop(event)&quot; ondragover=&quot;allowDrop(event)&quot;&gt;
            &lt;h4&gt;Senarai Nama (Klik L/P atau Drag)&lt;/h4&gt;
            &lt;div id=&quot;namePool&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;drop-zone zone-males&quot; id=&quot;maleZone&quot; ondrop=&quot;drop(event)&quot; ondragover=&quot;allowDrop(event)&quot;&gt;
            &lt;h4&gt;👦 Kotak Lelaki&lt;/h4&gt;
        &lt;/div&gt;
        &lt;div class=&quot;drop-zone zone-females&quot; id=&quot;femaleZone&quot; ondrop=&quot;drop(event)&quot; ondragover=&quot;allowDrop(event)&quot;&gt;
            &lt;h4&gt;👧 Kotak Perempuan&lt;/h4&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-top: 20px; text-align: center; border-top: 1px solid #eee; padding-top: 15px;&quot;&gt;
        &lt;b&gt;Bil. Kumpulan:&lt;/b&gt; 
        &lt;input type=&quot;number&quot; id=&quot;numGroups&quot; value=&quot;4&quot; min=&quot;1&quot; style=&quot;width: 45px; padding: 5px; margin: 0 10px;&quot;&gt;
        &lt;button onclick=&quot;agihHybrid()&quot; style=&quot;background: #1a73e8; color: white; padding: 10px 20px; border: none; border-radius: 8px; cursor: pointer; font-weight: bold;&quot;&gt;JANA KUMPULAN&lt;/button&gt;
    &lt;/div&gt;

    &lt;div id=&quot;resultOutput&quot; style=&quot;margin-top: 20px;&quot;&gt;&lt;/div&gt;

    &lt;hr style=&quot;margin: 20px 0;&quot; /&gt;

    &lt;div style=&quot;background: #fff5f5; padding: 15px; border-radius: 10px; border: 1px dashed #ff4757; text-align: center;&quot;&gt;
        &lt;div id=&quot;displayNama&quot;&gt;Sedia?&lt;/div&gt;
        &lt;button onclick=&quot;pickRandom()&quot; style=&quot;background: #ff4757; color: white; padding: 10px 20px; border: none; border-radius: 30px; cursor: pointer; font-weight: bold;&quot;&gt;🎲 CABUT NAMA&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    function allowDrop(ev) { ev.preventDefault(); }
    function drag(ev) { ev.dataTransfer.setData(&quot;text&quot;, ev.target.id); }
    function drop(ev) {
        ev.preventDefault();
        var data = ev.dataTransfer.getData(&quot;text&quot;);
        var target = ev.target;
        while (target &amp;&amp; !target.classList.contains(&#39;drop-zone&#39;)) { target = target.parentElement; }
        if (target) target.appendChild(document.getElementById(data));
    }

    function generateHybridTags() {
        let input = document.getElementById(&#39;rawNames&#39;).value.trim();
        if (!input) return;
        let names = input.split(&#39;\n&#39;).filter(n =&gt; n.trim() !== &quot;&quot;);
        let pool = document.getElementById(&#39;namePool&#39;);
        pool.innerHTML = &quot;&quot;;
        names.forEach((name, i) =&gt; {
            let id = &#39;tag-&#39; + i;
            let tag = document.createElement(&#39;div&#39;);
            tag.className = &#39;name-tag&#39;;
            tag.id = id;
            tag.draggable = true;
            tag.ondragstart = drag;
            tag.innerHTML = `&lt;span&gt;${name.trim()}&lt;/span&gt; 
                             &lt;button class=&quot;btn-l&quot; onclick=&quot;moveTo(&#39;maleZone&#39;, &#39;${id}&#39;)&quot;&gt;L&lt;/button&gt;
                             &lt;button class=&quot;btn-p&quot; onclick=&quot;moveTo(&#39;femaleZone&#39;, &#39;${id}&#39;)&quot;&gt;P&lt;/button&gt;`;
            pool.appendChild(tag);
        });
    }

    function moveTo(zoneId, tagId) {
        document.getElementById(zoneId).appendChild(document.getElementById(tagId));
    }

    function agihHybrid() {
        let nGroups = parseInt(document.getElementById(&#39;numGroups&#39;).value);
        let m = Array.from(document.getElementById(&#39;maleZone&#39;).getElementsByClassName(&#39;name-tag&#39;)).map(t =&gt; t.querySelector(&#39;span&#39;).innerText);
        let f = Array.from(document.getElementById(&#39;femaleZone&#39;).getElementsByClassName(&#39;name-tag&#39;)).map(t =&gt; t.querySelector(&#39;span&#39;).innerText);
        let p = Array.from(document.getElementById(&#39;pool&#39;).getElementsByClassName(&#39;name-tag&#39;)).map(t =&gt; t.querySelector(&#39;span&#39;).innerText);
        
        let all = [...m.map(n=&gt;n+&quot; [L]&quot;), ...f.map(n=&gt;n+&quot; [P]&quot;), ...p];
        if (all.length === 0) { alert(&quot;Sila masukkan nama!&quot;); return; }

        let grps = Array.from({ length: nGroups }, () =&gt; []);
        let shuff = (a) =&gt; a.sort(() =&gt; Math.random() - 0.5);
        
        // Agih m &amp; f dulu untuk balance, kemudian p (neutral)
        m = shuff(m); f = shuff(f); p = shuff(p);
        let balanced = [];
        let max = Math.max(m.length, f.length);
        for(let i=0; i&lt;max; i++){
            if(m[i]) balanced.push(m[i]+&quot; [L]&quot;);
            if(f[i]) balanced.push(f[i]+&quot; [P]&quot;);
        }
        let finalPool = [...balanced, ...p];

        finalPool.forEach((n, i) =&gt; grps[i % nGroups].push(n));

        let res = &quot;&lt;h4&gt;Hasil Agihan:&lt;/h4&gt;&quot;;
        grps.forEach((g, i) =&gt; {
            res += `&lt;div style=&quot;border-left:5px solid #1a73e8; background:#f4f4f4; padding:10px; margin-bottom:8px; border-radius:4px;&quot;&gt;
                &lt;strong&gt;KUMPULAN ${i+1}&lt;/strong&gt;&lt;ol style=&quot;margin:5px 0; padding-left:20px;&quot;&gt;${g.map(n =&gt; `&lt;li&gt;${n}&lt;/li&gt;`).join(&#39;&#39;)}&lt;/ol&gt;&lt;/div&gt;`;
        });
        document.getElementById(&#39;resultOutput&#39;).innerHTML = res;
    }

    function pickRandom() {
        let input = document.getElementById(&#39;rawNames&#39;).value.trim();
        if (!input) return;
        let names = input.split(&#39;\n&#39;).filter(n =&gt; n.trim() !== &quot;&quot;);
        let display = document.getElementById(&#39;displayNama&#39;);
        let star = &quot;\u2B50&quot;;
        let count = 0;
        let shuffle = setInterval(() =&gt; {
            display.innerText = names[Math.floor(Math.random() * names.length)];
            count++;
            if (count &gt; 15) {
                clearInterval(shuffle);
                display.innerText = star + &quot; &quot; + names[Math.floor(Math.random() * names.length)] + &quot; &quot; + star;
            }
        }, 80);
    }
&lt;/script&gt;

&lt;hr /&gt;

&lt;div style=&quot;background: #f9f9f9; padding: 15px; border-radius: 10px; margin: 20px 0; font-size: 13px;&quot;&gt;
    &lt;h3&gt;FAQ &amp; Cara Guna&lt;/h3&gt;
    &lt;p&gt;1. &lt;b&gt;Klik L/P:&lt;/b&gt; Tekan butang biru (L) atau pink (P) di sebelah nama untuk pengasingan pantas.&lt;/p&gt;
    &lt;p&gt;2. &lt;b&gt;Abaikan Jantina:&lt;/b&gt; Jika tidak mahu mengikut jantina, biarkan nama di kotak pertama dan terus tekan butang Jana.&lt;/p&gt;
&lt;/div&gt;

&lt;div style=&quot;border: 1px solid #ddd; padding: 15px; border-radius: 10px; display: flex; align-items: center; gap: 15px;&quot;&gt;
    &lt;div style=&quot;font-size: 24px;&quot;&gt;🏷️&lt;/div&gt;
    &lt;div style=&quot;flex: 1;&quot;&gt;
        &lt;b&gt;Stiker Nama Murid (Waterproof &amp; Custom)&lt;/b&gt;&lt;br/&gt;
        &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; style=&quot;color:#1a73e8; font-weight:bold; font-size:12px;&quot;&gt;TEBUS BAUCAR &amp; CARI DI SHOPEE&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p style=&quot;font-size: 11px; color: #999; margin-top: 15px;&quot;&gt;&lt;b&gt;Disclaimer:&lt;/b&gt; Tool percuma disediakan oleh Layanlah untuk memudahkan urusan guru 2026. \u2B50&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/1204233805431886906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-agihan-kumpulan-murid-automatik.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/1204233805431886906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/1204233805431886906'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-agihan-kumpulan-murid-automatik.html' title='Generator Agihan Kumpulan Murid Automatik (PAK-21) &amp; Adil'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4WOwEzcHd9VdHc3oumpoB4S4Ol5yt1ms1UAZaN39p9cWskjCdr5vQGBijrdlvervWVA4d4s7a3CpCisScjDfekkWo3g3_pJbFqdxww9SdT2FkEhc9WT1Cc0o350LVpciGNuiY4x0UDWllpvWr074Yg0imow7GVk8K32ggHlWN6wZe8cBxMQ-PD78LMnE/s72-c/1000001680.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-2182285286085876255</id><published>2026-01-14T13:49:00.019+08:00</published><updated>2026-01-15T23:07:22.335+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Apps Cikgu Digital"/><category scheme="http://www.blogger.com/atom/ns#" term="Gred DG12"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Kenaikan Pangkat"/><category scheme="http://www.blogger.com/atom/ns#" term="Penjawat Awam"/><category scheme="http://www.blogger.com/atom/ns#" term="SSPA"/><category scheme="http://www.blogger.com/atom/ns#" term="Time-Based"/><title type='text'>Kalkulator Kenaikan Pangkat SSPA (Time-Based) – Unjuran Gred &amp; Pencen Sahih</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-wBC1Vr_zsFvQnlRs1L7e7K0SDsu-HNOZX_FH1Cg-kimQGZBIkneMOcACb6UoIkCQa54Hne9ilBnboTibfZY6etcJ_GKHg8ZyJiKWbUDROSEoZjhD9uitkmKsN_h4zhqfF8I1y9FjneYxDS-7HZYjn1Hc9EdHRYrcptSAeCmubVK-bGSwotaYWZK8msM/s1100/1000001661.jpg&quot;&gt;
        &lt;img alt=&quot;Kalkulator SSPA JPA Sahih&quot; border=&quot;0&quot; width=&quot;100%&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-wBC1Vr_zsFvQnlRs1L7e7K0SDsu-HNOZX_FH1Cg-kimQGZBIkneMOcACb6UoIkCQa54Hne9ilBnboTibfZY6etcJ_GKHg8ZyJiKWbUDROSEoZjhD9uitkmKsN_h4zhqfF8I1y9FjneYxDS-7HZYjn1Hc9EdHRYrcptSAeCmubVK-bGSwotaYWZK8msM/s640/1000001661.jpg&quot;/&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;seo-intro&quot; style=&quot;margin-top: 25px; line-height: 1.8; color: #333; font-family: &#39;Segoe UI&#39;, sans-serif;&quot;&gt;
    &lt;h1 style=&quot;color: #1a73e8; font-size: 26px;&quot;&gt;Kalkulator Unjuran Kerjaya SSPA Berdasarkan Pekeliling JPA&lt;/h1&gt;
    &lt;p&gt;Aplikasi ini dibina berpandukan &lt;b&gt;Pekeliling Perkhidmatan Bilangan 1 Tahun 2024 (SSPA)&lt;/b&gt; bagi memberikan gambaran tepat mengenai kronologi kenaikan pangkat penjawat awam. Sistem ini membezakan formula &lt;i&gt;Time-Based&lt;/i&gt; mengikut skim perkhidmatan untuk memastikan hasil simulasi adalah sahih.&lt;/p&gt;
    &lt;p&gt;Sama ada anda dalam skim Pendidikan dengan formula &lt;b&gt;8-8-6-3&lt;/b&gt; atau skim P&amp;P/PTD dengan formula &lt;b&gt;10-8-6-3&lt;/b&gt;, kalkulator ini akan menjana unjuran gred anda sehingga umur persaraan wajib 60 tahun.&lt;/p&gt;
&lt;/div&gt;

&lt;style&gt;
    :root { --p: #1a73e8; --s: #5f6368; --bg: #f8f9fa; --white: #ffffff; --red: #d93025; --green: #1e8e3e; --shopee: #ee4d2d; }
    .app-box { max-width: 850px; margin: 20px auto; background: var(--white); border-radius: 12px; box-shadow: 0 4px 30px rgba(0,0,0,0.1); padding: 30px; border: 1px solid #ddd; font-family: &#39;Segoe UI&#39;, Arial, sans-serif; }
    .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px; }
    .form-grp { display: flex; flex-direction: column; }
    label { font-weight: bold; font-size: 13px; margin-bottom: 8px; color: var(--s); text-transform: uppercase; }
    input, select { padding: 12px; border: 2px solid #eee; border-radius: 8px; font-size: 15px; outline: none; transition: 0.3s; }
    input:focus, select:focus { border-color: var(--p); background: #fff; }
    .btn-container { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 25px; }
    .btn { padding: 16px; border: none; border-radius: 8px; font-weight: bold; cursor: pointer; font-size: 15px; transition: 0.3s; display: flex; align-items: center; justify-content: center; gap: 8px; }
    .btn-calc { background: var(--p); color: white; grid-column: span 2; box-shadow: 0 4px 0 #1557b0; }
    .btn-pdf { background: var(--green); color: white; }
    .btn-reset { background: #f1f3f4; color: var(--red); border: 1px solid #ddd; }
    .result-table { width: 100%; border-collapse: collapse; margin-top: 30px; display: none; }
    .result-table th { background: var(--p); color: white; padding: 15px; text-align: left; }
    .result-table td { padding: 15px; border-bottom: 1px solid #eee; font-size: 14px; }
    .highlight-pencen { background: #fff3cd; font-weight: bold; border-left: 5px solid #fbbc04; }
    
    /* Style Kotak Shopee */
    .aff-wrapper { max-width: 850px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 2px solid var(--shopee); padding: 20px; display: flex; align-items: center; gap: 20px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }
    .aff-img { width: 100px; height: 100px; background: #fff5f2; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 45px; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; margin-bottom: 5px; font-size: 17px; }
    .aff-desc { font-size: 13.5px; color: #666; margin-bottom: 12px; line-height: 1.5; }
    .btn-shopee { background: var(--shopee); color: white !important; text-decoration: none !important; padding: 10px 22px; border-radius: 6px; font-weight: bold; font-size: 14px; display: inline-block; transition: 0.3s; border-bottom: 3px solid rgba(0,0,0,0.1); }
    .btn-shopee:hover { transform: translateY(-2px); filter: brightness(1.1); }
    @media (max-width: 600px) { .form-grid, .btn-container { grid-template-columns: 1fr; } .btn-calc { grid-column: span 1; } .aff-box { flex-direction: column; text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;app-box&quot;&gt;
    &lt;div class=&quot;form-grid&quot;&gt;
        &lt;div class=&quot;form-grp&quot;&gt;
            &lt;label&gt;Tahun Mula Berkhidmat:&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;start_year&quot; placeholder=&quot;Cth: 2024&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;form-grp&quot;&gt;
            &lt;label&gt;Umur Mula Berkhidmat:&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;start_age&quot; placeholder=&quot;Cth: 24&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;form-grp&quot;&gt;
            &lt;label&gt;Umur Persaraan:&lt;/label&gt;
            &lt;select id=&quot;pencen_age&quot;&gt;
                &lt;option value=&quot;60&quot; selected&gt;60 Tahun&lt;/option&gt;
                &lt;option value=&quot;58&quot;&gt;58 Tahun&lt;/option&gt;
                &lt;option value=&quot;56&quot;&gt;56 Tahun&lt;/option&gt;
            &lt;/select&gt;
        &lt;/div&gt;
        &lt;div class=&quot;form-grp&quot;&gt;
            &lt;label&gt;Pilih Skim &amp; Gred SSPA:&lt;/label&gt;
            &lt;select id=&quot;start_gred&quot;&gt;
                &lt;optgroup label=&quot;SKIM PENDIDIKAN (DG) - Formula 8863&quot;&gt;
                    &lt;option value=&quot;DG9&quot;&gt;DG9 (Lantikan Gred 41)&lt;/option&gt;
                    &lt;option value=&quot;DG10&quot;&gt;DG10 (Gred 44)&lt;/option&gt;
                    &lt;option value=&quot;DG11&quot;&gt;DG11 (Gred 48)&lt;/option&gt;
                    &lt;option value=&quot;DG12&quot;&gt;DG12 (Gred 52/54)&lt;/option&gt;
                &lt;/optgroup&gt;
                &lt;optgroup label=&quot;SKIM P&amp;P / PTD / LAIN (G) - Formula 10-8-6&quot;&gt;
                    &lt;option value=&quot;PP9&quot;&gt;Gred 9 (Lantikan Gred 41)&lt;/option&gt;
                    &lt;option value=&quot;PP10&quot;&gt;Gred 10 (Gred 44)&lt;/option&gt;
                    &lt;option value=&quot;PP11&quot;&gt;Gred 11 (Gred 48)&lt;/option&gt;
                    &lt;option value=&quot;PP12&quot;&gt;Gred 12 (Gred 52/54)&lt;/option&gt;
                &lt;/optgroup&gt;
                &lt;optgroup label=&quot;PELAKSANA (DIPLOMA/SPM) - Formula 13 Thn&quot;&gt;
                    &lt;option value=&quot;EX4&quot;&gt;Gred 4 (Lantikan Gred 29)&lt;/option&gt;
                    &lt;option value=&quot;EX1&quot;&gt;Gred 1 (Lantikan Gred 19)&lt;/option&gt;
                &lt;/optgroup&gt;
            &lt;/select&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    
    &lt;button class=&quot;btn btn-calc&quot; onclick=&quot;kiraKerjaya()&quot;&gt;🔍 JANA SIMULASI KERJAYA SSPA&lt;/button&gt;

    &lt;table class=&quot;result-table&quot; id=&quot;table-kerjaya&quot;&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th&gt;Tahun&lt;/th&gt;
                &lt;th&gt;Umur&lt;/th&gt;
                &lt;th&gt;Gred SSPA&lt;/th&gt;
                &lt;th&gt;Catatan&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody id=&quot;tbody-kerjaya&quot;&gt;&lt;/tbody&gt;
    &lt;/table&gt;

    &lt;div class=&quot;btn-container&quot; id=&quot;extra-btns&quot; style=&quot;display: none;&quot;&gt;
        &lt;button class=&quot;btn btn-pdf&quot; onclick=&quot;downloadPDF()&quot;&gt;📄 MUAT TURUN PDF&lt;/button&gt;
        &lt;button class=&quot;btn btn-reset&quot; onclick=&quot;resetApp()&quot;&gt;🔄 RESET&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;style&gt;
    .aff-wrapper { max-width: 800px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #e8f0fe; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #d2e3fc; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Persediaan Gred Baru SSPA:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;💻&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Gajet Produktiviti Pejabat (Laptop &amp; Tablet)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 CEK HARGA &amp; PROMOSI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee. Sila cari &lt;b&gt;&quot;Laptop Kerja&quot;&lt;/b&gt; atau &lt;b&gt;&quot;Tablet Huawei&quot;&lt;/b&gt; untuk membantu tugas harian anda di gred baru SSPA nanti.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;👔&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Pakaian &amp; Aksesori Penjawat Awam Profesional&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 LIHAT PILIHAN VIRAL&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;Kemeja Kerja Lelaki&quot;&lt;/b&gt; atau &lt;b&gt;&quot;Beg Kerja Wanita&quot;&lt;/b&gt; untuk tampil lebih yakin selepas naik pangkat.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.29/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;script&gt;
    let currentTimeline = [];

    function kiraKerjaya() {
        const sYear = parseInt(document.getElementById(&#39;start_year&#39;).value);
        const sAge = parseInt(document.getElementById(&#39;start_age&#39;).value);
        const pAge = parseInt(document.getElementById(&#39;pencen_age&#39;).value);
        const gKey = document.getElementById(&#39;start_gred&#39;).value;

        if (!sYear || !sAge) { alert(&quot;Sila isi maklumat Tahun dan Umur!&quot;); return; }

        let curY = sYear;
        let curA = sAge;
        currentTimeline = [];
        let rules = [];

        if (gKey.startsWith(&quot;DG&quot;)) {
            const dgRules = {
                &quot;DG9&quot;:  [{g:&#39;DG9&#39;, t:0}, {g:&#39;DG10&#39;, t:8}, {g:&#39;DG11&#39;, t:8}, {g:&#39;DG12(52)&#39;, t:6}, {g:&#39;DG12(54)&#39;, t:3}],
                &quot;DG10&quot;: [{g:&#39;DG10&#39;, t:0}, {g:&#39;DG11&#39;, t:8}, {g:&#39;DG12(52)&#39;, t:6}, {g:&#39;DG12(54)&#39;, t:3}],
                &quot;DG11&quot;: [{g:&#39;DG11&#39;, t:0}, {g:&#39;DG12(52)&#39;, t:6}, {g:&#39;DG12(54)&#39;, t:3}],
                &quot;DG12&quot;: [{g:&#39;DG12&#39;, t:0}]
            };
            rules = dgRules[gKey];
        } 
        else if (gKey.startsWith(&quot;PP&quot;)) {
            const ppRules = {
                &quot;PP9&quot;:  [{g:&#39;G9&#39;, t:0}, {g:&#39;G10&#39;, t:10}, {g:&#39;G11&#39;, t:8}, {g:&#39;G12(52)&#39;, t:6}, {g:&#39;G12(54)&#39;, t:3}],
                &quot;PP10&quot;: [{g:&#39;G10&#39;, t:0}, {g:&#39;G11&#39;, t:8}, {g:&#39;G12(52)&#39;, t:6}, {g:&#39;G12(54)&#39;, t:3}],
                &quot;PP11&quot;: [{g:&#39;G11&#39;, t:0}, {g:&#39;G12(52)&#39;, t:6}, {g:&#39;G12(54)&#39;, t:3}],
                &quot;PP12&quot;: [{g:&#39;G12&#39;, t:0}]
            };
            rules = ppRules[gKey];
        }
        else {
            const exRules = {
                &quot;EX4&quot;: [{g:&#39;G4&#39;, t:0}, {g:&#39;G5&#39;, t:13}, {g:&#39;G6&#39;, t:13}],
                &quot;EX1&quot;: [{g:&#39;G1&#39;, t:0}, {g:&#39;G2&#39;, t:13}, {g:&#39;G3&#39;, t:13}]
            };
            rules = exRules[gKey];
        }

        const tbody = document.getElementById(&#39;tbody-kerjaya&#39;);
        tbody.innerHTML = &#39;&#39;;

        rules.forEach((r, i) =&gt; {
            curY += r.t; curA += r.t;
            if (curA &lt;= pAge) {
                currentTimeline.push({ y: curY, a: curA, g: r.g, n: i === 0 ? &quot;Lantikan/Semasa&quot; : &quot;Time-Based&quot; });
                const tr = document.createElement(&#39;tr&#39;);
                tr.innerHTML = `&lt;td&gt;${curY}&lt;/td&gt;&lt;td&gt;${curA} Tahun&lt;/td&gt;&lt;td&gt;&lt;b&gt;${r.g}&lt;/b&gt;&lt;/td&gt;&lt;td&gt;${i === 0 ? &quot;Mula&quot; : &quot;TBBK&quot;}&lt;/td&gt;`;
                tbody.appendChild(tr);
            }
        });

        const finalY = sYear + (pAge - sAge);
        const trP = document.createElement(&#39;tr&#39;);
        trP.className = &#39;highlight-pencen&#39;;
        trP.innerHTML = `&lt;td&gt;${finalY}&lt;/td&gt;&lt;td&gt;${pAge} Tahun&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;PERSARAAN WAJIB&lt;/td&gt;`;
        tbody.appendChild(trP);

        document.getElementById(&#39;table-kerjaya&#39;).style.display = &#39;table&#39;;
        document.getElementById(&#39;extra-btns&#39;).style.display = &#39;grid&#39;;
    }

    function resetApp() {
        document.getElementById(&#39;start_year&#39;).value = &#39;&#39;;
        document.getElementById(&#39;start_age&#39;).value = &#39;&#39;;
        document.getElementById(&#39;table-kerjaya&#39;).style.display = &#39;none&#39;;
        document.getElementById(&#39;extra-btns&#39;).style.display = &#39;none&#39;;
        window.scrollTo({top: 0, behavior: &#39;smooth&#39;});
    }

    function downloadPDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();
        doc.setFontSize(18); doc.setTextColor(26, 115, 232);
        doc.text(&quot;SIMULASI KERJAYA SSPA (SAHIH)&quot;, 105, 20, {align:&#39;center&#39;});
        const pRows = currentTimeline.map(i =&gt; [i.y, i.a + &quot; Tahun&quot;, i.g, i.n]);
        const pAge = document.getElementById(&#39;pencen_age&#39;).value;
        const finalY = parseInt(document.getElementById(&#39;start_year&#39;).value) + (pAge - document.getElementById(&#39;start_age&#39;).value);
        pRows.push([finalY, pAge + &quot; Tahun&quot;, &quot;-&quot;, &quot;PENCEN&quot;]);
        doc.autoTable({ startY: 35, head: [[&#39;Tahun&#39;, &#39;Umur&#39;, &#39;Gred SSPA&#39;, &#39;Catatan&#39;]], body: pRows, theme: &#39;striped&#39; });
        doc.save(&quot;Simulasi_SSPA_CikguDigital.pdf&quot;);
    }
&lt;/script&gt;

&lt;div style=&quot;font-size: 11px; color: #777; margin-top: 30px; border-left: 4px solid #ccc; padding-left: 10px; font-family: sans-serif;&quot;&gt;
    &lt;b&gt;Disclaimer:&lt;/b&gt; Aplikasi ini adalah simulasi rujukan berdasarkan Pekeliling SSPA 1/2024. Tarikh kenaikan pangkat sebenar adalah tertakluk kepada kelulusan Lembaga Kenaikan Pangkat agensi masing-masing.
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/2182285286085876255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-kenaikan-pangkat-sspa-lengkap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2182285286085876255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2182285286085876255'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-kenaikan-pangkat-sspa-lengkap.html' title='Kalkulator Kenaikan Pangkat SSPA (Time-Based) – Unjuran Gred &amp; Pencen Sahih'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-wBC1Vr_zsFvQnlRs1L7e7K0SDsu-HNOZX_FH1Cg-kimQGZBIkneMOcACb6UoIkCQa54Hne9ilBnboTibfZY6etcJ_GKHg8ZyJiKWbUDROSEoZjhD9uitkmKsN_h4zhqfF8I1y9FjneYxDS-7HZYjn1Hc9EdHRYrcptSAeCmubVK-bGSwotaYWZK8msM/s72-c/1000001661.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-625180765695462961</id><published>2026-01-14T13:34:00.006+08:00</published><updated>2026-01-15T23:05:40.489+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Digital"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Cikgu Digital"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Kewangan"/><category scheme="http://www.blogger.com/atom/ns#" term="Perniagaan"/><title type='text'>Kalkulator Kira Duit Tunai (RM) Automatik – Laporan PDF Sahih &amp; Lengkap</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRitvA3t3WFJ97Si-eeqgN05dBXMoJ3xz8vMoJ9sYpcJITp7Cx4WOkPjkj2ZJqm_ngUHyE5Fmbq4i6OTyD5003yyrenp1bmJqNnxWxLNcFZzp28k37gsVGorFwJf9gRW0HfWXWUU9j5Oqq-G3r-UeO_K66wT4KddcqR5mR9c61aDoxKLLKnnwC2PVR6sk/s1100/1000001657.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
        &lt;img alt=&quot;Kalkulator Kira Duit Tunai RM Digital Apps Cikgu Digital&quot; border=&quot;0&quot; data-original-height=&quot;614&quot; data-original-width=&quot;1100&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRitvA3t3WFJ97Si-eeqgN05dBXMoJ3xz8vMoJ9sYpcJITp7Cx4WOkPjkj2ZJqm_ngUHyE5Fmbq4i6OTyD5003yyrenp1bmJqNnxWxLNcFZzp28k37gsVGorFwJf9gRW0HfWXWUU9j5Oqq-G3r-UeO_K66wT4KddcqR5mR9c61aDoxKLLKnnwC2PVR6sk/s640/1000001657.jpg&quot; width=&quot;100%&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;seo-intro&quot; style=&quot;color: #333333; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, sans-serif; line-height: 1.8; margin-top: 25px;&quot;&gt;
    &lt;h1 style=&quot;color: #1a73e8; font-size: 24px;&quot;&gt;Kalkulator Kira Duit Tunai RM (Versi Digital)&lt;/h1&gt;
    &lt;p&gt;Adakah anda sering merasa leceh untuk mengira timbunan wang tunai selepas tamat waktu perniagaan? Masalah silap kira atau lupa jumlah siri not adalah perkara biasa yang dihadapi oleh peniaga dan pengurus kewangan. Dengan &lt;b&gt;Kalkulator Kira Duit Tunai (RM)&lt;/b&gt; ini, urusan merekod wang masuk kini menjadi lebih mudah, pantas, dan 100% tepat.&lt;/p&gt;
    &lt;p&gt;Aplikasi ini direka khusus untuk membantu anda mengira wang kertas RM50, RM20, RM10, RM5, RM1 serta syiling 50 sen, 20 sen, 10 sen dan 5 sen secara serentak. Yang paling menarik, anda boleh menjana laporan rasmi dalam format PDF untuk dijadikan bukti simpanan rekod atau lampiran bank tanpa perlu menulis manual!&lt;/p&gt;
&lt;/div&gt;

&lt;hr style=&quot;border-bottom: 0px; border-image: initial; border-left: 0px; border-right: 0px; border-top: 1px solid rgb(238, 238, 238); border: 0; margin: 30px 0px;&quot; /&gt;

&lt;style&gt;
    :root { --p: #1a73e8; --g: #28a745; --bg: #f8f9fa; --dark: #202124; --red: #d93025; }
    .app-container { max-width: 700px; margin: 0 auto; background: #fff; border-radius: 12px; box-shadow: 0 4px 25px rgba(0,0,0,0.1); padding: 25px; border: 1px solid #dadce0; font-family: &#39;Segoe UI&#39;, Arial, sans-serif; }
    .money-grid { display: grid; gap: 10px; }
    .row-item { display: flex; align-items: center; background: var(--bg); padding: 12px 18px; border-radius: 8px; gap: 15px; border: 1px solid #eee; }
    .row-item label { flex: 1; font-weight: bold; color: var(--dark); font-size: 16px; }
    .row-item input { width: 90px; padding: 10px; border: 2px solid #ddd; border-radius: 6px; text-align: center; font-size: 18px; font-weight: bold; outline: none; transition: 0.3s; }
    .row-item input:focus { border-color: var(--p); background: #fff; }
    .row-item .sub-total { flex: 1; text-align: right; font-weight: bold; color: var(--p); font-size: 16px; }
    .result-box { margin-top: 25px; padding: 25px; background: #e8f0fe; border-radius: 12px; text-align: center; border: 2px dashed var(--p); }
    .result-box h3 { margin: 0; font-size: 14px; color: #5f6368; text-transform: uppercase; letter-spacing: 1px; }
    .result-box .grand-total { font-size: 36px; font-weight: bold; color: var(--g); margin-top: 5px; }
    .btn-grp { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 20px; }
    .btn-main { padding: 15px; border: none; border-radius: 8px; font-weight: bold; font-size: 15px; cursor: pointer; transition: 0.3s; }
    .btn-pdf { background: var(--p); color: white; }
    .btn-pdf:hover { background: #1557b0; }
    .btn-reset { background: #f1f3f4; color: var(--red); border: 1px solid #ddd; }
    .btn-reset:hover { background: #fee8e7; }
    @media (max-width: 480px) { .row-item { padding: 10px; gap: 5px; } .row-item label { font-size: 14px; } .btn-grp { grid-template-columns: 1fr; } }
&lt;/style&gt;

&lt;div class=&quot;app-container&quot;&gt;
    &lt;div class=&quot;money-grid&quot; id=&quot;money-fields&quot;&gt;
        &lt;/div&gt;

    &lt;div class=&quot;result-box&quot;&gt;
        &lt;h3&gt;Jumlah Tunai Keseluruhan&lt;/h3&gt;
        &lt;div class=&quot;grand-total&quot; id=&quot;display-total&quot;&gt;RM 0.00&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;btn-grp&quot;&gt;
        &lt;button class=&quot;btn-main btn-pdf&quot; onclick=&quot;downloadPDF()&quot;&gt;📥 MUAT TURUN PDF&lt;/button&gt;
        &lt;button class=&quot;btn-main btn-reset&quot; onclick=&quot;resetApp()&quot;&gt;🔄 RESET KIRAAN&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;app-is-here&quot;&gt;&lt;/div&gt;

&lt;div class=&quot;faq-section&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 10px; border: 1px solid rgb(238, 238, 238); margin-top: 40px; padding: 20px;&quot;&gt;
    &lt;h3 style=&quot;border-bottom: 2px solid rgb(241, 243, 244); color: #1a73e8; padding-bottom: 10px;&quot;&gt;FAQ - Soalan Lazim&lt;/h3&gt;
    &lt;div style=&quot;margin-top: 15px;&quot;&gt;
        &lt;p&gt;&lt;b&gt;1. Adakah aplikasi ini sesuai untuk peniaga kecil?&lt;/b&gt;&lt;br /&gt;Sangat sesuai! Ia direka ringkas untuk kegunaan harian peniaga pasar malam, kedai runcit, dan juga individu yang ingin menguruskan tabung peribadi.&lt;/p&gt;
        &lt;p&gt;&lt;b&gt;2. Bagaimana cara menyimpan hasil kiraan?&lt;/b&gt;&lt;br /&gt;Klik butang &quot;MUAT TURUN PDF&quot;. Sistem akan menjana satu dokumen lengkap yang menyenaraikan kuantiti setiap not dan jumlah besar untuk rujukan masa depan.&lt;/p&gt;
        &lt;p&gt;&lt;b&gt;3. Adakah perkhidmatan ini percuma selamanya?&lt;/b&gt;&lt;br /&gt;Ya, kami di &lt;b&gt;Apps Cikgu Digital&lt;/b&gt; komited menyediakan alat bantu digital secara percuma untuk memudahkan urusan rakyat Malaysia.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cta-box&quot; style=&quot;background: rgb(230, 244, 234); border-radius: 8px; border: 1px solid rgb(52, 168, 83); margin-top: 30px; padding: 20px; text-align: center;&quot;&gt;
    &lt;h4 style=&quot;color: #1e8e3e; margin: 0px;&quot;&gt;Ada Cadangan Penambahbaikan?&lt;/h4&gt;
    &lt;p&gt;Kami sentiasa mengemaskini aplikasi mengikut keperluan pengguna. Jika ada denominasi atau fungsi tambahan yang anda perlukan, sila &lt;b&gt;tinggalkan komen di bawah!&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 2px solid #ee4d2d; padding: 20px; display: flex; align-items: center; gap: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }
    .aff-img { width: 80px; height: 80px; background: #fff5f2; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 35px; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; margin-bottom: 5px; font-size: 16px; }
    .aff-desc { font-size: 13px; color: #666; margin-bottom: 12px; line-height: 1.4; }
    .btn-shopee { background: #ee4d2d; color: white !important; text-decoration: none !important; padding: 8px 18px; border-radius: 6px; font-weight: bold; font-size: 13px; display: inline-block; transition: 0.3s; border-bottom: 3px solid rgba(0,0,0,0.1); }
    .btn-shopee:hover { background: #d73211; transform: translateY(-2px); }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } }
&lt;/style&gt;

&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; font-family: &#39;Segoe UI&#39;, sans-serif; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #e8f0fe; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #d2e3fc; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Keperluan Pengurusan Tunai:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🔐&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Peti Simpanan Wang (Cash Box)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 CEK HARGA &amp; PILIHAN&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke aplikasi Shopee. Sila taip &lt;b&gt;&quot;Portable Cash Box&quot;&lt;/b&gt; di kotak carian untuk membandingkan harga dan melihat rating kedai terbaik.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🏧&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Mesin Kira Wang &amp; Pengesan Duit Palsu&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 LIHAT MODEL VIRAL&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di Shopee, anda boleh terus cari &lt;b&gt;&quot;Money Counter Machine&quot;&lt;/b&gt; untuk memudahkan urusan pengiraan tunai harian anda secara automatik.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;div style=&quot;background: rgb(250, 250, 250); border-radius: 5px; color: #777777; font-size: 12px; line-height: 1.5; margin-top: 40px; padding: 15px;&quot;&gt;
    &lt;b&gt;Disclaimer:&lt;/b&gt; Aplikasi Kalkulator Kira Duit Tunai RM ini adalah alat rujukan pantas berdasarkan input manual pengguna. Kami tidak menyimpan sebarang data anda. Sila pastikan semakan fizikal dilakukan sebelum deposit bank. Pihak kami tidak bertanggungjawab atas ralat input pengguna.
&lt;/div&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.29/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;script&gt;
    const dataDuit = [
        { id: &#39;rm50&#39;, label: &#39;Not RM 50&#39;, val: 50 },
        { id: &#39;rm20&#39;, label: &#39;Not RM 20&#39;, val: 20 },
        { id: &#39;rm10&#39;, label: &#39;Not RM 10&#39;, val: 10 },
        { id: &#39;rm5&#39;, label: &#39;Not RM 5&#39;, val: 5 },
        { id: &#39;rm1&#39;, label: &#39;Not RM 1&#39;, val: 1 },
        { id: &#39;s50&#39;, label: &#39;50 Sen&#39;, val: 0.50 },
        { id: &#39;s20&#39;, label: &#39;20 Sen&#39;, val: 0.20 },
        { id: &#39;s10&#39;, label: &#39;10 Sen&#39;, val: 0.10 },
        { id: &#39;s5&#39;, label: &#39;5 Sen&#39;, val: 0.05 }
    ];

    function initApp() {
        const container = document.getElementById(&#39;money-fields&#39;);
        container.innerHTML = &#39;&#39;;
        dataDuit.forEach(item =&gt; {
            const div = document.createElement(&#39;div&#39;);
            div.className = &#39;row-item&#39;;
            div.innerHTML = `
                &lt;label&gt;${item.label}&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;input-${item.id}&quot; min=&quot;0&quot; placeholder=&quot;0&quot; oninput=&quot;hitung()&quot;&gt;
                &lt;div class=&quot;sub-total&quot; id=&quot;sub-${item.id}&quot;&gt;RM 0.00&lt;/div&gt;
            `;
            container.appendChild(div);
        });
    }

    function hitung() {
        let grandTotal = 0;
        dataDuit.forEach(item =&gt; {
            const qty = parseFloat(document.getElementById(`input-${item.id}`).value) || 0;
            const sub = qty * item.val;
            document.getElementById(`sub-${item.id}`).innerText = `RM ${sub.toFixed(2)}`;
            grandTotal += sub;
        });
        document.getElementById(&#39;display-total&#39;).innerText = `RM ${grandTotal.toFixed(2)}`;
    }

    function resetApp() {
        if(confirm(&quot;Padam semua kiraan dan mula baru?&quot;)) {
            initApp();
            document.getElementById(&#39;display-total&#39;).innerText = `RM 0.00`;
        }
    }

    async function downloadPDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();
        const totalText = document.getElementById(&#39;display-total&#39;).innerText;
        
        doc.setFontSize(20);
        doc.setTextColor(26, 115, 232);
        doc.text(&quot;LAPORAN KIRAAN TUNAI RM&quot;, 105, 20, {align: &#39;center&#39;});
        
        doc.setFontSize(10);
        doc.setTextColor(100);
        doc.text(&quot;Tarikh Janaan: &quot; + new Date().toLocaleString(&#39;ms-MY&#39;), 105, 28, {align: &#39;center&#39;});

        const rows = [];
        dataDuit.forEach(item =&gt; {
            const qty = document.getElementById(`input-${item.id}`).value || 0;
            const sub = (qty * item.val).toFixed(2);
            if(qty &gt; 0) rows.push([item.label, qty, &quot;RM &quot; + sub]);
        });

        if(rows.length === 0) {
            alert(&quot;Sila masukkan sekurang-kurangnya satu nilai!&quot;);
            return;
        }

        doc.autoTable({
            startY: 40,
            head: [[&#39;Jenis Wang&#39;, &#39;Kuantiti&#39;, &#39;Jumlah (RM)&#39;]],
            body: rows,
            theme: &#39;striped&#39;,
            headStyles: { fillColor: [26, 115, 232] },
            styles: { fontSize: 11 }
        });

        doc.setFontSize(14);
        doc.setTextColor(40, 167, 69);
        doc.text(&quot;JUMLAH BESAR: &quot; + totalText, 14, doc.lastAutoTable.finalY + 15);
        
        doc.setFontSize(9);
        doc.setTextColor(150);
        doc.text(&quot;Dijana melalui Blog Layanlah!!! - Kalkulator Kira Duit Tunai RM&quot;, 105, 285, {align: &#39;center&#39;});
        
        doc.save(&quot;Laporan_Kiraan_Tunai_&quot; + new Date().toISOString().split(&#39;T&#39;)[0] + &quot;.pdf&quot;);
    }

    window.onload = initApp;
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/625180765695462961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-kira-duit-tunai-rm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/625180765695462961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/625180765695462961'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-kira-duit-tunai-rm.html' title='Kalkulator Kira Duit Tunai (RM) Automatik – Laporan PDF Sahih &amp; Lengkap'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRitvA3t3WFJ97Si-eeqgN05dBXMoJ3xz8vMoJ9sYpcJITp7Cx4WOkPjkj2ZJqm_ngUHyE5Fmbq4i6OTyD5003yyrenp1bmJqNnxWxLNcFZzp28k37gsVGorFwJf9gRW0HfWXWUU9j5Oqq-G3r-UeO_K66wT4KddcqR5mR9c61aDoxKLLKnnwC2PVR6sk/s72-c/1000001657.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-3377043950991792397</id><published>2026-01-10T01:10:00.021+08:00</published><updated>2026-01-15T23:04:06.923+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator Viral"/><category scheme="http://www.blogger.com/atom/ns#" term="Kewangan"/><category scheme="http://www.blogger.com/atom/ns#" term="Reality Check"/><category scheme="http://www.blogger.com/atom/ns#" term="Simpanan"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips Duit"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips Simpanan"/><title type='text'>Semak Gred Simpanan Mengikut Umur &amp; Gaji (Financial Reality Check)</title><content type='html'>&lt;style&gt;
    /* FORCE HIGH CONTRAST - ANTI TENGGELAM */
    :root { 
        --gold: #ffd700 !important; 
        --white: #ffffff !important; 
        --bg: #020617 !important; 
        --card: #1e293b !important; 
    }
    
    body { background: var(--bg); font-family: &#39;Segoe UI&#39;, sans-serif; color: var(--white) !important; }
    .app-card { max-width: 800px; margin: 20px auto; background: var(--card); border-radius: 20px; border: 1px solid #334155; overflow: hidden; box-shadow: 0 10px 40px rgba(0,0,0,0.8); }
    
    .intro-box { padding: 25px; text-align: center; border-bottom: 1px solid #334155; }
    .intro-box h1 { color: var(--gold) !important; font-size: 24px; margin: 0; text-transform: uppercase; }
    .intro-box p { color: var(--white) !important; font-size: 14px; margin-top: 10px; }

    .main-content { padding: 25px; }
    .form-box { background: #000; padding: 25px; border-radius: 15px; border: 1px solid #334155; }
    
    label { color: var(--gold) !important; font-weight: bold; display: block; margin-top: 15px; text-transform: uppercase; font-size: 11px; letter-spacing: 1px; }
    
    /* INPUT &amp; SELECT STYLING */
    input, select { 
        width: 100%; padding: 14px; background: #1e293b !important; 
        color: #ffffff !important; border: 1px solid #475569; 
        border-radius: 10px; margin-top: 5px; box-sizing: border-box; font-size: 16px; 
    }
    select { cursor: pointer; appearance: none; background-image: url(&#39;data:image/svg+xml;charset=US-ASCII,&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;white&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;6 9 12 15 18 9&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&#39;); background-repeat: no-repeat; background-position: right 10px center; }

    .btn-audit { width: 100%; padding: 20px; background: linear-gradient(45deg, #b8860b, #ffd700); color: #000 !important; border: none; border-radius: 12px; font-weight: 800; font-size: 18px; cursor: pointer; margin-top: 30px; text-transform: uppercase; transition: 0.3s; }
    .btn-audit:hover { transform: translateY(-2px); filter: brightness(1.2); }

    /* RESULT AREA */
    #resultArea { display: none; margin-top: 35px; border-top: 1px solid #334155; padding-top: 25px; }
    .res-card { background: #000; padding: 30px; border-radius: 20px; border: 2px solid var(--gold); text-align: center; }
    .res-label { color: var(--gold) !important; font-weight: bold; font-size: 14px; text-transform: uppercase; }
    .res-val { color: #ffffff !important; font-size: clamp(30px, 10vw, 50px); font-weight: 900; margin: 15px 0; display: block; }
    
    .status-tag { display: inline-block; padding: 10px 20px; border-radius: 50px; font-weight: bold; color: #ffffff !important; margin-bottom: 20px; text-transform: uppercase; font-size: 12px; }
    .tag-red { background: #ef4444 !important; }
    .tag-green { background: #22c55e !important; }

    .advice-box { background: #1e293b; padding: 20px; border-radius: 15px; border: 1px solid #475569; text-align: left; margin-top: 15px; }
    .advice-box p { color: #ffffff !important; font-size: 15px; line-height: 1.6; margin: 0; }
    .advice-box b { color: var(--gold) !important; }

    /* INFO SECTION - BRIGHT TEXT */
    .info-section { margin-top: 40px; border-top: 1px solid #334155; padding-top: 20px; }
    .info-section h3 { color: var(--gold) !important; font-size: 16px; margin-bottom: 15px; }
    .faq-q { color: var(--white) !important; font-weight: bold; font-size: 14px; display: block; margin-top: 15px; }
    .faq-a { color: #cbd5e1 !important; font-size: 13px; display: block; margin-top: 5px; }

    .wa-btn { display: block; text-align: center; background: #22c55e; color: #ffffff !important; padding: 18px; border-radius: 50px; text-decoration: none; font-weight: bold; margin-top: 25px; }
    .disclaimer { font-size: 11px; color: #ffffff !important; text-align: center; padding: 20px; border: 1px dashed var(--gold); margin: 25px 0; opacity: 0.8; }
&lt;/style&gt;

&lt;div class=&quot;app-card&quot;&gt;
    &lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi033kQ-aJyjo8VhPmXHysqACDd_NjaoEm9aRj09_zB2LG3yAB9b_VU7HTyuGrl9j4nptdamIfWjshZJsnhiAevK1v_3GLnSM9j21U9krrJbKYorr1wETksM8P9WhyCoZ0_k09HGVXa4lLlnaOAgyd2rZi_Bt0efvVcrUzvQuBR59XdWyUwfFOuCKj69F4/s1232/1000001626.jpg&quot; style=&quot;width:100%;&quot;&gt;
    
    &lt;div class=&quot;intro-box&quot;&gt;
        &lt;h1&gt;Audit Simpanan Pakar V1.8&lt;/h1&gt;
        &lt;p&gt;Semak realiti simpanan anda berdasarkan 15% gaji kasar seumur hidup.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;main-content&quot;&gt;
        &lt;div class=&quot;form-box&quot;&gt;
            &lt;label&gt;Umur Sekarang:&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;age&quot; placeholder=&quot;Cth: 46&quot;&gt;
            
            &lt;label&gt;Tahun Mula Bekerja:&lt;/label&gt;
            &lt;select id=&quot;startYear&quot;&gt;
                &lt;option value=&quot;&quot;&gt;-- Pilih Tahun --&lt;/option&gt;
                &lt;/select&gt;
            
            &lt;label&gt;Gaji Kasar Mula Kerja (RM):&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;startSalary&quot; placeholder=&quot;Cth: 1800&quot;&gt;
            
            &lt;label&gt;Gaji Kasar Sekarang (RM):&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;currentSalary&quot; placeholder=&quot;Cth: 9000&quot;&gt;
            
            &lt;label&gt;Jumlah Simpanan Tunai Sekarang (RM):&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;currentSavings&quot; placeholder=&quot;Bank / ASB / Tabung Haji&quot;&gt;
            
            &lt;button class=&quot;btn-audit&quot; onclick=&quot;auditPakar()&quot;&gt;Audit Simpanan Saya&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;resultArea&quot;&gt;
            &lt;div class=&quot;res-card&quot;&gt;
                &lt;span class=&quot;res-label&quot;&gt;Sasaran Simpanan (Audit 15%):&lt;/span&gt;
                &lt;span class=&quot;res-val&quot; id=&quot;resTarget&quot;&gt;RM 0.00&lt;/span&gt;
                &lt;div id=&quot;resStatus&quot; class=&quot;status-tag&quot;&gt;-&lt;/div&gt;
                &lt;div class=&quot;advice-box&quot;&gt;&lt;p id=&quot;resAdvice&quot;&gt;&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;a href=&quot;#&quot; class=&quot;wa-btn&quot; onclick=&quot;shareWA()&quot;&gt;📢 SHARE KE WHATSAPP&lt;/a&gt;
        &lt;/div&gt;

        &lt;div class=&quot;info-section&quot;&gt;
            &lt;h3&gt;Soalan Lazim &amp; Sumber&lt;/h3&gt;
            &lt;span class=&quot;faq-q&quot;&gt;S: Kenapa kena guna Gaji Kasar (Gross)?&lt;/span&gt;
            &lt;span class=&quot;faq-a&quot;&gt;A: Kerana simpanan 15% dikira sebagai &quot;Self-Tax&quot; sebelum ditolak sebarang komitmen lain.&lt;/span&gt;
            
            &lt;span class=&quot;faq-q&quot;&gt;S: Kenapa sasaran RM nampak tinggi?&lt;/span&gt;
            &lt;span class=&quot;faq-a&quot;&gt;A: Ini termasuk andaian dividen 5% setahun. Duit yang disimpan dan dilabur (ASB/TH) berkembang jauh lebih laju.&lt;/span&gt;

            &lt;p style=&quot;font-size: 12px; margin-top: 20px; color: #ffd700 !important;&quot;&gt;&lt;b&gt;Sumber:&lt;/b&gt; Financial Planning Standards Board (15% Rule) &amp; CAGR Salary Analysis.&lt;/p&gt;
        &lt;/div&gt;

      
      
&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 2px solid #ee4d2d; padding: 20px; display: flex; align-items: center; gap: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }
    .aff-img { width: 80px; height: 80px; background: #fff5f2; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 35px; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; margin-bottom: 5px; font-size: 16px; }
    .aff-desc { font-size: 13px; color: #666; margin-bottom: 12px; line-height: 1.4; }
    .btn-shopee { background: #ee4d2d; color: white !important; text-decoration: none !important; padding: 8px 18px; border-radius: 6px; font-weight: bold; font-size: 13px; display: inline-block; transition: 0.3s; border-bottom: 3px solid rgba(0,0,0,0.1); }
    .btn-shopee:hover { background: #d73211; transform: translateY(-2px); }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } }
&lt;/style&gt;

&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; font-family: &#39;Segoe UI&#39;, sans-serif; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #e8f0fe; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #d2e3fc; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Keperluan Pengurusan Tunai:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🔐&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Peti Simpanan Wang (Cash Box)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 CEK HARGA &amp; PILIHAN&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee untuk melihat pelbagai model peti wang. Sila taip &lt;b&gt;&quot;Portable Cash Box&quot;&lt;/b&gt; untuk membandingkan harga dan rating kedai terbaik.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🏧&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Mesin Kira Wang &amp; Pengesan Duit Palsu&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 LIHAT MODEL VIRAL&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;Money Counter Machine&quot;&lt;/b&gt; untuk memudahkan urusan pengiraan tunai harian anda secara automatik.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
      
      
        &lt;div class=&quot;disclaimer&quot;&gt;
            &lt;b&gt;PENAFIAN:&lt;/b&gt; Aplikasi ini adalah simulasi rujukan sahaja. Keputusan adalah berdasarkan input anda dan tidak menjamin angka sebenar di masa depan. Sila rujuk pakar kewangan berlesen.
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    // Jana senarai tahun dari 1970 hingga 2026
    const select = document.getElementById(&#39;startYear&#39;);
    const currentYear = new Date().getFullYear();
    for (let year = currentYear; year &gt;= 1970; year--) {
        const option = document.createElement(&#39;option&#39;);
        option.value = year;
        option.text = year;
        select.appendChild(option);
    }

    function auditPakar() {
        const age = parseInt(document.getElementById(&#39;age&#39;).value);
        const startYear = parseInt(document.getElementById(&#39;startYear&#39;).value);
        const startSalary = parseFloat(document.getElementById(&#39;startSalary&#39;).value);
        const currentSalary = parseFloat(document.getElementById(&#39;currentSalary&#39;).value);
        const currentSavings = parseFloat(document.getElementById(&#39;currentSavings&#39;).value) || 0;

        if (!age || !startYear || !startSalary || !currentSalary) {
            alert(&quot;Sila lengkapkan semua maklumat audit!&quot;);
            return;
        }

        const yearsWorked = currentYear - startYear;
        if(yearsWorked &lt;= 0) { alert(&quot;Tahun mula kerja mestilah sebelum tahun semasa.&quot;); return; }

        const cagr = Math.pow((currentSalary / startSalary), (1 / yearsWorked)) - 1;
        
        let cumulative = 0;
        let yearlySalary = startSalary;

        for (let i = 0; i &lt;= yearsWorked; i++) {
            let annualGross = yearlySalary * 12;
            let annualSavings = annualGross * 0.15; 
            cumulative = (cumulative + annualSavings) * 1.05; 
            yearlySalary = yearlySalary * (1 + cagr); 
        }

        const target = Math.round(cumulative);
        document.getElementById(&#39;resTarget&#39;).innerText = &quot;RM &quot; + target.toLocaleString();
        
        const statusBox = document.getElementById(&#39;resStatus&#39;);
        let advice = &quot;&quot;;

        if (currentSavings &gt;= target) {
            statusBox.innerText = &quot;STATUS: CEMERLANG&quot;;
            statusBox.className = &quot;status-tag tag-green&quot;;
            advice = `&lt;b&gt;Tahniah!&lt;/b&gt; Simpanan anda melebihi sasaran 15% gaji seumur hidup. Anda mempunyai disiplin kewangan yang sangat tinggi!`;
        } else {
            statusBox.innerText = &quot;STATUS: DI BAWAH TANDA ARAS&quot;;
            statusBox.className = &quot;status-tag tag-red&quot;;
            advice = `Berdasarkan sejarah gaji anda, anda sepatutnya sudah mengumpul &lt;b&gt;RM ${target.toLocaleString()}&lt;/b&gt;. Simpanan anda masih kurang &lt;b&gt;RM ${Math.round(target - currentSavings).toLocaleString()}&lt;/b&gt; untuk capai tahap ideal.`;
        }

        document.getElementById(&#39;resAdvice&#39;).innerHTML = advice;
        document.getElementById(&#39;resultArea&#39;).style.display = &#39;block&#39;;
        document.getElementById(&#39;resultArea&#39;).scrollIntoView({ behavior: &#39;smooth&#39; });
    }

    function shareWA() {
        const t = document.getElementById(&#39;resTarget&#39;).innerText;
        const txt = &quot;Saya baru buat Audit Simpanan Pakar. Mengikut sejarah gaji saya, saya patut ada simpanan RM &quot; + t + &quot;! Korang berani audit poket tak? Kat sini: &quot; + window.location.href;
        window.open(&quot;https://wa.me/?text=&quot; + encodeURIComponent(txt), &quot;_blank&quot;);
    }
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/3377043950991792397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-gred-simpanan-tunai-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/3377043950991792397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/3377043950991792397'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-gred-simpanan-tunai-online.html' title='Semak Gred Simpanan Mengikut Umur &amp; Gaji (Financial Reality Check)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi033kQ-aJyjo8VhPmXHysqACDd_NjaoEm9aRj09_zB2LG3yAB9b_VU7HTyuGrl9j4nptdamIfWjshZJsnhiAevK1v_3GLnSM9j21U9krrJbKYorr1wETksM8P9WhyCoZ0_k09HGVXa4lLlnaOAgyd2rZi_Bt0efvVcrUzvQuBR59XdWyUwfFOuCKj69F4/s72-c/1000001626.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-7155351976483596977</id><published>2026-01-10T00:46:00.013+08:00</published><updated>2026-01-15T23:08:44.092+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Checklist Kehamilan"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Ibu Mengandung"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator EDD"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips Kesihatan"/><title type='text'>Kalkulator EDD Malaysia: Kira Tarikh Bersalin &amp; Checklist Kehamilan</title><content type='html'>&lt;head&gt;
    &lt;title&gt;Kalkulator EDD &amp; Checklist Kehamilan Online Malaysia&lt;/title&gt;
    &lt;meta content=&quot;Kira tarikh jangkaan bersalin (EDD) anda dengan tepat. Dapatkan checklist kehamilan mingguan, panduan buka buku pink, dan jadual scan bayi secara percuma!&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
    
    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org/&quot;,
      &quot;@type&quot;: &quot;WebApplication&quot;,
      &quot;name&quot;: &quot;Kalkulator EDD &amp; Checklist Ibu Bijak&quot;,
      &quot;description&quot;: &quot;Alat digital untuk mengira tarikh bersalin (EDD) dan checklist mingguan kehamilan di Malaysia.&quot;,
      &quot;applicationCategory&quot;: &quot;HealthApplication&quot;,
      &quot;operatingSystem&quot;: &quot;All&quot;,
      &quot;offers&quot;: { &quot;@type&quot;: &quot;Offer&quot;, &quot;price&quot;: &quot;0&quot;, &quot;priceCurrency&quot;: &quot;MYR&quot; }
    }
    &lt;/script&gt;
&lt;/head&gt;

&lt;style&gt;
    :root { --pink: #ff8a80; --soft-pink: #fce4ec; --teal: #4db6ac; --text: #455a64; --white: #ffffff; }
    body { background: #fdf2f2; font-family: &#39;Segoe UI&#39;, sans-serif; margin: 0; padding: 10px; color: var(--text); }
    
    .app-card { max-width: 800px; margin: 20px auto; background: var(--white); border-radius: 20px; box-shadow: 0 15px 35px rgba(255,138,128,0.2); overflow: hidden; border: 1px solid #f8bbd0; }
    .hero-box img { width: 100%; display: block; border-bottom: 5px solid var(--pink); }
    
    .intro-seo { padding: 25px; background: var(--soft-pink); text-align: center; border-bottom: 1px solid #f8bbd0; }
    .intro-seo h1 { color: #d81b60; margin: 0; font-size: 24px; font-weight: 800; }
    .intro-seo p { font-size: 14px; margin-top: 10px; color: #880e4f; line-height: 1.6; }

    .main-content { padding: 25px; }
    .input-grp { background: #fff8f8; padding: 20px; border-radius: 15px; border: 1px solid #fce4ec; margin-bottom: 25px; }
    label { display: block; font-weight: bold; color: #d81b60; font-size: 13px; margin-bottom: 10px; text-transform: uppercase; }
    
    input[type=&quot;date&quot;] { width: 100%; padding: 12px; border: 2px solid #f8bbd0; border-radius: 10px; font-size: 16px; margin-bottom: 20px; box-sizing: border-box; }

    .btn-kira { width: 100%; padding: 18px; background: var(--pink); color: white; border: none; border-radius: 12px; font-weight: bold; font-size: 18px; cursor: pointer; box-shadow: 0 4px 0 #e57373; transition: 0.2s; }
    .btn-kira:active { transform: translateY(3px); box-shadow: none; }

    /* AREA KEPUTUSAN */
    #resultArea { display: none; margin-top: 30px; }
    .edd-banner { background: linear-gradient(135deg, #ff8a80 0%, #ff5252 100%); color: white; padding: 25px; border-radius: 15px; text-align: center; margin-bottom: 20px; }
    .edd-date { font-size: 32px; font-weight: 900; margin: 10px 0; }
    
    .progress-container { background: #eee; border-radius: 20px; height: 30px; margin: 20px 0; position: relative; overflow: hidden; border: 1px solid #ddd; }
    .progress-bar { background: var(--teal); height: 100%; width: 0%; transition: 1s; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: bold; color: white; }

    .stats-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 25px; }
    .stat-box { background: #fff0f3; padding: 15px; border-radius: 12px; text-align: center; border: 1px solid #f8bbd0; }
    .stat-val { display: block; font-size: 20px; font-weight: bold; color: #d81b60; }
    .stat-label { font-size: 11px; text-transform: uppercase; color: #880e4f; }

    .checklist-section { background: #f0f4f8; padding: 20px; border-radius: 15px; border-left: 6px solid var(--teal); text-align: left; }
    .checklist-title { font-weight: bold; color: #264653; margin-bottom: 15px; display: flex; align-items: center; gap: 8px; }
    .check-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px 0; border-bottom: 1px solid #d1d9e0; font-size: 14px; color: #334155; }
    .check-bullet { color: var(--teal); font-weight: bold; }

    /* DISCLAIMER &amp; CTA */
    .disclaimer { font-size: 11px; color: #7f8c8d; margin-top: 30px; padding: 15px; background: #f9f9f9; border-radius: 8px; text-align: justify; border: 1px solid #eee; }
    .cta-comment { margin-top: 30px; padding: 20px; background: #fffde7; border-radius: 12px; border: 1px dashed #fbc02d; text-align: center; }
    .cta-comment p { font-weight: bold; color: #f57f17; margin-bottom: 10px; }

    .share-wa { display: block; text-align: center; margin-top: 25px; background: #25d366; color: white; padding: 18px; border-radius: 50px; text-decoration: none; font-weight: bold; box-shadow: 0 4px 15px rgba(37,211,102,0.3); }

    @media (max-width: 480px) { .stats-grid { grid-template-columns: 1fr; } .edd-date { font-size: 26px; } }
&lt;/style&gt;

&lt;div class=&quot;app-card&quot;&gt;
    &lt;div class=&quot;hero-box&quot;&gt;
        &lt;img alt=&quot;Kalkulator EDD Tarikh Bersalin Apps Ibu Bijak&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8LD-RPIUCc1eXkzLGXQ2eFK26QvRkFo2crE5dae_9GxLRaoSnLLCw-JhKfpbcE9UBmWlolR_SXdCNNm8AXq0uTZ7ABSAcsQ1JxhQRTqmn2uiJznnJ0zFzPJyEbDzRhQv1tbePlc-EyFbuQuw90m_DXSd_KbC4nXNawkMQOazMhtDg82gt9oRbiSATm5I/s1100/1000001622.jpg&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;intro-seo&quot;&gt;
        &lt;h1&gt;Kalkulator EDD &amp;amp; Checklist Ibu Hamil&lt;/h1&gt;
        &lt;p&gt;Tahniah buat bakal ibu! Gunakan aplikasi ini untuk mengira &lt;b&gt;Tarikh Jangkaan Bersalin (EDD)&lt;/b&gt; anda dengan tepat berdasarkan hari terakhir haid (LMP). Dapatkan panduan checklist pemeriksaan KK dan tips kehamilan mingguan secara automatik.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;main-content&quot;&gt;
        &lt;div class=&quot;input-grp&quot;&gt;
            &lt;label&gt;Tarikh Hari Pertama Haid Terakhir (LMP):&lt;/label&gt;
            &lt;input id=&quot;lmpDate&quot; type=&quot;date&quot; /&gt;
            &lt;button class=&quot;btn-kira&quot; onclick=&quot;kiraEDD()&quot;&gt;KIRA TARIKH BERSALIN SAYA&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;resultArea&quot;&gt;
            &lt;div class=&quot;edd-banner&quot;&gt;
                &lt;div style=&quot;font-size: 14px; opacity: 0.9;&quot;&gt;Jangkaan Tarikh Bersalin (EDD):&lt;/div&gt;
                &lt;div class=&quot;edd-date&quot; id=&quot;outEDD&quot;&gt;-&lt;/div&gt;
                &lt;div id=&quot;outTrimester&quot; style=&quot;font-size: 15px; font-weight: bold; letter-spacing: 1px;&quot;&gt;-&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;stats-grid&quot;&gt;
                &lt;div class=&quot;stat-box&quot;&gt;&lt;span class=&quot;stat-val&quot; id=&quot;outWeeks&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;stat-label&quot;&gt;Usia Kandungan&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;stat-box&quot;&gt;&lt;span class=&quot;stat-val&quot; id=&quot;outDaysLeft&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;stat-label&quot;&gt;Baki Hari Lagi&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;label style=&quot;text-align: center;&quot;&gt;Progres Kehamilan (Baby Loading):&lt;/label&gt;
            &lt;div class=&quot;progress-container&quot;&gt;
                &lt;div class=&quot;progress-bar&quot; id=&quot;pgBar&quot;&gt;0%&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;checklist-section&quot;&gt;
                &lt;div class=&quot;checklist-title&quot;&gt;📍 Checklist &amp;amp; Temujanji Penting:&lt;/div&gt;
                &lt;div id=&quot;checklistContent&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;a class=&quot;share-wa&quot; href=&quot;#&quot; onclick=&quot;shareWA()&quot;&gt;KONGSI KE WHATSAPP STATUS&lt;/a&gt;

            &lt;div class=&quot;cta-comment&quot;&gt;
                &lt;p&gt;Ibu di Trimester berapa sekarang? 😍&lt;/p&gt;
                &lt;small&gt;Kongsikan pengalaman atau sebarang soalan di ruangan komen di bawah untuk kita saling membantu!&lt;/small&gt;
            &lt;/div&gt;

          
&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 2px solid #ee4d2d; padding: 20px; display: flex; align-items: center; gap: 20px; font-family: &#39;Segoe UI&#39;, sans-serif; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }
    .aff-img { width: 80px; height: 80px; background: #fff5f2; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 35px; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; margin-bottom: 5px; font-size: 16px; }
    .aff-desc { font-size: 13px; color: #666; margin-bottom: 12px; line-height: 1.4; }
    .btn-shopee { background: #ee4d2d; color: white !important; text-decoration: none !important; padding: 8px 18px; border-radius: 6px; font-weight: bold; font-size: 13px; display: inline-block; transition: 0.3s; border-bottom: 3px solid rgba(0,0,0,0.1); }
    .btn-shopee:hover { background: #d73211; transform: translateY(-2px); }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } }
&lt;/style&gt;

&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; }
    .aff-box { background: #fff; border-radius: 12px; border: 1px solid #ddd; padding: 15px; display: flex; align-items: center; gap: 15px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-img { font-size: 30px; width: 60px; height: 60px; background: #fff5f2; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #ffebee; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 15px; margin-bottom: 2px; }
    .aff-hint { font-size: 10px; color: #999; display: block; margin-top: 4px; line-height: 1.2; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #f06292 !important; 
        text-decoration: none !important; 
        padding: 8px 15px; 
        border-radius: 5px; 
        font-weight: bold; 
        font-size: 12px; 
        display: inline-block; 
        margin-top: 8px; 
        border: 1px solid #f06292; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #f06292; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } }
&lt;/style&gt;

&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #fff5f2; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #ffebee; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #f06292 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #f06292; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #f06292; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;


          
          
&lt;style&gt;
    .aff-wrapper { max-width: 700px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #f06292; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #fff5f2; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #ffebee; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #f06292 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #f06292; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #f06292; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Persediaan Menyambut Cahaya Mata:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;👶&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Set Lengkap Pakaian Bayi (Newborn Essentials)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee untuk menebus baucar harian. Sila cari &lt;b&gt;&quot;Baju Bayi Newborn&quot;&lt;/b&gt; untuk melihat pelbagai koleksi menarik dan selesa.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;👜&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Beg Hospital Ibu (Keperluan Bersalin)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;Maternity Hospital Bag&quot;&lt;/b&gt; untuk mencari beg yang luas dan memudahkan urusan anda di hospital nanti.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;          
          
          
          
          
          
          
            &lt;div class=&quot;disclaimer&quot;&gt;
                &lt;b&gt;PENAFIAN (DISCLAIMER):&lt;/b&gt; Aplikasi ini dibina untuk tujuan maklumat dan rujukan am sahaja. Pengiraan Tarikh Jangkaan Bersalin (EDD) adalah berdasarkan formula standard (Naegele&#39;s Rule) dan mungkin berbeza dengan tarikh sebenar bersalin. Maklumat dalam checklist bukan pengganti nasihat perubatan profesional, diagnosis, atau rawatan. Sentiasa dapatkan nasihat doktor atau pakar kesihatan anda untuk sebarang kemusykilan mengenai kehamilan anda.
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    function kiraEDD() {
        const lmpInput = document.getElementById(&#39;lmpDate&#39;).value;
        if (!lmpInput) return alert(&quot;Sila pilih tarikh haid terakhir!&quot;);
        const lmp = new Date(lmpInput);
        let edd = new Date(lmp);
        edd.setDate(edd.getDate() + 280); 
        const options = { day: &#39;numeric&#39;, month: &#39;long&#39;, year: &#39;numeric&#39; };
        document.getElementById(&#39;outEDD&#39;).innerText = edd.toLocaleDateString(&#39;ms-MY&#39;, options);
        const today = new Date();
        const diffDays = Math.floor(Math.abs(today - lmp) / (1000 * 60 * 60 * 24));
        const weeks = Math.floor(diffDays / 7);
        const days = diffDays % 7;
        const daysLeft = Math.ceil((edd - today) / (1000 * 60 * 60 * 24));
        document.getElementById(&#39;outWeeks&#39;).innerText = weeks + &quot; Minggu &quot; + days + &quot; Hari&quot;;
        document.getElementById(&#39;outDaysLeft&#39;).innerText = daysLeft &gt; 0 ? daysLeft : 0;
        let progress = Math.min(Math.round((diffDays / 280) * 100), 100);
        document.getElementById(&#39;pgBar&#39;).style.width = progress + &#39;%&#39;;
        document.getElementById(&#39;pgBar&#39;).innerText = progress + &#39;%&#39;;
        let tri = (weeks &lt; 13) ? &quot;Trimester 1 (Awal)&quot; : (weeks &lt; 27) ? &quot;Trimester 2 (Pertengahan)&quot; : &quot;Trimester 3 (Akhir)&quot;;
        document.getElementById(&#39;outTrimester&#39;).innerText = tri.toUpperCase();
        janaChecklist(weeks);
        document.getElementById(&#39;resultArea&#39;).style.display = &#39;block&#39;;
        document.getElementById(&#39;resultArea&#39;).scrollIntoView({ behavior: &#39;smooth&#39; });
    }

    function janaChecklist(w) {
        let list = [];
        if (w &gt;= 0) list.push(&quot;Mula ambil Asid Folik setiap hari.&quot;, &quot;Sahkan kehamilan dengan UPT atau Klinik.&quot;);
        if (w &gt;= 8 &amp;&amp; w &lt;= 12) list.push(&quot;Masa terbaik &#39;Buka Buku Pink&#39; di KK/Klinik Swasta.&quot;, &quot;Ujian darah &amp; kencing pertama.&quot;);
        if (w &gt;= 18 &amp;&amp; w &lt;= 22) list.push(&quot;Masa untuk &#39;Detail Scan&#39; (Cek organ baby &amp; jantina).&quot;);
        if (w &gt;= 24 &amp;&amp; w &lt;= 28) list.push(&quot;Ujian MGTT (Minum air gula) untuk kencing manis.&quot;);
        if (w &gt;= 28) list.push(&quot;Mula pantau &#39;Kick Count&#39; (Gerakan bayi 10 kali sehari).&quot;);
        if (w &gt;= 36) list.push(&quot;Check posisi kepala baby &amp; sediakan beg hospital.&quot;);
        let html = &quot;&quot;;
        list.forEach(item =&gt; { html += `&lt;div class=&quot;check-item&quot;&gt;&lt;span class=&quot;check-bullet&quot;&gt;♥&lt;/span&gt; ${item}&lt;/div&gt;`; });
        document.getElementById(&#39;checklistContent&#39;).innerHTML = html;
    }

    function shareWA() {
        const edd = document.getElementById(&#39;outEDD&#39;).innerText;
        const minggu = document.getElementById(&#39;outWeeks&#39;).innerText;
        const txt = &quot;Saya dah kira tarikh bersalin (EDD). Jangkaan pada &quot; + edd + &quot;. Sekarang dah &quot; + minggu + &quot;. Jom ibu-ibu kira EDD &amp; tengok checklist di sini: &quot; + window.location.href;
        window.open(&quot;https://wa.me/?text=&quot; + encodeURIComponent(txt), &quot;_blank&quot;);
    }
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/7155351976483596977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-edd-checklist-kehamilan-malaysia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/7155351976483596977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/7155351976483596977'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-edd-checklist-kehamilan-malaysia.html' title='Kalkulator EDD Malaysia: Kira Tarikh Bersalin &amp; Checklist Kehamilan'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8LD-RPIUCc1eXkzLGXQ2eFK26QvRkFo2crE5dae_9GxLRaoSnLLCw-JhKfpbcE9UBmWlolR_SXdCNNm8AXq0uTZ7ABSAcsQ1JxhQRTqmn2uiJznnJ0zFzPJyEbDzRhQv1tbePlc-EyFbuQuw90m_DXSd_KbC4nXNawkMQOazMhtDg82gt9oRbiSATm5I/s72-c/1000001622.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-688947934995852161</id><published>2026-01-10T00:19:00.008+08:00</published><updated>2026-01-15T23:10:22.575+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Countdown Pencen"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator Digital"/><category scheme="http://www.blogger.com/atom/ns#" term="Penjawat Awam"/><category scheme="http://www.blogger.com/atom/ns#" term="Persaraan"/><title type='text'>Kalkulator Countdown Pencen Online: Kira Baki Hari Merdeka Anda!</title><content type='html'>&lt;head&gt;
    &lt;title&gt;Kalkulator Countdown Pencen Online Malaysia | Kira Detik Merdeka&lt;/title&gt;
    &lt;meta name=&quot;description&quot; content=&quot;Semak tarikh persaraan dan baki hari pencen anda secara live. Kalkulator detik pencen paling tepat untuk penjawat awam dan swasta di Malaysia. Percuma &amp; pantas!&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;kalkulator pencen online, kira tarikh bersara, countdown pencen cikgu, baki hari kerja, persaraan malaysia 2026&quot;&gt;
    
    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org/&quot;,
      &quot;@type&quot;: &quot;WebApplication&quot;,
      &quot;name&quot;: &quot;Kalkulator Countdown Pencen Malaysia&quot;,
      &quot;description&quot;: &quot;Aplikasi web untuk mengira baki hari, bulan, dan tahun menuju tarikh persaraan secara real-time.&quot;,
      &quot;applicationCategory&quot;: &quot;LifeStyleApplication&quot;,
      &quot;operatingSystem&quot;: &quot;All&quot;,
      &quot;offers&quot;: {
        &quot;@type&quot;: &quot;Offer&quot;,
        &quot;price&quot;: &quot;0&quot;,
        &quot;priceCurrency&quot;: &quot;MYR&quot;
      }
    }
    &lt;/script&gt;

    &lt;meta property=&quot;og:title&quot; content=&quot;Kalkulator Countdown Pencen Online Malaysia&quot; /&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;Kira baki hari &#39;Merdeka&#39; anda dari alam pekerjaan sekarang!&quot; /&gt;
    &lt;meta property=&quot;og:image&quot; content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_a2x0br6V5jy5XtjG_dgUjCc9o7kocYCYOqs_LfPmRjoKWkPqcB1zM72h_qey-9GoM7LO_F2CBqh1m0P31iD6_U2sU2wxAMWSP48tEEpJcTbGqN2n45eYVsvV94sFQcCTXZbt8Am2iNiRLNBrqqOrHmZC5YObr_wD1zPrG97hcusQUPn5ziHMMHc8GoU/s1100/1000001620.jpg&quot; /&gt;
&lt;/head&gt;

&lt;style&gt;
    :root { --p: #01579b; --s: #ffa000; --bg: #f0f4f8; --white: #ffffff; --shopee: #ee4d2d; }
    
    .app-card { max-width: 800px; margin: 20px auto; background: var(--white); border-radius: 15px; box-shadow: 0 10px 40px rgba(0,0,0,0.15); overflow: hidden; border: 1px solid #ddd; font-family: &#39;Segoe UI&#39;, sans-serif; }
    
    .hero-box { width: 100%; border-bottom: 5px solid var(--s); overflow: hidden; }
    .hero-box img { width: 100%; display: block; height: auto; }

    .intro-section { padding: 25px; background: #e1f5fe; text-align: center; border-bottom: 1px solid #b3e5fc; line-height: 1.6; }
    .intro-section h1 { color: var(--p); margin: 0; font-size: 22px; font-weight: 800; }
    .intro-section p { margin-top: 10px; font-size: 14px; color: #444; }
    
    .main-content { padding: 25px; }
    .input-grp { background: #f9f9f9; padding: 20px; border-radius: 12px; border: 1px solid #eee; margin-bottom: 25px; }
    label { display: block; font-weight: bold; color: var(--p); font-size: 13px; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.5px; }
    input, select { width: 100%; padding: 12px; border: 2px solid #cfd8dc; border-radius: 8px; font-size: 16px; margin-bottom: 15px; box-sizing: border-box; }
    
    .btn-kira { width: 100%; padding: 16px; background: var(--p); color: white; border: none; border-radius: 10px; font-weight: bold; font-size: 18px; cursor: pointer; box-shadow: 0 5px 0 #013b69; transition: 0.2s; }
    .btn-kira:active { transform: translateY(3px); box-shadow: none; }

    #resultArea { display: none; margin-top: 30px; border-radius: 15px; overflow: hidden; box-shadow: 0 15px 30px rgba(1,87,155,0.25); }
    .res-header { background: var(--p); color: white; padding: 25px; text-align: center; }
    .res-body { background: #0277bd; color: white; padding: 30px 20px; text-align: center; }
    .res-date { font-size: 26px; font-weight: bold; color: var(--s); margin-top: 10px; }
    
    .output-box { background: rgba(255,255,255,0.1); border-radius: 15px; padding: 30px 15px; margin-bottom: 25px; border: 1px solid rgba(255,255,255,0.2); }
    .total-label { font-size: 11px; text-transform: uppercase; letter-spacing: 2px; display: block; opacity: 0.9; }
    .total-days { font-size: 55px; font-weight: 900; line-height: 1; display: block; margin: 15px 0; color: #fff; text-shadow: 2px 2px 5px rgba(0,0,0,0.4); }
    
    .timer-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 20px; }
    .timer-box { background: rgba(0,0,0,0.25); padding: 12px 5px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.15); }
    .timer-val { display: block; font-size: 22px; font-weight: bold; color: var(--s); }
    .timer-label { font-size: 10px; text-transform: uppercase; opacity: 0.8; letter-spacing: 1px; }

    .share-btn { display: inline-block; margin-top: 30px; background: #25d366; color: white; padding: 16px 35px; border-radius: 50px; text-decoration: none; font-weight: bold; box-shadow: 0 5px 15px rgba(37,211,102,0.4); }

    /* SHOPEE AFFILIATE BOX */
    .aff-wrapper { margin-top: 30px; display: flex; flex-direction: column; gap: 15px; }
    .aff-box { background: #fff; border-radius: 12px; border: 2px solid var(--shopee); padding: 15px; display: flex; align-items: center; gap: 15px; box-shadow: 0 4px 10px rgba(0,0,0,0.05); }
    .aff-img { font-size: 40px; width: 70px; height: 70px; background: #fff5f2; border-radius: 10px; display: flex; align-items: center; justify-content: center; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 15px; }
    .btn-shopee { background: var(--shopee); color: white !important; text-decoration: none !important; padding: 8px 15px; border-radius: 5px; font-weight: bold; font-size: 12px; display: inline-block; margin-top: 8px; }

    /* FAQ &amp; DISCLAIMER */
    .faq-sec { margin-top: 40px; border-top: 1px solid #ddd; padding-top: 20px; text-align: left; }
    .faq-sec h3 { color: var(--p); font-size: 18px; }
    .disclaimer { font-size: 11px; color: #777; margin-top: 30px; border-left: 3px solid #ccc; padding-left: 10px; line-height: 1.4; text-align: left; }
    .cta-box { background: #fff3cd; padding: 15px; border-radius: 8px; margin-top: 25px; font-weight: bold; color: #856404; font-size: 14px; }

    @media (max-width: 480px) {
        .total-days { font-size: 45px; }
        .timer-val { font-size: 18px; }
        .aff-box { flex-direction: column; text-align: center; }
    }
&lt;/style&gt;

&lt;div class=&quot;app-card&quot;&gt;
    &lt;div class=&quot;hero-box&quot;&gt;
        &lt;img alt=&quot;Kalkulator Countdown Pencen Online Apps Cikgu Digital&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_a2x0br6V5jy5XtjG_dgUjCc9o7kocYCYOqs_LfPmRjoKWkPqcB1zM72h_qey-9GoM7LO_F2CBqh1m0P31iD6_U2sU2wxAMWSP48tEEpJcTbGqN2n45eYVsvV94sFQcCTXZbt8Am2iNiRLNBrqqOrHmZC5YObr_wD1zPrG97hcusQUPn5ziHMMHc8GoU/s1100/1000001620.jpg&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;intro-section&quot;&gt;
        &lt;h1&gt;Kalkulator Countdown Pencen Online&lt;/h1&gt;
        &lt;p&gt;Semak baki masa anda menuju hari persaraan dengan tepat. Masukkan tarikh lahir dan lihat detik kebebasan anda bermula hari ini!&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;main-content&quot;&gt;
        &lt;div class=&quot;input-grp&quot;&gt;
            &lt;label&gt;Masukkan Tarikh Lahir:&lt;/label&gt;
            &lt;input type=&quot;date&quot; id=&quot;birthDate&quot;&gt;
            
            &lt;label&gt;Pilihan Umur Bersara:&lt;/label&gt;
            &lt;select id=&quot;retireAge&quot; onchange=&quot;toggleManual()&quot;&gt;
                &lt;option value=&quot;60&quot;&gt;60 Tahun (Standard Malaysia)&lt;/option&gt;
                &lt;option value=&quot;58&quot;&gt;58 Tahun&lt;/option&gt;
                &lt;option value=&quot;56&quot;&gt;56 Tahun&lt;/option&gt;
                &lt;option value=&quot;55&quot;&gt;55 Tahun&lt;/option&gt;
                &lt;option value=&quot;manual&quot;&gt;PILIH SENDIRI (MANUAL)&lt;/option&gt;
            &lt;/select&gt;
            
            &lt;div id=&quot;manualInput&quot; style=&quot;display:none;&quot;&gt;
                &lt;label&gt;Taip Umur Pilihan (Cth: 40):&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;customAge&quot; placeholder=&quot;Masukkan umur persaraan idaman&quot;&gt;
            &lt;/div&gt;
            
            &lt;button class=&quot;btn-kira&quot; onclick=&quot;mulaKira()&quot;&gt;HITUNG DETIK MERDEKA SAYA&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;resultArea&quot;&gt;
            &lt;div class=&quot;res-header&quot;&gt;
                &lt;span class=&quot;total-label&quot;&gt;Tarikh Rasmi Persaraan Anda:&lt;/span&gt;
                &lt;div id=&quot;displayDate&quot; class=&quot;res-date&quot;&gt;-&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;res-body&quot;&gt;
                &lt;div class=&quot;output-box&quot;&gt;
                    &lt;span class=&quot;total-label&quot;&gt;Baki Masa Menuju Kebebasan:&lt;/span&gt;
                    &lt;span id=&quot;outDaysOnly&quot; class=&quot;total-days&quot;&gt;0&lt;/span&gt;
                    &lt;span class=&quot;total-label&quot;&gt;HARI LAGI&lt;/span&gt;
                &lt;/div&gt;

                &lt;div class=&quot;timer-grid&quot;&gt;
                    &lt;div class=&quot;timer-box&quot;&gt;&lt;span class=&quot;timer-val&quot; id=&quot;outY&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;timer-label&quot;&gt;Tahun&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;timer-box&quot;&gt;&lt;span class=&quot;timer-val&quot; id=&quot;outM&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;timer-label&quot;&gt;Bulan&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;timer-box&quot;&gt;&lt;span class=&quot;timer-val&quot; id=&quot;outD&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;timer-label&quot;&gt;Hari&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;timer-box&quot;&gt;&lt;span class=&quot;timer-val&quot; id=&quot;outH&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;timer-label&quot;&gt;Jam&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;timer-box&quot;&gt;&lt;span class=&quot;timer-val&quot; id=&quot;outMin&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;timer-label&quot;&gt;Minit&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;timer-box&quot;&gt;&lt;span class=&quot;timer-val&quot; id=&quot;outS&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;timer-label&quot;&gt;Saat&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;a href=&quot;#&quot; class=&quot;share-btn&quot; onclick=&quot;shareWA()&quot;&gt;KONGSI KE WHATSAPP STATUS&lt;/a&gt;
            &lt;/div&gt;
        &lt;/div&gt;

&lt;style&gt;
    .aff-wrapper { margin-top: 30px; display: flex; flex-direction: column; gap: 15px; }
    .aff-box { background: #fff; border-radius: 12px; border: 1px dashed #ccc; padding: 15px; display: flex; align-items: center; gap: 15px; position: relative; }
    .aff-img { font-size: 35px; width: 60px; height: 60px; background: #f9f9f9; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 15px; margin-bottom: 2px; }
    .aff-tag { font-size: 10px; color: #ee4d2d; font-weight: bold; text-transform: uppercase; border: 1px solid #ee4d2d; padding: 2px 5px; border-radius: 3px; display: inline-block; margin-bottom: 8px; }
    
    .btn-shopee-jujur { 
        background: #f5f5f5; 
        color: #555 !important; 
        text-decoration: none !important; 
        padding: 10px 15px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 5px; 
        border: 1px solid #ddd;
        transition: 0.3s;
    }
    .btn-shopee-jujur:hover { 
        background: #ee4d2d; 
        color: white !important; 
        border-color: #ee4d2d;
    }
    .shopee-hint { font-size: 11px; color: #999; margin-top: 5px; display: block; }
&lt;/style&gt;


      
      
&lt;style&gt;
    .aff-wrapper { max-width: 800px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #2e7d32; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #e8f5e9; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #c8e6c9; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #2e7d32 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #2e7d32; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #2e7d32; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Persediaan Menikmati Masa Persaraan:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🌱&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Set Berkebun Lengkap (Hobi Masa Lapang)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke aplikasi Shopee. Sila cari &lt;b&gt;&quot;Set Kebun Hidroponik&quot;&lt;/b&gt; atau &lt;b&gt;&quot;Peralatan Berkebun&quot;&lt;/b&gt; untuk mengisi masa lapang dengan aktiviti bermanfaat selepas pencen nanti.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;💰&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Buku Rujukan Pelaburan Emas &amp; Kewangan&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di Shopee, anda boleh terus cari &lt;b&gt;&quot;Buku Pelaburan Emas&quot;&lt;/b&gt; untuk mempelajari cara menguruskan wang gratuiti dan pencen anda dengan lebih bijak.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;      
      
      
      
      
        &lt;div class=&quot;cta-box&quot;&gt;
            Ingin tahu berapa kenaikan gaji SSPA anda? &lt;a href=&quot;https://layanlah.blogspot.com/2026/01/kalkulator-kenaikan-pangkat-sspa-rasmi.html&quot; style=&quot;color: #01579b;&quot;&gt;Klik sini untuk Kalkulator SSPA&lt;/a&gt;
        &lt;/div&gt;

        &lt;div class=&quot;faq-sec&quot;&gt;
            &lt;h3&gt;FAQ - Soalan Lazim&lt;/h3&gt;
            &lt;p&gt;&lt;b&gt;1. Adakah tarikh ini rasmi?&lt;/b&gt;&lt;br&gt;Kiraan ini berdasarkan hari lahir anda yang ke-60 (atau umur pilihan). Tarikh sebenar tertakluk kepada rekod HRMIS jabatan anda.&lt;/p&gt;
            &lt;p&gt;&lt;b&gt;2. Bolehkah saya kira untuk pencen awal?&lt;/b&gt;&lt;br&gt;Ya, gunakan pilihan &quot;Manual&quot; dan masukkan umur persaraan pilihan anda.&lt;/p&gt;
        &lt;/div&gt;

        &lt;div class=&quot;disclaimer&quot;&gt;
            &lt;b&gt;Disclaimer:&lt;/b&gt; Kalkulator Countdown Pencen ini adalah alat bantuan simulasi sahaja. Pihak kami tidak bertanggungjawab atas ralat kiraan. Sila rujuk pekeliling JPA terkini untuk urusan persaraan rasmi.
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    let timer;
    function toggleManual() { document.getElementById(&#39;manualInput&#39;).style.display = (document.getElementById(&#39;retireAge&#39;).value === &#39;manual&#39;) ? &#39;block&#39; : &#39;none&#39;; }
    
    function mulaKira() {
        const b = document.getElementById(&#39;birthDate&#39;).value;
        if (!b) return alert(&quot;Sila masukkan tarikh lahir!&quot;);
        let age = document.getElementById(&#39;retireAge&#39;).value;
        if(age === &#39;manual&#39;) age = document.getElementById(&#39;customAge&#39;).value;
        if(!age) return alert(&quot;Sila taip umur persaraan anda!&quot;);
        
        const bDate = new Date(b); 
        const rDate = new Date(bDate); 
        rDate.setFullYear(bDate.getFullYear() + parseInt(age));
        
        document.getElementById(&#39;displayDate&#39;).innerText = rDate.toLocaleDateString(&#39;ms-MY&#39;, {day:&#39;numeric&#39;, month:&#39;long&#39;, year:&#39;numeric&#39;});
        document.getElementById(&#39;resultArea&#39;).style.display = &#39;block&#39;;
        document.getElementById(&#39;resultArea&#39;).scrollIntoView({behavior:&#39;smooth&#39;});
        
        if(timer) clearInterval(timer);
        update(rDate); 
        timer = setInterval(() =&gt; update(rDate), 1000);
    }

    function update(target) {
        const now = new Date(); 
        const diff = target - now;
        if (diff &lt; 0) { document.querySelector(&#39;.res-body&#39;).innerHTML = &quot;&lt;h2&gt;SELAMAT BERSARA!&lt;/h2&gt;&quot;; clearInterval(timer); return; }
        
        document.getElementById(&#39;outDaysOnly&#39;).innerText = Math.floor(diff / (1000 * 60 * 60 * 24)).toLocaleString();
        
        let y = target.getFullYear() - now.getFullYear();
        let m = target.getMonth() - now.getMonth();
        let d = target.getDate() - now.getDate();
        if (d &lt; 0) { m--; d += new Date(target.getFullYear(), target.getMonth(), 0).getDate(); }
        if (m &lt; 0) { y--; m += 12; }
        
        document.getElementById(&#39;outY&#39;).innerText = y; 
        document.getElementById(&#39;outM&#39;).innerText = m; 
        document.getElementById(&#39;outD&#39;).innerText = d;
        document.getElementById(&#39;outH&#39;).innerText = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)).toString().padStart(2, &#39;0&#39;);
        document.getElementById(&#39;outMin&#39;).innerText = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)).toString().padStart(2, &#39;0&#39;);
        document.getElementById(&#39;outS&#39;).innerText = Math.floor((diff % (1000 * 60)) / 1000).toString().padStart(2, &#39;0&#39;);
    }

    function shareWA() {
        const h = document.getElementById(&#39;outDaysOnly&#39;).innerText;
        const t = document.getElementById(&#39;displayDate&#39;).innerText;
        const txt = &quot;Baki hari pencen saya tinggal &quot; + h + &quot; HARI lagi. Tarikh persaraan saya pada &quot; + t + &quot;. Tak sabar nak santai kat pantai! Jom kira detik pencen anda di sini: &quot; + window.location.href;
        window.open(&quot;https://wa.me/?text=&quot; + encodeURIComponent(txt), &quot;_blank&quot;);
    }
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/688947934995852161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-countdown-pencen-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/688947934995852161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/688947934995852161'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/kalkulator-countdown-pencen-online.html' title='Kalkulator Countdown Pencen Online: Kira Baki Hari Merdeka Anda!'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_a2x0br6V5jy5XtjG_dgUjCc9o7kocYCYOqs_LfPmRjoKWkPqcB1zM72h_qey-9GoM7LO_F2CBqh1m0P31iD6_U2sU2wxAMWSP48tEEpJcTbGqN2n45eYVsvV94sFQcCTXZbt8Am2iNiRLNBrqqOrHmZC5YObr_wD1zPrG97hcusQUPn5ziHMMHc8GoU/s72-c/1000001620.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-6764332536563994638</id><published>2026-01-09T23:44:00.008+08:00</published><updated>2026-01-15T23:11:36.964+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Bisnes Online"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Slip Gaji"/><title type='text'>Generator Slip Gaji Online Percuma (SOP Malaysia) | Siap PDF 1 Minit</title><content type='html'>&lt;head&gt;
    &lt;title&gt;Generator Slip Gaji Online Percuma (SOP Malaysia) | Siap PDF 1 Minit&lt;/title&gt;
    &lt;meta name=&quot;description&quot; content=&quot;Bina slip gaji pekerja profesional secara percuma. Pengiraan automatik KWSP (11%), PERKESO &amp; EIS. Lengkap dengan fungsi potongan advance &amp; OT. Muat turun PDF segera!&quot;&gt;
    
    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org/&quot;,
      &quot;@type&quot;: &quot;WebApplication&quot;,
      &quot;name&quot;: &quot;Generator Slip Gaji Online Malaysia&quot;,
      &quot;url&quot;: &quot;https://bloganda.com&quot;,
      &quot;description&quot;: &quot;Alat digital percuma untuk menjana slip gaji pekerja dengan pengiraan statutori automatik mengikut kadar Malaysia.&quot;,
      &quot;applicationCategory&quot;: &quot;BusinessApplication&quot;,
      &quot;operatingSystem&quot;: &quot;All&quot;,
      &quot;offers&quot;: {
        &quot;@type&quot;: &quot;Offer&quot;,
        &quot;price&quot;: &quot;0&quot;,
        &quot;priceCurrency&quot;: &quot;MYR&quot;
      }
    }
    &lt;/script&gt;
&lt;/head&gt;

&lt;style&gt;
    :root { --p: #1b5e20; --s: #4a4a4a; --bg: #f5f5f5; --gold: #d4af37; --red: #c0392b; }
    body { background: var(--bg); font-family: &#39;Segoe UI&#39;, sans-serif; margin: 0; color: #333; }
    
    .app-card { max-width: 1000px; margin: 20px auto; background: white; border-radius: 12px; box-shadow: 0 10px 40px rgba(0,0,0,0.2); overflow: hidden; border: 1px solid #ddd; }
    
    /* SEO HERO IMAGE */
    .hero-box { width: 100%; border-bottom: 5px solid var(--gold); overflow: hidden; }
    .hero-box img { width: 100%; display: block; height: auto; }

    .intro-seo { padding: 25px; background: #e8f5e9; border-bottom: 1px solid #c8e6c9; line-height: 1.6; }
    .intro-seo h1 { color: var(--p); margin: 0 0 10px 0; font-size: 24px; text-align: center; }
    .intro-seo p { margin: 0; font-size: 14px; color: #444; text-align: justify; }
    
    .main-content { padding: 25px; }
    .row { display: flex; flex-wrap: wrap; gap: 20px; }
    .col { flex: 1; min-width: 310px; }
    
    /* UI FORM */
    .grp-box { background: #fff; border: 1px solid #eee; padding: 15px; border-radius: 8px; margin-bottom: 15px; border-left: 5px solid var(--p); }
    .grp-title { font-weight: bold; color: var(--p); margin-bottom: 12px; font-size: 13px; text-transform: uppercase; border-bottom: 1px solid #eee; padding-bottom: 5px; }
    
    label { display: block; font-weight: bold; font-size: 11px; color: #555; margin-bottom: 3px; }
    input, select { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 5px; font-size: 14px; box-sizing: border-box; margin-bottom: 8px; }
    .caps { text-transform: uppercase; }

    .dynamic-row { display: flex; gap: 8px; margin-bottom: 8px; align-items: flex-start; }
    .btn-del { background: var(--red); color: white; border: none; padding: 10px; border-radius: 5px; cursor: pointer; font-weight: bold; }
    .btn-add { background: var(--p); color: white; border: none; padding: 10px; border-radius: 6px; cursor: pointer; font-size: 12px; font-weight: bold; width: 100%; margin-bottom: 15px; }

    .result-box { background: #f9f9f9; padding: 20px; border-radius: 10px; border: 2px dashed var(--p); }
    .res-row { display: flex; justify-content: space-between; font-size: 14px; margin-bottom: 5px; }
    .res-total { border-top: 2px solid var(--p); padding-top: 10px; font-weight: bold; color: var(--p); font-size: 22px; }

    .btn-pdf { width: 100%; padding: 18px; border: none; background: var(--red); color: white; font-weight: bold; border-radius: 10px; font-size: 18px; cursor: pointer; margin-top: 20px; box-shadow: 0 4px 0 #922b21; }
    .btn-pdf:hover { background: #e74c3c; transform: translateY(-2px); }
    
    .manual-name { background: #fffde7 !important; border: 1px solid #ffd600 !important; font-size: 12px !important; margin-top: 5px; }
    
    .cta-wa { background: #25d366; color: white; text-align: center; padding: 12px; border-radius: 8px; text-decoration: none; display: block; margin-top: 15px; font-weight: bold; font-size: 14px; }

    @media (max-width: 600px) { .row { flex-direction: column; } }
&lt;/style&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.29/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;div class=&quot;app-card&quot;&gt;
    &lt;div class=&quot;hero-box&quot;&gt;
        &lt;img alt=&quot;Generator Slip Gaji Digital Apps Cikgu Digital Malaysia&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfQHemPIwh97kQkEnWW86YepDq1lVTZltLpzTDlSRgg4VCQNK8MMgy4nz3Fw9wEu0YTdFahcSGkPctTDPoXzL8DqddiDD0_eJ6lv8GkScX0V26plZ_SfrJBpVZHpz2AR8heElyrRcDW53lgiEOTzQmj1GP9GeLo48wbp6mJXDhvVsWzlroeqWoYfWrv_0/s1100/1000001612.jpg&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;intro-seo&quot;&gt;
        &lt;h1&gt;Generator Slip Gaji Online Percuma&lt;/h1&gt;
        &lt;p&gt;Bina slip gaji profesional untuk pekerja syarikat anda dengan &lt;b&gt;Penyata Gaji Digital&lt;/b&gt;. Sistem kami menyediakan pengiraan automatik untuk caruman KWSP, PERKESO, dan SIP (EIS) mengikut kadar semasa di Malaysia. Anda juga boleh menambah kategori pendapatan (OT/Elaun) dan potongan (Advance/Pinjaman) secara dinamik. Percuma dan siap dalam 1 minit!&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;main-content&quot;&gt;
        &lt;div class=&quot;row&quot;&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;div class=&quot;grp-box&quot;&gt;
                    &lt;div class=&quot;grp-title&quot;&gt;1. Butiran Majikan &amp; Pekerja&lt;/div&gt;
                    &lt;label&gt;NAMA SYARIKAT / MAJIKAN:&lt;/label&gt;
                    &lt;input type=&quot;text&quot; id=&quot;m_sykt&quot; class=&quot;caps&quot; placeholder=&quot;Cth: RESTORAN MAJU JAYA&quot;&gt;
                    &lt;label&gt;NAMA PENUH PEKERJA:&lt;/label&gt;
                    &lt;input type=&quot;text&quot; id=&quot;p_nama&quot; class=&quot;caps&quot; placeholder=&quot;Cth: AHMAD BIN ALI&quot;&gt;
                    &lt;label&gt;BULAN GAJI:&lt;/label&gt;
                    &lt;input type=&quot;month&quot; id=&quot;g_bulan&quot; onchange=&quot;kiraSemua()&quot;&gt;
                &lt;/div&gt;

                &lt;div class=&quot;grp-box&quot; style=&quot;border-left-color: var(--gold);&quot;&gt;
                    &lt;div class=&quot;grp-title&quot;&gt;2. Pendapatan (Earnings)&lt;/div&gt;
                    &lt;label&gt;GAJI POKOK (BASIC):&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;v_basic&quot; value=&quot;0.00&quot; onclick=&quot;this.select()&quot; oninput=&quot;kiraSemua()&quot;&gt;
                    
                    &lt;div id=&quot;earnContainer&quot;&gt;&lt;/div&gt;
                    &lt;button type=&quot;button&quot; class=&quot;btn-add&quot; onclick=&quot;tambahBaris(&#39;earnContainer&#39;, &#39;earn&#39;)&quot;&gt;+ TAMBAH PENDAPATAN (OT/ELAUN)&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;col&quot;&gt;
                &lt;div class=&quot;grp-box&quot; style=&quot;border-left-color: var(--red);&quot;&gt;
                    &lt;div class=&quot;grp-title&quot;&gt;3. Potongan (Deductions)&lt;/div&gt;
                    &lt;div class=&quot;res-row&quot;&gt;&lt;span&gt;KWSP (EPF) 11%:&lt;/span&gt;&lt;span id=&quot;out_epf&quot;&gt;RM 0.00&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;res-row&quot;&gt;&lt;span&gt;PERKESO (SOCSO):&lt;/span&gt;&lt;span id=&quot;out_socso&quot;&gt;RM 0.00&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;res-row&quot;&gt;&lt;span&gt;SIP (EIS):&lt;/span&gt;&lt;span id=&quot;out_eis&quot;&gt;RM 0.00&lt;/span&gt;&lt;/div&gt;
                    
                    &lt;div id=&quot;deductContainer&quot; style=&quot;margin-top:10px; border-top:1px solid #eee; padding-top:10px;&quot;&gt;&lt;/div&gt;
                    &lt;button type=&quot;button&quot; class=&quot;btn-add&quot; style=&quot;background:var(--red)&quot; onclick=&quot;tambahBaris(&#39;deductContainer&#39;, &#39;ded&#39;)&quot;&gt;+ TAMBAH POTONGAN (ADVANCE/PINJAMAN)&lt;/button&gt;
                &lt;/div&gt;

                &lt;div class=&quot;result-box&quot;&gt;
                    &lt;div class=&quot;res-row&quot;&gt;&lt;span&gt;Gaji Kasar (Gross):&lt;/span&gt;&lt;span id=&quot;out_gross&quot;&gt;RM 0.00&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;res-row&quot;&gt;&lt;span&gt;Jumlah Potongan:&lt;/span&gt;&lt;span id=&quot;out_deduct&quot;&gt;RM 0.00&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;res-row res-total&quot;&gt;
                        &lt;span&gt;GAJI BERSIH:&lt;/span&gt;
                        &lt;span id=&quot;out_net&quot;&gt;RM 0.00&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn-pdf&quot; onclick=&quot;janaPDF()&quot;&gt;📥 MUAT TURUN PDF SLIP GAJI&lt;/button&gt;
        &lt;a href=&quot;#&quot; class=&quot;cta-wa&quot; onclick=&quot;shareWA()&quot;&gt;📢 KONGSI APPS INI DI WHATSAPP&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;style&gt;
    .aff-wrapper { max-width: 800px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #e8f0fe; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #d2e3fc; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Keperluan Pengurusan Pejabat &amp; Rekod:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🖨️&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Pencetak (Printer) &amp; Pengimbas Dokumen&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee untuk menebus baucar. Sila cari &lt;b&gt;&quot;Wireless Printer&quot;&lt;/b&gt; untuk memudahkan urusan mencetak slip gaji dan dokumen pejabat anda.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;📁&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Sistem Fail &amp; Storan Dokumen Sistematik&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;Document Organizer File&quot;&lt;/b&gt; bagi memastikan rekod gaji pekerja anda tersimpan dengan rapi dan selamat.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;script&gt;
    // Set Default Month
    document.getElementById(&#39;g_bulan&#39;).value = new Date().toISOString().substring(0, 7);

    // FUNGSI TAMBAH BARIS
    function tambahBaris(containerId, jenis) {
        const container = document.getElementById(containerId);
        const row = document.createElement(&#39;div&#39;);
        row.className = &#39;dynamic-row&#39;;
        
        const opts = jenis === &#39;earn&#39; 
            ? [&#39;OT (OVERTIME)&#39;, &#39;BONUS&#39;, &#39;KOMISYEN&#39;, &#39;ELAUN&#39;, &#39;LAIN-LAIN (MANUAL)&#39;]
            : [&#39;ADVANCE GAJI&#39;, &#39;CUTI TANPA GAJI&#39;, &#39;PINJAMAN&#39;, &#39;DENDA&#39;, &#39;ZAKAT&#39;, &#39;LAIN-LAIN (MANUAL)&#39;];

        let optionsHtml = &#39;&#39;;
        opts.forEach(opt =&gt; optionsHtml += `&lt;option value=&quot;${opt}&quot;&gt;${opt}&lt;/option&gt;`);

        row.innerHTML = `
            &lt;div style=&quot;flex:2&quot;&gt;
                &lt;select class=&quot;row-type&quot; onchange=&quot;tunjukManual(this); kiraSemua()&quot;&gt;
                    ${optionsHtml}
                &lt;/select&gt;
                &lt;input type=&quot;text&quot; class=&quot;manual-name caps&quot; placeholder=&quot;Taip kategori...&quot; style=&quot;display:none&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;flex:1&quot;&gt;
                &lt;input type=&quot;number&quot; class=&quot;row-val&quot; value=&quot;0.00&quot; onclick=&quot;this.select()&quot; oninput=&quot;kiraSemua()&quot;&gt;
            &lt;/div&gt;
            &lt;button class=&quot;btn-del&quot; onclick=&quot;this.parentElement.remove(); kiraSemua()&quot;&gt;X&lt;/button&gt;
        `;
        container.appendChild(row);
        kiraSemua();
    }

    function tunjukManual(sel) {
        const input = sel.parentElement.querySelector(&#39;.manual-name&#39;);
        input.style.display = (sel.value.includes(&#39;MANUAL&#39;)) ? &#39;block&#39; : &#39;none&#39;;
    }

    function kiraSemua() {
        const basic = parseFloat(document.getElementById(&#39;v_basic&#39;).value) || 0;
        
        // Pengiraan Standard Malaysia
        const epf = basic * 0.11;
        const socso = basic &gt; 0 ? Math.min(basic * 0.005, 19.75) : 0;
        const eis = basic &gt; 0 ? Math.min(basic * 0.002, 7.90) : 0;

        let extraEarn = 0;
        document.querySelectorAll(&#39;#earnContainer .dynamic-row&#39;).forEach(r =&gt; {
            extraEarn += parseFloat(r.querySelector(&#39;.row-val&#39;).value) || 0;
        });

        let extraDed = 0;
        document.querySelectorAll(&#39;#deductContainer .dynamic-row&#39;).forEach(r =&gt; {
            extraDed += parseFloat(r.querySelector(&#39;.row-val&#39;).value) || 0;
        });

        const gross = basic + extraEarn;
        const totalDed = epf + socso + eis + extraDed;
        const net = gross - totalDed;

        document.getElementById(&#39;out_epf&#39;).innerText = `RM ${epf.toFixed(2)}`;
        document.getElementById(&#39;out_socso&#39;).innerText = `RM ${socso.toFixed(2)}`;
        document.getElementById(&#39;out_eis&#39;).innerText = `RM ${eis.toFixed(2)}`;
        document.getElementById(&#39;out_gross&#39;).innerText = `RM ${gross.toFixed(2)}`;
        document.getElementById(&#39;out_deduct&#39;).innerText = `RM ${totalDed.toFixed(2)}`;
        document.getElementById(&#39;out_net&#39;).innerText = `RM ${net.toFixed(2)}`;
    }

    function janaPDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();
        
        const sykt = document.getElementById(&#39;m_sykt&#39;).value.toUpperCase() || &quot;MAJIKAN MARHAEN&quot;;
        const nama = document.getElementById(&#39;p_nama&#39;).value.toUpperCase() || &quot;NAMA PEKERJA&quot;;
        const bRaw = document.getElementById(&#39;g_bulan&#39;).value;
        const dObj = new Date(bRaw);
        const bStr = `${dObj.toLocaleString(&#39;default&#39;, { month: &#39;long&#39; }).toUpperCase()} ${dObj.getFullYear()}`;

        // Header PDF
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.setFontSize(18); doc.setTextColor(27, 94, 32);
        doc.text(&quot;PENYATA GAJI PEKERJA&quot;, 105, 20, {align: &quot;center&quot;});
        doc.setFontSize(10); doc.setTextColor(0);
        doc.text(sykt, 105, 27, {align: &quot;center&quot;});
        doc.line(20, 32, 190, 32);

        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(`NAMA PEKERJA: ${nama}`, 20, 42);
        doc.text(`BULAN: ${bStr}`, 190, 42, {align: &quot;right&quot;});

        // Table Body Construction
        const eData = [[&#39;GAJI POKOK (BASIC)&#39;, (parseFloat(document.getElementById(&#39;v_basic&#39;).value)||0).toFixed(2)]];
        document.querySelectorAll(&#39;#earnContainer .dynamic-row&#39;).forEach(r =&gt; {
            let L = r.querySelector(&#39;.row-type&#39;).value;
            if(L.includes(&#39;MANUAL&#39;)) L = r.querySelector(&#39;.manual-name&#39;).value || &quot;PENDAPATAN LAIN&quot;;
            eData.push([L, (parseFloat(r.querySelector(&#39;.row-val&#39;).value)||0).toFixed(2)]);
        });

        const dData = [
            [&#39;KWSP (11%)&#39;, (parseFloat(document.getElementById(&#39;out_epf&#39;).innerText.replace(&#39;RM &#39;,&#39;&#39;))).toFixed(2)],
            [&#39;PERKESO (SOCSO)&#39;, (parseFloat(document.getElementById(&#39;out_socso&#39;).innerText.replace(&#39;RM &#39;,&#39;&#39;))).toFixed(2)],
            [&#39;SIP (EIS)&#39;, (parseFloat(document.getElementById(&#39;out_eis&#39;).innerText.replace(&#39;RM &#39;,&#39;&#39;))).toFixed(2)]
        ];
        document.querySelectorAll(&#39;#deductContainer .dynamic-row&#39;).forEach(r =&gt; {
            let L = r.querySelector(&#39;.row-type&#39;).value;
            if(L.includes(&#39;MANUAL&#39;)) L = r.querySelector(&#39;.manual-name&#39;).value || &quot;POTONGAN LAIN&quot;;
            dData.push([L, (parseFloat(r.querySelector(&#39;.row-val&#39;).value)||0).toFixed(2)]);
        });

        const tableBody = [];
        const m = Math.max(eData.length, dData.length);
        for(let i=0; i&lt;m; i++) {
            tableBody.push([
                eData[i] ? eData[i][0] : &#39;&#39;, eData[i] ? eData[i][1] : &#39;&#39;,
                dData[i] ? dData[i][0] : &#39;&#39;, dData[i] ? dData[i][1] : &#39;&#39;
            ]);
        }

        doc.autoTable({
            startY: 50,
            head: [[&#39;PENDAPATAN&#39;, &#39;RM&#39;, &#39;POTONGAN&#39;, &#39;RM&#39;]],
            body: tableBody,
            theme: &#39;grid&#39;,
            headStyles: {fillColor: [27, 94, 32]}
        });

        let y = doc.lastAutoTable.finalY + 10;
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.setFontSize(10);
        doc.text(`GAJI KASAR: RM ${parseFloat(document.getElementById(&#39;out_gross&#39;).innerText.replace(&#39;RM &#39;,&#39;&#39;)).toFixed(2)}`, 20, y);
        doc.text(`TOTAL POTONGAN: RM ${parseFloat(document.getElementById(&#39;out_deduct&#39;).innerText.replace(&#39;RM &#39;,&#39;&#39;)).toFixed(2)}`, 190, y, {align: &quot;right&quot;});
        
        doc.setFillColor(232, 245, 233); doc.rect(20, y+5, 170, 12, &#39;F&#39;);
        doc.setFontSize(14); doc.setTextColor(27, 94, 32);
        doc.text(`GAJI BERSIH (NET PAY): ${document.getElementById(&#39;out_net&#39;).innerText}`, 105, y+13, {align: &quot;center&quot;});

        doc.setTextColor(0); doc.setFontSize(9);
        doc.text(&quot;Tandatangan Majikan,&quot;, 20, y+45);
        doc.text(&quot;Tandatangan Pekerja,&quot;, 190, y+45, {align: &quot;right&quot;});
        doc.text(&quot;_______________________&quot;, 20, y+65);
        doc.text(&quot;_______________________&quot;, 190, y+65, {align: &quot;right&quot;});

        doc.save(`SlipGaji_${nama.split(&#39; &#39;)[0]}_${bStr}.pdf`);
    }

    function shareWA() {
        const txt = `Bina slip gaji profesional dengan pengiraan KWSP &amp; SOCSO automatik dalam 1 minit. Memang memudahkan peniaga! 📝💵\n\nCuba sini: ${window.location.href}`;
        window.open(`https://wa.me/?text=${encodeURIComponent(txt)}`, &#39;_blank&#39;);
    }

    window.onload = kiraSemua;
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/6764332536563994638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-slip-gaji-online-malaysia.html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/6764332536563994638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/6764332536563994638'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-slip-gaji-online-malaysia.html.html' title='Generator Slip Gaji Online Percuma (SOP Malaysia) | Siap PDF 1 Minit'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfQHemPIwh97kQkEnWW86YepDq1lVTZltLpzTDlSRgg4VCQNK8MMgy4nz3Fw9wEu0YTdFahcSGkPctTDPoXzL8DqddiDD0_eJ6lv8GkScX0V26plZ_SfrJBpVZHpz2AR8heElyrRcDW53lgiEOTzQmj1GP9GeLo48wbp6mJXDhvVsWzlroeqWoYfWrv_0/s72-c/1000001612.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-8292794558766857149</id><published>2026-01-09T16:24:00.007+08:00</published><updated>2026-01-15T23:12:59.049+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Bisnes Online"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Invois &amp; Resit"/><category scheme="http://www.blogger.com/atom/ns#" term="Kalkulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Perniagaan Kecil"/><title type='text'>Generator Invois &amp; Resit Online Percuma (Siap PDF 1 Minit)</title><content type='html'>&lt;head&gt;
    &lt;title&gt;Generator Invois &amp; Resit Online Percuma | Bina PDF 1 Minit&lt;/title&gt;
    &lt;meta name=&quot;description&quot; content=&quot;Gunakan Generator Invois &amp; Resit digital untuk bina invois profesional secara percuma. Sesuai untuk peniaga kecil, runner, dan freelancer. Pengiraan automatik &amp; siap PDF!&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;generator invois online, buat resit rasmi percuma, invois digital pdf, apps peniaga kecil, invoice generator malaysia&quot;&gt;
    
    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org/&quot;,
      &quot;@type&quot;: &quot;WebApplication&quot;,
      &quot;name&quot;: &quot;Generator Invois &amp; Resit Malaysia&quot;,
      &quot;description&quot;: &quot;Alat digital percuma untuk menjana invois dan resit rasmi dalam format PDF secara automatik.&quot;,
      &quot;applicationCategory&quot;: &quot;BusinessApplication&quot;,
      &quot;operatingSystem&quot;: &quot;All&quot;,
      &quot;offers&quot;: {
        &quot;@type&quot;: &quot;Offer&quot;,
        &quot;price&quot;: &quot;0&quot;,
        &quot;priceCurrency&quot;: &quot;MYR&quot;
      }
    }
    &lt;/script&gt;
&lt;/head&gt;

&lt;style&gt;
    :root { --p: #0056b3; --s: #6c757d; --bg: #f8f9fa; --g: #28a745; --red: #c0392b; }
    body { background: var(--bg); font-family: &#39;Segoe UI&#39;, sans-serif; margin: 0; color: #333; }
    
    .app-card { max-width: 1000px; margin: 20px auto; background: white; border-radius: 12px; box-shadow: 0 10px 40px rgba(0,0,0,0.1); overflow: hidden; border: 1px solid #ddd; }
    
    /* SEO IMAGE BOX */
    .hero-box { width: 100%; border-bottom: 5px solid var(--p); overflow: hidden; }
    .hero-box img { width: 100%; display: block; height: auto; }

    .intro-seo { padding: 25px; background: #eef5ff; border-bottom: 1px solid #dce7f3; line-height: 1.6; }
    .intro-seo h1 { color: var(--p); margin: 0 0 10px 0; font-size: 24px; }
    .intro-seo p { margin: 0; font-size: 14px; color: #444; }
    
    .main-content { padding: 25px; }
    
    /* UI FORM */
    .row { display: flex; flex-wrap: wrap; gap: 15px; margin-bottom: 15px; }
    .col { flex: 1; min-width: 250px; }
    .grp-box { background: #fff; border: 1px solid #eee; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 5px solid var(--p); }
    
    label { display: block; font-weight: bold; font-size: 13px; margin-bottom: 5px; color: #555; }
    input, select, textarea { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 5px; font-size: 14px; box-sizing: border-box; }
    .caps { text-transform: uppercase; }

    /* TABLE ITEM */
    .item-table { width: 100%; border-collapse: collapse; margin-top: 10px; }
    .item-table th { background: #f1f1f1; padding: 12px; text-align: left; font-size: 13px; border: 1px solid #ddd; color: var(--p); }
    .item-table td { padding: 10px; border: 1px solid #ddd; }
    
    .btn { padding: 12px 25px; border: none; border-radius: 8px; font-weight: bold; cursor: pointer; transition: 0.3s; font-size: 15px; text-align: center; display: inline-block; }
    .btn-add { background: var(--p); color: white; margin-top: 10px; }
    .btn-add:hover { background: #003d80; }
    
    .btn-pdf { background: var(--red); color: white; width: 100%; font-size: 18px; margin-top: 25px; box-shadow: 0 5px 0 #922b21; }
    .btn-pdf:hover { background: #e74c3c; transform: translateY(-2px); }
    .btn-pdf:active { transform: translateY(3px); box-shadow: none; }

    .btn-wa { background: #25d366; color: white; margin-top: 20px; width: 100%; text-decoration: none; display: block; box-sizing: border-box; }

    /* SUMMARY AREA */
    .summary-area { margin-left: auto; width: 320px; margin-top: 20px; background: #f9f9f9; padding: 20px; border-radius: 10px; border: 1px solid #eee; }
    .total-row { display: flex; justify-content: space-between; margin-bottom: 8px; font-size: 15px; }
    .grand-total { font-size: 20px; font-weight: bold; color: var(--p); border-top: 2px solid #ddd; padding-top: 12px; margin-top: 12px; }

    @media (max-width: 600px) { .col { min-width: 100%; } .preview-side { display: none; } }
&lt;/style&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.29/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;div class=&quot;app-card&quot;&gt;
    &lt;div class=&quot;hero-box&quot;&gt;
        &lt;img alt=&quot;Generator Invois dan Resit Rasmi Digital Apps Cikgu Digital&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCitBmmbjaBfEsbRPi5dHU1aPNVJ0_VbRyyDii7pCJiXfP6mn4sK7tdY8BSSZ1zsmeAb8Upd-DcmV2bjJogCAw1neCp-vAG1gY6TvfmUC5kAN0eUvM2vAD311nBsOrEBKTIDn84rwcQ5FzJHAyifupVRVCg9Be2V7SU-nTfJbaCLfDTuex5VuEl8U5rnI/s1204/1000001553.jpg&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;intro-seo&quot;&gt;
        &lt;h1&gt;Generator Invois &amp; Resit Online&lt;/h1&gt;
        &lt;p&gt;Tingkatkan profesionalisme perniagaan anda dengan &lt;b&gt;Invois &amp; Resit Digital&lt;/b&gt;. Masukkan butiran jualan, biarkan sistem mengira jumlah secara automatik, dan muat turun fail PDF profesional dalam sekelip mata. Percuma, mudah, dan mesra mudah alih!&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;main-content&quot;&gt;
        &lt;div class=&quot;row&quot;&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;label&gt;JENIS DOKUMEN:&lt;/label&gt;
                &lt;select id=&quot;doc_type&quot;&gt;
                    &lt;option value=&quot;INVOIS&quot;&gt;INVOIS (INVOICE)&lt;/option&gt;
                    &lt;option value=&quot;RESIT RASMI&quot;&gt;RESIT RASMI (RECEIPT)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;label&gt;NO. DOKUMEN:&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;inv_no&quot; class=&quot;caps&quot; placeholder=&quot;Cth: INV-2026-001&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;label&gt;TARIKH:&lt;/label&gt;
                &lt;input type=&quot;date&quot; id=&quot;inv_date&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;row&quot;&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;div class=&quot;grp-box&quot;&gt;
                    &lt;label&gt;DARIPADA (PENJUAL):&lt;/label&gt;
                    &lt;textarea id=&quot;from_info&quot; class=&quot;caps&quot; style=&quot;height:100px&quot; placeholder=&quot;Nama Syarikat Anda&amp;#10;Alamat Penuh&amp;#10;No. Telefon / SSM&quot;&gt;&lt;/textarea&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;div class=&quot;grp-box&quot;&gt;
                    &lt;label&gt;KEPADA (PEMBELI):&lt;/label&gt;
                    &lt;textarea id=&quot;to_info&quot; class=&quot;caps&quot; style=&quot;height:100px&quot; placeholder=&quot;Nama Pelanggan&amp;#10;Alamat Penuh&quot;&gt;&lt;/textarea&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;grp-box&quot; style=&quot;border-left-color: var(--g);&quot;&gt;
            &lt;label&gt;SENARAI BARANGAN / SERVIS:&lt;/label&gt;
            &lt;table class=&quot;item-table&quot; id=&quot;itemTable&quot;&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th width=&quot;50%&quot;&gt;Deskripsi Item&lt;/th&gt;
                        &lt;th width=&quot;15%&quot;&gt;Kuantiti&lt;/th&gt;
                        &lt;th width=&quot;15%&quot;&gt;Harga Unit&lt;/th&gt;
                        &lt;th width=&quot;20%&quot;&gt;Jumlah (RM)&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody id=&quot;tbody&quot;&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;input type=&quot;text&quot; class=&quot;item-desc caps&quot; placeholder=&quot;Cth: Produk A&quot;&gt;&lt;/td&gt;
                        &lt;td&gt;&lt;input type=&quot;number&quot; class=&quot;item-qty&quot; value=&quot;1&quot; oninput=&quot;calculate()&quot;&gt;&lt;/td&gt;
                        &lt;td&gt;&lt;input type=&quot;number&quot; class=&quot;item-price&quot; value=&quot;0.00&quot; oninput=&quot;calculate()&quot;&gt;&lt;/td&gt;
                        &lt;td&gt;&lt;input type=&quot;text&quot; class=&quot;item-total&quot; value=&quot;0.00&quot; readonly style=&quot;background:#f9f9f9; font-weight:bold;&quot;&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;button class=&quot;btn btn-add&quot; onclick=&quot;addRow()&quot;&gt;+ TAMBAH BARIS BARU&lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&quot;row&quot;&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;div class=&quot;grp-box&quot;&gt;
                    &lt;label&gt;MAKLUMAT PEMBAYARAN:&lt;/label&gt;
                    &lt;textarea id=&quot;bank_info&quot; class=&quot;caps&quot; placeholder=&quot;Cth: MAYBANK 164212345678 (NAMA ANDA)&quot;&gt;&lt;/textarea&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;col&quot;&gt;
                &lt;div class=&quot;summary-area&quot;&gt;
                    &lt;div class=&quot;total-row&quot;&gt;
                        &lt;span&gt;Subtotal:&lt;/span&gt;
                        &lt;span id=&quot;subtotal&quot;&gt;RM 0.00&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;total-row&quot;&gt;
                        &lt;span&gt;Cukai / Servis (%):&lt;/span&gt;
                        &lt;input type=&quot;number&quot; id=&quot;tax_rate&quot; value=&quot;0&quot; style=&quot;width:70px; padding:5px&quot; oninput=&quot;calculate()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;total-row grand-total&quot;&gt;
                        &lt;span&gt;TOTAL:&lt;/span&gt;
                        &lt;span id=&quot;grand_total&quot;&gt;RM 0.00&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn btn-pdf&quot; onclick=&quot;generatePDF()&quot;&gt;📥 JANA PDF &amp; MUAT TURUN&lt;/button&gt;
        
        &lt;a id=&quot;wa_btn&quot; href=&quot;#&quot; class=&quot;btn btn-wa&quot; onclick=&quot;shareWA()&quot;&gt;📢 KONGSI APPS INI DI WHATSAPP&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
    .aff-wrapper { max-width: 800px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #f1f8e9; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #dcedc8; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Keperluan Perniagaan &amp; Pengurusan Resit:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;✒️&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Cop Syarikat Custom (Self-Inking Stamp)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee untuk menebus baucar. Sila cari &lt;b&gt;&quot;Custom Company Stamp&quot;&lt;/b&gt; untuk menempah cop rasmi syarikat bagi kegunaan invois dan resit anda.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;📄&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Kertas Pencetak &amp; Bekalan Alat Tulis Pejabat&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;A4 Paper 80gsm&quot;&lt;/b&gt; atau &lt;b&gt;&quot;Thermal Receipt Paper&quot;&lt;/b&gt; untuk stok cetakan invois perniagaan anda.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;script&gt;
    // Set default date
    document.getElementById(&#39;inv_date&#39;).value = new Date().toISOString().split(&#39;T&#39;)[0];

    function addRow() {
        const tr = document.createElement(&#39;tr&#39;);
        tr.innerHTML = `
            &lt;td&gt;&lt;input type=&quot;text&quot; class=&quot;item-desc caps&quot;&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;number&quot; class=&quot;item-qty&quot; value=&quot;1&quot; oninput=&quot;calculate()&quot;&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;number&quot; class=&quot;item-price&quot; value=&quot;0.00&quot; oninput=&quot;calculate()&quot;&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;text&quot; class=&quot;item-total&quot; value=&quot;0.00&quot; readonly style=&quot;background:#f9f9f9; font-weight:bold;&quot;&gt;&lt;/td&gt;
            &lt;td style=&quot;border:none; background:none;&quot;&gt;&lt;button onclick=&quot;this.parentElement.parentElement.remove();calculate()&quot; style=&quot;background:none;border:none;color:red;cursor:pointer;font-weight:bold;&quot;&gt;X&lt;/button&gt;&lt;/td&gt;
        `;
        document.getElementById(&#39;tbody&#39;).appendChild(tr);
    }

    function calculate() {
        let sub = 0;
        document.querySelectorAll(&#39;#tbody tr&#39;).forEach(row =&gt; {
            const q = parseFloat(row.querySelector(&#39;.item-qty&#39;).value) || 0;
            const p = parseFloat(row.querySelector(&#39;.item-price&#39;).value) || 0;
            const t = q * p;
            row.querySelector(&#39;.item-total&#39;).value = t.toFixed(2);
            sub += t;
        });
        const tax = parseFloat(document.getElementById(&#39;tax_rate&#39;).value) || 0;
        const total = sub + (sub * (tax / 100));
        document.getElementById(&#39;subtotal&#39;).innerText = `RM ${sub.toFixed(2)}`;
        document.getElementById(&#39;grand_total&#39;).innerText = `RM ${total.toFixed(2)}`;
    }

    function generatePDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();
        const type = document.getElementById(&#39;doc_type&#39;).value;
        const invNo = document.getElementById(&#39;inv_no&#39;).value || &quot;B/N&quot;;
        const date = document.getElementById(&#39;inv_date&#39;).value;
        const from = document.getElementById(&#39;from_info&#39;).value.toUpperCase();
        const to = document.getElementById(&#39;to_info&#39;).value.toUpperCase();
        const bank = document.getElementById(&#39;bank_info&#39;).value.toUpperCase();

        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.setFontSize(22); doc.setTextColor(0, 86, 179);
        doc.text(type, 195, 25, {align: &quot;right&quot;});
        
        doc.setFontSize(10); doc.setTextColor(100);
        doc.text(`No: ${invNo}`, 195, 32, {align: &quot;right&quot;});
        doc.text(`Tarikh: ${date}`, 195, 37, {align: &quot;right&quot;});

        doc.setTextColor(0); doc.text(&quot;DARIPADA:&quot;, 20, 50);
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(doc.splitTextToSize(from, 80), 20, 56);

        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.text(&quot;KEPADA:&quot;, 110, 50);
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(doc.splitTextToSize(to, 80), 110, 56);

        const rows = [];
        document.querySelectorAll(&#39;#tbody tr&#39;).forEach(tr =&gt; {
            const d = tr.querySelector(&#39;.item-desc&#39;).value.toUpperCase();
            const q = tr.querySelector(&#39;.item-qty&#39;).value;
            const p = tr.querySelector(&#39;.item-price&#39;).value;
            const t = tr.querySelector(&#39;.item-total&#39;).value;
            if(d) rows.push([d, q, p, t]);
        });

        doc.autoTable({
            startY: 85,
            head: [[&#39;DESKRIPSI&#39;, &#39;QTY&#39;, &#39;HARGA (RM)&#39;, &#39;JUMLAH (RM)&#39;]],
            body: rows,
            theme: &#39;striped&#39;,
            headStyles: { fillColor: [0, 86, 179] },
            columnStyles: { 1: {halign: &#39;center&#39;}, 2: {halign: &#39;right&#39;}, 3: {halign: &#39;right&#39;} }
        });

        let y = doc.lastAutoTable.finalY + 10;
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(`SUBTOTAL: ${document.getElementById(&#39;subtotal&#39;).innerText}`, 195, y, {align: &quot;right&quot;});
        doc.setFontSize(14); doc.setTextColor(0, 86, 179);
        doc.text(`TOTAL: ${document.getElementById(&#39;grand_total&#39;).innerText}`, 195, y + 8, {align: &quot;right&quot;});

        if(bank) {
            doc.setFontSize(10); doc.setTextColor(0); doc.text(&quot;NOTA PEMBAYARAN:&quot;, 20, y + 20);
            doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.text(bank, 20, y + 26);
        }

        doc.setFontSize(9); doc.setTextColor(150);
        doc.text(&quot;Ini adalah dokumen jana-komputer. Terima kasih!&quot;, 105, 285, {align: &quot;center&quot;});
        doc.save(`${type}_${invNo}.pdf`);
    }

    function shareWA() {
        const txt = `Bina Invois &amp; Resit profesional dalam 1 minit secara percuma guna apps ni. Memang mantap! 📝🔥\n\nCuba sini: ${window.location.href}`;
        window.open(`https://wa.me/?text=${encodeURIComponent(txt)}`, &#39;_blank&#39;);
    }
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/8292794558766857149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-invois-resit-rasmi-online.html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8292794558766857149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/8292794558766857149'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-invois-resit-rasmi-online.html.html' title='Generator Invois &amp; Resit Online Percuma (Siap PDF 1 Minit)'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCitBmmbjaBfEsbRPi5dHU1aPNVJ0_VbRyyDii7pCJiXfP6mn4sK7tdY8BSSZ1zsmeAb8Upd-DcmV2bjJogCAw1neCp-vAG1gY6TvfmUC5kAN0eUvM2vAD311nBsOrEBKTIDn84rwcQ5FzJHAyifupVRVCg9Be2V7SU-nTfJbaCLfDTuex5VuEl8U5rnI/s72-c/1000001553.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-2786956833031974597</id><published>2026-01-09T15:35:00.008+08:00</published><updated>2026-01-15T23:13:53.674+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Aplikasi Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Generator Surat"/><category scheme="http://www.blogger.com/atom/ns#" term="Kerjaya &amp; Pendidikan"/><category scheme="http://www.blogger.com/atom/ns#" term="Template Surat Rasmi"/><title type='text'>Generator Surat Rasmi Online (SOP Malaysia) - Siap 1 Minit</title><content type='html'>&lt;head&gt;
    &lt;title&gt;Generator Surat Rasmi Online | Bina Surat SOP Malaysia 1 Minit&lt;/title&gt;
    &lt;meta name=&quot;description&quot; content=&quot;Bina surat rasmi profesional secara percuma. Pilih template, isi butiran guna kalendar, dan muat turun PDF profesional dalam 1 minit. Ikut SOP Malaysia.&quot;&gt;
    
    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org/&quot;,
      &quot;@type&quot;: &quot;WebApplication&quot;,
      &quot;name&quot;: &quot;Generator Surat Rasmi Malaysia&quot;,
      &quot;description&quot;: &quot;Alat digital untuk menjana surat rasmi profesional mengikut SOP Malaysia secara pantas.&quot;,
      &quot;applicationCategory&quot;: &quot;BusinessApplication&quot;,
      &quot;offers&quot;: { &quot;@type&quot;: &quot;Offer&quot;, &quot;price&quot;: &quot;0&quot;, &quot;priceCurrency&quot;: &quot;MYR&quot; }
    }
    &lt;/script&gt;
&lt;/head&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.29/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    :root { --p: #1a5f7a; --g: #c9a227; --success: #27ae60; --bg: #f4f7f6; }
    body { background: var(--bg); font-family: &#39;Segoe UI&#39;, sans-serif; margin: 0; padding: 0; color: #333; }
    
    .app-card { max-width: 1000px; margin: 20px auto; background: white; border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); overflow: hidden; border: 1px solid #ddd; }
    .hero-img { width: 100%; display: block; border-bottom: 5px solid var(--g); }
    
    .intro-seo { padding: 25px; background: #fff8e1; border-bottom: 1px solid #eee; line-height: 1.6; }
    .intro-seo h2 { color: var(--p); margin-top: 0; font-size: 20px; }
    
    .content { padding: 30px; display: flex; flex-wrap: wrap; gap: 30px; }
    .form-side { flex: 1; min-width: 320px; }
    .preview-side { flex: 1; min-width: 350px; background: #555; padding: 20px; border-radius: 8px; display: flex; justify-content: center; overflow: hidden; }

    .grp-title { font-size: 16px; font-weight: bold; color: var(--p); border-bottom: 2px solid var(--g); margin: 20px 0 15px; padding-bottom: 5px; }
    label { display: block; font-weight: 700; font-size: 12px; margin-bottom: 5px; color: #444; }
    input, select, textarea { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; font-size: 14px; margin-bottom: 10px; }
    .caps { text-transform: uppercase; }
    
    .a4-paper { background: white; width: 210mm; min-height: 297mm; padding: 20mm; box-sizing: border-box; font-family: &quot;Arial&quot;, sans-serif; font-size: 11pt; line-height: 1.5; color: #000; box-shadow: 0 0 15px rgba(0,0,0,0.3); transform: scale(0.45); transform-origin: top center; height: 1100px; overflow: hidden; }

    .btn { width: 100%; padding: 15px; border: none; border-radius: 8px; font-weight: bold; color: white; cursor: pointer; font-size: 16px; transition: 0.3s; }
    .btn-pdf { background: #c0392b; box-shadow: 0 4px 0 #922b21; margin-top: 10px; }
    .btn-wa { background: #25d366; margin-top: 15px; font-size: 14px; }
    
    .info-box { background: #e3f2fd; border: 1px solid #2196f3; padding: 15px; border-radius: 8px; margin-bottom: 20px; font-size: 13px; }

    @media(max-width: 800px) { .content { flex-direction: column; } .preview-side { display: none; } }
&lt;/style&gt;

&lt;div class=&quot;app-card&quot;&gt;
    &lt;img class=&quot;hero-img&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ_SWJwI2oNqWtWkU1EZAQj29yXVQtY43YpGijcr0VOKTS_1qB3ywrbkOq4DdR52AVTnxfIfLqhncnuPcj1ny2KpjeliyaObo_Vew7r3pF7XrN1jwt_JNl5K2HtsLAZzTV-mJL6OjeuRTQBS0GCXKuqtK1YEYHMF73FHflk5If7jH7_1Kz_sN-U45i7aU/s1540/1000001539.jpg&quot; /&gt;

    &lt;div class=&quot;intro-seo&quot;&gt;
        &lt;h2&gt;Penjana Surat Rasmi SOP Malaysia&lt;/h2&gt;
        &lt;p&gt;Bina surat rasmi profesional dengan mudah. Pilih template, isi maklumat peribadi dan gunakan kalendar untuk tarikh surat. Jana fail PDF yang kemas dan mengikut piawaian surat rasmi Malaysia dalam satu minit!&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;content&quot;&gt;
        &lt;div class=&quot;form-side&quot;&gt;
            &lt;div class=&quot;info-box&quot;&gt;
                &lt;b&gt;🌐 Pilih Jenis Surat:&lt;/b&gt;
                &lt;select id=&quot;doc_type&quot; onchange=&quot;switchTemplate()&quot;&gt;
                    &lt;option value=&quot;berhenti&quot;&gt;Notis Peletakan Jawatan (Berhenti Kerja)&lt;/option&gt;
                    &lt;option value=&quot;izin&quot;&gt;Izin Tidak Hadir Sekolah (Ibu Bapa)&lt;/option&gt;
                    &lt;option value=&quot;bank&quot;&gt;Urusan Bank / Penukaran No. Telefon&lt;/option&gt;
                    &lt;option value=&quot;rayuan&quot;&gt;Surat Rayuan Rasmi (Am)&lt;/option&gt;
                    &lt;option value=&quot;aduan&quot;&gt;Surat Aduan Awam / Masalah&lt;/option&gt;
                    &lt;option value=&quot;kursus&quot;&gt;Permohonan Menghadiri Kursus/Latihan&lt;/option&gt;
                    &lt;option value=&quot;matrik&quot;&gt;Surat Pelepasan Kuliah (Matrikulasi/Universiti)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div class=&quot;grp-title&quot;&gt;1. Butiran Pengirim&lt;/div&gt;
            &lt;label&gt;NAMA PENUH ANDA:&lt;/label&gt;
            &lt;input type=&quot;text&quot; id=&quot;nm_self&quot; class=&quot;caps&quot; oninput=&quot;sync()&quot; placeholder=&quot;Cth: AHMAD BIN ABDULLAH&quot;&gt;
            &lt;label&gt;ALAMAT PENUH ANDA:&lt;/label&gt;
            &lt;textarea id=&quot;addr_self&quot; class=&quot;caps&quot; oninput=&quot;sync()&quot; placeholder=&quot;Alamat Baris 1&amp;#10;Alamat Baris 2&quot;&gt;&lt;/textarea&gt;

            &lt;div class=&quot;grp-title&quot;&gt;2. Butiran Penerima&lt;/div&gt;
            &lt;label&gt;JAWATAN &amp; ALAMAT PENERIMA:&lt;/label&gt;
            &lt;textarea id=&quot;addr_recv&quot; class=&quot;caps&quot; oninput=&quot;sync()&quot; placeholder=&quot;Pengurus / Pengetua&amp;#10;Nama Organisasi / Sekolah&amp;#10;Alamat Penuh&quot;&gt;&lt;/textarea&gt;

            &lt;div id=&quot;dynamic_fields&quot;&gt;&lt;/div&gt;

            &lt;div class=&quot;grp-title&quot;&gt;3. Tarikh Surat&lt;/div&gt;
            &lt;label&gt;PILIH TARIKH SURAT:&lt;/label&gt;
            &lt;input type=&quot;date&quot; id=&quot;date_letter&quot; oninput=&quot;sync()&quot;&gt;

            &lt;button class=&quot;btn btn-pdf&quot; onclick=&quot;generatePDF()&quot;&gt;📥 MUAT TURUN SURAT (PDF)&lt;/button&gt;
            &lt;button class=&quot;btn btn-wa&quot; onclick=&quot;shareWA()&quot;&gt;📢 Kongsi Apps di WhatsApp&lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&quot;preview-side&quot;&gt;
            &lt;div class=&quot;a4-paper&quot; id=&quot;paper&quot;&gt;
                &lt;div id=&quot;p_nm_self&quot; style=&quot;font-weight:bold;&quot;&gt;NAMA PENGIRIM&lt;/div&gt;
                &lt;div id=&quot;p_addr_self&quot; style=&quot;white-space: pre-wrap; width: 60%;&quot;&gt;ALAMAT PENGIRIM&lt;/div&gt;
                &lt;div style=&quot;border-bottom: 2px solid black; margin: 15px 0;&quot;&gt;&lt;/div&gt;
                
                &lt;div style=&quot;display: flex; justify-content: space-between;&quot;&gt;
                    &lt;div id=&quot;p_addr_recv&quot; style=&quot;white-space: pre-wrap;&quot;&gt;JAWATAN &amp; ALAMAT PENERIMA&lt;/div&gt;
                    &lt;div id=&quot;p_date&quot; style=&quot;font-weight: bold; align-self: flex-start;&quot;&gt;TARIKH&lt;/div&gt;
                &lt;/div&gt;

                &lt;p style=&quot;margin-top: 25px;&quot;&gt;Tuan/Puan,&lt;/p&gt;
                &lt;div id=&quot;p_title&quot; style=&quot;font-weight:bold; text-decoration:underline; text-transform:uppercase; margin: 15px 0;&quot;&gt;TAJUK SURAT&lt;/div&gt;
                &lt;div id=&quot;p_body&quot; style=&quot;text-align: justify; white-space: pre-wrap;&quot;&gt;Isi kandungan...&lt;/div&gt;

                &lt;div style=&quot;margin-top: 40px;&quot;&gt;
                    Sekian, terima kasih.&lt;br&gt;&lt;br&gt;
                    Yang benar,&lt;br&gt;&lt;br&gt;&lt;br&gt;
                    ..........................................&lt;br&gt;
                    &lt;strong&gt;(&lt;span id=&quot;p_kaki&quot;&gt;NAMA ANDA&lt;/span&gt;)&lt;/strong&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
    .aff-wrapper { max-width: 800px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #fffde7; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #fff9c4; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Keperluan Urusan Rasmi &amp; Dokumentasi:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;✉️&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Sampul Surat Rasmi (Putih &amp; Coklat)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee untuk menebus baucar. Sila cari &lt;b&gt;&quot;White Envelope A4/A5&quot;&lt;/b&gt; untuk memudahkan urusan pengeposan surat rasmi anda.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🖊️&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Pen Dakwat Basah (Signature Pen) Berkualiti&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;Pilot Ballliner&quot;&lt;/b&gt; atau &lt;b&gt;&quot;Artline Pen&quot;&lt;/b&gt; untuk hasil tandatangan surat yang lebih kemas dan profesional.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;script&gt;
    const templates = {
        berhenti: {
            title: &quot;NOTIS PELETAKAN JAWATAN SEBAGAI [JAWATAN]&quot;,
            fields: [{ id: &#39;v_jaw&#39;, lbl: &#39;JAWATAN SEKARANG:&#39; }, { id: &#39;v_sya&#39;, lbl: &#39;NAMA SYARIKAT:&#39; }, { id: &#39;v_last&#39;, lbl: &#39;TARIKH TERAKHIR (KALENDAR):&#39;, type: &#39;date&#39; }],
            genBody: (d) =&gt; `Merujuk kepada perkara di atas, saya ${d.nm_self} ingin memaklumkan mengenai peletakan jawatan saya sebagai ${d.v_jaw} di ${d.v_sya} berkuatkuasa pada ${fmtDateLong(d.v_last)}.\n\nPeletakan jawatan ini dibuat atas sebab saya ingin mencari peluang kerjaya baru. Terima kasih atas segala bimbingan sepanjang tempoh perkhidmatan saya.\n\nKerjasama pihak tuan/puan amat saya hargai.`
        },
        izin: {
            title: &quot;PERMOHONAN TIDAK HADIR KE SEKOLAH&quot;,
            fields: [{ id: &#39;v_anak&#39;, lbl: &#39;NAMA ANAK:&#39; }, { id: &#39;v_kelas&#39;, lbl: &#39;KELAS:&#39; }, { id: &#39;v_skip&#39;, lbl: &#39;TARIKH TIDAK HADIR (KALENDAR):&#39;, type: &#39;date&#39; }, { id: &#39;v_seb&#39;, lbl: &#39;ALASAN:&#39; }],
            genBody: (d) =&gt; `Saya ibu/bapa kepada ${d.v_anak} (Kelas: ${d.v_kelas}) ingin memaklumkan bahawa anak saya tidak dapat hadir ke sekolah pada ${fmtDateLong(d.v_skip)}.\n\nKetidakhadiran ini adalah disebabkan oleh ${d.v_seb}. Pihak kami memohon maaf atas kesulitan ini.\n\nTerima kasih.`
        },
        bank: {
            title: &quot;PENGEMASKINIAN MAKLUMAT AKAUN BANK&quot;,
            fields: [{ id: &#39;v_acc&#39;, lbl: &#39;NO AKAUN:&#39; }, { id: &#39;v_phone&#39;, lbl: &#39;NO TELEFON BARU:&#39; }],
            genBody: (d) =&gt; `Saya ingin memohon pihak bank mengemas kini maklumat akaun bernombor ${d.v_acc}. Saya ingin menukar nombor telefon berdaftar kepada ${d.v_phone}.\n\nNombor lama saya tidak lagi aktif. Terima kasih.`
        },
        rayuan: {
            title: &quot;RAYUAN PERMOHONAN [RAYUAN]&quot;,
            fields: [{ id: &#39;v_ray&#39;, lbl: &#39;PERKARA RAYUAN:&#39; }, { id: &#39;v_als&#39;, lbl: &#39;ALASAN:&#39; }],
            genBody: (d) =&gt; `Saya ingin mengemukakan rayuan rasmi bagi permohonan saya yang ditolak berkaitan ${d.v_ray}.\n\nRayuan ini dibuat atas faktor ${d.v_als}. Saya harap pihak tuan/puan dapat mempertimbangkan semula.\n\nTerima kasih.`
        },
        aduan: {
            title: &quot;ADUAN MENGENAI [ADUAN]&quot;,
            fields: [{ id: &#39;v_mas&#39;, lbl: &#39;ADUAN:&#39; }, { id: &#39;v_lok&#39;, lbl: &#39;LOKASI:&#39; }],
            genBody: (d) =&gt; `Saya ingin membuat aduan mengenai masalah ${d.v_mas} yang berlaku di ${d.v_lok}.\n\nKeadaan ini mendatangkan kesulitan kepada warga penduduk. Mohon tindakan segera diambil.\n\nTerima kasih.`
        },
        kursus: {
            title: &quot;PERMOHONAN HADIR KURSUS [KURSUS]&quot;,
            fields: [{ id: &#39;v_kur&#39;, lbl: &#39;NAMA KURSUS:&#39; }, { id: &#39;v_d_kur&#39;, lbl: &#39;TARIKH KURSUS:&#39;, type: &#39;date&#39; }],
            genBody: (d) =&gt; `Saya ingin memohon hadir ke ${d.v_kur} pada ${fmtDateLong(d.v_d_kur)}.\n\nKursus ini penting untuk meningkatkan kemahiran tugas harian saya. Terima kasih.`
        },
        matrik: {
            title: &quot;PELEPASAN KULIAH / TUTORIAL&quot;,
            fields: [{ id: &#39;v_mat&#39;, lbl: &#39;NO. MATRIK:&#39; }, { id: &#39;v_kul&#39;, lbl: &#39;KOD KULIAH:&#39; }, { id: &#39;v_d_skip&#39;, lbl: &#39;TARIKH PELEPASAN:&#39;, type: &#39;date&#39; }],
            genBody: (d) =&gt; `Saya ${d.nm_self} (No Matrik: ${d.v_mat}) ingin memohon pelepasan kuliah ${d.v_kul} pada ${fmtDateLong(d.v_d_skip)} atas urusan keluarga mendesak.\n\nTerima kasih.`
        }
    };

    function fmtDateLong(val) {
        if(!val) return &quot;[TARIKH]&quot;;
        const d = new Date(val);
        const m = [&quot;JANUARI&quot;,&quot;FEBRUARI&quot;,&quot;MAC&quot;,&quot;APRIL&quot;,&quot;MEI&quot;,&quot;JUN&quot;,&quot;JULAI&quot;,&quot;OGOS&quot;,&quot;SEPTEMBER&quot;,&quot;OKTOBER&quot;,&quot;NOVEMBER&quot;,&quot;DISEMBER&quot;];
        return `${d.getDate()} ${m[d.getMonth()]} ${d.getFullYear()}`;
    }

    function switchTemplate() {
        const type = document.getElementById(&#39;doc_type&#39;).value;
        const container = document.getElementById(&#39;dynamic_fields&#39;);
        container.innerHTML = `&lt;div class=&quot;grp-title&quot;&gt;3. Butiran Khusus Surat&lt;/div&gt;`;
        templates[type].fields.forEach(f =&gt; {
            const t = f.type || &#39;text&#39;;
            container.innerHTML += `&lt;label&gt;${f.lbl}&lt;/label&gt;&lt;input type=&quot;${t}&quot; id=&quot;${f.id}&quot; class=&quot;caps&quot; oninput=&quot;sync()&quot;&gt;`;
        });
        sync();
    }

    function sync() {
        const type = document.getElementById(&#39;doc_type&#39;).value;
        const nm = (document.getElementById(&#39;nm_self&#39;).value || &quot;[NAMA ANDA]&quot;).toUpperCase();
        const addrS = (document.getElementById(&#39;addr_self&#39;).value || &quot;[ALAMAT ANDA]&quot;).toUpperCase();
        const addrR = (document.getElementById(&#39;addr_recv&#39;).value || &quot;[PENERIMA]&quot;).toUpperCase();
        const dt = fmtDateLong(document.getElementById(&#39;date_letter&#39;).value);

        let dynData = { nm_self: nm };
        templates[type].fields.forEach(f =&gt; {
            const val = document.getElementById(f.id)?.value || &quot;&quot;;
            dynData[f.id] = val.toUpperCase();
        });

        document.getElementById(&#39;p_nm_self&#39;).innerText = nm;
        document.getElementById(&#39;p_addr_self&#39;).innerText = addrS;
        document.getElementById(&#39;p_addr_recv&#39;).innerText = addrR;
        document.getElementById(&#39;p_date&#39;).innerText = dt;
        document.getElementById(&#39;p_kaki&#39;).innerText = nm;
        
        let tRaw = templates[type].title;
        let tFinal = tRaw.replace(&quot;[JAWATAN]&quot;, dynData.v_jaw || &quot;&quot;).replace(&quot;[RAYUAN]&quot;, dynData.v_ray || &quot;&quot;).replace(&quot;[ADUAN]&quot;, dynData.v_mas || &quot;&quot;).replace(&quot;[KURSUS]&quot;, dynData.v_kur || &quot;&quot;);
        
        document.getElementById(&#39;p_title&#39;).innerText = tFinal;
        document.getElementById(&#39;p_body&#39;).innerText = templates[type].genBody(dynData);
    }

    function generatePDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);
        const nm = document.getElementById(&#39;p_nm_self&#39;).innerText;
        const addrS = document.getElementById(&#39;p_addr_self&#39;).innerText;
        const addrR = document.getElementById(&#39;p_addr_recv&#39;).innerText;
        const dt = document.getElementById(&#39;p_date&#39;).innerText;
        const tajuk = document.getElementById(&#39;p_title&#39;).innerText;
        const body = document.getElementById(&#39;p_body&#39;).innerText;

        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.setFontSize(10.5);
        doc.text(nm, 20, 25);
        
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        let sAddrS = doc.splitTextToSize(addrS, 95);
        doc.text(sAddrS, 20, 31);
        
        let y = 31 + (sAddrS.length * 5);
        doc.setLineWidth(0.4); doc.line(20, y, 190, y);
        
        y += 10;
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        let sAddrR = doc.splitTextToSize(addrR, 95);
        doc.text(sAddrR, 20, y);
        doc.text(dt, 190, y, {align: &quot;right&quot;});
        
        y += (sAddrR.length * 6) + 8;
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;); doc.text(&quot;Tuan/Puan,&quot;, 20, y);
        
        y += 10;
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        let sTajuk = doc.splitTextToSize(tajuk, 170); // FIXED MARGIN 170mm
        doc.text(sTajuk, 20, y);
        doc.line(20, y+1, 20 + doc.getTextWidth(sTajuk[0]), y+1);
        
        y += (sTajuk.length * 6) + 8;
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        let sBody = doc.splitTextToSize(body, 170); // FIXED MARGIN 170mm
        doc.text(sBody, 20, y); // align: left (LEBIH SELAMAT)
        
        y += (sBody.length * 6) + 15;
        doc.text(&quot;Sekian, terima kasih.&quot;, 20, y);
        y += 10;
        doc.text(&quot;Yang benar,&quot;, 20, y);
        y += 22;
        doc.text(&quot;__________________________&quot;, 20, y);
        y += 7;
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(`(${nm})`, 20, y);

        doc.save(`Surat_${nm.split(&#39; &#39;)[0]}.pdf`);
    }

    function shareWA() {
        const txt = `Bina pelbagai surat rasmi SOP Malaysia dalam 1 minit guna apps ni. Memang memudahkan! 📝🚀\n\nCuba sini: ${window.location.href}`;
        window.open(`https://wa.me/?text=${encodeURIComponent(txt)}`, &#39;_blank&#39;);
    }

    window.onload = () =&gt; {
        const today = new Date().toISOString().split(&#39;T&#39;)[0];
        document.getElementById(&#39;date_letter&#39;).value = today;
        switchTemplate();
    };
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/2786956833031974597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-surat-rasmi-online-malaysia.html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2786956833031974597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/2786956833031974597'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-surat-rasmi-online-malaysia.html.html' title='Generator Surat Rasmi Online (SOP Malaysia) - Siap 1 Minit'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ_SWJwI2oNqWtWkU1EZAQj29yXVQtY43YpGijcr0VOKTS_1qB3ywrbkOq4DdR52AVTnxfIfLqhncnuPcj1ny2KpjeliyaObo_Vew7r3pF7XrN1jwt_JNl5K2HtsLAZzTV-mJL6OjeuRTQBS0GCXKuqtK1YEYHMF73FHflk5If7jH7_1Kz_sN-U45i7aU/s72-c/1000001539.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-4976051675898908814</id><published>2026-01-09T14:55:00.002+08:00</published><updated>2026-01-15T23:14:46.681+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="e-Daftar"/><category scheme="http://www.blogger.com/atom/ns#" term="Sistem Kehadiran"/><title type='text'>Sistem Kehadiran QR Code Percuma (e-Daftar) | Jana QR &amp; Laporan Excel</title><content type='html'>&lt;head&gt;
    &lt;title&gt;Sistem Kehadiran QR Code Percuma (e-Daftar) | Jana &amp; Download Excel&lt;/title&gt;
    &lt;meta name=&quot;description&quot; content=&quot;Gunakan Sistem e-Daftar untuk jana QR Code kehadiran secara percuma. Pantau kehadiran live dan muat turun laporan format Excel serta-merta.&quot;&gt;
    
    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org/&quot;,
      &quot;@type&quot;: &quot;SoftwareApplication&quot;,
      &quot;name&quot;: &quot;e-Daftar Kehadiran Digital&quot;,
      &quot;operatingSystem&quot;: &quot;Web, Android, iOS&quot;,
      &quot;applicationCategory&quot;: &quot;Educational/Business Application&quot;,
      &quot;description&quot;: &quot;Sistem jana QR Code untuk pendaftaran kehadiran dengan fungsi laporan Excel.&quot;,
      &quot;offers&quot;: { &quot;@type&quot;: &quot;Offer&quot;, &quot;price&quot;: &quot;0&quot;, &quot;priceCurrency&quot;: &quot;MYR&quot; }
    }
    &lt;/script&gt;
&lt;/head&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://unpkg.com/html5-qrcode&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://www.gstatic.com/firebasejs/8.10.1/firebase-database.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
  :root { --primary: #2c3e50; --gold: #d4af37; --green: #27ae60; --wa: #25d366; --email: #e74c3c; }
  .event-app { font-family: &#39;Segoe UI&#39;, sans-serif; max-width: 600px; margin: 10px auto; background: #fff; border-radius: 12px; box-shadow: 0 4px 25px rgba(0,0,0,0.15); border: 1px solid #eee; overflow: hidden; }
  
  /* HERO IMAGE STYLE */
  .hero-container { width: 100%; overflow: hidden; line-height: 0; }
  .hero-container img { width: 100%; height: auto; display: block; }

  .app-header { background: var(--primary); color: white; padding: 20px; text-align: center; border-bottom: 5px solid var(--gold); }
  .tabs { display: flex; background: #f4f4f4; border-bottom: 1px solid #ddd; }
  .tab-btn { flex: 1; padding: 15px; border: none; background: none; font-weight: bold; cursor: pointer; color: #666; }
  .tab-btn.active { background: #fff; color: var(--primary); border-top: 4px solid var(--primary); }
  .box { padding: 25px; display: none; }
  .box.active { display: block; }
  .lbl { display: block; font-weight: bold; font-size: 13px; margin-bottom: 5px; color: #333; }
  .inp { width: 100%; padding: 12px; border: 1px solid #ccc; border-radius: 6px; margin-bottom: 15px; box-sizing: border-box; font-size: 14px; }
  .btn { width: 100%; padding: 14px; border: none; border-radius: 8px; font-weight: bold; color: white; cursor: pointer; margin-bottom: 10px; font-size: 15px; }
  
  #qr-image { width: 220px; height: 220px; margin: 15px auto; border: 2px solid #eee; padding: 8px; border-radius: 12px; display: block; background: white; }
  .live-container { text-align: left; background: #fdfdfd; padding: 15px; border-radius: 10px; margin-top: 15px; border: 1px solid #eee; }
  .att-item { padding: 8px; border-bottom: 1px dotted #ccc; font-size: 13px; display: flex; justify-content: space-between; }
&lt;/style&gt;

&lt;div class=&quot;event-app&quot;&gt;
  &lt;div class=&quot;hero-container&quot;&gt;
      &lt;img alt=&quot;Sistem Kehadiran QR Code e-Daftar Apps Cikgu Digital&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsHzcUlSdh20_TEfQIN-660sCGtkAXl2dyYndoTpkDn6TbwXdO8EJQgCMEkSa4BLc-__V82S1YGZqwABbAcIio-lb_ZAyu2h-wJwdNkENi8tcIce92u7tgL7aWfrl1Q9w07uUHbkd_OsyX4_c8TdWv6vJeuHDo9fiV5iCNPKhqsQ4DDuNiazTp3gL_MPs/s1540/1000001536.jpg&quot;/&gt;
  &lt;/div&gt;

  &lt;div class=&quot;app-header&quot;&gt;
    &lt;h1 style=&quot;margin:0; font-size:22px;&quot;&gt;Sistem e-Daftar Kehadiran&lt;/h1&gt;
    &lt;p style=&quot;margin:5px 0 0 0; font-size:12px; opacity:0.9;&quot;&gt;Jana QR Code &amp; Laporan Excel Automatik&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;div class=&quot;tabs&quot;&gt;
      &lt;button class=&quot;tab-btn active&quot; id=&quot;btn-admin&quot; onclick=&quot;goTab(&#39;admin&#39;)&quot;&gt;ADMIN&lt;/button&gt;
      &lt;button class=&quot;tab-btn&quot; id=&quot;btn-user&quot; onclick=&quot;goTab(&#39;user&#39;)&quot;&gt;PESERTA&lt;/button&gt;
  &lt;/div&gt;

  &lt;div id=&quot;view-admin&quot; class=&quot;box active&quot;&gt;
      &lt;div id=&quot;panel-setup&quot;&gt;
          &lt;div id=&quot;recovery-msg&quot; style=&quot;display:none; background:#fff3cd; padding:12px; border-radius:8px; margin-bottom:20px; font-size:13px; border: 1px solid #ffeeba; color:#856404;&quot;&gt;
              📢 Sesi aktif dikesan. &lt;button onclick=&quot;restoreSess()&quot; style=&quot;background:none; border:none; text-decoration:underline; font-weight:bold; cursor:pointer; color:#856404;&quot;&gt;Klik untuk sambung.&lt;/button&gt;
          &lt;/div&gt;

          &lt;label class=&quot;lbl&quot;&gt;Emel Admin:&lt;/label&gt;
          &lt;input type=&quot;email&quot; id=&quot;admin_email&quot; class=&quot;inp&quot; placeholder=&quot;emel@anda.com&quot;&gt;
          &lt;label class=&quot;lbl&quot;&gt;Nama Program/Majlis:&lt;/label&gt;
          &lt;input type=&quot;text&quot; id=&quot;evt_name&quot; class=&quot;inp&quot;&gt;
          &lt;label class=&quot;lbl&quot;&gt;Lokasi Program:&lt;/label&gt;
          &lt;input type=&quot;text&quot; id=&quot;evt_loc&quot; class=&quot;inp&quot;&gt;
          
          &lt;div style=&quot;display:flex; gap:10px;&quot;&gt;
            &lt;div style=&quot;flex:1&quot;&gt;&lt;label class=&quot;lbl&quot;&gt;Tarikh:&lt;/label&gt;&lt;input type=&quot;date&quot; id=&quot;evt_date&quot; class=&quot;inp&quot;&gt;&lt;/div&gt;
            &lt;div style=&quot;flex:1&quot;&gt;&lt;label class=&quot;lbl&quot;&gt;Masa:&lt;/label&gt;&lt;input type=&quot;time&quot; id=&quot;evt_time&quot; class=&quot;inp&quot;&gt;&lt;/div&gt;
          &lt;/div&gt;
          &lt;label class=&quot;lbl&quot;&gt;Catatan Tambahan:&lt;/label&gt;
          &lt;input type=&quot;text&quot; id=&quot;evt_note&quot; class=&quot;inp&quot;&gt;
          &lt;label class=&quot;lbl&quot;&gt;URL Gambar Banner (Opsyenal):&lt;/label&gt;
          &lt;input type=&quot;text&quot; id=&quot;evt_img&quot; class=&quot;inp&quot;&gt;
          
          &lt;button class=&quot;btn&quot; style=&quot;background:var(--primary);&quot; onclick=&quot;janaQR()&quot;&gt;⚡ JANA SISTEM SEKARANG&lt;/button&gt;
      &lt;/div&gt;

      &lt;div id=&quot;panel-dash&quot; style=&quot;display:none; text-align:center;&quot;&gt;
          &lt;h2 id=&quot;d-title&quot; style=&quot;margin:0; color:var(--primary);&quot;&gt;&lt;/h2&gt;
          &lt;img id=&quot;qr-image&quot; src=&quot;&quot; alt=&quot;QR Code Kehadiran&quot;&gt;
          
          &lt;button class=&quot;btn&quot; style=&quot;background:var(--email);&quot; onclick=&quot;sendNotif(&#39;email&#39;)&quot;&gt;📧 HANTAR REPORT KE EMEL&lt;/button&gt;
          &lt;button class=&quot;btn&quot; style=&quot;background:var(--wa);&quot; onclick=&quot;sendNotif(&#39;wa&#39;)&quot;&gt;📱 HANTAR KE WHATSAPP&lt;/button&gt;

          &lt;div class=&quot;live-container&quot;&gt;
              &lt;strong&gt;Statistik Kehadiran: &lt;span id=&quot;counter&quot;&gt;0&lt;/span&gt;&lt;/strong&gt;
              &lt;div id=&quot;live-list&quot; style=&quot;max-height:150px; overflow-y:auto; background:white; border:1px solid #eee; margin-top:10px; border-radius:5px;&quot;&gt;&lt;/div&gt;
          &lt;/div&gt;
          &lt;button class=&quot;btn&quot; style=&quot;background:var(--green); margin-top:15px;&quot; onclick=&quot;downloadExcel()&quot;&gt;📥 MUAT TURUN EXCEL&lt;/button&gt;
          &lt;button class=&quot;btn&quot; style=&quot;background:#bdc3c7; color:#333;&quot; onclick=&quot;tamatSesi()&quot;&gt;RESET SEMUA&lt;/button&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;view-user&quot; class=&quot;box&quot;&gt;
      &lt;div id=&quot;scan-area&quot;&gt;&lt;div id=&quot;reader&quot; style=&quot;width:100%; border-radius:10px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;div id=&quot;form-area&quot; style=&quot;display:none;&quot;&gt;
          &lt;img id=&quot;display-cover&quot; style=&quot;width:100%; height:150px; object-fit:cover; border-radius:10px; display:none; margin-bottom:15px; border: 1px solid #ddd;&quot;&gt;
          &lt;h2 id=&quot;f-prog&quot; style=&quot;margin:0; color:var(--primary);&quot;&gt;&lt;/h2&gt;
          &lt;div id=&quot;f-details&quot; style=&quot;font-size:13px; color:#555; background:#f9f9f9; padding:12px; border-radius:8px; margin:15px 0; border-left:4px solid var(--green);&quot;&gt;&lt;/div&gt;
          &lt;p id=&quot;f-note&quot; style=&quot;font-size:13px; color:var(--gold); font-weight:bold;&quot;&gt;&lt;/p&gt;
          &lt;label class=&quot;lbl&quot;&gt;Nama Penuh:&lt;/label&gt;
          &lt;input type=&quot;text&quot; id=&quot;p_nama&quot; class=&quot;inp&quot; oninput=&quot;this.value=this.value.toUpperCase()&quot;&gt;
          &lt;label class=&quot;lbl&quot;&gt;No. Kad Pengenalan:&lt;/label&gt;
          &lt;input type=&quot;number&quot; id=&quot;p_ic&quot; class=&quot;inp&quot;&gt;
          &lt;input type=&quot;hidden&quot; id=&quot;sess_id&quot;&gt;
          &lt;button class=&quot;btn&quot; style=&quot;background:var(--green);&quot; onclick=&quot;hantarData()&quot;&gt;SAHKAN KEHADIRAN&lt;/button&gt;
      &lt;/div&gt;
      &lt;div id=&quot;success-area&quot; style=&quot;display:none; text-align:center; padding:40px 20px;&quot;&gt;
          &lt;h2 style=&quot;color:var(--green)&quot;&gt;✅ Rekod Disimpan!&lt;/h2&gt;
          &lt;button class=&quot;btn&quot; style=&quot;background:var(--primary);&quot; onclick=&quot;resetForm()&quot;&gt;Daftar Peserta Lain&lt;/button&gt;
      &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
    .aff-wrapper { max-width: 800px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #f3e5f5; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #e1bee7; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Keperluan Paparan &amp; Imbasan QR Code:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🪧&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;QR Code Acrylic Stand (Paparan Kehadiran)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee untuk menebus baucar. Sila cari &lt;b&gt;&quot;Acrylic QR Stand&quot;&lt;/b&gt; untuk mempamerkan kod kehadiran anda dengan lebih kemas dan profesional di kaunter atau meja.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;📲&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Pengimbas Kod (QR &amp; Barcode Scanner)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;Handheld QR Scanner&quot;&lt;/b&gt; jika anda memerlukan peranti khas untuk mengimbas kod kehadiran dengan lebih pantas.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;script&gt;
  const fbConf = {
    apiKey: &quot;AIzaSyB52mMM8721lsrw3yeWgP9eIpNQjbx4gtk&quot;,
    authDomain: &quot;appscikgudigital.firebaseapp.com&quot;,
    databaseURL: &quot;https://appscikgudigital-default-rtdb.asia-southeast1.firebasedatabase.app&quot;,
    projectId: &quot;appscikgudigital&quot;
  };
  if (!firebase.apps.length) firebase.initializeApp(fbConf);
  const db = firebase.database();
  let currentSess = &quot;&quot;; let records = []; let html5QrCode = null;

  window.onload = () =&gt; {
    if(localStorage.getItem(&#39;activeSess&#39;)) document.getElementById(&#39;recovery-msg&#39;).style.display = &#39;block&#39;;
    cekURL();
  };

  function goTab(id) {
    document.querySelectorAll(&#39;.box, .tab-btn&#39;).forEach(e =&gt; e.classList.remove(&#39;active&#39;));
    document.getElementById(&#39;view-&#39;+id).classList.add(&#39;active&#39;);
    document.getElementById(&#39;btn-&#39;+id).classList.add(&#39;active&#39;);
    if(id === &#39;user&#39; &amp;&amp; document.getElementById(&#39;form-area&#39;).style.display === &#39;none&#39;) startScan(); else stopScan();
  }

  function janaQR(existID = null) {
    const data = {
      admin: document.getElementById(&#39;admin_email&#39;).value,
      name: document.getElementById(&#39;evt_name&#39;).value.toUpperCase(),
      loc: document.getElementById(&#39;evt_loc&#39;).value.toUpperCase(),
      date: document.getElementById(&#39;evt_date&#39;).value,
      time: document.getElementById(&#39;evt_time&#39;).value,
      note: document.getElementById(&#39;evt_note&#39;).value,
      img: document.getElementById(&#39;evt_img&#39;).value
    };
    if(!data.name || !data.loc || !data.admin) return alert(&quot;Emel, Nama &amp; Lokasi Wajib Diisi!&quot;);

    currentSess = existID || &quot;EVT_&quot; + Date.now();
    data.id = currentSess;
    localStorage.setItem(&#39;activeSess&#39;, JSON.stringify(data));
    db.ref(&#39;info/&#39; + currentSess).set(data);

    document.getElementById(&#39;panel-setup&#39;).style.display = &#39;none&#39;;
    document.getElementById(&#39;panel-dash&#39;).style.display = &#39;block&#39;;
    document.getElementById(&#39;d-title&#39;).innerText = data.name;

    let url = window.location.href.split(&#39;?&#39;)[0] + &quot;?sesi=&quot; + currentSess;
    document.getElementById(&#39;qr-image&#39;).src = &quot;https://api.qrserver.com/v1/create-qr-code/?size=300x300&amp;data=&quot; + encodeURIComponent(url);

    records = [];
    db.ref(&#39;events/&#39; + currentSess).off();
    db.ref(&#39;events/&#39; + currentSess).on(&#39;child_added&#39;, snap =&gt; {
      let r = snap.val(); records.push(r);
      let div = document.createElement(&#39;div&#39;); div.className = &#39;att-item&#39;;
      div.innerHTML = `&lt;span&gt;${r.name}&lt;/span&gt;&lt;small&gt;${r.time}&lt;/small&gt;`;
      document.getElementById(&#39;live-list&#39;).prepend(div);
      document.getElementById(&#39;counter&#39;).innerText = records.length;
    });
  }

  function sendNotif(type) {
    let s = JSON.parse(localStorage.getItem(&#39;activeSess&#39;));
    let url = window.location.href.split(&#39;?&#39;)[0] + &quot;?sesi=&quot; + currentSess;
    let body = `BUTIRAN REKOD KEHADIRAN%0A%0AProgram: ${s.name}%0ALokasi: ${s.loc}%0ATarikh: ${s.date}%0AMasa: ${s.time}%0A%0APautan Dashboard: ${url}`;
    if(type===&#39;wa&#39;) window.open(`https://wa.me/?text=${body}`, &#39;_blank&#39;);
    else window.open(`mailto:${s.admin}?subject=Laporan Kehadiran&amp;body=${body}`, &#39;_blank&#39;);
  }

  function restoreSess() {
    const s = JSON.parse(localStorage.getItem(&#39;activeSess&#39;));
    document.getElementById(&#39;admin_email&#39;).value = s.admin;
    document.getElementById(&#39;evt_name&#39;).value = s.name;
    document.getElementById(&#39;evt_loc&#39;).value = s.loc;
    document.getElementById(&#39;evt_date&#39;).value = s.date;
    document.getElementById(&#39;evt_time&#39;).value = s.time;
    document.getElementById(&#39;evt_note&#39;).value = s.note;
    document.getElementById(&#39;evt_img&#39;).value = s.img;
    janaQR(s.id);
  }

  function cekURL() {
    let sid = new URLSearchParams(window.location.search).get(&#39;sesi&#39;);
    if(sid) {
      goTab(&#39;user&#39;);
      document.getElementById(&#39;scan-area&#39;).style.display = &#39;none&#39;;
      document.getElementById(&#39;form-area&#39;).style.display = &#39;block&#39;;
      document.getElementById(&#39;sess_id&#39;).value = sid;
      db.ref(&#39;info/&#39; + sid).once(&#39;value&#39;, s =&gt; {
        let d = s.val();
        if(d) {
          document.getElementById(&#39;f-prog&#39;).innerText = d.name;
          document.getElementById(&#39;f-details&#39;).innerHTML = `📍 ${d.loc}&lt;br&gt;📅 ${d.date || &#39;-&#39;} | 🕒 ${d.time || &#39;-&#39;}`;
          document.getElementById(&#39;f-note&#39;).innerText = d.note ? &quot;Nota: &quot; + d.note : &quot;&quot;;
          if(d.img) { document.getElementById(&#39;display-cover&#39;).src = d.img; document.getElementById(&#39;display-cover&#39;).style.display=&#39;block&#39;; }
        }
      });
    }
  }

  function startScan() {
    if(html5QrCode) return;
    html5QrCode = new Html5Qrcode(&quot;reader&quot;);
    html5QrCode.start({ facingMode: &quot;environment&quot; }, { fps: 10, qrbox: 250 }, txt =&gt; {
      if(txt.includes(&quot;?sesi=&quot;)) window.location.href = txt;
    }).catch(e =&gt; {});
  }

  function stopScan() { if(html5QrCode) { html5QrCode.stop().then(() =&gt; { html5QrCode=null; }); } }

  function hantarData() {
    let n = document.getElementById(&#39;p_nama&#39;).value;
    let i = document.getElementById(&#39;p_ic&#39;).value;
    if(!n || !i) return alert(&quot;Sila isi maklumat!&quot;);
    let sid = document.getElementById(&#39;sess_id&#39;).value;
    let now = new Date();
    db.ref(&#39;events/&#39; + sid).push({ name: n, ic: i, time: now.getHours()+&quot;:&quot;+(now.getMinutes()&lt;10?&#39;0&#39;:&#39;&#39;)+now.getMinutes(), date: now.toLocaleDateString() })
    .then(() =&gt; { document.getElementById(&#39;form-area&#39;).style.display=&#39;none&#39;; document.getElementById(&#39;success-area&#39;).style.display=&#39;block&#39;; });
  }

  function resetForm() {
    document.getElementById(&#39;p_nama&#39;).value=&quot;&quot;; document.getElementById(&#39;p_ic&#39;).value=&quot;&quot;;
    document.getElementById(&#39;success-area&#39;).style.display=&#39;none&#39;; document.getElementById(&#39;form-area&#39;).style.display=&#39;block&#39;;
  }

  function tamatSesi() { if(confirm(&quot;Reset semua sesi?&quot;)) { localStorage.removeItem(&#39;activeSess&#39;); location.reload(); } }

  function downloadExcel() {
    let d = [[&quot;BIL&quot;, &quot;NAMA&quot;, &quot;KP&quot;, &quot;MASA&quot;, &quot;TARIKH&quot;]];
    records.forEach((r, i) =&gt; d.push([i+1, r.name, &quot;&#39;&quot; + r.ic, r.time, r.date]));
    let ws = XLSX.utils.aoa_to_sheet(d);
    let wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, &quot;Kehadiran&quot;);
    XLSX.writeFile(wb, `Kehadiran_${document.getElementById(&#39;d-title&#39;).innerText}.xlsx`);
  }
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/4976051675898908814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/sistem-kehadiran-qr-code-percuma.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4976051675898908814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4976051675898908814'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/sistem-kehadiran-qr-code-percuma.html' title='Sistem Kehadiran QR Code Percuma (e-Daftar) | Jana QR &amp; Laporan Excel'/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsHzcUlSdh20_TEfQIN-660sCGtkAXl2dyYndoTpkDn6TbwXdO8EJQgCMEkSa4BLc-__V82S1YGZqwABbAcIio-lb_ZAyu2h-wJwdNkENi8tcIce92u7tgL7aWfrl1Q9w07uUHbkd_OsyX4_c8TdWv6vJeuHDo9fiV5iCNPKhqsQ4DDuNiazTp3gL_MPs/s72-c/1000001536.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5341061453048343895.post-4118046339092420776</id><published>2026-01-09T07:17:00.017+08:00</published><updated>2026-01-15T23:16:06.464+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alat Online"/><category scheme="http://www.blogger.com/atom/ns#" term="aplikasi"/><category scheme="http://www.blogger.com/atom/ns#" term="Dokumen Rasmi"/><category scheme="http://www.blogger.com/atom/ns#" term="Download"/><category scheme="http://www.blogger.com/atom/ns#" term="Hartanah"/><category scheme="http://www.blogger.com/atom/ns#" term="LHDN"/><category scheme="http://www.blogger.com/atom/ns#" term="Sewa Rumah"/><category scheme="http://www.blogger.com/atom/ns#" term="Tenancy Agreement"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips Tuan Rumah"/><title type='text'>Generator Surat Perjanjian Sewa Rumah (Tenancy Agreement) Malaysia - Sah LHDN, PDF &amp; Word </title><content type='html'>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.29/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
  /* --- UI CLEAN --- */
  :root { --p: #2c3e50; --g: #d4af37; }
  .app-v14 {
      font-family: &#39;Segoe UI&#39;, sans-serif;
      max-width: 900px; margin: 20px auto;
      background: #fff; border-radius: 10px; border: 1px solid #ddd;
      box-shadow: 0 5px 15px rgba(0,0,0,0.1); overflow: hidden;
  }
  .cover { width: 100%; border-bottom: 5px solid var(--g); }
  
  .content { padding: 30px; }
  .grp { color: var(--p); font-size: 18px; font-weight: bold; border-bottom: 1px solid #eee; margin: 20px 0 15px 0; }
  
  .row { display: flex; gap: 15px; margin-bottom: 15px; }
  .col { flex: 1; }
  @media(max-width:600px){ .row{flex-direction:column;} }

  label { display: block; font-weight: 700; font-size: 13px; margin-bottom: 5px; color: #444; }
  input, select { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 5px; }
  .caps { text-transform: uppercase; }

  /* BUTTONS */
  .btn { width: 100%; padding: 14px; border: none; border-radius: 6px; font-weight: bold; color: white; cursor: pointer; margin-top: 20px; font-size: 16px; }
  .btn-pdf { background: #c0392b; box-shadow: 0 4px 0 #922b21; }
  .btn-pdf:active { transform: translateY(4px); box-shadow: none; }
  .btn-rst { background: #7f8c8d; margin-top: 10px; }

  /* BOX KENAIKAN SEWA (VISIBLE &amp; HIGHLIGHTED) */
  .rev-container {
      background: #fdfdfd; border: 1px solid #e0e0e0; border-left: 4px solid var(--p);
      padding: 15px; border-radius: 5px; margin-top: 15px;
  }
  .chk-label { display: flex; align-items: center; cursor: pointer; font-weight: bold; color: var(--p); margin-bottom: 10px; }
  .chk-label input { width: auto; margin-right: 10px; transform: scale(1.2); }
&lt;/style&gt;

&lt;div class=&quot;app-v14&quot;&gt;
  &lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif55UydyAharhqJyrihJaxgoP_bOIYKJjkMDHFNt2f8aoZR4QAZuLzcajuAfdLRxfxhnWPXUudMzj9Q2KUO0iqAK4lIQCB7QFW5qM5NiojK0f5iWr0qJS5q7-1ysYrJiiyIDREDq_AEnRSYhKCwNQa0TajWLl7fxScyKAEA_ukXWUe-6gr7jKzyCLcZVM/s1100/1000001510.jpg&quot; class=&quot;cover&quot;&gt;

  &lt;div class=&quot;content&quot;&gt;
      
      &lt;div style=&quot;background:#e3f2fd; padding:10px; border-radius:5px; margin-bottom:20px; border:1px solid #2196f3;&quot;&gt;
          &lt;label style=&quot;color:#0d47a1;&quot;&gt;🌐 Bahasa Dokumen:&lt;/label&gt;
          &lt;select id=&quot;lang&quot; style=&quot;font-weight:bold; color:#0d47a1;&quot;&gt;
              &lt;option value=&quot;BM&quot;&gt;Bahasa Melayu&lt;/option&gt;
              &lt;option value=&quot;EN&quot;&gt;English&lt;/option&gt;
          &lt;/select&gt;
      &lt;/div&gt;

      &lt;div class=&quot;grp&quot;&gt;A. Pihak Terlibat&lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Tarikh Perjanjian:&lt;/label&gt;&lt;input type=&quot;date&quot; id=&quot;d_sign&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Nama Tuan Rumah:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;nm_own&quot; class=&quot;caps&quot; placeholder=&quot;HURUF BESAR&quot;&gt;&lt;/div&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;No. KP Tuan Rumah:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;ic_own&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Nama Penyewa:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;nm_ten&quot; class=&quot;caps&quot; placeholder=&quot;HURUF BESAR&quot;&gt;&lt;/div&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;No. KP Penyewa:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;ic_ten&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;grp&quot;&gt;B. Sewaan&lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Alamat Rumah:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;addr&quot; class=&quot;caps&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Sewa (RM):&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;rent&quot;&gt;&lt;/div&gt;
          &lt;div class=&quot;col&quot;&gt;
              &lt;label&gt;Tempoh:&lt;/label&gt;
              &lt;div style=&quot;display:flex; gap:5px;&quot;&gt;
                  &lt;input type=&quot;number&quot; id=&quot;dur_v&quot; value=&quot;1&quot; oninput=&quot;calc()&quot;&gt;
                  &lt;select id=&quot;dur_u&quot; onchange=&quot;calc()&quot;&gt;&lt;option value=&quot;Tahun&quot;&gt;Tahun/Years&lt;/option&gt;&lt;option value=&quot;Bulan&quot;&gt;Bulan/Months&lt;/option&gt;&lt;/select&gt;
              &lt;/div&gt;
          &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Mula:&lt;/label&gt;&lt;input type=&quot;date&quot; id=&quot;d_start&quot; onchange=&quot;calc()&quot;&gt;&lt;/div&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Tamat:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;d_end&quot; readonly style=&quot;background:#eee;&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;rev-container&quot;&gt;
          &lt;label class=&quot;chk-label&quot;&gt;
              &lt;input type=&quot;checkbox&quot; id=&quot;chk_rev&quot;&gt; Aktifkan Kenaikan Sewa? (Isi nilai di bawah)
          &lt;/label&gt;
          &lt;div class=&quot;row&quot;&gt;
              &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Semak Setiap:&lt;/label&gt;&lt;select id=&quot;rev_y&quot;&gt;&lt;option value=&quot;1&quot;&gt;1 Tahun&lt;/option&gt;&lt;option value=&quot;2&quot;&gt;2 Tahun&lt;/option&gt;&lt;/select&gt;&lt;/div&gt;
              &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Jenis:&lt;/label&gt;&lt;select id=&quot;rev_t&quot;&gt;&lt;option value=&quot;p&quot;&gt;Peratus (%)&lt;/option&gt;&lt;option value=&quot;v&quot;&gt;Nilai (RM)&lt;/option&gt;&lt;/select&gt;&lt;/div&gt;
          &lt;/div&gt;
          &lt;div class=&quot;row&quot;&gt;&lt;div class=&quot;col&quot;&gt;&lt;label&gt;Nilai Kenaikan:&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;rev_val&quot; placeholder=&quot;Cth: 10 atau 100&quot; oninput=&quot;autoTick()&quot;&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;grp&quot;&gt;C. Deposit &amp; Syarat&lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Deposit Sekuriti (RM):&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;dep_s&quot;&gt;&lt;/div&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Deposit Utiliti (RM):&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;dep_u&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Bank Tuan Rumah:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;bank_nm&quot; class=&quot;caps&quot;&gt;&lt;/div&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;No Akaun:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;bank_no&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;row&quot;&gt;
          &lt;div class=&quot;col&quot;&gt;&lt;label&gt;Notis Keluar:&lt;/label&gt;&lt;select id=&quot;not_v&quot;&gt;&lt;option value=&quot;2&quot;&gt;2 Bulan/Months&lt;/option&gt;&lt;option value=&quot;1&quot;&gt;1 Bulan/Month&lt;/option&gt;&lt;/select&gt;&lt;/div&gt;
      &lt;/div&gt;

      &lt;button onclick=&quot;makePDF()&quot; class=&quot;btn btn-pdf&quot;&gt;📥 DOWNLOAD PDF&lt;/button&gt;
      &lt;button onclick=&quot;location.reload()&quot; class=&quot;btn btn-rst&quot;&gt;Reset&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
    .aff-wrapper { max-width: 800px; margin: 30px auto; display: flex; flex-direction: column; gap: 15px; border-top: 2px dashed #eee; padding-top: 25px; font-family: &#39;Segoe UI&#39;, sans-serif; }
    .aff-box { background: #ffffff; border-radius: 12px; border: 1px solid #ddd; padding: 18px; display: flex; align-items: center; gap: 18px; transition: 0.3s; }
    .aff-box:hover { border-color: #1a73e8; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .aff-img { font-size: 32px; width: 65px; height: 65px; background: #fff8e1; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #ffecb3; }
    .aff-content { flex: 1; text-align: left; }
    .aff-title { font-weight: bold; color: #333; font-size: 16px; margin-bottom: 4px; line-height: 1.3; }
    .aff-hint { font-size: 11px; color: #888; display: block; margin-top: 6px; line-height: 1.5; font-style: italic; }
    .btn-shopee-jujur { 
        background: #fff; 
        color: #1a73e8 !important; 
        text-decoration: none !important; 
        padding: 9px 18px; 
        border-radius: 6px; 
        font-weight: bold; 
        font-size: 13px; 
        display: inline-block; 
        margin-top: 10px; 
        border: 2px solid #1a73e8; 
        transition: 0.3s; 
    }
    .btn-shopee-jujur:hover { background: #1a73e8; color: #fff !important; }
    @media (max-width: 500px) { .aff-box { flex-direction: column; text-align: center; } .aff-content { text-align: center; } }
&lt;/style&gt;

&lt;div class=&quot;aff-wrapper&quot;&gt;
    &lt;p style=&quot;font-size: 14px; font-weight: bold; color: #444; text-align: left; margin: 0 0 5px 0;&quot;&gt;Keperluan Pengurusan Hartanah &amp; Sewaan:&lt;/p&gt;
    
    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;🔑&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Kotak Simpanan Kunci (Key Lock Box) &amp; Tag Kunci&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Pautan ini akan membawa anda ke Shopee untuk menebus baucar. Sila cari &lt;b&gt;&quot;Security Key Lock Box&quot;&lt;/b&gt; atau &lt;b&gt;&quot;Key Tag&quot;&lt;/b&gt; bagi memudahkan urusan penyerahan kunci kepada penyewa anda.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;aff-box&quot;&gt;
        &lt;div class=&quot;aff-img&quot;&gt;📂&lt;/div&gt;
        &lt;div class=&quot;aff-content&quot;&gt;
            &lt;div class=&quot;aff-title&quot;&gt;Fail Dokumen Perjanjian (Clear Holder File)&lt;/div&gt;
            &lt;a href=&quot;https://s.shopee.com.my/7VAAA6s3s3&quot; target=&quot;_blank&quot; class=&quot;btn-shopee-jujur&quot;&gt;🔍 TEBUS BAUCAR &amp; CARI&lt;/a&gt;
            &lt;span class=&quot;aff-hint&quot;&gt;
                &lt;b&gt;Nota:&lt;/b&gt; Selepas mendarat di aplikasi Shopee, anda boleh terus cari &lt;b&gt;&quot;A4 Clear Holder File&quot;&lt;/b&gt; untuk menyimpan salinan kontrak sewa rumah anda dengan lebih rapi dan selamat.
            &lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;script&gt;
  const DIC = {
      BM: {
          tt: &quot;PERJANJIAN PENYEWAAN RUMAH&quot;, intro: &quot;PERJANJIAN INI dibuat pada&quot;, betw: &quot;ANTARA&quot;,
          own: &quot;TUAN RUMAH&quot;, ten: &quot;PENYEWA&quot;, ic: &quot;No. KP&quot;,
          prem: &quot;BAHAWASANYA Tuan Rumah bersetuju menyewakan premis di alamat:&quot;, agr: &quot;ADALAH DIPERSETUJUI SEPERTI BERIKUT:&quot;,
          h_item: &quot;PERKARA&quot;, h_desc: &quot;BUTIRAN&quot;,
          dur: &quot;TEMPOH SEWAAN&quot;, dur_txt: &quot;selama&quot;, from: &quot;bermula&quot;, to: &quot;sehingga&quot;,
          rent: &quot;KADAR SEWA&quot;, rent_txt: &quot;Sebulan adalah RM&quot;, pay: &quot;Dibayar sebelum 7hb ke akaun&quot;,
          dep: &quot;DEPOSIT&quot;, dep_s: &quot;1. Deposit Sekuriti&quot;, dep_sd: &quot;(Jaminan kerosakan struktur)&quot;, dep_u: &quot;2. Deposit Utiliti&quot;, dep_ud: &quot;(Jaminan bil tertunggak)&quot;,
          rev: &quot;KENAIKAN SEWA&quot;, rev_txt: &quot;Semakan setiap&quot;, rev_yr: &quot;tahun. Kenaikan maksima&quot;,
          not: &quot;PENAMATAN&quot;, not_txt: &quot;Notis bertulis selama&quot;, not_m: &quot;bulan diperlukan untuk penamatan awal.&quot;,
          rul_t: &quot;TANGGUNGJAWAB PENYEWA&quot;, ruls: [&quot;Membayar sewa &amp; bil utiliti tepat pada masanya.&quot;,&quot;Menjaga kebersihan premis.&quot;,&quot;Tidak melakukan kerosakan struktur.&quot;,&quot;Tidak menyewakan semula (sublet).&quot;,&quot;Tidak melakukan kegiatan haram.&quot;],
          sign_t: &quot;PADA MENYAKSIKAN HAL DI ATAS, pihak-pihak menurunkan tandatangan:&quot;, s_own: &quot;Tuan Rumah&quot;, s_ten: &quot;Penyewa&quot;, s_wit: &quot;Saksi&quot;
      },
      EN: {
          tt: &quot;RESIDENTIAL TENANCY AGREEMENT&quot;, intro: &quot;THIS AGREEMENT is made on&quot;, betw: &quot;BETWEEN&quot;,
          own: &quot;THE LANDLORD&quot;, ten: &quot;THE TENANT&quot;, ic: &quot;ID / IC No&quot;,
          prem: &quot;WHEREAS the Landlord agrees to let the property at:&quot;, agr: &quot;IT IS HEREBY AGREED AS FOLLOWS:&quot;,
          h_item: &quot;ITEM&quot;, h_desc: &quot;DETAILS&quot;,
          dur: &quot;DURATION&quot;, dur_txt: &quot;For a duration of&quot;, from: &quot;commencing&quot;, to: &quot;until&quot;,
          rent: &quot;MONTHLY RENT&quot;, rent_txt: &quot;Monthly rental is RM&quot;, pay: &quot;Payable by the 7th to account&quot;,
          dep: &quot;DEPOSITS&quot;, dep_s: &quot;1. Security Deposit&quot;, dep_sd: &quot;(For damages to structure)&quot;, dep_u: &quot;2. Utility Deposit&quot;, dep_ud: &quot;(For outstanding bills)&quot;,
          rev: &quot;RENT REVIEW&quot;, rev_txt: &quot;Review every&quot;, rev_yr: &quot;years. Max increase&quot;,
          not: &quot;TERMINATION&quot;, not_txt: &quot;Written notice of&quot;, not_m: &quot;months required for early termination.&quot;,
          rul_t: &quot;TENANT&#39;S OBLIGATIONS&quot;, ruls: [&quot;Pay rent &amp; utilities on time.&quot;,&quot;Keep premise clean.&quot;,&quot;No structural damages.&quot;,&quot;No subletting.&quot;,&quot;No illegal activities.&quot;],
          sign_t: &quot;IN WITNESS WHEREOF, the parties have set their hands:&quot;, s_own: &quot;Landlord&quot;, s_ten: &quot;Tenant&quot;, s_wit: &quot;Witness&quot;
      }
  };

  // LOGIC AUTO-TICK (NEW)
  function autoTick() {
      let val = document.getElementById(&#39;rev_val&#39;).value;
      let chk = document.getElementById(&#39;chk_rev&#39;);
      // Kalau ada nilai, tick. Kalau kosong, untick.
      chk.checked = (val &amp;&amp; val.length &gt; 0);
  }

  function fmtDate(s, lang) {
      if(!s) return &quot;........................&quot;;
      let d = new Date(s);
      let mBM = [&quot;JANUARI&quot;,&quot;FEBRUARI&quot;,&quot;MAC&quot;,&quot;APRIL&quot;,&quot;MEI&quot;,&quot;JUN&quot;,&quot;JULAI&quot;,&quot;OGOS&quot;,&quot;SEPTEMBER&quot;,&quot;OKTOBER&quot;,&quot;NOVEMBER&quot;,&quot;DISEMBER&quot;];
      let mEN = [&quot;JANUARY&quot;,&quot;FEBRUARY&quot;,&quot;MARCH&quot;,&quot;APRIL&quot;,&quot;MAY&quot;,&quot;JUNE&quot;,&quot;JULY&quot;,&quot;AUGUST&quot;,&quot;SEPTEMBER&quot;,&quot;OCTOBER&quot;,&quot;NOVEMBER&quot;,&quot;DECEMBER&quot;];
      let m = (lang==&#39;BM&#39;) ? mBM : mEN;
      return `${d.getDate()} ${m[d.getMonth()]} ${d.getFullYear()}`;
  }

  function calc() {
      let s = document.getElementById(&#39;d_start&#39;).value;
      if(!s) { document.getElementById(&#39;d_end&#39;).value=&quot;&quot;; return; }
      let n = parseInt(document.getElementById(&#39;dur_v&#39;).value)||1;
      let u = document.getElementById(&#39;dur_u&#39;).value;
      let d = new Date(s);
      if(u.includes(&#39;Tahun&#39;)) d.setFullYear(d.getFullYear()+n); else d.setMonth(d.getMonth()+n);
      d.setDate(d.getDate()-1);
      document.getElementById(&#39;d_end&#39;).value = `${d.getDate()}/${d.getMonth()+1}/${d.getFullYear()}`;
  }

  function makePDF() {
      const { jsPDF } = window.jspdf;
      const doc = new jsPDF();
      
      let L = DIC[document.getElementById(&#39;lang&#39;).value];
      let val = (id) =&gt; document.getElementById(id).value.toUpperCase();
      let raw = (id) =&gt; document.getElementById(id).value;

      let dateAgree = fmtDate(raw(&#39;d_sign&#39;), document.getElementById(&#39;lang&#39;).value);
      let nmOwn = val(&#39;nm_own&#39;) || &quot;................&quot;;
      let icOwn = val(&#39;ic_own&#39;) || &quot;................&quot;;
      let nmTen = val(&#39;nm_ten&#39;) || &quot;................&quot;;
      let icTen = val(&#39;ic_ten&#39;) || &quot;................&quot;;
      let addr = val(&#39;addr&#39;) || &quot;................................................&quot;;
      
      doc.setFont(&quot;times&quot;, &quot;bold&quot;); doc.setFontSize(16);
      doc.text(L.tt, 105, 20, {align:&quot;center&quot;});
      doc.setLineWidth(0.5); doc.line(14, 22, 196, 22);

      doc.setFontSize(11); doc.setFont(&quot;times&quot;, &quot;normal&quot;);
      doc.text(`${L.intro} ${dateAgree} ${L.betw}:`, 14, 30);

      doc.autoTable({
          startY: 33,
          body: [
              [`${L.own}:`, nmOwn], [`${L.ic}:`, icOwn],
              [{content: &#39;&amp;&#39;, colSpan: 2, styles: {halign: &#39;center&#39;, fontStyle:&#39;bold&#39;}}],
              [`${L.ten}:`, nmTen], [`${L.ic}:`, icTen]
          ],
          theme: &#39;plain&#39;,
          styles: { font: &quot;times&quot;, fontSize: 11, cellPadding: 1 },
          columnStyles: { 0: {cellWidth: 40, fontStyle: &#39;bold&#39;} }
      });

      let y = doc.lastAutoTable.finalY + 8;
      doc.text(`${L.prem}`, 14, y);
      doc.setFont(&quot;times&quot;, &quot;bold&quot;); doc.text(addr, 14, y+6);
      
      y += 15;
      doc.text(L.agr, 14, y);

      let dEndVal = document.getElementById(&#39;d_end&#39;).value;
      if(dEndVal) {
          let parts = dEndVal.split(&#39;/&#39;);
          let eD = new Date(`${parts[2]}-${parts[1]}-${parts[0]}`);
          let mArr = (document.getElementById(&#39;lang&#39;).value==&#39;BM&#39;) ? [&quot;JANUARI&quot;,&quot;FEBRUARI&quot;,&quot;MAC&quot;,&quot;APRIL&quot;,&quot;MEI&quot;,&quot;JUN&quot;,&quot;JULAI&quot;,&quot;OGOS&quot;,&quot;SEPTEMBER&quot;,&quot;OKTOBER&quot;,&quot;NOVEMBER&quot;,&quot;DISEMBER&quot;] : [&quot;JANUARY&quot;,&quot;FEBRUARY&quot;,&quot;MARCH&quot;,&quot;APRIL&quot;,&quot;MAY&quot;,&quot;JUNE&quot;,&quot;JULY&quot;,&quot;AUGUST&quot;,&quot;SEPTEMBER&quot;,&quot;OCTOBER&quot;,&quot;NOVEMBER&quot;,&quot;DECEMBER&quot;];
          dEndVal = `${eD.getDate()} ${mArr[eD.getMonth()]} ${eD.getFullYear()}`;
      } else { dEndVal = &quot;................&quot;; }
      
      let durFull = `${L.dur_txt} ${raw(&#39;dur_v&#39;)} ${raw(&#39;dur_u&#39;)} ${L.from} ${fmtDate(raw(&#39;d_start&#39;), document.getElementById(&#39;lang&#39;).value)} ${L.to} ${dEndVal}`;
      let rentTxt = `${L.rent_txt} ${raw(&#39;rent&#39;)}.\n${L.pay} ${val(&#39;bank_nm&#39;)} (${val(&#39;bank_no&#39;)}).`;
      let depTxt = `${L.dep_s}: RM ${raw(&#39;dep_s&#39;)}\n${L.dep_sd}\n\n${L.dep_u}: RM ${raw(&#39;dep_u&#39;)}\n${L.dep_ud}`;
      let notTxt = `${L.not_txt} ${raw(&#39;not_v&#39;)} ${L.not_m}`;

      let bodyData = [
          [L.dur, durFull], [L.rent, rentTxt], [L.dep, depTxt], [L.not, notTxt]
      ];

      // LOGIC CHECKBOX AKTIF JIKA DITANDA ATAU DIISI
      if(document.getElementById(&#39;chk_rev&#39;).checked) {
          let rT = document.getElementById(&#39;rev_t&#39;).value;
          let rV = raw(&#39;rev_val&#39;);
          let rDisp = (rT==&#39;p&#39;) ? `${rV}%` : `RM ${rV}`;
          let revFull = `${L.rev_txt} ${raw(&#39;rev_y&#39;)} ${L.rev_yr} ${rDisp}.`;
          bodyData.splice(3, 0, [L.rev, revFull]);
      }

      doc.autoTable({
          startY: y + 3,
          head: [[L.h_item, L.h_desc]], body: bodyData,
          theme: &#39;grid&#39;,
          headStyles: { fillColor: [230,230,230], textColor: 0, lineColor: 0 },
          styles: { font: &quot;times&quot;, fontSize: 10, lineColor: 0, lineWidth: 0.1, cellPadding: 3 },
          columnStyles: { 0: {cellWidth: 45, fontStyle: &#39;bold&#39;} }
      });

      y = doc.lastAutoTable.finalY + 10;
      if(y &gt; 220) { doc.addPage(); y = 20; }
      
      doc.setFont(&quot;times&quot;, &quot;bold&quot;); doc.text(L.rul_t + &quot;:&quot;, 14, y);
      y += 6;
      doc.setFont(&quot;times&quot;, &quot;normal&quot;);
      L.ruls.forEach((r, i) =&gt; {
          doc.text(`${i+1}. ${r}`, 14, y); y += 6;
      });

      y += 10;
      
      // LOGIC SMART PAGE BREAK (TENDANG KE PAGE BARU JIKA RUANG &lt; 100mm)
      if (y &gt; 190) { 
          doc.addPage(); 
          y = 20; 
      }

      doc.text(L.sign_t, 14, y);
      y += 5;

      doc.autoTable({
          startY: y,
          body: [
              [`${L.s_own}:\n\n__________________\n${nmOwn}\n${icOwn}`, `${L.s_ten}:\n\n__________________\n${nmTen}\n${icTen}`],
              [&#39;&#39;,&#39;&#39;], 
              [`${L.s_wit}:\n\n__________________\n................................`, `${L.s_wit}:\n\n__________________\n................................`]
          ],
          theme: &#39;plain&#39;,
          styles: { font: &quot;times&quot;, fontSize: 10, cellPadding: 2 },
          columnStyles: { 0: {cellWidth: 85}, 1: {cellWidth: 85} }
      });

      doc.save(`Sewa_${nmTen}.pdf`);
  }
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://layanlah.blogspot.com/feeds/4118046339092420776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-surat-perjanjian-sewa-rumah-malaysia-word-pdf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4118046339092420776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5341061453048343895/posts/default/4118046339092420776'/><link rel='alternate' type='text/html' href='http://layanlah.blogspot.com/2026/01/generator-surat-perjanjian-sewa-rumah-malaysia-word-pdf.html' title='Generator Surat Perjanjian Sewa Rumah (Tenancy Agreement) Malaysia - Sah LHDN, PDF &amp; Word '/><author><name>MeAdmin</name><uri>http://www.blogger.com/profile/06871300420300644055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif55UydyAharhqJyrihJaxgoP_bOIYKJjkMDHFNt2f8aoZR4QAZuLzcajuAfdLRxfxhnWPXUudMzj9Q2KUO0iqAK4lIQCB7QFW5qM5NiojK0f5iWr0qJS5q7-1ysYrJiiyIDREDq_AEnRSYhKCwNQa0TajWLl7fxScyKAEA_ukXWUe-6gr7jKzyCLcZVM/s72-c/1000001510.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>