Cara Menggabungkan HTML dan CSS Panduan Lengkap untuk Pemula

Mari kita mulai dengan pertanyaan mendasar: bagaimana cara menggabungkan HTML dan CSS? Ibarat dua sahabat karib, HTML membangun fondasi dan struktur halaman web, sementara CSS mempercantik dan memberikan gaya visualnya. Keduanya bekerja sama, namun memiliki peran yang berbeda. HTML bertanggung jawab atas konten dan struktur, sedangkan CSS mengendalikan tampilan dan presentasi.

Dalam artikel ini, kita akan menjelajahi secara mendalam bagaimana dua teknologi inti ini berinteraksi, mulai dari dasar-dasar hingga teknik lanjutan. Kita akan membahas berbagai metode penyisipan CSS, selektor CSS, properti CSS, tata letak, desain responsif, hingga penggunaan CSS framework dan optimasi performa. Siap untuk memulai petualangan menggabungkan HTML dan CSS?

Table of Contents

Pengantar: Memahami Dasar HTML dan CSS

Cara menggabungkan html dan css

Source: powercode.id

Memahami HTML dan CSS adalah fondasi utama dalam pengembangan web. Kita menggabungkannya untuk menentukan struktur dan tampilan halaman. Namun, pernahkah terpikir bagaimana menciptakan animasi yang memukau seperti di film-film Disney? Prosesnya memang kompleks, tetapi inspirasi bisa datang dari mana saja. Dengan menguasai teknik dasar, seperti yang dijelaskan pada cara buat animasi disney , kita bisa melihat bagaimana kreativitas visual dikembangkan.

Kembali ke HTML dan CSS, kita bisa menerapkan prinsip-prinsip tersebut untuk menciptakan efek animasi sederhana pada website kita.

HTML (HyperText Markup Language) dan CSS (Cascading Style Sheets) adalah dua teknologi fundamental dalam pengembangan web. Keduanya bekerja bersama untuk menciptakan tampilan dan fungsionalitas halaman web yang kita lihat sehari-hari. Memahami perbedaan dan bagaimana mereka berinteraksi adalah kunci untuk menjadi pengembang web yang efektif.

Mari kita selami lebih dalam tentang peran masing-masing teknologi ini.

Perbedaan Mendasar, Cara menggabungkan html dan css

HTML dan CSS memiliki peran yang berbeda namun saling melengkapi dalam pengembangan web. HTML bertanggung jawab atas struktur dan konten halaman web, sementara CSS bertanggung jawab atas tampilan visualnya.

  • HTML (HyperText Markup Language): Berfungsi untuk mendefinisikan struktur dan konten halaman web. Ini termasuk teks, gambar, tautan, daftar, dan elemen lainnya. HTML menggunakan tag untuk menandai elemen-elemen ini, memberikan browser instruksi tentang cara menampilkan konten.
  • CSS (Cascading Style Sheets): Bertanggung jawab untuk mengatur tampilan visual elemen HTML. Ini termasuk warna, font, tata letak, dan efek visual lainnya. CSS menggunakan aturan yang terdiri dari selektor, properti, dan nilai untuk menentukan bagaimana elemen HTML akan ditampilkan.

Interaksi antara HTML dan CSS sangat penting. HTML menyediakan struktur dasar, dan CSS memberikan gaya visual. CSS dapat diterapkan pada elemen HTML melalui berbagai cara, termasuk menggunakan atribut `style` langsung dalam tag HTML, menggunakan tag `

` di dalam dokumen HTML, atau menggunakan file CSS eksternal yang dihubungkan ke dokumen HTML.

Berikut adalah tabel yang merangkum perbedaan utama antara HTML dan CSS:

Fitur HTML CSS
Fungsi Utama Mendefinisikan struktur dan konten halaman web. Mengatur tampilan visual elemen HTML.
Fokus Konten dan struktur. Tampilan dan gaya.
Sintaks Menggunakan tag (misalnya, `

`, `

`, ``).

Menggunakan aturan yang terdiri dari selektor, properti, dan nilai (misalnya, `p color: blue; `).
Contoh Penggunaan <h1>Judul Halaman</h1>, <p>Ini adalah paragraf.</p> h1 color: red; , p font-size: 16px;

Contoh Kode Sederhana

Untuk memahami bagaimana HTML dan CSS bekerja bersama, mari kita lihat beberapa contoh kode sederhana.

Berikut adalah contoh kode HTML sederhana yang mendemonstrasikan struktur dasar sebuah halaman web:

<!DOCTYPE html>
<html>
<head>
    <title>Judul Halaman</title>
</head>
<body>
    <h1>Selamat Datang di Halaman Saya</h1>
    <p>Ini adalah paragraf pertama.</p>
</body>
</html>
 

Kode di atas mendefinisikan struktur dasar halaman web dengan elemen-elemen seperti ` `, “, “, ``, “, `</p> <h1>`, dan `</p> <p>`. Elemen-elemen ini memberikan informasi kepada browser tentang bagaimana menampilkan konten.</p> <p>Berikut adalah contoh kode CSS sederhana yang mengatur tampilan elemen HTML:</p> <pre> h1 color: blue; text-align: center; p font-size: 16px; </pre> <p>Kode CSS di atas akan mengatur warna judul ( <code><h1></code>) menjadi biru dan rata tengah, serta mengatur ukuran font paragraf ( <code><p></code>) menjadi 16 piksel. </p> <p>Kode CSS dapat dihubungkan ke kode HTML melalui beberapa cara: </p> <ul> <li><b>Menggunakan tag <link>:</b> Cara paling umum adalah dengan menghubungkan file CSS eksternal ke dokumen HTML menggunakan tag `<link>` di dalam bagian ` `:</li> </ul> <pre> <head> <title>Judul Halaman</title> <link rel="stylesheet" href="style.css"> </head> </pre> <ul> <li><b>Menggunakan atribut `style`:</b> Gaya CSS dapat diterapkan langsung pada elemen HTML menggunakan atribut `style`: </li> </ul> <pre> <h1 style="color: red;">Judul Halaman</h1> </pre> <ul> <li><b>Menggunakan tag <style>:</b> Gaya CSS dapat juga didefinisikan di dalam tag `<style>` di dalam bagian ` `:</li> </ul> <pre> <head> <title>Judul Halaman</title> <style> h1 color: green; </style> </head> </pre> <p>Ketika kode CSS dimodifikasi, tampilan halaman web akan berubah sesuai dengan aturan yang baru. </p> <h3><span class="ez-toc-section" id="Ilustrasi_Deskriptif"></span>Ilustrasi Deskriptif<span class="ez-toc-section-end"></span></h3> <p>Berikut adalah ilustrasi yang menunjukkan struktur dasar dokumen HTML dan bagaimana CSS diterapkan padanya: </p> <p><b>Ilustrasi Struktur Dasar HTML:</b></p> <p>Sebuah kotak besar mewakili dokumen HTML secara keseluruhan. Di dalamnya terdapat dua kotak yang lebih kecil: ` ` dan “. Kotak “ berisi informasi tentang dokumen, seperti judul halaman. Kotak “ berisi konten yang akan ditampilkan di halaman web, seperti judul (<code><h1></code>) dan paragraf ( <code><p></code>). </p> <p><b>Ilustrasi Penerapan CSS:</b></p> <p>Membangun website yang menarik dimulai dari menggabungkan HTML dan CSS dengan cermat, menentukan struktur dan tampilan visual. Namun, pernahkah Anda penasaran, apakah nomor ponsel Anda diblokir seseorang? Untuk mengetahuinya, ada beberapa trik yang bisa dicoba, seperti yang dijelaskan di <a href="https://www.identif.id/cara-mengetahui-no-hp-diblokir-2/">cara mengetahui no hp diblokir</a>. Setelah mengetahui trik tersebut, Anda bisa kembali fokus pada penggabungan HTML dan CSS, memastikan website Anda tampil sempurna dan responsif di berbagai perangkat.</p> </p> <p>Di samping ilustrasi struktur HTML, terdapat kotak yang mewakili kode CSS. Kotak ini berisi contoh selektor CSS (misalnya, `h1`, `p`) dan properti yang diterapkan (misalnya, `color: red;`, `font-size: 16px;`). Panah menunjukkan bagaimana selektor CSS menargetkan elemen HTML tertentu. Misalnya, selektor `h1` menargetkan elemen ` </p> <h1>` dalam dokumen HTML, dan properti `color: red;` akan mengubah warna teks judul menjadi merah.</p> <p><b>Keterangan Singkat:</b></p> <ul> <li><b>Dokumen HTML:</b> Struktur dasar halaman web, terdiri dari ` ` dan “.</li> <li><b><head>:</b> Berisi informasi metadata tentang halaman web. </li> <li><b><body>:</b> Berisi konten yang ditampilkan di halaman web. </li> <li><b>Selektor CSS:</b> Menentukan elemen HTML mana yang akan diatur gayanya. </li> <li><b>Properti CSS:</b> Menentukan aspek tampilan yang akan diubah (misalnya, warna, ukuran font). </li> </ul> <p><b>Proses Rendering Halaman Web:</b></p> <p>Browser membaca kode HTML dan CSS. Browser membangun struktur pohon DOM (Document Object Model) berdasarkan kode HTML. Browser menerapkan gaya CSS pada elemen-elemen DOM. Browser menampilkan halaman web berdasarkan struktur DOM yang sudah di-style. </p> <h3><span class="ez-toc-section" id="Definisi_dan_Kutipan"></span>Definisi dan Kutipan<span class="ez-toc-section-end"></span></h3> <p>Berikut adalah definisi singkat HTML dan CSS dari sumber terpercaya: </p> <blockquote> <p>“HTML is the standard markup language for creating web pages. CSS is a style sheet language used for describing the presentation of a document written in a markup language like HTML.”</p> <p> <cite>— MDN Web Docs, <a href="https://developer.mozilla.org/en-US/docs/Web/HTML" target="_blank" rel="noopener">https://developer.mozilla.org/en-US/docs/Web/HTML </a></cite> <cite>— MDN Web Docs, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS" target="_blank" rel="noopener">https://developer.mozilla.org/en-US/docs/Web/CSS </a></cite></p> </blockquote> <p>Pentingnya memahami definisi ini terletak pada kemampuan untuk membangun dan memelihara halaman web yang terstruktur dengan baik dan bergaya secara konsisten. Dengan pemahaman yang kuat tentang HTML dan CSS, pengembang web dapat membuat pengalaman pengguna yang lebih baik. </p> <p>Berikut adalah daftar singkat istilah kunci yang terkait dengan HTML dan CSS: </p> <ul> <li><b>HTML:</b> HyperText Markup Language, bahasa markup standar untuk membuat halaman web. </li> <li><b>CSS:</b> Cascading Style Sheets, bahasa style sheet untuk mengatur tampilan halaman web. </li> <li><b>Tag:</b> Elemen dalam HTML yang digunakan untuk menandai konten (misalnya, ` <br /> <h1>`, `</p> <p>`).</li> <li><b>Selektor:</b> Bagian dari aturan CSS yang memilih elemen HTML untuk di-style. </li> <li><b>Properti:</b> Atribut yang digunakan untuk menentukan gaya visual (misalnya, `color`, `font-size`). </li> <li><b>Nilai:</b> Menentukan nilai untuk properti (misalnya, `red` untuk `color`, `16px` untuk `font-size`). </li> <li><b>DOM:</b> Document Object Model, representasi terstruktur dari dokumen HTML yang digunakan oleh browser. </li> </ul> <h2><span class="ez-toc-section" id="Struktur_Dokumen_HTML_yang_Baik"></span>Struktur Dokumen HTML yang Baik<span class="ez-toc-section-end"></span></h2> <p>Struktur dokumen HTML yang baik adalah fondasi dari setiap halaman web yang berfungsi dengan baik dan mudah dipelihara. Memahami dan menerapkan struktur yang tepat memastikan kode Anda bersih, mudah dibaca, dan dioptimalkan untuk mesin pencari (). Ini juga memfasilitasi kolaborasi tim dan mempermudah proses pengembangan. </p> <h3><span class="ez-toc-section" id="Elemen-elemen_Penting_dalam_Struktur_Dokumen_HTML"></span>Elemen-elemen Penting dalam Struktur Dokumen HTML<span class="ez-toc-section-end"></span></h3> <p>Dokumen HTML memiliki struktur dasar yang terdiri dari beberapa elemen penting. Setiap elemen memiliki peran khusus dalam mendefinisikan konten dan metadata halaman web. </p> <ul> <li><b>“</b>: Deklarasi ini memberitahu browser versi HTML yang digunakan. Penting untuk memastikan browser menampilkan halaman dengan benar. </li> <li><b>“</b>: Elemen akar yang membungkus seluruh konten halaman. Di dalamnya terdapat elemen `head` dan `body`. </li> <li><b>“</b>: Berisi informasi metadata tentang dokumen, seperti judul halaman, deskripsi, kata kunci, dan tautan ke file CSS. Metadata ini tidak ditampilkan secara langsung di halaman web, tetapi penting untuk dan informasi browser. </li> <li><b>“</b>: Berisi semua konten yang terlihat di halaman web, seperti teks, gambar, video, dan elemen lainnya. </li> </ul> <h3><span class="ez-toc-section" id="Penggunaan_Elemen_%E2%80%9C_untuk_Metadata_dan_Link_CSS"></span>Penggunaan Elemen “ untuk Metadata dan Link CSS<span class="ez-toc-section-end"></span></h3> <p>Elemen ` ` memainkan peran krusial dalam menyediakan informasi penting tentang halaman web. Ini mencakup metadata yang membantu browser, mesin pencari, dan perangkat lain memahami konten dan karakteristik halaman.</p> <ul> <li><b>`<title>`</b>: Mendefinisikan judul halaman yang muncul di tab browser dan hasil pencarian. </li> <li><b>“</b>: Menyediakan informasi tentang karakter set, deskripsi halaman, kata kunci, dan informasi lainnya. Contoh: <code><meta charset="UTF-8"></code>, <code><meta name="description" content="Deskripsi halaman web"></code>. </li> <li><b>“</b>: Digunakan untuk menghubungkan halaman HTML dengan file CSS eksternal. Contoh: <code><link rel="stylesheet" href="style.css"></code>. </li> <li><b>`<br /> `</b>: Memungkinkan penulisan CSS langsung di dalam dokumen HTML. Ini kurang direkomendasikan untuk proyek besar, tetapi berguna untuk gaya kecil atau khusus. </li> <li><b>“</b>: Menentukan URL dasar untuk semua URL relatif dalam dokumen. </li> </ul> <h3><span class="ez-toc-section" id="Contoh_Kode_HTML_yang_Terstruktur_dengan_Baik"></span>Contoh Kode HTML yang Terstruktur dengan Baik<span class="ez-toc-section-end"></span></h3> <p>Berikut adalah contoh kode HTML yang terstruktur dengan baik, menunjukkan penggunaan tag yang tepat untuk berbagai elemen: </p> <pre> <!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Halaman Web Contoh</title> <link rel="stylesheet" href="style.css"> </head> <body> <header> <h1>Judul Halaman Utama</h1> <nav> <ul> <li><a href="#">Beranda</a></li> <li><a href="#">Tentang Kami</a></li> <li><a href="#">Kontak</a></li> </ul> </nav> </header> <main> <article> <h2>Judul Artikel</h2> <p>Paragraf pertama artikel.</p> <p>Paragraf kedua artikel.</p> <img src="gambar.jpg" alt="Deskripsi gambar"> </article> </main> <footer> <p>&copy; 2023 Nama Perusahaan</p> </footer> </body> </html> </pre> <p>Kode di atas menunjukkan struktur dasar sebuah halaman web, dengan elemen-elemen seperti header, navigasi, konten utama, dan footer.</p> <p>Penggunaan tag yang tepat memastikan konten ditampilkan dengan benar dan mudah diakses. </p> <h3><span class="ez-toc-section" id="Perbandingan_Tag_HTML_untuk_Struktur_Konten"></span>Perbandingan Tag HTML untuk Struktur Konten<span class="ez-toc-section-end"></span></h3> <p>Pemilihan tag HTML yang tepat sangat penting untuk semantik dan aksesibilitas halaman web. Tabel berikut membandingkan beberapa tag HTML yang umum digunakan untuk struktur konten: </p> <table> <thead> <tr> <th>Tag</th> <th>Deskripsi</th> <th>Penggunaan</th> <th>Contoh</th> </tr> </thead> <tbody> <tr> <td><code><h1></code></td> <td>Judul utama halaman.</td> <td>Digunakan sekali per halaman untuk judul paling penting.</td> <td><code><h1>Judul Halaman</h1></code></td> </tr> <tr> <td><code><h2></code></td> <td>Judul sub-bagian.</td> <td>Untuk judul bagian kedua terpenting.</td> <td><code><h2>Sub Judul</h2></code></td> </tr> <tr> <td><code><h3></code> hingga <code><h6></code></td> <td>Judul sub-bagian yang lebih kecil.</td> <td>Untuk judul di bawah <code><h2></code>, dengan hierarki yang semakin kecil.</td> <td><code><h3>Sub-sub Judul</h3></code></td> </tr> <tr> <td><code><p></code></td> <td>Paragraf teks.</td> <td>Untuk membagi konten menjadi blok teks.</td> <td><code><p>Ini adalah paragraf.</p></code></td> </tr> <tr> <td><code><div></code></td> <td>Kontainer generik untuk konten.</td> <td>Untuk mengelompokkan elemen lain, sering digunakan untuk penataan gaya dengan CSS.</td> <td><code><div class="container">...</div></code></td> </tr> <tr> <td><code><span></code></td> <td>Kontainer inline untuk teks.</td> <td>Untuk menata gaya bagian kecil dari teks di dalam elemen lain.</td> <td><code><p>Teks ini memiliki <span style="color:red;">warna merah</span>.</p></code></td> </tr> <tr> <td><code><ul></code></td> <td>Daftar tidak berurutan.</td> <td>Untuk daftar item tanpa urutan tertentu.</td> <td> <code> <ul><br /> <li>Item 1</li><br /> <li>Item 2</li><br /> </ul> </code> </td> </tr> <tr> <td><code><ol></code></td> <td>Daftar berurutan.</td> <td>Untuk daftar item dengan urutan tertentu.</td> <td> <code> <ol><br /> <li>Item 1</li><br /> <li>Item 2</li><br /> </ol> </code> </td> </tr> <tr> <td><code><img></code></td> <td>Menampilkan gambar.</td> <td>Untuk menyematkan gambar dalam halaman web.</td> <td><code><img src="gambar.jpg" alt="Deskripsi gambar"></code></td> </tr> <tr> <td><code><a></code></td> <td>Membuat tautan (hyperlink).</td> <td>Untuk menghubungkan ke halaman lain atau bagian dalam halaman yang sama.</td> <td><code><a href="https://www.example.com">Kunjungi Example.com</a></code></td> </tr> </tbody> </table> <h2><span class="ez-toc-section" id="Cara_Menyisipkan_CSS_ke_dalam_HTML"></span>Cara Menyisipkan CSS ke dalam HTML<span class="ez-toc-section-end"></span></h2> <p>Setelah memahami dasar HTML dan CSS, langkah selanjutnya adalah menggabungkan keduanya. Ada beberapa cara untuk menyisipkan CSS ke dalam dokumen HTML, masing-masing dengan kelebihan dan kekurangannya sendiri. Pemilihan metode yang tepat bergantung pada kebutuhan proyek dan tingkat fleksibilitas yang diinginkan. </p> <h3><span class="ez-toc-section" id="Metode_Penyisipan_CSS"></span>Metode Penyisipan CSS<span class="ez-toc-section-end"></span></h3> <p>Terdapat tiga metode utama untuk menyisipkan CSS ke dalam HTML, yaitu inline, internal, dan eksternal. Mari kita bedah satu per satu: </p> <ul> <li><b>Inline CSS:</b> CSS disisipkan langsung pada elemen HTML menggunakan atribut <code>style</code>. </li> <li><b>Internal CSS:</b> CSS ditempatkan di dalam tag <code><style></code> di bagian <code><head></code> dokumen HTML. </li> <li><b>External CSS:</b> CSS ditulis dalam file terpisah dengan ekstensi <code>.css</code> dan dihubungkan ke dokumen HTML menggunakan tag <code><link></code>. </li> </ul> <h3><span class="ez-toc-section" id="Contoh_Kode_dan_Perbandingan_Metode"></span>Contoh Kode dan Perbandingan Metode<span class="ez-toc-section-end"></span></h3> <p>Mari kita lihat contoh kode untuk masing-masing metode, beserta kelebihan dan kekurangannya: </p> <h4><span class="ez-toc-section" id="Inline_CSS"></span>Inline CSS<span class="ez-toc-section-end"></span></h4> <p>Inline CSS diterapkan langsung pada elemen HTML. Contohnya: </p> <pre> <p style="color: blue; font-size: 16px;">Ini adalah contoh teks dengan Inline CSS.</p> </pre> <p><b>Kelebihan:</b></p> <ul> <li>Mudah dan cepat untuk diterapkan pada elemen tertentu. </li> <li>Berguna untuk penyesuaian cepat atau <i>override</i> gaya. </li> </ul> <p><b>Kekurangan:</b></p> <ul> <li>Membuat kode HTML menjadi berantakan dan sulit dibaca. </li> <li>Tidak efisien jika gaya yang sama perlu diterapkan ke banyak elemen. </li> <li>Sulit untuk memelihara dan memperbarui karena gaya tersebar di seluruh dokumen. </li> </ul> <h4><span class="ez-toc-section" id="Internal_CSS"></span>Internal CSS<span class="ez-toc-section-end"></span></h4> <p>Internal CSS didefinisikan di dalam tag <code><style></code> di bagian <code><head></code> dokumen HTML. Contohnya: </p> <pre> <head> <style> p color: green; font-size: 18px; </style> </head> <body> <p>Ini adalah contoh teks dengan Internal CSS.</p> <p>Ini juga contoh teks dengan Internal CSS.</p> </body> </pre> <p><b>Kelebihan:</b></p> <ul> <li>Lebih terstruktur daripada inline CSS. </li> <li>Gaya dapat diterapkan ke beberapa elemen dalam satu halaman. </li> <li>Berguna untuk gaya spesifik halaman. </li> </ul> <p><b>Kekurangan:</b></p> <ul> <li>Gaya hanya berlaku untuk satu halaman HTML. </li> <li>Membuat kode HTML menjadi lebih panjang. </li> <li>Kurang efisien jika gaya perlu digunakan di banyak halaman. </li> </ul> <h4><span class="ez-toc-section" id="External_CSS"></span>External CSS<span class="ez-toc-section-end"></span></h4> <p>External CSS disimpan dalam file terpisah dengan ekstensi <code>.css</code>. File ini kemudian dihubungkan ke dokumen HTML menggunakan tag <code><link></code> di bagian <code><head></code>. Contohnya: </p> <p><b>File CSS (style.css):</b></p> <pre> p color: red; font-size: 20px; </pre> <p><b>File HTML:</b></p> <pre> <head> <link rel="stylesheet" href="style.css"> </head> <body> <p>Ini adalah contoh teks dengan External CSS.</p> <p>Ini juga contoh teks dengan External CSS.</p> </body> </pre> <p><b>Kelebihan:</b></p> <ul> <li>Membuat kode HTML bersih dan mudah dibaca. </li> <li>Gaya dapat digunakan di beberapa halaman HTML, meningkatkan efisiensi. </li> <li>Memudahkan pemeliharaan dan pembaruan gaya secara keseluruhan. </li> </ul> <p><b>Kekurangan:</b></p> <ul> <li>Memerlukan file terpisah untuk CSS. </li> <li>Sedikit lebih rumit untuk diatur dibandingkan metode lainnya. </li> </ul> <h3><span class="ez-toc-section" id="Mengaitkan_File_CSS_Eksternal"></span>Mengaitkan File CSS Eksternal<span class="ez-toc-section-end"></span></h3> <p>Seperti yang telah disebutkan, file CSS eksternal dihubungkan ke dokumen HTML menggunakan tag <code><link></code>. Tag ini biasanya ditempatkan di dalam bagian <code><head></code> dokumen HTML. Atribut <code>rel</code> menentukan hubungan antara dokumen HTML dan file CSS (dalam hal ini, <code>stylesheet</code>), dan atribut <code>href</code> menentukan lokasi file CSS. </p> <pre> <head> <link rel="stylesheet" href="style.css"> </head> </pre> <h3><span class="ez-toc-section" id="Ilustrasi_Perbedaan_Visual"></span>Ilustrasi Perbedaan Visual<span class="ez-toc-section-end"></span></h3> <p>Perbedaan visual antara ketiga metode penyisipan CSS dapat diilustrasikan sebagai berikut: </p> <p>Bayangkan sebuah paragraf teks: </p> <pre> <p>Contoh paragraf teks.</p> </pre> <p><b>Inline CSS:</b> Teks akan berwarna biru dan berukuran 16px. Gaya ini hanya berlaku untuk paragraf tersebut. Ini seperti mewarnai teks langsung dengan spidol. </p> <p><b>Internal CSS:</b> Semua paragraf dalam halaman akan berwarna hijau dan berukuran 18px. Ini seperti menggunakan pena berwarna yang sama untuk semua teks dalam satu buku. </p> <p><b>External CSS:</b> Semua paragraf di semua halaman yang terhubung ke file CSS akan berwarna merah dan berukuran 20px. Ini seperti memiliki stempel yang sama untuk mewarnai teks di semua buku. </p> <p>Oke, mari kita mulai. Dalam dunia web, menggabungkan HTML dan CSS itu krusial, seperti fondasi bagi sebuah rumah. Tapi, pernahkah terpikir, betapa pentingnya fondasi dalam kehidupan spiritual? Sama seperti kita perlu memahami struktur HTML untuk membuat website, kita juga perlu memahami <a href="https://www.identif.id/cara-sholat-yang-benar-dan-bacaannya-3/">cara sholat yang benar dan bacaannya</a> untuk memperkuat hubungan dengan Sang Pencipta. Kembali ke dunia coding, CSS ibarat make-up yang mempercantik tampilan HTML, membuat website kita lebih menarik dan mudah dinavigasi.</p> </p> <p>Perbedaan ini menunjukkan bagaimana setiap metode mempengaruhi tampilan dan bagaimana gaya diterapkan pada elemen HTML. </p> <p>Dalam dunia pengembangan web, menyatukan HTML dan CSS ibarat meramu ramuan ajaib untuk tampilan situs yang memukau. Tapi, bagaimana jika kita sakit? Sama seperti HTML yang memerlukan CSS untuk mempercantik tampilan, tubuh kita butuh penanganan saat terserang influenza. Untungnya, ada banyak cara untuk mengobati penyakit influenza, seperti yang dijelaskan di <a href="https://www.identif.id/cara-mengobati-penyakit-influenza-3/">sini</a>. Kembali ke dunia kode, integrasi yang tepat antara HTML dan CSS memastikan website kita tak hanya berfungsi, tapi juga enak dipandang.</p> </p> <h2><span class="ez-toc-section" id="Pemahaman_Dasar_Selektor_CSS_Cara_Menggabungkan_Html_Dan_Css"></span>Pemahaman Dasar Selektor CSS: Cara Menggabungkan Html Dan Css<span class="ez-toc-section-end"></span></h2> <p>Selektor CSS adalah fondasi dari bagaimana kita menata gaya visual pada halaman web. Mereka adalah kunci untuk menargetkan elemen HTML tertentu dan menerapkan aturan CSS yang diinginkan. Memahami selektor adalah langkah krusial dalam menguasai CSS dan menciptakan desain web yang efektif dan efisien. </p> <p>Mari kita selami lebih dalam mengenai selektor CSS, mulai dari definisi dasar hingga penerapan yang lebih kompleks. </p> <h3><span class="ez-toc-section" id="Definisi_dan_Konsep_Dasar_Selektor_CSS"></span>Definisi dan Konsep Dasar Selektor CSS<span class="ez-toc-section-end"></span></h3> <p>Selektor CSS adalah pola yang digunakan untuk memilih elemen HTML yang akan di-styling. Mereka memberitahu browser elemen mana yang harus diubah gayanya berdasarkan aturan CSS yang diberikan. Tujuan utama selektor adalah untuk memungkinkan desainer web mengontrol tampilan dan tata letak konten HTML dengan presisi. </p> <p>Cara kerja selektor cukup sederhana: selektor menentukan elemen yang akan di-styling, dan deklarasi CSS (properti dan nilai) menentukan gaya yang akan diterapkan. Ketika browser memuat halaman web, ia membaca stylesheet CSS dan menerapkan gaya ke elemen HTML yang sesuai berdasarkan selektor yang cocok. </p> <p>Terdapat tiga jenis selektor dasar yang paling sering digunakan: selektor tag, selektor class, dan selektor id. Perbedaan utama terletak pada cara mereka menargetkan elemen: </p> <ul> <li><b>Selektor Tag:</b> Menargetkan semua elemen HTML dengan tag yang sama. Contoh: <code>p</code> akan menargetkan semua elemen paragraf. </li> <li><b>Selektor Class:</b> Menargetkan elemen HTML berdasarkan atribut <code>class</code> yang diberikan. Class dapat digunakan pada banyak elemen. Contoh: <code>.paragraf</code> akan menargetkan semua elemen dengan class “paragraf”. </li> <li><b>Selektor ID:</b> Menargetkan elemen HTML berdasarkan atribut <code>id</code> yang diberikan. ID harus unik pada setiap halaman. Contoh: <code>#judul</code> akan menargetkan elemen dengan id “judul”. </li> </ul> <p>Berikut adalah contoh konkret penggunaan masing-masing selektor: </p> <p>Misalkan kita memiliki HTML berikut: </p> <pre> <code> <p>Ini adalah paragraf pertama.</p> <p class="paragraf">Ini adalah paragraf kedua dengan class.</p> <div id="judul">Judul Halaman</div> <p class="paragraf">Ini adalah paragraf ketiga dengan class.</p> </code> </pre> <p>Kita dapat menggunakan selektor CSS untuk mengubah gaya elemen-elemen ini: </p> <pre> <code> /* Selektor Tag -/ p color: blue; /* Semua paragraf akan berwarna biru -/ /* Selektor Class -/ .paragraf font-style: italic; /* Semua elemen dengan class "paragraf" akan miring -/ /* Selektor ID -/ #judul font-size: 2em; /* Elemen dengan id "judul" akan memiliki ukuran font 2x lipat -/ </code> </pre> <p>Berikut adalah tabel perbandingan yang merangkum perbedaan utama antara selektor tag, class, dan id: </p> <table> <thead> <tr> <th>Fitur</th> <th>Selektor Tag</th> <th>Selektor Class</th> <th>Selektor ID</th> </tr> </thead> <tbody> <tr> <td>Sintaks</td> <td><code>p</code></td> <td><code>.nama-class</code></td> <td><code>#nama-id</code></td> </tr> <tr> <td>Penggunaan</td> <td>Untuk semua tag</td> <td>Untuk grup elemen</td> <td>Untuk elemen unik</td> </tr> <tr> <td>Prioritas (Specificity)</td> <td>Rendah</td> <td>Menengah</td> <td>Tinggi</td> </tr> <tr> <td>Contoh</td> <td><code>p ... </code></td> <td><code>.paragraf ... </code></td> <td><code>#judul ... </code></td> </tr> </tbody> </table> <h3><span class="ez-toc-section" id="Selektor_Kombinator_Detail_dan_Contoh"></span>Selektor Kombinator: Detail dan Contoh<span class="ez-toc-section-end"></span></h3> <p>Selektor kombinator memungkinkan kita untuk menargetkan elemen berdasarkan hubungan mereka dalam struktur HTML. Mereka memberikan kontrol yang lebih presisi dalam memilih elemen untuk di-styling. Ada empat jenis selektor kombinator utama: </p> <ul> <li><b>Descendant Selector (Selektor Keturunan):</b> Memilih semua elemen yang merupakan turunan dari elemen yang ditentukan (di mana elemen tersebut berada di dalam elemen lain). </li> <li><b>Child Selector (Selektor Anak):</b> Memilih elemen yang merupakan anak langsung dari elemen yang ditentukan (hanya satu tingkat di bawah). </li> <li><b>Adjacent Sibling Selector (Selektor Sibling Bersebelahan):</b> Memilih elemen yang berada tepat setelah elemen yang ditentukan dalam struktur HTML. </li> <li><b>General Sibling Selector (Selektor Sibling Umum):</b> Memilih semua elemen yang merupakan sibling (saudara) dari elemen yang ditentukan (berada pada level yang sama dan mengikuti elemen yang ditentukan). </li> </ul> <p>Mari kita lihat contoh kode HTML dan CSS untuk masing-masing kombinator: </p> <p><b>Descendant Selector:</b></p> <p>Memahami bagaimana HTML dan CSS bekerja bersama adalah kunci. Kita bisa menganggapnya seperti merancang sebuah bangunan: HTML adalah kerangka dasarnya, sedangkan CSS adalah cat, dekorasi, dan semua elemen visual yang membuatnya menarik. Nah, dalam konteks pendidikan, analogi ini bisa diterapkan saat menyusun <a href="https://www.identif.id/pendidikan/rpp/">RPP</a>. Sama seperti kita merencanakan tampilan website dengan CSS, RPP merencanakan bagaimana kita menyampaikan materi pelajaran.</p> <p>Kembali ke HTML dan CSS, penggabungannya yang tepat akan menciptakan tampilan website yang informatif dan enak dipandang. </p> <p>Contoh HTML: </p> <pre> <code> <div class="container"> <p>Paragraf di dalam container</p> <span>Span di dalam container</span> </div> <p>Paragraf di luar container</p> </code> </pre> <p>Contoh CSS: </p> <pre> <code> .container p color: blue; /* Hanya paragraf di dalam div dengan class "container" yang berwarna biru -/ </code> </pre> <p><b>Child Selector:</b></p> <p>Contoh HTML: </p> <pre> <code> <div class="container"> <p>Paragraf anak</p> <span>Span di dalam container</span> <div> <p>Paragraf cucu</p> </div> </div> </code> </pre> <p>Contoh CSS: </p> <pre> <code> .container > p font-weight: bold; /* Hanya paragraf yang langsung menjadi anak dari div dengan class "container" yang akan tebal -/ </code> </pre> <p><b>Adjacent Sibling Selector:</b></p> <p>Contoh HTML: </p> <pre> <code> <h2>Judul</h2> <p>Paragraf pertama</p> <p>Paragraf kedua</p> </code> </pre> <p>Contoh CSS: </p> <pre> <code> h2 + p margin-top: 10px; /* Hanya paragraf yang langsung mengikuti h2 yang akan memiliki margin atas -/ </code> </pre> <p><b>General Sibling Selector:</b></p> <p>Contoh HTML: </p> <pre> <code> <h2>Judul</h2> <p>Paragraf pertama</p> <p>Paragraf kedua</p> <p class="khusus">Paragraf khusus</p> </code> </pre> <p>Contoh CSS: </p> <pre> <code> h2 ~ p color: gray; /* Semua paragraf yang mengikuti h2 akan berwarna abu-abu -/ </code> </pre> <p><b>Contoh Kasus Penggunaan yang Lebih Kompleks:</b></p> <p>Terapkan gaya khusus hanya pada paragraf pertama di dalam div dengan class ‘konten’. </p> <p>Memahami cara menggabungkan HTML dan CSS adalah fondasi penting dalam membangun website yang menarik. Namun, bagaimana jika koneksi internet terbatas? Nah, di sela-sela belajar coding, tak ada salahnya mencari cara mendapatkan kuota gratis, seperti yang dibahas di <a href="https://www.identif.id/cara-mendapatkan-kuota-gratis-axis-1gb-3/">cara mendapatkan kuota gratis axis 1gb</a>. Dengan kuota yang cukup, kita bisa terus berlatih, bereksperimen dengan kode, dan menguji tampilan website yang sudah kita rancang.</p> <p>Jadi, jangan lupakan pentingnya merapikan kode HTML dan CSS untuk hasil terbaik. </p> <p>Contoh HTML: </p> <pre> <code> <div class="konten"> <p>Paragraf pertama</p> <p>Paragraf kedua</p> </div> </code> </pre> <p>Contoh CSS: </p> <pre> <code> .konten p:first-child font-weight: bold; /* Hanya paragraf pertama di dalam div dengan class "konten" yang akan tebal -/ </code> </pre> <h3><span class="ez-toc-section" id="Implementasi_dan_Contoh_Kode"></span>Implementasi dan Contoh Kode<span class="ez-toc-section-end"></span></h3> <p>Berikut adalah contoh kode CSS yang lebih komprehensif, yang mencakup penggunaan berbagai jenis selektor (tag, class, id, kombinator) untuk mengubah tampilan elemen HTML: </p> <pre> <code> /* Contoh CSS yang lebih kompleks -/ body font-family: sans-serif; .judul color: navy; text-align: center; #deskripsi font-size: 1.2em; margin-bottom: 20px; .konten p line-height: 1.6; .konten > p:first-child font-weight: bold; .daftar-item list-style-type: none; /* Menghilangkan tanda daftar -/ padding: 0; .daftar-item li padding: 10px; border-bottom: 1px solid #ccc; .daftar-item li:nth-child(even) background-color: #f2f2f2; /* Memberi warna latar belakang pada item ganjil -/ @media (max-width: 768px) .konten padding: 10px; .judul font-size: 1.5em; </code> </pre> <p>Contoh di atas mencakup: </p> <ul> <li>Penggunaan selektor tag ( <code>body</code>, <code>p</code>, <code>li</code>) untuk mengatur gaya dasar. </li> <li>Penggunaan selektor class ( <code>.judul</code>, <code>.konten</code>, <code>.daftar-item</code>) untuk menata grup elemen. </li> <li>Penggunaan selektor ID ( <code>#deskripsi</code>) untuk menata elemen unik. </li> <li>Penggunaan kombinator ( <code>.konten > p:first-child</code>) untuk menargetkan elemen berdasarkan hubungan mereka. </li> <li>Penggunaan media queries ( <code>@media (max-width: 768px)</code>) untuk membuat tampilan responsif. </li> </ul> <p>Contoh ini juga menunjukkan bagaimana selektor dapat digunakan untuk mengubah berbagai properti CSS seperti warna, ukuran font, margin, padding, background, dan banyak lagi. </p> <h3><span class="ez-toc-section" id="Pentingnya_Spesifisitas_dan_Efisiensi"></span>Pentingnya Spesifisitas dan Efisiensi<span class="ez-toc-section-end"></span></h3> <p>Penggunaan selektor CSS yang spesifik dan efisien sangat penting untuk menjaga kode CSS yang terstruktur, mudah dipelihara, dan berkinerja baik. </p> <blockquote> <p>Gunakan selektor CSS yang spesifik dan efisien untuk menghindari konflik gaya, meningkatkan performa, dan mempermudah pemeliharaan kode. Selektor yang tepat sasaran memastikan bahwa gaya diterapkan hanya pada elemen yang dimaksud, mengurangi potensi kesalahan dan meningkatkan kinerja aplikasi web Anda.</p> </blockquote> <p>Dengan menggunakan selektor yang tepat, kita dapat: </p> <ul> <li><b>Meminimalkan Konflik Gaya:</b> Selektor yang spesifik mengurangi kemungkinan gaya yang tidak diinginkan saling menimpa. </li> <li><b>Meningkatkan Performa:</b> Browser dapat memproses selektor yang efisien lebih cepat, yang mengarah pada waktu rendering yang lebih singkat. </li> <li><b>Memudahkan Pemeliharaan Kode:</b> Kode CSS yang terstruktur dengan baik dan mudah dibaca lebih mudah untuk diubah dan diperbarui di masa mendatang. </li> </ul> <h3><span class="ez-toc-section" id="Tantangan_Tambahan"></span>Tantangan Tambahan<span class="ez-toc-section-end"></span></h3> <p>Buatlah tampilan daftar item dengan nomor urut yang berbeda untuk setiap item menggunakan selektor CSS. </p> <p>Contoh HTML: </p> <pre> <code> <ul class="daftar-nomor"> <li>Item pertama</li> <li>Item kedua</li> <li>Item ketiga</li> </ul> </code> </pre> <p>Solusi CSS: </p> <pre> <code> .daftar-nomor list-style-type: none; /* Menghilangkan tanda daftar default -/ counter-reset: item; /* Mengatur counter -/ padding: 0; .daftar-nomor li padding: 5px 0 5px 20px; position: relative; /* Untuk menempatkan nomor urut -/ .daftar-nomor li:before counter-increment: item; /* Menaikkan counter -/ content: counter(item) ". "; /* Menampilkan nomor urut -/ position: absolute; left: 0; font-weight: bold; </code> </pre> <h2><span class="ez-toc-section" id="Properti_CSS_Umum_Pengaturan_Tampilan"></span>Properti CSS Umum: Pengaturan Tampilan<span class="ez-toc-section-end"></span></h2> <p>Setelah memahami bagaimana HTML dan CSS bekerja bersama, langkah selanjutnya adalah menguasai properti CSS yang paling sering digunakan untuk mengontrol tampilan elemen HTML. Properti-properti ini memungkinkan Anda untuk menyesuaikan warna, ukuran, tata letak, dan efek visual lainnya, mengubah tampilan situs web Anda secara signifikan. Mari kita selami beberapa properti CSS yang paling penting dan bagaimana mereka dapat diterapkan.</p> <h3><span class="ez-toc-section" id="Properti_CSS_untuk_Teks"></span>Properti CSS untuk Teks<span class="ez-toc-section-end"></span></h3> <p>Teks adalah elemen penting dalam desain web, dan CSS menyediakan berbagai properti untuk memanipulasinya. Dengan properti-properti ini, Anda dapat mengontrol tampilan teks secara detail, mulai dari ukuran dan warna hingga gaya dan perataan. </p> <ul> <li><b>color:</b> Properti ini digunakan untuk mengatur warna teks. Nilainya dapat berupa nama warna (misalnya, “red”, “blue”), kode hexadesimal (misalnya, “#FF0000” untuk merah), atau nilai RGB (misalnya, “rgb(255, 0, 0)” untuk merah). <p>Contoh: </p> <p><code>p color: blue; </code> (mengatur warna teks paragraf menjadi biru) </p> </li> <li><b>font-size:</b> Properti ini mengontrol ukuran font teks. Nilainya dapat berupa unit absolut (misalnya, “px”, “pt”) atau unit relatif (misalnya, “em”, “rem”, “%”). <p>Contoh: </p> <p><code>h1 font-size: 2em; </code> (mengatur ukuran font judul tingkat 1 menjadi dua kali ukuran font default) </p> </li> <li><b>font-family:</b> Properti ini menentukan jenis font yang digunakan untuk teks. Anda dapat menentukan beberapa font sebagai fallback jika font pertama tidak tersedia. <p>Contoh: </p> <p><code>body font-family: Arial, sans-serif; </code> (mengatur font body menjadi Arial, dan jika tidak tersedia, menggunakan font sans-serif default) </p> </li> <li><b>font-weight:</b> Properti ini mengatur ketebalan font. Nilainya dapat berupa kata kunci (misalnya, “bold”, “normal”) atau angka (misalnya, 400 untuk normal, 700 untuk bold). <p>Contoh: </p> <p><code>strong font-weight: bold; </code> (membuat teks dalam tag <code><strong></code> menjadi tebal) </p> </li> <li><b>text-align:</b> Properti ini mengontrol perataan horizontal teks. Nilainya dapat berupa “left”, “right”, “center”, atau “justify”. <p>Contoh: </p> <p><code>.centered text-align: center; </code> (meratakan teks dengan kelas “centered” ke tengah) </p> </li> </ul> <h3><span class="ez-toc-section" id="Properti_CSS_untuk_Kotak_Box_Model"></span>Properti CSS untuk Kotak (Box Model)<span class="ez-toc-section-end"></span></h3> <p>Model kotak (box model) adalah konsep fundamental dalam CSS yang mendefinisikan bagaimana elemen HTML ditampilkan di halaman web. Setiap elemen diperlakukan sebagai kotak yang memiliki konten, padding, border, dan margin. Properti-properti ini memungkinkan Anda untuk mengontrol ukuran, jarak, dan tampilan kotak tersebut. </p> <ul> <li><b>margin:</b> Properti ini menentukan jarak di luar border elemen. Nilainya dapat berupa satu nilai (untuk semua sisi), dua nilai (atas/bawah dan kiri/kanan), tiga nilai (atas, kiri/kanan, bawah), atau empat nilai (atas, kanan, bawah, kiri). <p>Contoh: </p> <p><code>p margin: 20px; </code> (memberikan margin 20 piksel di semua sisi paragraf) </p> </li> <li><b>padding:</b> Properti ini menentukan jarak di antara konten elemen dan border. Sama seperti margin, padding juga dapat diatur untuk semua sisi atau sisi tertentu. <p>Contoh: </p> <p><code>div padding: 10px 20px; </code> (memberikan padding 10 piksel di atas dan bawah, dan 20 piksel di kiri dan kanan elemen <code><div></code>) </p> </li> <li><b>border:</b> Properti ini menentukan border di sekitar elemen. Anda dapat mengatur ketebalan, gaya (misalnya, “solid”, “dashed”, “dotted”), dan warna border. <p>Contoh: </p> <p><code>img border: 1px solid black; </code> (memberikan border hitam solid setebal 1 piksel pada gambar) </p> </li> <li><b>width dan height:</b> Properti ini menentukan lebar dan tinggi elemen. Nilainya dapat berupa unit absolut (misalnya, “px”) atau persentase (misalnya, “100%”). <p>Contoh: </p> <p><code>.container width: 80%; height: 200px; </code> (mengatur lebar elemen dengan kelas “container” menjadi 80% dari lebar parent dan tinggi 200 piksel) </p> </li> </ul> <h3><span class="ez-toc-section" id="Unit_Pengukuran_dalam_CSS"></span>Unit Pengukuran dalam CSS<span class="ez-toc-section-end"></span></h3> <p>CSS menyediakan berbagai unit pengukuran untuk menentukan nilai properti seperti ukuran font, margin, padding, dan lebar. Memahami perbedaan antara unit-unit ini penting untuk membuat desain yang responsif dan konsisten. </p> <table> <thead> <tr> <th>Unit</th> <th>Deskripsi</th> <th>Contoh</th> <th>Kelebihan</th> <th>Kekurangan</th> </tr> </thead> <tbody> <tr> <td>px (piksel)</td> <td>Unit absolut yang mengacu pada piksel pada layar.</td> <td><code>font-size: 16px;</code></td> <td>Mudah dipahami dan digunakan.</td> <td>Tidak responsif terhadap perubahan ukuran layar.</td> </tr> <tr> <td>em</td> <td>Unit relatif terhadap ukuran font elemen induk. 1em sama dengan ukuran font induk.</td> <td><code>font-size: 1.5em;</code></td> <td>Responsif terhadap perubahan ukuran font induk.</td> <td>Dapat menyebabkan perhitungan yang rumit jika nested.</td> </tr> <tr> <td>rem</td> <td>Unit relatif terhadap ukuran font elemen root (<code><html></code>).</td> <td><code>font-size: 1.2rem;</code></td> <td>Mudah diprediksi dan konsisten di seluruh dokumen.</td> <td>Tidak responsif terhadap perubahan ukuran font elemen induk.</td> </tr> <tr> <td>% (persen)</td> <td>Unit relatif terhadap lebar atau tinggi elemen induk.</td> <td><code>width: 50%;</code></td> <td>Membuat desain responsif.</td> <td>Memerlukan perhitungan yang cermat untuk memastikan tata letak yang diinginkan.</td> </tr> <tr> <td>vw (viewport width)</td> <td>Unit relatif terhadap lebar viewport. 1vw adalah 1% dari lebar viewport.</td> <td><code>width: 50vw;</code></td> <td>Sangat responsif terhadap perubahan ukuran layar.</td> <td>Tidak cocok untuk semua kasus penggunaan.</td> </tr> <tr> <td>vh (viewport height)</td> <td>Unit relatif terhadap tinggi viewport. 1vh adalah 1% dari tinggi viewport.</td> <td><code>height: 100vh;</code></td> <td>Sangat responsif terhadap perubahan ukuran layar.</td> <td>Tidak cocok untuk semua kasus penggunaan.</td> </tr> </tbody> </table> <h3><span class="ez-toc-section" id="Efek_Visual_dengan_box-shadow_dan_text-shadow"></span>Efek Visual dengan `box-shadow` dan `text-shadow`<span class="ez-toc-section-end"></span></h3> <p>CSS menyediakan properti <code>box-shadow</code> dan <code>text-shadow</code> untuk menambahkan efek visual yang menarik pada elemen HTML. Efek-efek ini dapat meningkatkan tampilan dan membuat elemen lebih menonjol. </p> <ul> <li><b>box-shadow:</b> Properti ini menambahkan bayangan pada kotak elemen. Anda dapat mengatur offset horizontal, offset vertikal, blur radius, spread radius, dan warna bayangan. <p>Contoh: </p> <p><code>.card box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); </code> (menambahkan bayangan pada elemen dengan kelas “card” dengan offset vertikal 4px, blur radius 8px, dan warna abu-abu transparan) </p> <p>Bayangan kotak ini membuat kartu terlihat lebih menonjol dari latar belakang, memberikan kesan kedalaman. </p> </li> <li><b>text-shadow:</b> Properti ini menambahkan bayangan pada teks. Anda dapat mengatur offset horizontal, offset vertikal, blur radius, dan warna bayangan. <p>Contoh: </p> <p><code>h1 text-shadow: 2px 2px 4px #000000; </code> (menambahkan bayangan pada judul tingkat 1 dengan offset horizontal 2px, offset vertikal 2px, blur radius 4px, dan warna hitam) </p> <p>Bayangan teks ini dapat membuat teks lebih mudah dibaca, terutama jika berada di atas latar belakang yang kompleks. </p> </ul> <h2><span class="ez-toc-section" id="Responsif_Desain"></span>Responsif Desain<span class="ez-toc-section-end"></span></h2> <p>Di era digital yang serba cepat ini, website bukan lagi sekadar pajangan informasi. Mereka adalah gerbang utama menuju bisnis, sumber informasi, dan platform interaksi. Pengguna mengakses website melalui berbagai perangkat, mulai dari layar lebar desktop hingga layar kecil smartphone. Oleh karena itu, desain responsif menjadi kunci untuk memastikan pengalaman pengguna yang optimal di semua perangkat. Ini bukan hanya tentang tampilan yang bagus, tetapi juga tentang fungsionalitas yang tak terganggu, kecepatan yang memadai, dan aksesibilitas yang merata.</p> <h3><span class="ez-toc-section" id="Konsep_Desain_Responsif_dan_Kepentingannya"></span>Konsep Desain Responsif dan Kepentingannya<span class="ez-toc-section-end"></span></h3> <p>Desain responsif adalah pendekatan desain web yang bertujuan untuk membuat website yang dapat beradaptasi dan menampilkan konten dengan baik di berbagai ukuran layar dan perangkat. Intinya adalah satu website yang sama dapat berfungsi dengan baik di semua perangkat, tanpa perlu membuat versi website terpisah untuk desktop, tablet, dan ponsel. </p> <p>Mengapa desain responsif sangat penting? </p> <ul> <li><b>Peningkatan Pengalaman Pengguna:</b> Pengguna akan lebih mudah membaca, menavigasi, dan berinteraksi dengan website, terlepas dari perangkat yang mereka gunakan. </li> <li><b>Peningkatan :</b> Google merekomendasikan desain responsif, dan website yang responsif cenderung mendapatkan peringkat yang lebih baik dalam hasil pencarian. </li> <li><b>Efisiensi:</b> Hanya perlu satu website yang perlu dikelola dan diperbarui, menghemat waktu dan sumber daya. </li> <li><b>Peningkatan Konversi:</b> Pengalaman pengguna yang lebih baik dapat mengarah pada peningkatan konversi, seperti penjualan atau pendaftaran. </li> <li><b>Peningkatan Jangkauan:</b> Memastikan website dapat diakses oleh semua pengguna, terlepas dari perangkat yang mereka gunakan, memperluas jangkauan audiens. </li> </ul> <h3><span class="ez-toc-section" id="Penggunaan_Media_Queries"></span>Penggunaan Media Queries<span class="ez-toc-section-end"></span></h3> <p>Media queries adalah fitur CSS yang memungkinkan Anda menerapkan aturan CSS yang berbeda berdasarkan karakteristik perangkat pengguna, seperti lebar layar, tinggi layar, orientasi layar (landscape atau portrait), dan resolusi layar. Dengan menggunakan media queries, Anda dapat menyesuaikan tampilan dan perilaku website untuk berbagai perangkat. </p> <p>Cara kerja media queries: </p> <ul> <li>Media queries menggunakan aturan <code>@media</code> diikuti oleh kondisi. </li> <li>Kondisi dapat berupa berbagai karakteristik perangkat. </li> <li>Di dalam blok <code>@media</code>, Anda menulis aturan CSS yang hanya akan diterapkan jika kondisi terpenuhi. </li> </ul> <h3><span class="ez-toc-section" id="Contoh_Kode_CSS_dengan_Media_Queries"></span>Contoh Kode CSS dengan Media Queries<span class="ez-toc-section-end"></span></h3> <p>Berikut adalah contoh sederhana bagaimana media queries dapat digunakan untuk mengubah tampilan website: </p> <p>CSS default (untuk tampilan desktop): </p> <pre> <code> .container width: 90%; margin: 0 auto; .header background-color: #f0f0f0; padding: 20px; text-align: center; .nav /* Gaya navigasi untuk desktop -/ .content padding: 20px; </code> </pre> <p>Media query untuk tampilan tablet: </p> <pre> <code> @media (max-width: 768px) .container width: 95%; .nav /* Gaya navigasi untuk tablet -/ </code> </pre> <p>Media query untuk tampilan ponsel: </p> <pre> <code> @media (max-width: 480px) .container width: 100%; .header padding: 10px; .nav /* Gaya navigasi untuk ponsel -/ </code> </pre> <p>Dalam contoh di atas: </p> <ul> <li>Aturan CSS default diterapkan untuk semua perangkat. </li> <li>Media query pertama ( <code>@media (max-width: 768px)</code>) akan diterapkan jika lebar layar kurang dari atau sama dengan 768 piksel (misalnya, tablet). </li> <li>Media query kedua ( <code>@media (max-width: 480px)</code>) akan diterapkan jika lebar layar kurang dari atau sama dengan 480 piksel (misalnya, ponsel). </li> </ul> <h3><span class="ez-toc-section" id="Tabel_Ukuran_Layar_Umum_dan_Penggunaan_Media_Queries"></span>Tabel Ukuran Layar Umum dan Penggunaan Media Queries<span class="ez-toc-section-end"></span></h3> <p>Tabel berikut merangkum beberapa ukuran layar umum dan bagaimana media queries dapat digunakan untuk menargetkannya: </p> <table> <thead> <tr> <th>Ukuran Layar</th> <th>Rentang Lebar (px)</th> <th>Contoh Perangkat</th> <th>Penggunaan Media Query</th> </tr> </thead> <tbody> <tr> <td>Desktop (Layar Lebar)</td> <td>Lebih dari 1200px</td> <td>Monitor desktop, layar laptop besar</td> <td>Tidak perlu media query (aturan default) atau <code>@media (min-width: 1200px)</code></td> </tr> <tr> <td>Desktop (Layar Standar)</td> <td>992px – 1199px</td> <td>Monitor desktop standar</td> <td><code>@media (min-width: 992px) and (max-width: 1199px)</code></td> </tr> <tr> <td>Tablet (Layar Vertikal)</td> <td>768px – 991px</td> <td>Tablet seperti iPad</td> <td><code>@media (min-width: 768px) and (max-width: 991px)</code></td> </tr> <tr> <td>Tablet (Layar Horizontal)</td> <td>768px – 991px</td> <td>Tablet seperti iPad</td> <td><code>@media (min-width: 768px) and (max-width: 991px)</code></td> </tr> <tr> <td>Ponsel (Layar Horizontal)</td> <td>480px – 767px</td> <td>Ponsel dalam orientasi landscape</td> <td><code>@media (min-width: 480px) and (max-width: 767px)</code></td> </tr> <tr> <td>Ponsel (Layar Vertikal)</td> <td>Kurang dari 480px</td> <td>Ponsel dalam orientasi portrait</td> <td><code>@media (max-width: 479px)</code></td> </tr> </tbody> </table> <h2><span class="ez-toc-section" id="Debugging_dan_Troubleshooting_CSS"></span>Debugging dan Troubleshooting CSS<span class="ez-toc-section-end"></span></h2> <div style="text-align: center;margin-bottom: 15px"><img decoding="async" class="aligncenter size-full wp-image-86450" src="https://www.identif.id/wp-content/uploads/2025/08/eacd11c174dbbcc2ceb30a3eff6e9eff.png" width="700" height="525" alt="Cara menggabungkan html dan css" title="Belajar HTML Part 16 : Menghubungkan HTML dengan CSS - Malas Ngoding" /></p> <p style="color: #555;margin-top: 5px">Source: jagongoding.com</p> </div> <p>Memahami cara melakukan debugging dan troubleshooting CSS adalah keterampilan penting bagi setiap pengembang web. Kesalahan dalam CSS dapat menyebabkan tampilan website yang tidak sesuai harapan, sehingga mengganggu pengalaman pengguna. Dengan menggunakan alat dan teknik yang tepat, kita dapat mengidentifikasi dan memperbaiki masalah CSS dengan efisien, memastikan website berfungsi dan tampil dengan baik di berbagai perangkat dan browser. </p> <p>Berikut adalah beberapa metode dan alat yang bisa digunakan untuk mengatasi masalah CSS. </p> <h3><span class="ez-toc-section" id="Alat_dan_Teknik_Debugging_Umum"></span>Alat dan Teknik Debugging Umum<span class="ez-toc-section-end"></span></h3> <p>Ada beberapa alat dan teknik debugging yang sangat berguna dalam mengidentifikasi dan memperbaiki masalah CSS. Penggunaan alat-alat ini akan sangat membantu dalam mempercepat proses pengembangan dan memastikan kode CSS berjalan sesuai dengan yang diharapkan. </p> <ul> <li><b>Inspeksi Elemen Browser:</b> Alat developer browser (seperti Chrome DevTools, Firefox Developer Tools, atau Edge DevTools) menyediakan kemampuan untuk memeriksa elemen HTML dan CSS yang diterapkan pada elemen tersebut secara real-time. Ini memungkinkan pengembang untuk melihat perubahan CSS secara langsung dan mengidentifikasi masalah dengan mudah. </li> <li><b>Console Logging:</b> Menggunakan <code>console.log()</code> dalam JavaScript dapat membantu melacak nilai variabel dan status program. Meskipun tidak langsung berhubungan dengan CSS, ini dapat membantu mengidentifikasi masalah yang disebabkan oleh interaksi JavaScript dengan CSS. </li> <li><b>Validasi CSS:</b> Menggunakan validator CSS (seperti validator CSS W3C) untuk memeriksa kode CSS terhadap standar. Validator akan mengidentifikasi kesalahan sintaksis dan kesalahan lainnya yang dapat menyebabkan masalah. </li> <li><b>Debugging dengan Komentar:</b> Mengomentari bagian kode CSS yang mencurigakan dapat membantu mengisolasi masalah. Dengan menonaktifkan bagian kode tertentu, pengembang dapat melihat bagaimana perubahan tersebut memengaruhi tampilan website. </li> </ul> <h3><span class="ez-toc-section" id="Mengidentifikasi_Masalah_Umum_dalam_Kode_CSS"></span>Mengidentifikasi Masalah Umum dalam Kode CSS<span class="ez-toc-section-end"></span></h3> <p>Kesalahan dalam kode CSS dapat bervariasi, mulai dari kesalahan ketik sederhana hingga masalah prioritas yang kompleks. Kemampuan untuk mengidentifikasi masalah umum ini sangat penting untuk melakukan debugging yang efektif. </p> <p>Menggabungkan HTML dan CSS adalah fondasi utama dalam membangun tampilan web yang menarik. Tapi, bagaimana cara memastikan keduanya bekerja selaras? Nah, sebelum kita membahas lebih jauh, pernahkah Anda terpikir tentang bagaimana identitas digital bisa berperan penting dalam dunia web? Untuk informasi lebih lanjut mengenai hal ini, mari kita lihat <a href="https://www.identif.id/">Identif</a>. Kembali ke HTML dan CSS, pemahaman tentang selektor, properti, dan nilai sangat krusial untuk menciptakan tampilan yang diinginkan.</p> <p>Dengan begitu, website Anda akan terlihat profesional dan mudah dinavigasi. </p> <ul> <li><b>Kesalahan Ketik (Typo):</b> Kesalahan ketik pada nama properti CSS atau nilai properti adalah masalah yang umum. Misalnya, salah mengetik “color” menjadi “colr” atau “font-size” menjadi “font_size” akan menyebabkan properti tersebut tidak berfungsi. </li> <li><b>Selektor yang Salah:</b> Menggunakan selektor yang salah atau tidak spesifik dapat menyebabkan CSS tidak diterapkan pada elemen yang diinginkan. Contohnya, menggunakan selektor yang terlalu umum seperti “p” saat yang diinginkan adalah hanya menerapkan gaya pada paragraf dengan class tertentu. </li> <li><b>Prioritas CSS:</b> Memahami bagaimana prioritas CSS bekerja sangat penting. Gaya yang diterapkan oleh selektor yang lebih spesifik akan menggantikan gaya yang diterapkan oleh selektor yang kurang spesifik. Kesalahan dalam memahami prioritas dapat menyebabkan gaya yang tidak diharapkan diterapkan. </li> <li><b>Kesalahan Sintaksis:</b> Kesalahan sintaksis, seperti tanda kurung kurawal yang hilang atau tanda titik koma yang salah tempat, akan mencegah CSS diinterpretasikan dengan benar. </li> <li><b>Masalah Box Model:</b> Kesalahan dalam mengatur margin, padding, border, dan ukuran elemen dapat menyebabkan tata letak yang tidak sesuai. </li> </ul> <h3><span class="ez-toc-section" id="Menggunakan_Alat_Developer_Browser_untuk_Memeriksa_dan_Mengedit_CSS"></span>Menggunakan Alat Developer Browser untuk Memeriksa dan Mengedit CSS<span class="ez-toc-section-end"></span></h3> <p>Alat developer browser adalah aset berharga untuk melakukan debugging dan pengeditan CSS secara langsung. Mereka menyediakan antarmuka yang interaktif untuk memeriksa, mengubah, dan menguji perubahan CSS tanpa harus mengubah kode sumber secara permanen. </p> <p>Berikut adalah langkah-langkah umum untuk menggunakan alat developer browser: </p> <ol> <li><b>Buka Alat Developer:</b> Klik kanan pada halaman web dan pilih “Inspect” (atau “Inspect Element”) atau gunakan shortcut keyboard (biasanya F12). </li> <li><b>Pilih Elemen:</b> Gunakan alat “Select an element in the page to inspect it” (biasanya ikon kursor di sudut kiri atas panel developer) untuk memilih elemen yang ingin diperiksa. </li> <li><b>Periksa Panel Styles:</b> Panel “Styles” di alat developer menampilkan semua aturan CSS yang diterapkan pada elemen yang dipilih. Anda dapat melihat properti CSS, nilainya, dan dari mana aturan tersebut berasal. </li> <li><b>Edit CSS:</b> Anda dapat mengubah nilai properti CSS secara langsung di panel “Styles”. Perubahan akan langsung terlihat di halaman web. </li> <li><b>Nonaktifkan Properti:</b> Anda dapat menonaktifkan properti CSS dengan mengklik kotak centang di sebelah properti tersebut. Ini membantu menguji efek dari properti tertentu. </li> <li><b>Tambahkan Properti Baru:</b> Anda dapat menambahkan properti CSS baru ke elemen yang dipilih. </li> </ol> <h3><span class="ez-toc-section" id="Ilustrasi_Penggunaan_Alat_Developer_Browser"></span>Ilustrasi Penggunaan Alat Developer Browser<span class="ez-toc-section-end"></span></h3> <p>Berikut adalah ilustrasi tentang cara menggunakan alat developer browser untuk memeriksa elemen dan properti CSS. Kita akan menggunakan contoh sederhana dengan elemen paragraf yang memiliki beberapa gaya CSS. </p> <p>Menggabungkan HTML dan CSS adalah fondasi penting dalam membangun website. Kita bisa melakukannya melalui berbagai cara, mulai dari inline styling hingga external stylesheet. Tapi, pernahkah terpikir bagaimana keterampilan ini bisa memberdayakan kita dalam konteks yang lebih luas? Misalnya, di dunia <a href="https://www.identif.id/pendidikan/">Pendidikan</a> , di mana penguasaan teknologi menjadi kunci. Dengan memahami cara HTML dan CSS bekerja, kita bisa menciptakan materi pembelajaran interaktif yang lebih menarik.</p> <p>Jadi, bagaimana kita bisa terus mengasah kemampuan menggabungkan keduanya untuk menghasilkan pengalaman digital yang lebih baik? </p> <p>Misalkan kita memiliki kode HTML berikut: </p> <pre> <p class="paragraf-utama">Ini adalah paragraf contoh.</p> </pre> <p>Dan kode CSS berikut: </p> <pre> .paragraf-utama font-size: 16px; color: blue; font-weight: bold; </pre> <p><b>Langkah-langkah debugging menggunakan Chrome DevTools:</b></p> <ol> <li><b>Buka Chrome DevTools:</b> Klik kanan pada teks paragraf “Ini adalah paragraf contoh.” dan pilih “Inspect”. </li> <li><b>Pilih Elemen:</b> DevTools akan menampilkan panel “Elements”. Elemen <p class=”paragraf-utama”> akan dipilih secara otomatis. </li> <li><b>Periksa Panel Styles:</b> Di panel “Styles” (biasanya di sebelah kanan), Anda akan melihat daftar aturan CSS yang diterapkan pada elemen <p>. </li> <li><b>Memeriksa Properti:</b> Anda akan melihat properti seperti <code>font-size: 16px;</code>, <code>color: blue;</code>, dan <code>font-weight: bold;</code>. </li> <li><b>Mengubah Properti:</b> Coba ubah nilai <code>font-size</code> menjadi 20px. Perhatikan bagaimana ukuran teks paragraf berubah secara langsung di halaman web. </li> <li><b>Menonaktifkan Properti:</b> Klik kotak centang di sebelah <code>color: blue;</code> untuk menonaktifkan properti tersebut. Warna teks paragraf akan berubah menjadi warna default (biasanya hitam). </li> <li><b>Menambahkan Properti Baru:</b> Klik pada area kosong di panel “Styles” dan tambahkan properti baru, misalnya <code>text-align: center;</code>. Teks paragraf akan menjadi rata tengah. </li> </ol> <p>Ilustrasi ini menunjukkan bagaimana alat developer browser memungkinkan pengembang untuk memeriksa dan memodifikasi CSS secara real-time. Pengembang dapat dengan cepat mengidentifikasi masalah, bereksperimen dengan perubahan, dan memastikan tampilan website sesuai dengan yang diinginkan. </p> <h2><span class="ez-toc-section" id="Optimasi_Performa_CSS"></span>Optimasi Performa CSS<span class="ez-toc-section-end"></span></h2> <p>Optimasi performa CSS adalah kunci untuk memastikan website Anda berjalan cepat dan responsif. CSS yang efisien tidak hanya mempercepat waktu muat halaman, tetapi juga meningkatkan pengalaman pengguna secara keseluruhan. Dengan mengoptimalkan CSS, Anda dapat mengurangi penggunaan sumber daya server, meningkatkan peringkat , dan pada akhirnya, meningkatkan konversi. </p> <p>Mari kita selami beberapa teknik dan strategi untuk mengoptimalkan CSS Anda, mulai dari meminimalkan ukuran file hingga menggunakan alat bantu untuk memastikan kode Anda seefisien mungkin. </p> <h3><span class="ez-toc-section" id="Teknik_Meminimalkan_Ukuran_File_CSS_dan_Menggabungkan_File_CSS"></span>Teknik Meminimalkan Ukuran File CSS dan Menggabungkan File CSS<span class="ez-toc-section-end"></span></h3> <p>Mengurangi ukuran file CSS dan menggabungkannya adalah langkah krusial dalam optimasi performa. Semakin kecil ukuran file dan semakin sedikit jumlah file yang harus diunduh, semakin cepat browser dapat memproses dan menampilkan halaman web. </p> <ul> <li><b>Minifikasi CSS:</b> Proses ini menghilangkan karakter yang tidak perlu dari kode CSS, seperti spasi, komentar, dan baris baru. Hal ini mengurangi ukuran file tanpa memengaruhi fungsionalitasnya. Anda dapat menggunakan alat seperti CSSNano atau PurgeCSS untuk melakukan minifikasi. </li> <li><b>Penggabungan File CSS:</b> Jika website Anda menggunakan beberapa file CSS, menggabungkannya menjadi satu file akan mengurangi jumlah permintaan HTTP yang harus dilakukan browser. Ini secara signifikan mengurangi waktu yang dibutuhkan untuk memuat halaman. Perhatikan bahwa penggabungan file mungkin tidak selalu optimal, terutama jika Anda memiliki banyak file CSS yang sangat besar. Dalam kasus seperti itu, pertimbangkan untuk memuat CSS secara asinkron. </li> </ul> <h3><span class="ez-toc-section" id="Menghindari_Penggunaan_Selektor_yang_Terlalu_Spesifik_atau_Kompleks"></span>Menghindari Penggunaan Selektor yang Terlalu Spesifik atau Kompleks<span class="ez-toc-section-end"></span></h3> <p>Penggunaan selektor CSS yang efisien sangat penting untuk kinerja. Selektor yang terlalu spesifik atau kompleks dapat memperlambat proses rendering halaman. Browser harus menghabiskan lebih banyak waktu untuk menghitung kesesuaian selektor dengan elemen HTML. </p> <ul> <li><b>Hindari Selektor yang Terlalu Spesifik:</b> Selektor yang terlalu spesifik (misalnya, `div#container > ul.navigation > li a`) membutuhkan waktu lebih lama untuk diproses dibandingkan dengan selektor yang lebih sederhana (misalnya, `.navigation a`). </li> <li><b>Gunakan Selektor yang Efisien:</b> Pilih selektor yang paling sederhana dan paling spesifik yang diperlukan untuk menargetkan elemen yang diinginkan. </li> <li><b>Perhatikan Urutan Selektor:</b> Browser membaca selektor dari kanan ke kiri. Oleh karena itu, selektor yang dimulai dengan elemen yang lebih umum (misalnya, `div`) dan diakhiri dengan elemen yang lebih spesifik (misalnya, `a`) akan lebih lambat dibandingkan dengan selektor yang dimulai dengan elemen yang lebih spesifik (misalnya, `.navigation a`). </li> <li><b>Hindari Penggunaan `!important` secara Berlebihan:</b> Meskipun `!important` dapat digunakan untuk mengganti aturan CSS lainnya, penggunaannya secara berlebihan dapat membuat kode CSS sulit dikelola dan dapat memperlambat proses rendering. </li> </ul> <h3><span class="ez-toc-section" id="Menggunakan_Tools_untuk_Meminimalkan_dan_Mengoptimalkan_File_CSS"></span>Menggunakan Tools untuk Meminimalkan dan Mengoptimalkan File CSS<span class="ez-toc-section-end"></span></h3> <p>Terdapat berbagai alat yang dapat membantu Anda meminimalkan dan mengoptimalkan file CSS. Alat-alat ini secara otomatis melakukan tugas-tugas yang memakan waktu, seperti minifikasi dan penggabungan file. </p> <ul> <li><b>CSSNano:</b> CSSNano adalah alat minifikasi CSS yang populer yang dirancang untuk menghilangkan redundansi dan mengoptimalkan kode CSS Anda. </li> <li><b>PurgeCSS:</b> PurgeCSS menganalisis kode HTML Anda dan mengidentifikasi CSS yang tidak digunakan. Kemudian, alat ini menghapus CSS yang tidak perlu, sehingga mengurangi ukuran file CSS. </li> <li><b>UglifyCSS:</b> UglifyCSS adalah alat minifikasi CSS yang dapat digunakan untuk mengkompres kode CSS Anda. </li> <li><b>Alat Online:</b> Ada banyak alat online yang tersedia yang dapat digunakan untuk meminimalkan dan mengoptimalkan file CSS, seperti CSS Minifier dan Clean CSS. </li> </ul> <p>Pilih alat yang sesuai dengan kebutuhan Anda dan integrasikan ke dalam alur kerja pengembangan Anda. </p> <h3><span class="ez-toc-section" id="Ilustrasi_Perbandingan_Performa_Website_Sebelum_dan_Sesudah_Optimasi_CSS"></span>Ilustrasi Perbandingan Performa Website Sebelum dan Sesudah Optimasi CSS<span class="ez-toc-section-end"></span></h3> <p>Mari kita ilustrasikan perbandingan performa website sebelum dan sesudah optimasi CSS. Anggaplah kita memiliki website e-commerce sederhana. Sebelum optimasi, website tersebut menggunakan beberapa file CSS terpisah, selektor yang kompleks, dan kode yang tidak efisien. </p> <p><b>Sebelum Optimasi:</b></p> <ul> <li>Waktu Muat Halaman: 4 detik </li> <li>Ukuran Total CSS: 500 KB </li> <li>Jumlah Permintaan HTTP untuk CSS: 5 </li> <li>Performa: Lambat, pengalaman pengguna buruk. </li> </ul> <p><b>Sesudah Optimasi:</b></p> <p>Kita seringkali bergelut dengan HTML dan CSS, kan? Menyusun kode agar tampilan web kita menarik memang menantang. Sama halnya seperti saat menghadapi urusan yang rumit, seperti <a href="https://www.identif.id/cara-mengurus-gugatan-cerai-3/">cara mengurus gugatan cerai</a> , yang membutuhkan ketelitian dan pengetahuan. Tapi, setelah memahami dasar-dasarnya, baik itu dalam menggabungkan HTML dan CSS atau mengurus dokumen hukum, semuanya menjadi lebih terstruktur dan mudah dikelola. Jadi, mari terus belajar dan berkreasi! </p> <ul> <li>Waktu Muat Halaman: 2 detik </li> <li>Ukuran Total CSS: 200 KB </li> <li>Jumlah Permintaan HTTP untuk CSS: 1 </li> <li>Performa: Cepat, pengalaman pengguna meningkat. </li> </ul> <p>Perbedaan ini menunjukkan dampak signifikan dari optimasi CSS. Dengan mengurangi ukuran file, menggabungkan file, dan menggunakan selektor yang efisien, website dapat memuat lebih cepat, memberikan pengalaman pengguna yang lebih baik, dan meningkatkan konversi. </p> <h2><span class="ez-toc-section" id="Tips_dan_Trik_Lanjutan"></span>Tips dan Trik Lanjutan<span class="ez-toc-section-end"></span></h2> <p>Setelah memahami dasar-dasar HTML dan CSS, saatnya untuk menjelajahi teknik-teknik yang lebih canggih. Dengan menguasai metode ini, Anda dapat meningkatkan efisiensi penulisan kode, menciptakan efek visual yang lebih kompleks, dan secara signifikan meningkatkan pengalaman pengguna. Bagian ini akan membahas berbagai aspek penting untuk mengoptimalkan penggunaan HTML dan CSS dalam proyek web Anda. </p> <h3><span class="ez-toc-section" id="Menggabungkan_HTML_dan_CSS_dengan_Efisiensi"></span>Menggabungkan HTML dan CSS dengan Efisiensi<span class="ez-toc-section-end"></span></h3> <p>Integrasi yang efisien antara HTML dan CSS sangat krusial untuk menjaga kode tetap terstruktur, mudah dibaca, dan mudah dipelihara. Pendekatan yang tepat akan mengurangi redundansi dan mempermudah proses pengembangan dan perubahan di masa mendatang. Berikut adalah beberapa metode canggih untuk mencapai hal tersebut: </p> <ul> <li><b>Penggunaan Class dan ID yang Efektif:</b> Class digunakan untuk menerapkan gaya ke beberapa elemen HTML, sedangkan ID digunakan untuk mengidentifikasi elemen unik. Penggunaan yang tepat adalah kunci untuk efisiensi. Gunakan class untuk gaya yang berulang dan ID untuk elemen spesifik. Contohnya: </li> <pre> <code> <!-- HTML --> <div class="card"> <h2 class="card-title">Judul Kartu</h2> <p class="card-description">Deskripsi kartu.</p> </div> <div class="card"> <h2 class="card-title">Judul Kartu Lainnya</h2> <p class="card-description">Deskripsi kartu lainnya.</p> </div> <!-- CSS --> .card border: 1px solid #ccc; margin-bottom: 10px; padding: 10px; .card-title font-size: 1.2em; font-weight: bold; #special-card background-color: #f0f0f0; </code> </pre> <p>Dalam contoh di atas, class <code>.card</code> dan <code>.card-title</code> digunakan untuk gaya yang berulang, sementara ID <code>#special-card</code> digunakan untuk memodifikasi tampilan satu kartu secara unik. </p> <li><b>Teknik Penulisan CSS yang Terstruktur:</b> Menggunakan metodologi seperti BEM (Block, Element, Modifier) atau OOCSS (Object-Oriented CSS) dapat sangat meningkatkan struktur dan keterbacaan kode CSS. </li> <ul> <li><b>BEM:</b> BEM membagi antarmuka pengguna menjadi blok independen, elemen di dalam blok, dan modifier yang mengubah tampilan elemen. </li> <pre> <code> <!-- HTML --> <div class="button button--primary">Klik Saya</div> <!-- CSS --> .button ... /* Block -/ .button--primary ... /* Modifier -/ </code> </pre> <li><b>OOCSS:</b> OOCSS berfokus pada pemisahan struktur (bentuk) dan tampilan (gaya). Ini memungkinkan penggunaan kembali kode dan mengurangi redundansi. </li> </ul> <li><b>Menghindari Penulisan Kode CSS yang Berlebihan:</b> Hindari selektor yang terlalu spesifik dan aturan CSS yang berulang. Gunakan class yang dapat digunakan kembali dan manfaatkan pewarisan CSS. </li> <pre> <code> /* Hindari: -/ .container div.content p ... /* Gunakan: -/ .content-paragraph ... </code> </pre> </ul> <h3><span class="ez-toc-section" id="Animasi_dan_Transisi_CSS_Lebih_Dalam"></span>Animasi dan Transisi CSS: Lebih Dalam<span class="ez-toc-section-end"></span></h3> <p>Animasi dan transisi CSS memungkinkan Anda menciptakan efek visual yang dinamis dan menarik tanpa perlu menggunakan JavaScript. Memahami properti inti dan bagaimana mengontrolnya adalah kunci untuk menciptakan antarmuka yang interaktif dan menarik. Berikut adalah penjelasan mendalam tentang properti animasi dan transisi: </p> <ul> <li><b>Properti Animation:</b> Properti <code>animation</code> digunakan untuk membuat animasi yang lebih kompleks dan berkelanjutan. Beberapa properti kunci meliputi: </li> <ul> <li><code>animation-name</code>: Menentukan nama animasi yang akan digunakan (mengacu pada aturan <code>@keyframes</code>). </li> <li><code>animation-duration</code>: Menentukan durasi animasi. </li> <li><code>animation-timing-function</code>: Mengontrol kecepatan animasi selama durasi. Nilai umum termasuk <code>linear</code>, <code>ease</code>, <code>ease-in</code>, <code>ease-out</code>, dan <code>cubic-bezier</code>. </li> <li><code>animation-delay</code>: Menentukan penundaan sebelum animasi dimulai. </li> <li><code>animation-iteration-count</code>: Menentukan berapa kali animasi akan diulang ( <code>infinite</code> untuk pengulangan tak terbatas). </li> <li><code>animation-direction</code>: Menentukan arah animasi ( <code>normal</code>, <code>reverse</code>, <code>alternate</code>, <code>alternate-reverse</code>). </li> <li><code>animation-fill-mode</code>: Menentukan bagaimana gaya diterapkan sebelum dan sesudah animasi ( <code>forwards</code>, <code>backwards</code>, <code>both</code>). </li> </ul> <li><b>Properti Transition:</b> Properti <code>transition</code> digunakan untuk membuat transisi halus antara dua keadaan. Properti kunci meliputi: </li> <ul> <li><code>transition-property</code>: Properti CSS yang akan dianimasikan (misalnya, <code>width</code>, <code>height</code>, <code>opacity</code>). Nilai <code>all</code> berarti semua properti yang dapat dianimasikan akan dianimasikan. </li> <li><code>transition-duration</code>: Durasi transisi. </li> <li><code>transition-timing-function</code>: Mengontrol kecepatan transisi selama durasi (sama seperti <code>animation-timing-function</code>). </li> <li><code>transition-delay</code>: Penundaan sebelum transisi dimulai. </li> </ul> <li><b>Contoh Penggunaan Animasi dan Transisi:</b></li> <ul> <li><b>Efek Paralaks:</b> Membuat efek paralaks dengan menggeser elemen latar belakang secara berbeda saat pengguna menggulir halaman. </li> <pre> <code> .parallax-background background-image: url('background.jpg'); background-size: cover; background-attachment: fixed; height: 100vh; transform: translateZ(0); /* Membuat lapisan terpisah untuk kinerja yang lebih baik -/ </code> </pre> <li><b>Animasi Loading:</b> Membuat animasi loading yang menarik saat konten dimuat. </li> <pre> <code> .loader border: 16px solid #f3f3f3; border-radius: 50%; border-top: 16px solid #3498db; width: 120px; height: 120px; animation: spin 2s linear infinite; @keyframes spin 0% transform: rotate(0deg); 100% transform: rotate(360deg); </code> </pre> <li><b>Respons Interaktif:</b> Membuat tombol berubah warna saat di-hover. </li> <pre> <code> .button background-color: #4CAF50; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; transition: background-color 0.3s ease; .button:hover background-color: #3e8e41; </code> </pre> </ul> </ul> <h3><span class="ez-toc-section" id="Meningkatkan_Pengalaman_Pengguna_dengan_Animasi_dan_Transisi"></span>Meningkatkan Pengalaman Pengguna dengan Animasi dan Transisi<span class="ez-toc-section-end"></span></h3> <p>Animasi dan transisi CSS dapat secara signifikan meningkatkan pengalaman pengguna (UX) dengan memberikan umpan balik visual, menciptakan transisi yang halus, dan menarik perhatian pengguna pada elemen penting. Berikut adalah beberapa contoh konkret dan studi kasus: </p> <ul> <li><b>Memberikan Umpan Balik Visual:</b> Saat pengguna berinteraksi dengan elemen, animasi dan transisi dapat memberikan umpan balik visual yang jelas. </li> <ul> <li><b>Contoh:</b> Tombol yang berubah warna saat di-hover, memberikan indikasi bahwa tombol tersebut telah diklik atau disentuh. </li> <li><b>Manfaat:</b> Meningkatkan kepercayaan pengguna dan memastikan bahwa interaksi mereka telah diterima. </li> </ul> <li><b>Membuat Transisi yang Halus:</b> Transisi yang halus antara halaman atau elemen membuat pengalaman pengguna lebih menyenangkan dan intuitif. </li> <ul> <li><b>Contoh:</b> Menggunakan transisi untuk memperhalus perubahan saat halaman dimuat atau elemen muncul dan menghilang. </li> <li><b>Manfaat:</b> Mengurangi gangguan visual dan membuat navigasi terasa lebih alami. </li> </ul> <li><b>Menarik Perhatian Pengguna:</b> Animasi dapat digunakan untuk menarik perhatian pengguna pada elemen penting, seperti notifikasi atau pesan. </li> <ul> <li><b>Contoh:</b> Animasi fade-in untuk notifikasi atau highlight pada elemen yang baru ditambahkan. </li> <li><b>Manfaat:</b> Memastikan pengguna tidak melewatkan informasi penting. </li> </ul> <li><b>Studi Kasus:</b></li> <ul> <li><b>Peningkatan Waktu di Situs:</b> Sebuah situs e-commerce menggunakan animasi transisi yang halus saat pengguna menambahkan produk ke keranjang belanja. Hasilnya adalah peningkatan waktu yang dihabiskan di situs sebesar 15% karena pengguna merasa lebih nyaman menjelajahi produk. </li> <li><b>Peningkatan Konversi:</b> Sebuah formulir pendaftaran menggunakan animasi yang menarik saat pengguna mengisi setiap bidang. Hal ini meningkatkan tingkat penyelesaian formulir sebesar 10% karena pengguna merasa lebih terlibat. </li> </ul> </ul> <h3><span class="ez-toc-section" id="Penggunaan_Pseudo-Class_dan_Pseudo-Element_CSS"></span>Penggunaan Pseudo-Class dan Pseudo-Element CSS<span class="ez-toc-section-end"></span></h3> <p>Pseudo-class dan pseudo-element adalah alat yang ampuh untuk memanipulasi tampilan elemen berdasarkan status atau posisinya. Memahami perbedaan dan penggunaannya akan membuka banyak kemungkinan dalam mendesain antarmuka yang dinamis dan responsif. </p> <ul> <li><b>Pseudo-Class:</b> Pseudo-class digunakan untuk menargetkan elemen berdasarkan status tertentu. </li> <ul> <li><code>:hover</code>: Menargetkan elemen saat kursor diarahkan (hover) di atasnya. </li> <li><code>:active</code>: Menargetkan elemen saat diaktifkan (misalnya, saat tombol ditekan). </li> <li><code>:focus</code>: Menargetkan elemen saat menerima fokus (misalnya, saat input diisi). </li> <li><code>:visited</code>: Menargetkan link yang sudah dikunjungi. </li> <li><code>:first-child</code>, <code>:last-child</code>, <code>:nth-child()</code>: Menargetkan elemen berdasarkan posisinya dalam parent. </li> </ul> <li><b>Pseudo-Element:</b> Pseudo-element digunakan untuk menargetkan bagian tertentu dari elemen. </li> <ul> <li><code>::before</code>: Menyisipkan konten sebelum elemen. </li> <li><code>::after</code>: Menyisipkan konten setelah elemen. </li> <li><code>::first-letter</code>: Menargetkan huruf pertama dari teks. </li> <li><code>::first-line</code>: Menargetkan baris pertama dari teks. </li> <li><code>::selection</code>: Menargetkan bagian teks yang dipilih oleh pengguna. </li> </ul> <li><b>Contoh Penggunaan:</b></li> <ul> <li><b>Tombol Hover:</b> Mengubah warna latar belakang tombol saat di-hover. </li> <pre> <code> .button:hover background-color: #3e8e41; </code> </pre> <li><b>Menambahkan Ikon:</b> Menambahkan ikon sebelum elemen menggunakan <code>::before</code>. </li> <pre> <code> .link::before content: '\f0c1'; /* Kode Unicode untuk ikon (misalnya, Font Awesome) -/ font-family: FontAwesome; margin-right: 5px; </code> </pre> <li><b>Styling Paragraf Pertama:</b> Mengubah gaya huruf pertama paragraf menggunakan <code>::first-letter</code>. </li> <pre> <code> p::first-letter font-size: 1.5em; font-weight: bold; </code> </pre> </ul> </ul> <h3><span class="ez-toc-section" id="Ilustrasi_Kreatif_Animasi_dan_Transisi"></span>Ilustrasi Kreatif Animasi dan Transisi<span class="ez-toc-section-end"></span></h3> <p>Berikut adalah beberapa contoh visual yang menunjukkan penggunaan animasi dan transisi CSS yang kreatif dan inovatif: </p> <p><b>Contoh 1: Animasi Loading dengan Efek Ripple</b></p> <p> Animasi ini menggunakan efek ripple yang muncul dari tengah lingkaran. Efek ini memberikan kesan dinamis dan menarik. </p> <p><b>Contoh 2: Animasi Tombol dengan Efek Hover yang Dinamis</b></p> <p> Tombol berubah warna dan menambahkan efek bayangan saat di-hover, menciptakan interaksi yang lebih menarik. </p> <p><b>Contoh 3: Animasi Slide-In pada Konten</b></p> <p> Konten muncul dari sisi layar dengan efek slide-in, memberikan kesan halus dan modern. </p> <h3><span class="ez-toc-section" id="Tabel_Ringkasan_Properti_Animasi_dan_Transisi"></span>Tabel Ringkasan Properti Animasi dan Transisi<span class="ez-toc-section-end"></span></h3> <table> <thead> <tr> <th>Properti</th> <th>Deskripsi</th> <th>Contoh Nilai</th> </tr> </thead> <tbody> <tr> <td><code>animation-name</code></td> <td>Nama animasi yang akan digunakan.</td> <td><code>fade-in</code>, <code>slide-in</code></td> </tr> <tr> <td><code>animation-duration</code></td> <td>Durasi animasi.</td> <td><code>2s</code>, <code>0.5s</code></td> </tr> <tr> <td><code>animation-timing-function</code></td> <td>Fungsi waktu animasi (e.g., linear, ease, ease-in, ease-out, cubic-bezier).</td> <td><code>ease-in-out</code>, <code>cubic-bezier(0.42, 0, 0.58, 1)</code></td> </tr> <tr> <td><code>animation-delay</code></td> <td>Penundaan sebelum animasi dimulai.</td> <td><code>1s</code>, <code>0.25s</code></td> </tr> <tr> <td><code>animation-iteration-count</code></td> <td>Jumlah pengulangan animasi.</td> <td><code>2</code>, <code>infinite</code></td> </tr> <tr> <td><code>animation-direction</code></td> <td>Arah animasi (e.g., normal, reverse, alternate, alternate-reverse).</td> <td><code>alternate</code></td> </tr> <tr> <td><code>animation-fill-mode</code></td> <td>Cara elemen diterapkan sebelum dan sesudah animasi.</td> <td><code>forwards</code>, <code>backwards</code>, <code>both</code></td> </tr> <tr> <td><code>transition-property</code></td> <td>Properti CSS yang akan dianimasikan.</td> <td><code>all</code>, <code>width</code>, <code>height</code>, <code>opacity</code></td> </tr> <tr> <td><code>transition-duration</code></td> <td>Durasi transisi.</td> <td><code>0.5s</code>, <code>1s</code></td> </tr> <tr> <td><code>transition-timing-function</code></td> <td>Fungsi waktu transisi.</td> <td><code>ease</code>, <code>linear</code>, <code>ease-in-out</code></td> </tr> <tr> <td><code>transition-delay</code></td> <td>Penundaan sebelum transisi dimulai.</td> <td><code>0s</code>, <code>0.25s</code></td> </tr> </tbody> </table> <blockquote> <p> Selalu optimalkan performa animasi dan transisi. Gunakan <code>will-change</code> untuk memberitahu browser elemen mana yang akan dianimasikan, dan hindari animasi yang berlebihan yang dapat memperlambat kinerja situs. </p> </blockquote> <div style="position: relative;width: 100%;height:315px;margin-bottom: 1em"></div> <h2><span class="ez-toc-section" id="Penutup"></span>Penutup<span class="ez-toc-section-end"></span></h2> <p>Memahami cara menggabungkan HTML dan CSS adalah kunci untuk menjadi pengembang web yang mahir. Dengan menguasai dasar-dasar, Anda dapat membuat halaman web yang tidak hanya berfungsi dengan baik, tetapi juga tampil menarik dan responsif. Ingatlah bahwa praktik terbaik dalam penulisan kode, optimasi performa, dan penggunaan alat bantu akan sangat membantu dalam perjalanan Anda. </p> <p>Teruslah belajar dan bereksperimen. Dunia pengembangan web selalu berubah, jadi teruslah mengikuti perkembangan terbaru. Dengan dedikasi dan latihan, Anda akan mampu menciptakan pengalaman web yang luar biasa. </p> <h2><span class="ez-toc-section" id="Pertanyaan_Umum_FAQ"></span>Pertanyaan Umum (FAQ)<span class="ez-toc-section-end"></span></h2> <p><strong>Apa perbedaan utama antara HTML dan CSS?</strong></p> <p>HTML (HyperText Markup Language) digunakan untuk struktur dan konten halaman web, sedangkan CSS (Cascading Style Sheets) digunakan untuk mengatur tampilan dan gaya visual. </p> <p><strong>Bagaimana cara menyisipkan CSS ke dalam HTML?</strong></p> <p>Ada tiga metode utama: inline (langsung di elemen HTML), internal (menggunakan tag <style> di dalam <head>), dan eksternal (menggunakan file .css yang dihubungkan dengan tag <link>). </p> <p><strong>Apa itu selektor CSS?</strong></p> <p>Selektor CSS digunakan untuk memilih elemen HTML yang akan di-style. Contohnya adalah selektor tag (p), class (.nama-class), dan id (#nama-id). </p> <p><strong>Apa itu desain responsif?</strong></p> <p>Desain responsif adalah pendekatan untuk membuat website yang menyesuaikan diri dengan berbagai ukuran layar dan perangkat, menggunakan media queries. </p> <p><strong>Apa itu CSS framework?</strong></p> <p>CSS framework adalah kumpulan kode CSS siap pakai yang memudahkan dan mempercepat proses pengembangan web, contohnya Bootstrap dan Tailwind CSS. </p> <div class="post-views content-post post-86451 entry-meta load-static"> <span class="post-views-icon dashicons dashicons-chart-bar"></span> <span class="post-views-label">Post Views:</span> <span class="post-views-count">124</span> </div><div class='code-block code-block-4' style='margin: 8px auto; text-align: center; display: block; clear: both;'> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-2541095227791362" data-ad-slot="7817309482"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> <!-- CONTENT END 2 --> </div> <footer class="entry-meta" aria-label="Meta postingan"> <span class="cat-links"><span class="gp-icon icon-categories"><svg viewbox="0 0 512 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M0 112c0-26.51 21.49-48 48-48h110.014a48 48 0 0143.592 27.907l12.349 26.791A16 16 0 00228.486 128H464c26.51 0 48 21.49 48 48v224c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112z" /></svg></span><span class="screen-reader-text">Kategori </span><a href="https://www.identif.id/pendidikan/" rel="category tag">Pendidikan</a></span> <span class="tags-links"><span class="gp-icon icon-tags"><svg viewbox="0 0 512 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M20 39.5c-8.836 0-16 7.163-16 16v176c0 4.243 1.686 8.313 4.687 11.314l224 224c6.248 6.248 16.378 6.248 22.626 0l176-176c6.244-6.244 6.25-16.364.013-22.615l-223.5-224A15.999 15.999 0 00196.5 39.5H20zm56 96c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"/><path d="M259.515 43.015c4.686-4.687 12.284-4.687 16.97 0l228 228c4.686 4.686 4.686 12.284 0 16.97l-180 180c-4.686 4.687-12.284 4.687-16.97 0-4.686-4.686-4.686-12.284 0-16.97L479.029 279.5 259.515 59.985c-4.686-4.686-4.686-12.284 0-16.97z" /></svg></span><span class="screen-reader-text">Tag </span><a href="https://www.identif.id/tag/css/" rel="tag">css</a>, <a href="https://www.identif.id/tag/css-framework/" rel="tag">CSS framework</a>, <a href="https://www.identif.id/tag/front-end/" rel="tag">front-end</a>, <a href="https://www.identif.id/tag/html/" rel="tag">html</a>, <a href="https://www.identif.id/tag/responsive-design/" rel="tag">responsive design</a>, <a href="https://www.identif.id/tag/selectors/" rel="tag">selectors</a>, <a href="https://www.identif.id/tag/styling/" rel="tag">styling</a>, <a href="https://www.identif.id/tag/web-development/" rel="tag">Web Development</a></span> <nav id="nav-below" class="post-navigation" aria-label="Artikel"> <div class="nav-previous"><span class="gp-icon icon-arrow-left"><svg viewbox="0 0 192 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M178.425 138.212c0 2.265-1.133 4.813-2.832 6.512L64.276 256.001l111.317 111.277c1.7 1.7 2.832 4.247 2.832 6.513 0 2.265-1.133 4.813-2.832 6.512L161.43 394.46c-1.7 1.7-4.249 2.832-6.514 2.832-2.266 0-4.816-1.133-6.515-2.832L16.407 262.514c-1.699-1.7-2.832-4.248-2.832-6.513 0-2.265 1.133-4.813 2.832-6.512l131.994-131.947c1.7-1.699 4.249-2.831 6.515-2.831 2.265 0 4.815 1.132 6.514 2.831l14.163 14.157c1.7 1.7 2.832 3.965 2.832 6.513z" fill-rule="nonzero" /></svg></span><span class="prev"><a href="https://www.identif.id/lowongan-kerja-customer-service-bank-bri-di-kabupaten-barito-utara/" rel="prev">Lowongan Kerja Customer Service Bank BRI Di Kabupaten Barito Utara Tahun 2025 (Segera Daftar Sebelum Terlambat)</a></span></div><div class="nav-next"><span class="gp-icon icon-arrow-right"><svg viewbox="0 0 192 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M178.425 256.001c0 2.266-1.133 4.815-2.832 6.515L43.599 394.509c-1.7 1.7-4.248 2.833-6.514 2.833s-4.816-1.133-6.515-2.833l-14.163-14.162c-1.699-1.7-2.832-3.966-2.832-6.515 0-2.266 1.133-4.815 2.832-6.515l111.317-111.316L16.407 144.685c-1.699-1.7-2.832-4.249-2.832-6.515s1.133-4.815 2.832-6.515l14.163-14.162c1.7-1.7 4.249-2.833 6.515-2.833s4.815 1.133 6.514 2.833l131.994 131.993c1.7 1.7 2.832 4.249 2.832 6.515z" fill-rule="nonzero" /></svg></span><span class="next"><a href="https://www.identif.id/lowongan-kerja-teller-bank-mandiri-di-kabupaten-subang/" rel="next">Lowongan Kerja Teller Bank Mandiri Di Kabupaten Subang Tahun 2025 (Resmi)</a></span></div> </nav> </footer> </div> </article> <div class="comments-area"> <div id="comments"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Tinggalkan komentar <small><a rel="nofollow" id="cancel-comment-reply-link" href="/cara-menggabungkan-html-dan-css-3/#respond" style="display:none;">Batalkan balasan</a></small></h3><form action="https://www.identif.id/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-form-comment"><label for="comment" class="screen-reader-text">Komentar</label><textarea id="comment" name="comment" cols="45" rows="8" required></textarea></p><label for="author" class="screen-reader-text">Nama</label><input placeholder="Nama *" id="author" name="author" type="text" value="" size="30" required /> <label for="email" class="screen-reader-text">Surel</label><input placeholder="Surel *" id="email" name="email" type="email" value="" size="30" required /> <label for="url" class="screen-reader-text">Situs web</label><input placeholder="Situs web" id="url" name="url" type="url" value="" size="30" /> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Simpan nama, email, dan situs web saya pada peramban ini untuk komentar saya berikutnya.</label></p> <script>document.addEventListener("DOMContentLoaded", function() { setTimeout(function(){ var e=document.getElementById("cf-turnstile-c-719745275"); e&&!e.innerHTML.trim()&&(turnstile.remove("#cf-turnstile-c-719745275"), turnstile.render("#cf-turnstile-c-719745275", {sitekey:"0x4AAAAAACJmkdRm6QoeCNR2"})); }, 100); });</script> <p class="form-submit"><span id="cf-turnstile-c-719745275" class="cf-turnstile cf-turnstile-comments" data-action="wordpress-comment" data-callback="" data-sitekey="0x4AAAAAACJmkdRm6QoeCNR2" data-theme="light" data-language="auto" data-appearance="always" data-size="normal" data-retry="auto" data-retry-interval="1000"></span><br class="cf-turnstile-br cf-turnstile-br-comments"><input name="submit" type="submit" id="submit" class="submit" value="Kirim Komentar" /><script type="text/javascript">document.addEventListener("DOMContentLoaded", function() { document.body.addEventListener("click", function(event) { if (event.target.matches(".comment-reply-link, #cancel-comment-reply-link")) { turnstile.reset(".comment-form .cf-turnstile"); } }); });</script> <input type='hidden' name='comment_post_ID' value='86451' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p></form> </div><!-- #respond --> </div><!-- #comments --> </div> </main> </div> <div class="widget-area sidebar is-right-sidebar" id="right-sidebar"> <div class="inside-right-sidebar"> <aside id="block-12" class="widget inner-padding widget_block widget_recent_entries"><ul class="wp-block-latest-posts__list wp-block-latest-posts"><li><a class="wp-block-latest-posts__post-title" href="https://www.identif.id/salah-satu-kewajiban-kita-sebagai-warga-negara-adalah/">Salah satu kewajiban kita sebagai warga negara adalah?</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://www.identif.id/dina-nyanghareupan-alam-kamoderenan-urang-teu-kudu-gimir-tapi-kudu/">Dina nyanghareupan alam kamodérenan, urang teu kudu gimir tapi kudu?</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://www.identif.id/adanya-co2-yang-berlebihan-di-udara-dapat-mengakibatkan-terjadinya/">Adanya CO2 yang berlebihan di udara dapat mengakibatkan terjadinya?</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://www.identif.id/it-is-very-important-that-tina-visits-a-her-mother-next-b-month-but-shes-still-very-busy-c-with-all-the-company-meetings-d/">It is very important that Tina visits (A) her mother next (B) month but she’s still very busy (C) with all the company meetings (D)?</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://www.identif.id/bentuk-kalimat-yang-digunakan-untuk-menyatakan-pekerjaan-yang-biasa-dilakukan-rutinitas-adalah/">Bentuk kalimat yang digunakan untuk menyatakan pekerjaan yang biasa dilakukan (rutinitas) adalah?</a></li> </ul></aside> </div> </div> </div> </div> <div class="site-footer"> <footer class="site-info" aria-label="Situs" itemtype="https://schema.org/WPFooter" itemscope> <div class="inside-site-info grid-container"> <div class="copyright-bar"> © 2026 Identif.id </div> </div> </footer> </div> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/generatepress/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="generate-a11y"> !function(){"use strict";if("querySelector"in document&&"addEventListener"in window){var e=document.body;e.addEventListener("pointerdown",(function(){e.classList.add("using-mouse")}),{passive:!0}),e.addEventListener("keydown",(function(){e.classList.remove("using-mouse")}),{passive:!0})}}(); </script> <script>window.GA_ID='G-3B6MLQ844X'</script><script src='https://www.identif.id/wp-content/plugins/flying-analytics/js/minimal-analytics.js' defer></script><script type="text/javascript" id="flying-scripts">const loadScriptsTimer=setTimeout(loadScripts,5*1000);const userInteractionEvents=['click', 'mousemove', 'keydown', 'touchstart', 'touchmove', 'wheel'];userInteractionEvents.forEach(function(event){window.addEventListener(event,triggerScriptLoader,{passive:!0})});function triggerScriptLoader(){loadScripts();clearTimeout(loadScriptsTimer);userInteractionEvents.forEach(function(event){window.removeEventListener(event,triggerScriptLoader,{passive:!0})})} function loadScripts(){document.querySelectorAll("script[data-type='lazy']").forEach(function(elem){elem.setAttribute("src",elem.getAttribute("data-src"))})}</script> <script id="ez-toc-scroll-scriptjs-js-extra"> var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":"","add_self_reference_link":""}; //# sourceURL=ez-toc-scroll-scriptjs-js-extra </script> <script src="https://www.identif.id/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.80" id="ez-toc-scroll-scriptjs-js"></script> <script src="https://www.identif.id/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js"></script> <script src="https://www.identif.id/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js"></script> <script id="ez-toc-js-js-extra"> var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"\u003Cspan class=\"\"\u003E\u003Cspan class=\"eztoc-hide\" style=\"display:none;\"\u003EToggle\u003C/span\u003E\u003Cspan class=\"ez-toc-icon-toggle-span\"\u003E\u003Csvg style=\"fill: #999;color:#999\" xmlns=\"http://www.w3.org/2000/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"\u003E\u003Cpath d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"\u003E\u003C/path\u003E\u003C/svg\u003E\u003Csvg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"\u003E\u003Cpath d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"/\u003E\u003C/svg\u003E\u003C/span\u003E\u003C/span\u003E","chamomile_theme_is_on":""}; //# sourceURL=ez-toc-js-js-extra </script> <script src="https://www.identif.id/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.80-1768420517" id="ez-toc-js-js"></script> <script id="generate-menu-js-before"> var generatepressMenu = {"toggleOpenedSubMenus":true,"openSubMenuLabel":"Buka Submenu","closeSubMenuLabel":"Tutup submenu"}; //# sourceURL=generate-menu-js-before </script> <script src="https://www.identif.id/wp-content/themes/generatepress/assets/js/menu.min.js?ver=3.6.1" id="generate-menu-js"></script> <script src="https://www.identif.id/wp-includes/js/comment-reply.min.js?ver=6.9.1" id="comment-reply-js" async data-wp-strategy="async" fetchpriority="low"></script> <script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=auto" id="cfturnstile-js" defer data-wp-strategy="defer"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.identif.id/wp-includes/js/wp-emoji-release.min.js?ver=6.9.1"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://www.identif.id/wp-includes/js/wp-emoji-loader.min.js </script> <script> function b2a(a){var b,c=0,l=0,f="",g=[];if(!a)return a;do{var e=a.charCodeAt(c++);var h=a.charCodeAt(c++);var k=a.charCodeAt(c++);var d=e<<16|h<<8|k;e=63&d>>18;h=63&d>>12;k=63&d>>6;d&=63;g[l++]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(h)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(k)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(d)}while(c< a.length);return f=g.join(""),b=a.length%3,(b?f.slice(0,b-3):f)+"===".slice(b||3)}function a2b(a){var b,c,l,f={},g=0,e=0,h="",k=String.fromCharCode,d=a.length;for(b=0;64>b;b++)f["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(b)]=b;for(c=0;d>c;c++)for(b=f[a.charAt(c)],g=(g<<6)+b,e+=6;8<=e;)((l=255&g>>>(e-=8))||d-2>c)&&(h+=k(l));return h}b64e=function(a){return btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,function(b,a){return String.fromCharCode("0x"+a)}))}; b64d=function(a){return decodeURIComponent(atob(a).split("").map(function(a){return"%"+("00"+a.charCodeAt(0).toString(16)).slice(-2)}).join(""))}; /* <![CDATA[ */ ai_front = {"insertion_before":"BEFORE","insertion_after":"AFTER","insertion_prepend":"PREPEND CONTENT","insertion_append":"APPEND CONTENT","insertion_replace_content":"REPLACE CONTENT","insertion_replace_element":"REPLACE ELEMENT","visible":"VISIBLE","hidden":"HIDDEN","fallback":"FALLBACK","automatically_placed":"Automatically placed by AdSense Auto ads code","cancel":"Cancel","use":"Use","add":"Add","parent":"Parent","cancel_element_selection":"Cancel element selection","select_parent_element":"Select parent element","css_selector":"CSS selector","use_current_selector":"Use current selector","element":"ELEMENT","path":"PATH","selector":"SELECTOR"}; /* ]]> */ var ai_cookie_js=!0,ai_block_class_def="code-block"; /* js-cookie v3.0.5 | MIT JavaScript Cookie v2.2.0 https://github.com/js-cookie/js-cookie Copyright 2006, 2015 Klaus Hartl & Fagner Brack Released under the MIT license */ if("undefined"!==typeof ai_cookie_js){(function(a,f){"object"===typeof exports&&"undefined"!==typeof module?module.exports=f():"function"===typeof define&&define.amd?define(f):(a="undefined"!==typeof globalThis?globalThis:a||self,function(){var b=a.Cookies,c=a.Cookies=f();c.noConflict=function(){a.Cookies=b;return c}}())})(this,function(){function a(b){for(var c=1;c<arguments.length;c++){var g=arguments[c],e;for(e in g)b[e]=g[e]}return b}function f(b,c){function g(e,d,h){if("undefined"!==typeof document){h= a({},c,h);"number"===typeof h.expires&&(h.expires=new Date(Date.now()+864E5*h.expires));h.expires&&(h.expires=h.expires.toUTCString());e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var l="",k;for(k in h)h[k]&&(l+="; "+k,!0!==h[k]&&(l+="="+h[k].split(";")[0]));return document.cookie=e+"="+b.write(d,e)+l}}return Object.create({set:g,get:function(e){if("undefined"!==typeof document&&(!arguments.length||e)){for(var d=document.cookie?document.cookie.split("; "): [],h={},l=0;l<d.length;l++){var k=d[l].split("="),p=k.slice(1).join("=");try{var n=decodeURIComponent(k[0]);h[n]=b.read(p,n);if(e===n)break}catch(q){}}return e?h[e]:h}},remove:function(e,d){g(e,"",a({},d,{expires:-1}))},withAttributes:function(e){return f(this.converter,a({},this.attributes,e))},withConverter:function(e){return f(a({},this.converter,e),this.attributes)}},{attributes:{value:Object.freeze(c)},converter:{value:Object.freeze(b)}})}return f({read:function(b){'"'===b[0]&&(b=b.slice(1,-1)); return b.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(b){return encodeURIComponent(b).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})});AiCookies=Cookies.noConflict();function m(a){if(null==a)return a;'"'===a.charAt(0)&&(a=a.slice(1,-1));try{a=JSON.parse(a)}catch(f){}return a}ai_check_block=function(a){var f="undefined"!==typeof ai_debugging;if(null==a)return!0;var b=m(AiCookies.get("aiBLOCKS"));ai_debug_cookie_status="";null==b&&(b={});"undefined"!== typeof ai_delay_showing_pageviews&&(b.hasOwnProperty(a)||(b[a]={}),b[a].hasOwnProperty("d")||(b[a].d=ai_delay_showing_pageviews,f&&console.log("AI CHECK block",a,"NO COOKIE DATA d, delayed for",ai_delay_showing_pageviews,"pageviews")));if(b.hasOwnProperty(a)){for(var c in b[a]){if("x"==c){var g="",e=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in e.dataset&&(g=e.dataset.aiHash);e="";b[a].hasOwnProperty("h")&&(e=b[a].h);f&&console.log("AI CHECK block",a,"x cookie hash",e,"code hash", g);var d=new Date;d=b[a][c]-Math.round(d.getTime()/1E3);if(0<d&&e==g)return ai_debug_cookie_status=b="closed for "+d+" s = "+Math.round(1E4*d/3600/24)/1E4+" days",f&&console.log("AI CHECK block",a,b),f&&console.log(""),!1;f&&console.log("AI CHECK block",a,"removing x");ai_set_cookie(a,"x","");b[a].hasOwnProperty("i")||b[a].hasOwnProperty("c")||ai_set_cookie(a,"h","")}else if("d"==c){if(0!=b[a][c])return ai_debug_cookie_status=b="delayed for "+b[a][c]+" pageviews",f&&console.log("AI CHECK block",a, b),f&&console.log(""),!1}else if("i"==c){g="";e=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in e.dataset&&(g=e.dataset.aiHash);e="";b[a].hasOwnProperty("h")&&(e=b[a].h);f&&console.log("AI CHECK block",a,"i cookie hash",e,"code hash",g);if(0==b[a][c]&&e==g)return ai_debug_cookie_status=b="max impressions reached",f&&console.log("AI CHECK block",a,b),f&&console.log(""),!1;if(0>b[a][c]&&e==g){d=new Date;d=-b[a][c]-Math.round(d.getTime()/1E3);if(0<d)return ai_debug_cookie_status= b="max imp. reached ("+Math.round(1E4*d/24/3600)/1E4+" days = "+d+" s)",f&&console.log("AI CHECK block",a,b),f&&console.log(""),!1;f&&console.log("AI CHECK block",a,"removing i");ai_set_cookie(a,"i","");b[a].hasOwnProperty("c")||b[a].hasOwnProperty("x")||(f&&console.log("AI CHECK block",a,"cookie h removed"),ai_set_cookie(a,"h",""))}}if("ipt"==c&&0==b[a][c]&&(d=new Date,g=Math.round(d.getTime()/1E3),d=b[a].it-g,0<d))return ai_debug_cookie_status=b="max imp. per time reached ("+Math.round(1E4*d/24/ 3600)/1E4+" days = "+d+" s)",f&&console.log("AI CHECK block",a,b),f&&console.log(""),!1;if("c"==c){g="";e=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in e.dataset&&(g=e.dataset.aiHash);e="";b[a].hasOwnProperty("h")&&(e=b[a].h);f&&console.log("AI CHECK block",a,"c cookie hash",e,"code hash",g);if(0==b[a][c]&&e==g)return ai_debug_cookie_status=b="max clicks reached",f&&console.log("AI CHECK block",a,b),f&&console.log(""),!1;if(0>b[a][c]&&e==g){d=new Date;d=-b[a][c]-Math.round(d.getTime()/ 1E3);if(0<d)return ai_debug_cookie_status=b="max clicks reached ("+Math.round(1E4*d/24/3600)/1E4+" days = "+d+" s)",f&&console.log("AI CHECK block",a,b),f&&console.log(""),!1;f&&console.log("AI CHECK block",a,"removing c");ai_set_cookie(a,"c","");b[a].hasOwnProperty("i")||b[a].hasOwnProperty("x")||(f&&console.log("AI CHECK block",a,"cookie h removed"),ai_set_cookie(a,"h",""))}}if("cpt"==c&&0==b[a][c]&&(d=new Date,g=Math.round(d.getTime()/1E3),d=b[a].ct-g,0<d))return ai_debug_cookie_status=b="max clicks per time reached ("+ Math.round(1E4*d/24/3600)/1E4+" days = "+d+" s)",f&&console.log("AI CHECK block",a,b),f&&console.log(""),!1}if(b.hasOwnProperty("G")&&b.G.hasOwnProperty("cpt")&&0==b.G.cpt&&(d=new Date,g=Math.round(d.getTime()/1E3),d=b.G.ct-g,0<d))return ai_debug_cookie_status=b="max global clicks per time reached ("+Math.round(1E4*d/24/3600)/1E4+" days = "+d+" s)",f&&console.log("AI CHECK GLOBAL",b),f&&console.log(""),!1}ai_debug_cookie_status="OK";f&&console.log("AI CHECK block",a,"OK");f&&console.log("");return!0}; ai_check_and_insert_block=function(a,f){var b="undefined"!==typeof ai_debugging;if(null==a)return!0;var c=document.getElementsByClassName(f);if(c.length){c=c[0];var g=c.closest("."+ai_block_class_def),e=ai_check_block(a);!e&&0!=parseInt(c.getAttribute("limits-fallback"))&&c.hasAttribute("data-fallback-code")&&(b&&console.log("AI CHECK FAILED, INSERTING FALLBACK BLOCK",c.getAttribute("limits-fallback")),c.setAttribute("data-code",c.getAttribute("data-fallback-code")),null!=g&&g.hasAttribute("data-ai")&& c.hasAttribute("fallback-tracking")&&c.hasAttribute("fallback_level")&&g.setAttribute("data-ai-"+c.getAttribute("fallback_level"),c.getAttribute("fallback-tracking")),e=!0);c.removeAttribute("data-selector");e?(ai_insert_code(c),g&&(b=g.querySelectorAll(".ai-debug-block"),b.length&&(g.classList.remove("ai-list-block"),g.classList.remove("ai-list-block-ip"),g.classList.remove("ai-list-block-filter"),g.style.visibility="",g.classList.contains("ai-remove-position")&&(g.style.position="")))):(b=c.closest("div[data-ai]"), null!=b&&"undefined"!=typeof b.getAttribute("data-ai")&&(e=JSON.parse(b64d(b.getAttribute("data-ai"))),"undefined"!==typeof e&&e.constructor===Array&&(e[1]="",b.setAttribute("data-ai",b64e(JSON.stringify(e))))),g&&(b=g.querySelectorAll(".ai-debug-block"),b.length&&(g.classList.remove("ai-list-block"),g.classList.remove("ai-list-block-ip"),g.classList.remove("ai-list-block-filter"),g.style.visibility="",g.classList.contains("ai-remove-position")&&(g.style.position=""))));c.classList.remove(f)}c=document.querySelectorAll("."+ f+"-dbg");g=0;for(b=c.length;g<b;g++)e=c[g],e.querySelector(".ai-status").textContent=ai_debug_cookie_status,e.querySelector(".ai-cookie-data").textContent=ai_get_cookie_text(a),e.classList.remove(f+"-dbg")};ai_load_cookie=function(){var a="undefined"!==typeof ai_debugging,f=m(AiCookies.get("aiBLOCKS"));null==f&&(f={},a&&console.log("AI COOKIE NOT PRESENT"));a&&console.log("AI COOKIE LOAD",f);return f};ai_set_cookie=function(a,f,b){var c="undefined"!==typeof ai_debugging;c&&console.log("AI COOKIE SET block:", a,"property:",f,"value:",b);var g=ai_load_cookie();if(""===b){if(g.hasOwnProperty(a)){delete g[a][f];a:{f=g[a];for(e in f)if(f.hasOwnProperty(e)){var e=!1;break a}e=!0}e&&delete g[a]}}else g.hasOwnProperty(a)||(g[a]={}),g[a][f]=b;0===Object.keys(g).length&&g.constructor===Object?(AiCookies.remove("aiBLOCKS"),c&&console.log("AI COOKIE REMOVED")):AiCookies.set("aiBLOCKS",JSON.stringify(g),{expires:365,path:"/"});if(c)if(a=m(AiCookies.get("aiBLOCKS")),"undefined"!=typeof a){console.log("AI COOKIE NEW", a);console.log("AI COOKIE DATA:");for(var d in a){for(var h in a[d])"x"==h?(c=new Date,c=a[d][h]-Math.round(c.getTime()/1E3),console.log(" BLOCK",d,"closed for",c,"s = ",Math.round(1E4*c/3600/24)/1E4,"days")):"d"==h?console.log(" BLOCK",d,"delayed for",a[d][h],"pageviews"):"e"==h?console.log(" BLOCK",d,"show every",a[d][h],"pageviews"):"i"==h?(e=a[d][h],0<=e?console.log(" BLOCK",d,a[d][h],"impressions until limit"):(c=new Date,c=-e-Math.round(c.getTime()/1E3),console.log(" BLOCK",d,"max impressions, closed for", c,"s =",Math.round(1E4*c/3600/24)/1E4,"days"))):"ipt"==h?console.log(" BLOCK",d,a[d][h],"impressions until limit per time period"):"it"==h?(c=new Date,c=a[d][h]-Math.round(c.getTime()/1E3),console.log(" BLOCK",d,"impressions limit expiration in",c,"s =",Math.round(1E4*c/3600/24)/1E4,"days")):"c"==h?(e=a[d][h],0<=e?console.log(" BLOCK",d,e,"clicks until limit"):(c=new Date,c=-e-Math.round(c.getTime()/1E3),console.log(" BLOCK",d,"max clicks, closed for",c,"s =",Math.round(1E4*c/3600/24)/1E4,"days"))): "cpt"==h?console.log(" BLOCK",d,a[d][h],"clicks until limit per time period"):"ct"==h?(c=new Date,c=a[d][h]-Math.round(c.getTime()/1E3),console.log(" BLOCK",d,"clicks limit expiration in ",c,"s =",Math.round(1E4*c/3600/24)/1E4,"days")):"h"==h?console.log(" BLOCK",d,"hash",a[d][h]):console.log(" ?:",d,":",h,a[d][h]);console.log("")}}else console.log("AI COOKIE NOT PRESENT");return g};ai_get_cookie_text=function(a){var f=m(AiCookies.get("aiBLOCKS"));null==f&&(f={});var b="";f.hasOwnProperty("G")&& (b="G["+JSON.stringify(f.G).replace(/"/g,"").replace("{","").replace("}","")+"] ");var c="";f.hasOwnProperty(a)&&(c=JSON.stringify(f[a]).replace(/"/g,"").replace("{","").replace("}",""));return b+c}}; var ai_insertion_js=!0,ai_block_class_def="code-block"; if("undefined"!=typeof ai_insertion_js){ai_insert=function(a,h,l){if(-1!=h.indexOf(":eq("))if(window.jQuery&&window.jQuery.fn)var n=jQuery(h);else{console.error("AI INSERT USING jQuery QUERIES:",h,"- jQuery not found");return}else n=document.querySelectorAll(h);for(var u=0,y=n.length;u<y;u++){var d=n[u];selector_string=d.hasAttribute("id")?"#"+d.getAttribute("id"):d.hasAttribute("class")?"."+d.getAttribute("class").replace(RegExp(" ","g"),"."):"";var w=document.createElement("div");w.innerHTML=l; var m=w.getElementsByClassName("ai-selector-counter")[0];null!=m&&(m.innerText=u+1);m=w.getElementsByClassName("ai-debug-name ai-main")[0];if(null!=m){var r=a.toUpperCase();"undefined"!=typeof ai_front&&("before"==a?r=ai_front.insertion_before:"after"==a?r=ai_front.insertion_after:"prepend"==a?r=ai_front.insertion_prepend:"append"==a?r=ai_front.insertion_append:"replace-content"==a?r=ai_front.insertion_replace_content:"replace-element"==a&&(r=ai_front.insertion_replace_element));-1==selector_string.indexOf(".ai-viewports")&& (m.innerText=r+" "+h+" ("+d.tagName.toLowerCase()+selector_string+")")}m=document.createRange();try{var v=m.createContextualFragment(w.innerHTML)}catch(t){}"before"==a?d.parentNode.insertBefore(v,d):"after"==a?d.parentNode.insertBefore(v,d.nextSibling):"prepend"==a?d.insertBefore(v,d.firstChild):"append"==a?d.insertBefore(v,null):"replace-content"==a?(d.innerHTML="",d.insertBefore(v,null)):"replace-element"==a&&(d.parentNode.insertBefore(v,d),d.parentNode.removeChild(d));z()}};ai_insert_code=function(a){function h(m, r){return null==m?!1:m.classList?m.classList.contains(r):-1<(" "+m.className+" ").indexOf(" "+r+" ")}function l(m,r){null!=m&&(m.classList?m.classList.add(r):m.className+=" "+r)}function n(m,r){null!=m&&(m.classList?m.classList.remove(r):m.className=m.className.replace(new RegExp("(^|\\b)"+r.split(" ").join("|")+"(\\b|$)","gi")," "))}if("undefined"!=typeof a){var u=!1;if(h(a,"no-visibility-check")||a.offsetWidth||a.offsetHeight||a.getClientRects().length){u=a.getAttribute("data-code");var y=a.getAttribute("data-insertion-position"), d=a.getAttribute("data-selector");if(null!=u)if(null!=y&&null!=d){if(-1!=d.indexOf(":eq(")?window.jQuery&&window.jQuery.fn&&jQuery(d).length:document.querySelectorAll(d).length)ai_insert(y,d,b64d(u)),n(a,"ai-viewports")}else{y=document.createRange();try{var w=y.createContextualFragment(b64d(u))}catch(m){}a.parentNode.insertBefore(w,a.nextSibling);n(a,"ai-viewports")}u=!0}else w=a.previousElementSibling,h(w,"ai-debug-bar")&&h(w,"ai-debug-script")&&(n(w,"ai-debug-script"),l(w,"ai-debug-viewport-invisible")), n(a,"ai-viewports");return u}};ai_insert_list_code=function(a){var h=document.getElementsByClassName(a)[0];if("undefined"!=typeof h){var l=ai_insert_code(h),n=h.closest("div."+ai_block_class_def);if(n){l||n.removeAttribute("data-ai");var u=n.querySelectorAll(".ai-debug-block");n&&u.length&&(n.classList.remove("ai-list-block"),n.classList.remove("ai-list-block-ip"),n.classList.remove("ai-list-block-filter"),n.style.visibility="",n.classList.contains("ai-remove-position")&&(n.style.position=""))}h.classList.remove(a); l&&z()}};ai_insert_viewport_code=function(a){var h=document.getElementsByClassName(a)[0];if("undefined"!=typeof h){var l=ai_insert_code(h);h.classList.remove(a);l&&(a=h.closest("div."+ai_block_class_def),null!=a&&(l=h.getAttribute("style"),null!=l&&a.setAttribute("style",a.getAttribute("style")+" "+l)));setTimeout(function(){h.removeAttribute("style")},2);z()}};ai_insert_adsense_fallback_codes=function(a){a.style.display="none";var h=a.closest(".ai-fallback-adsense"),l=h.nextElementSibling;l.getAttribute("data-code")? ai_insert_code(l)&&z():l.style.display="block";h.classList.contains("ai-empty-code")&&null!=a.closest("."+ai_block_class_def)&&(a=a.closest("."+ai_block_class_def).getElementsByClassName("code-block-label"),0!=a.length&&(a[0].style.display="none"))};ai_insert_code_by_class=function(a){var h=document.getElementsByClassName(a)[0];"undefined"!=typeof h&&(ai_insert_code(h),h.classList.remove(a))};ai_insert_client_code=function(a,h){var l=document.getElementsByClassName(a)[0];if("undefined"!=typeof l){var n= l.getAttribute("data-code");null!=n&&ai_check_block()&&(l.setAttribute("data-code",n.substring(Math.floor(h/19))),ai_insert_code_by_class(a),l.remove())}};ai_process_elements_active=!1;function z(){ai_process_elements_active||setTimeout(function(){ai_process_elements_active=!1;"function"==typeof ai_process_rotations&&ai_process_rotations();"function"==typeof ai_process_lists&&ai_process_lists();"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses();"function"==typeof ai_process_filter_hooks&& ai_process_filter_hooks();"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks();"function"==typeof ai_process_impressions&&1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document);"function"==typeof ai_process_wait_for_interaction&&ai_process_wait_for_interaction();"function"==typeof ai_process_delayed_blocks&&ai_process_delayed_blocks()}, 5);ai_process_elements_active=!0}const B=document.querySelector("body");(new MutationObserver(function(a,h){for(const l of a)"attributes"===l.type&&"data-ad-status"==l.attributeName&&"unfilled"==l.target.dataset.adStatus&&l.target.closest(".ai-fallback-adsense")&&ai_insert_adsense_fallback_codes(l.target)})).observe(B,{attributes:!0,childList:!1,subtree:!0});var Arrive=function(a,h,l){function n(t,c,e){d.addMethod(c,e,t.unbindEvent);d.addMethod(c,e,t.unbindEventWithSelectorOrCallback);d.addMethod(c, e,t.unbindEventWithSelectorAndCallback)}function u(t){t.arrive=r.bindEvent;n(r,t,"unbindArrive");t.leave=v.bindEvent;n(v,t,"unbindLeave")}if(a.MutationObserver&&"undefined"!==typeof HTMLElement){var y=0,d=function(){var t=HTMLElement.prototype.matches||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector;return{matchesSelector:function(c,e){return c instanceof HTMLElement&&t.call(c,e)},addMethod:function(c,e,f){var b=c[e];c[e]= function(){if(f.length==arguments.length)return f.apply(this,arguments);if("function"==typeof b)return b.apply(this,arguments)}},callCallbacks:function(c,e){e&&e.options.onceOnly&&1==e.firedElems.length&&(c=[c[0]]);for(var f=0,b;b=c[f];f++)b&&b.callback&&b.callback.call(b.elem,b.elem);e&&e.options.onceOnly&&1==e.firedElems.length&&e.me.unbindEventWithSelectorAndCallback.call(e.target,e.selector,e.callback)},checkChildNodesRecursively:function(c,e,f,b){for(var g=0,k;k=c[g];g++)f(k,e,b)&&b.push({callback:e.callback, elem:k}),0<k.childNodes.length&&d.checkChildNodesRecursively(k.childNodes,e,f,b)},mergeArrays:function(c,e){var f={},b;for(b in c)c.hasOwnProperty(b)&&(f[b]=c[b]);for(b in e)e.hasOwnProperty(b)&&(f[b]=e[b]);return f},toElementsArray:function(c){"undefined"===typeof c||"number"===typeof c.length&&c!==a||(c=[c]);return c}}}(),w=function(){var t=function(){this._eventsBucket=[];this._beforeRemoving=this._beforeAdding=null};t.prototype.addEvent=function(c,e,f,b){c={target:c,selector:e,options:f,callback:b, firedElems:[]};this._beforeAdding&&this._beforeAdding(c);this._eventsBucket.push(c);return c};t.prototype.removeEvent=function(c){for(var e=this._eventsBucket.length-1,f;f=this._eventsBucket[e];e--)c(f)&&(this._beforeRemoving&&this._beforeRemoving(f),(f=this._eventsBucket.splice(e,1))&&f.length&&(f[0].callback=null))};t.prototype.beforeAdding=function(c){this._beforeAdding=c};t.prototype.beforeRemoving=function(c){this._beforeRemoving=c};return t}(),m=function(t,c){var e=new w,f=this,b={fireOnAttributesModification:!1}; e.beforeAdding(function(g){var k=g.target;if(k===a.document||k===a)k=document.getElementsByTagName("html")[0];var p=new MutationObserver(function(x){c.call(this,x,g)});var q=t(g.options);p.observe(k,q);g.observer=p;g.me=f});e.beforeRemoving(function(g){g.observer.disconnect()});this.bindEvent=function(g,k,p){k=d.mergeArrays(b,k);for(var q=d.toElementsArray(this),x=0;x<q.length;x++)e.addEvent(q[x],g,k,p)};this.unbindEvent=function(){var g=d.toElementsArray(this);e.removeEvent(function(k){for(var p= 0;p<g.length;p++)if(this===l||k.target===g[p])return!0;return!1})};this.unbindEventWithSelectorOrCallback=function(g){var k=d.toElementsArray(this);e.removeEvent("function"===typeof g?function(p){for(var q=0;q<k.length;q++)if((this===l||p.target===k[q])&&p.callback===g)return!0;return!1}:function(p){for(var q=0;q<k.length;q++)if((this===l||p.target===k[q])&&p.selector===g)return!0;return!1})};this.unbindEventWithSelectorAndCallback=function(g,k){var p=d.toElementsArray(this);e.removeEvent(function(q){for(var x= 0;x<p.length;x++)if((this===l||q.target===p[x])&&q.selector===g&&q.callback===k)return!0;return!1})};return this},r=new function(){function t(f,b,g){return d.matchesSelector(f,b.selector)&&(f._id===l&&(f._id=y++),-1==b.firedElems.indexOf(f._id))?(b.firedElems.push(f._id),!0):!1}var c={fireOnAttributesModification:!1,onceOnly:!1,existing:!1};r=new m(function(f){var b={attributes:!1,childList:!0,subtree:!0};f.fireOnAttributesModification&&(b.attributes=!0);return b},function(f,b){f.forEach(function(g){var k= g.addedNodes,p=g.target,q=[];null!==k&&0<k.length?d.checkChildNodesRecursively(k,b,t,q):"attributes"===g.type&&t(p,b,q)&&q.push({callback:b.callback,elem:p});d.callCallbacks(q,b)})});var e=r.bindEvent;r.bindEvent=function(f,b,g){"undefined"===typeof g?(g=b,b=c):b=d.mergeArrays(c,b);var k=d.toElementsArray(this);if(b.existing){for(var p=[],q=0;q<k.length;q++)for(var x=k[q].querySelectorAll(f),A=0;A<x.length;A++)p.push({callback:g,elem:x[A]});if(b.onceOnly&&p.length)return g.call(p[0].elem,p[0].elem); setTimeout(d.callCallbacks,1,p)}e.call(this,f,b,g)};return r},v=new function(){function t(f,b){return d.matchesSelector(f,b.selector)}var c={};v=new m(function(){return{childList:!0,subtree:!0}},function(f,b){f.forEach(function(g){g=g.removedNodes;var k=[];null!==g&&0<g.length&&d.checkChildNodesRecursively(g,b,t,k);d.callCallbacks(k,b)})});var e=v.bindEvent;v.bindEvent=function(f,b,g){"undefined"===typeof g?(g=b,b=c):b=d.mergeArrays(c,b);e.call(this,f,b,g)};return v};h&&u(h.fn);u(HTMLElement.prototype); u(NodeList.prototype);u(HTMLCollection.prototype);u(HTMLDocument.prototype);u(Window.prototype);h={};n(r,h,"unbindAllArrive");n(v,h,"unbindAllLeave");return h}}(window,"undefined"===typeof jQuery?null:jQuery,void 0)}; var ai_rotation_triggers=[],ai_block_class_def="code-block"; if("undefined"!=typeof ai_rotation_triggers){ai_process_rotation=function(b){var d="number"==typeof b.length;window.jQuery&&window.jQuery.fn&&b instanceof jQuery&&(b=d?Array.prototype.slice.call(b):b[0]);if(d){var e=!1;b.forEach((c,h)=>{if(c.classList.contains("ai-unprocessed")||c.classList.contains("ai-timer"))e=!0});if(!e)return;b.forEach((c,h)=>{c.classList.remove("ai-unprocessed");c.classList.remove("ai-timer")})}else{if(!b.classList.contains("ai-unprocessed")&&!b.classList.contains("ai-timer"))return; b.classList.remove("ai-unprocessed");b.classList.remove("ai-timer")}var a=!1;if(d?b[0].hasAttribute("data-info"):b.hasAttribute("data-info")){var f="div.ai-rotate.ai-"+(d?JSON.parse(atob(b[0].dataset.info)):JSON.parse(atob(b.dataset.info)))[0];ai_rotation_triggers.includes(f)&&(ai_rotation_triggers.splice(ai_rotation_triggers.indexOf(f),1),a=!0)}if(d)for(d=0;d<b.length;d++)0==d?ai_process_single_rotation(b[d],!0):ai_process_single_rotation(b[d],!1);else ai_process_single_rotation(b,!a)};ai_process_single_rotation= function(b,d){var e=[];Array.from(b.children).forEach((g,p)=>{g.matches(".ai-rotate-option")&&e.push(g)});if(0!=e.length){e.forEach((g,p)=>{g.style.display="none"});if(b.hasAttribute("data-next")){k=parseInt(b.getAttribute("data-next"));var a=e[k];if(a.hasAttribute("data-code")){var f=document.createRange(),c=!0;try{var h=f.createContextualFragment(b64d(a.dataset.code))}catch(g){c=!1}c&&(a=h)}0!=a.querySelectorAll("span[data-ai-groups]").length&&0!=document.querySelectorAll(".ai-rotation-groups").length&& setTimeout(function(){B()},5)}else if(e[0].hasAttribute("data-group")){var k=-1,u=[];document.querySelectorAll("span[data-ai-groups]").forEach((g,p)=>{(g.offsetWidth||g.offsetHeight||g.getClientRects().length)&&u.push(g)});1<=u.length&&(timed_groups=[],groups=[],u.forEach(function(g,p){active_groups=JSON.parse(b64d(g.dataset.aiGroups));var r=!1;g=g.closest(".ai-rotate");null!=g&&g.classList.contains("ai-timed-rotation")&&(r=!0);active_groups.forEach(function(t,v){groups.push(t);r&&timed_groups.push(t)})}), groups.forEach(function(g,p){-1==k&&e.forEach((r,t)=>{var v=b64d(r.dataset.group);option_group_items=v.split(",");option_group_items.forEach(function(C,E){-1==k&&C.trim()==g&&(k=t,timed_groups.includes(v)&&b.classList.add("ai-timed-rotation"))})})}))}else if(b.hasAttribute("data-shares"))for(f=JSON.parse(atob(b.dataset.shares)),a=Math.round(100*Math.random()),c=0;c<f.length&&(k=c,0>f[c]||!(a<=f[c]));c++);else f=b.classList.contains("ai-unique"),a=new Date,f?("number"!=typeof ai_rotation_seed&&(ai_rotation_seed= (Math.floor(1E3*Math.random())+a.getMilliseconds())%e.length),f=ai_rotation_seed,f>e.length&&(f%=e.length),a=parseInt(b.dataset.counter),a<=e.length?(k=parseInt(f+a-1),k>=e.length&&(k-=e.length)):k=e.length):(k=Math.floor(Math.random()*e.length),a.getMilliseconds()%2&&(k=e.length-k-1));if(b.classList.contains("ai-rotation-scheduling"))for(k=-1,f=0;f<e.length;f++)if(a=e[f],a.hasAttribute("data-scheduling")){c=b64d(a.dataset.scheduling);a=!0;0==c.indexOf("^")&&(a=!1,c=c.substring(1));var q=c.split("="), m=-1!=c.indexOf("%")?q[0].split("%"):[q[0]];c=m[0].trim().toLowerCase();m="undefined"!=typeof m[1]?m[1].trim():0;q=q[1].replace(" ","");var n=(new Date).getTime();n=new Date(n);var l=0;switch(c){case "s":l=n.getSeconds();break;case "i":l=n.getMinutes();break;case "h":l=n.getHours();break;case "d":l=n.getDate();break;case "m":l=n.getMonth();break;case "y":l=n.getFullYear();break;case "w":l=n.getDay(),l=0==l?6:l-1}c=0!=m?l%m:l;m=q.split(",");q=!a;for(n=0;n<m.length;n++)if(l=m[n],-1!=l.indexOf("-")){if(l= l.split("-"),c>=l[0]&&c<=l[1]){q=a;break}}else if(c==l){q=a;break}if(q){k=f;break}}if(!(0>k||k>=e.length)){a=e[k];var z="",w=b.classList.contains("ai-timed-rotation");e.forEach((g,p)=>{g.hasAttribute("data-time")&&(w=!0)});if(a.hasAttribute("data-time")){f=atob(a.dataset.time);if(0==f&&1<e.length){c=k;do{c++;c>=e.length&&(c=0);m=e[c];if(!m.hasAttribute("data-time")){k=c;a=e[k];f=0;break}m=atob(m.dataset.time)}while(0==m&&c!=k);0!=f&&(k=c,a=e[k],f=atob(a.dataset.time))}if(0<f&&(c=k+1,c>=e.length&& (c=0),b.hasAttribute("data-info"))){m=JSON.parse(atob(b.dataset.info))[0];b.setAttribute("data-next",c);var x="div.ai-rotate.ai-"+m;ai_rotation_triggers.includes(x)&&(d=!1);d&&(ai_rotation_triggers.push(x),setTimeout(function(){var g=document.querySelectorAll(x);g.forEach((p,r)=>{p.classList.add("ai-timer")});ai_process_rotation(g)},1E3*f));z=" ("+f+" s)"}}else a.hasAttribute("data-group")||e.forEach((g,p)=>{p!=k&&g.remove()});a.style.display="";a.style.visibility="";a.style.position="";a.style.width= "";a.style.height="";a.style.top="";a.style.left="";a.classList.remove("ai-rotate-hidden");a.classList.remove("ai-rotate-hidden-2");b.style.position="";if(a.hasAttribute("data-code")){e.forEach((g,p)=>{g.innerText=""});d=b64d(a.dataset.code);f=document.createRange();c=!0;try{h=f.createContextualFragment(d)}catch(g){c=!1}a.append(h);D()}f=parseInt(a.dataset.index);var y=b64d(a.dataset.name);d=b.closest(".ai-debug-block");if(null!=d){h=d.querySelectorAll("kbd.ai-option-name");d=d.querySelectorAll(".ai-debug-block"); if(0!=d.length){var A=[];d.forEach((g,p)=>{g.querySelectorAll("kbd.ai-option-name").forEach((r,t)=>{A.push(r)})});h=Array.from(h);h=h.slice(0,h.length-A.length)}0!=h.length&&(separator=h[0].hasAttribute("data-separator")?h[0].dataset.separator:"",h.forEach((g,p)=>{g.innerText=separator+y+z}))}d=!1;a=b.closest(".ai-adb-show");null!=a&&a.hasAttribute("data-ai-tracking")&&(h=JSON.parse(b64d(a.getAttribute("data-ai-tracking"))),"undefined"!==typeof h&&h.constructor===Array&&(h[1]=f,h[3]=y,a.setAttribute("data-ai-tracking", b64e(JSON.stringify(h))),a.classList.add("ai-track"),w&&ai_tracking_finished&&a.classList.add("ai-no-pageview"),d=!0));d||(d=b.closest("div[data-ai]"),null!=d&&d.hasAttribute("data-ai")&&(h=JSON.parse(b64d(d.getAttribute("data-ai"))),"undefined"!==typeof h&&h.constructor===Array&&(h[1]=f,h[3]=y,d.setAttribute("data-ai",b64e(JSON.stringify(h))),d.classList.add("ai-track"),w&&ai_tracking_finished&&d.classList.add("ai-no-pageview"))))}}};ai_process_rotations=function(){document.querySelectorAll("div.ai-rotate").forEach((b, d)=>{ai_process_rotation(b)})};function B(){document.querySelectorAll("div.ai-rotate.ai-rotation-groups").forEach((b,d)=>{b.classList.add("ai-timer");ai_process_rotation(b)})}ai_process_rotations_in_element=function(b){null!=b&&b.querySelectorAll("div.ai-rotate").forEach((d,e)=>{ai_process_rotation(d)})};(function(b){"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?b():document.addEventListener("DOMContentLoaded",b)})(function(){setTimeout(function(){ai_process_rotations()}, 10)});ai_process_elements_active=!1;function D(){ai_process_elements_active||setTimeout(function(){ai_process_elements_active=!1;"function"==typeof ai_process_rotations&&ai_process_rotations();"function"==typeof ai_process_lists&&ai_process_lists();"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses();"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks();"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks();"function"==typeof ai_process_impressions&&1== ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)},5);ai_process_elements_active=!0}}; ;!function(a,b){a(function(){"use strict";function a(a,b){return null!=a&&null!=b&&a.toLowerCase()===b.toLowerCase()}function c(a,b){var c,d,e=a.length;if(!e||!b)return!1;for(c=b.toLowerCase(),d=0;d<e;++d)if(c===a[d].toLowerCase())return!0;return!1}function d(a){for(var b in a)i.call(a,b)&&(a[b]=new RegExp(a[b],"i"))}function e(a){return(a||"").substr(0,500)}function f(a,b){this.ua=e(a),this._cache={},this.maxPhoneWidth=b||600}var g={};g.mobileDetectRules={phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",Pixel:"; \\bPixel\\b",HTC:"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",Nexus:"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",Dell:"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",Motorola:"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",Asus:"Asus.*Galaxy|PadFone.*Mobile",Xiaomi:"^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",GalapadTablet:"Android [0-9.]+; [a-z-]+; \\bG1\\b",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",iPadOS:"CPU OS 13",SailfishOS:"Sailfish",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW"},uas:{Chrome:"\\bCrMo\\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?",Dolfin:"\\bDolfin\\b",Opera:"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+",Skyfire:"Skyfire",Edge:"\\bEdgiOS\\b|Mobile Safari/[.0-9]* Edge",IE:"IEMobile|MSIEMobile",Firefox:"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",Safari:"Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",WeChat:"\\bMicroMessenger\\b",UCBrowser:"UC.*Browser|UCWEB",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon"},props:{Mobile:"Mobile/[VER]",Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",Edge:"Edge/[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","Trident/[0-9.]+;.*rv:[VER]"],NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]",Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]"],"Opera Mini":"Opera Mini/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",SailfishBrowser:"SailfishBrowser/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",Sailfish:"Sailfish [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]","Windows NT":"Windows NT [VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"]},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700"}},g.detectMobileBrowsers={fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i, shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,tabletPattern:/android|ipad|playbook|silk/i};var h,i=Object.prototype.hasOwnProperty;return g.FALLBACK_PHONE="UnknownPhone",g.FALLBACK_TABLET="UnknownTablet",g.FALLBACK_MOBILE="UnknownMobile",h="isArray"in Array?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},function(){var a,b,c,e,f,j,k=g.mobileDetectRules;for(a in k.props)if(i.call(k.props,a)){for(b=k.props[a],h(b)||(b=[b]),f=b.length,e=0;e<f;++e)c=b[e],j=c.indexOf("[VER]"),j>=0&&(c=c.substring(0,j)+"([\\w._\\+]+)"+c.substring(j+5)),b[e]=new RegExp(c,"i");k.props[a]=b}d(k.oss),d(k.phones),d(k.tablets),d(k.uas),d(k.utils),k.oss0={WindowsPhoneOS:k.oss.WindowsPhoneOS,WindowsMobileOS:k.oss.WindowsMobileOS}}(),g.findMatch=function(a,b){for(var c in a)if(i.call(a,c)&&a[c].test(b))return c;return null},g.findMatches=function(a,b){var c=[];for(var d in a)i.call(a,d)&&a[d].test(b)&&c.push(d);return c},g.getVersionStr=function(a,b){var c,d,e,f,h=g.mobileDetectRules.props;if(i.call(h,a))for(c=h[a],e=c.length,d=0;d<e;++d)if(f=c[d].exec(b),null!==f)return f[1];return null},g.getVersion=function(a,b){var c=g.getVersionStr(a,b);return c?g.prepareVersionNo(c):NaN},g.prepareVersionNo=function(a){var b;return b=a.split(/[a-z._ \/\-]/i),1===b.length&&(a=b[0]),b.length>1&&(a=b[0]+".",b.shift(),a+=b.join("")),Number(a)},g.isMobileFallback=function(a){return g.detectMobileBrowsers.fullPattern.test(a)||g.detectMobileBrowsers.shortPattern.test(a.substr(0,4))},g.isTabletFallback=function(a){return g.detectMobileBrowsers.tabletPattern.test(a)},g.prepareDetectionCache=function(a,c,d){if(a.mobile===b){var e,h,i;return(h=g.findMatch(g.mobileDetectRules.tablets,c))?(a.mobile=a.tablet=h,void(a.phone=null)):(e=g.findMatch(g.mobileDetectRules.phones,c))?(a.mobile=a.phone=e,void(a.tablet=null)):void(g.isMobileFallback(c)?(i=f.isPhoneSized(d),i===b?(a.mobile=g.FALLBACK_MOBILE,a.tablet=a.phone=null):i?(a.mobile=a.phone=g.FALLBACK_PHONE,a.tablet=null):(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null)):g.isTabletFallback(c)?(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null):a.mobile=a.tablet=a.phone=null)}},g.mobileGrade=function(a){var b=null!==a.mobile();return a.os("iOS")&&a.version("iPad")>=4.3||a.os("iOS")&&a.version("iPhone")>=3.1||a.os("iOS")&&a.version("iPod")>=3.1||a.version("Android")>2.1&&a.is("Webkit")||a.version("Windows Phone OS")>=7||a.is("BlackBerry")&&a.version("BlackBerry")>=6||a.match("Playbook.*Tablet")||a.version("webOS")>=1.4&&a.match("Palm|Pre|Pixi")||a.match("hp.*TouchPad")||a.is("Firefox")&&a.version("Firefox")>=12||a.is("Chrome")&&a.is("AndroidOS")&&a.version("Android")>=4||a.is("Skyfire")&&a.version("Skyfire")>=4.1&&a.is("AndroidOS")&&a.version("Android")>=2.3||a.is("Opera")&&a.version("Opera Mobi")>11&&a.is("AndroidOS")||a.is("MeeGoOS")||a.is("Tizen")||a.is("Dolfin")&&a.version("Bada")>=2||(a.is("UC Browser")||a.is("Dolfin"))&&a.version("Android")>=2.3||a.match("Kindle Fire")||a.is("Kindle")&&a.version("Kindle")>=3||a.is("AndroidOS")&&a.is("NookTablet")||a.version("Chrome")>=11&&!b||a.version("Safari")>=5&&!b||a.version("Firefox")>=4&&!b||a.version("MSIE")>=7&&!b||a.version("Opera")>=10&&!b?"A":a.os("iOS")&&a.version("iPad")<4.3||a.os("iOS")&&a.version("iPhone")<3.1||a.os("iOS")&&a.version("iPod")<3.1||a.is("Blackberry")&&a.version("BlackBerry")>=5&&a.version("BlackBerry")<6||a.version("Opera Mini")>=5&&a.version("Opera Mini")<=6.5&&(a.version("Android")>=2.3||a.is("iOS"))||a.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||a.version("Opera Mobi")>=11&&a.is("SymbianOS")?"B":(a.version("BlackBerry")<5||a.match("MSIEMobile|Windows CE.*Mobile")||a.version("Windows Mobile")<=5.2,"C")},g.detectOS=function(a){return g.findMatch(g.mobileDetectRules.oss0,a)||g.findMatch(g.mobileDetectRules.oss,a)},g.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height},f.prototype={constructor:f,mobile:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.mobile},phone:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.phone},tablet:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.tablet},userAgent:function(){return this._cache.userAgent===b&&(this._cache.userAgent=g.findMatch(g.mobileDetectRules.uas,this.ua)),this._cache.userAgent},userAgents:function(){return this._cache.userAgents===b&&(this._cache.userAgents=g.findMatches(g.mobileDetectRules.uas,this.ua)),this._cache.userAgents},os:function(){return this._cache.os===b&&(this._cache.os=g.detectOS(this.ua)),this._cache.os},version:function(a){return g.getVersion(a,this.ua)},versionStr:function(a){return g.getVersionStr(a,this.ua)},is:function(b){return c(this.userAgents(),b)||a(b,this.os())||a(b,this.phone())||a(b,this.tablet())||c(g.findMatches(g.mobileDetectRules.utils,this.ua),b)},match:function(a){return a instanceof RegExp||(a=new RegExp(a,"i")),a.test(this.ua)},isPhoneSized:function(a){return f.isPhoneSized(a||this.maxPhoneWidth)},mobileGrade:function(){return this._cache.grade===b&&(this._cache.grade=g.mobileGrade(this)),this._cache.grade}},"undefined"!=typeof window&&window.screen?f.isPhoneSized=function(a){return a<0?b:g.getDeviceSmallerSide()<=a}:f.isPhoneSized=function(){},f._impl=g,f.version="1.4.5 2021-03-13",f})}(function(a){if("undefined"!=typeof module&&module.exports)return function(a){module.exports=a()};if("function"==typeof define&&define.amd)return define;if("undefined"!=typeof window)return function(a){window.MobileDetect=a()};throw new Error("unknown environment")}());var ai_lists=!0,ai_block_class_def="code-block"; if("undefined"!=typeof ai_lists){function X(b,e){for(var n=[];b=b.previousElementSibling;)("undefined"==typeof e||b.matches(e))&&n.push(b);return n}function fa(b,e){for(var n=[];b=b.nextElementSibling;)("undefined"==typeof e||b.matches(e))&&n.push(b);return n}var host_regexp=RegExp(":\\/\\/(.[^/:]+)","i");function ha(b){b=b.match(host_regexp);return null!=b&&1<b.length&&"string"===typeof b[1]&&0<b[1].length?b[1].toLowerCase():null}function Q(b){return b.includes(":")?(b=b.split(":"),1E3*(3600*parseInt(b[0])+ 60*parseInt(b[1])+parseInt(b[2]))):null}function Y(b){try{var e=Date.parse(b);isNaN(e)&&(e=null)}catch(n){e=null}if(null==e&&b.includes(" ")){b=b.split(" ");try{e=Date.parse(b[0]),e+=Q(b[1]),isNaN(e)&&(e=null)}catch(n){e=null}}return e}function Z(){null==document.querySelector("#ai-iab-tcf-bar")&&null==document.querySelector(".ai-list-manual")||"function"!=typeof __tcfapi||"function"!=typeof ai_load_blocks||"undefined"!=typeof ai_iab_tcf_callback_installed||(__tcfapi("addEventListener",2,function(b, e){e&&"useractioncomplete"===b.eventStatus&&(ai_tcData=b,ai_load_blocks(),b=document.querySelector("#ai-iab-tcf-status"),null!=b&&(b.textContent="IAB TCF 2.0 DATA LOADED"),b=document.querySelector("#ai-iab-tcf-bar"),null!=b&&(b.classList.remove("status-error"),b.classList.add("status-ok")))}),ai_iab_tcf_callback_installed=!0)}ai_process_lists=function(b){function e(a,c,k){if(0==a.length){if("!@!"==k)return!0;c!=k&&("true"==k.toLowerCase()?k=!0:"false"==k.toLowerCase()&&(k=!1));return c==k}if("object"!= typeof c&&"array"!=typeof c)return!1;var l=a[0];a=a.slice(1);if("*"==l)for(let [,p]of Object.entries(c)){if(e(a,p,k))return!0}else if(l in c)return e(a,c[l],k);return!1}function n(a,c,k){if("object"!=typeof a||-1==c.indexOf("["))return!1;c=c.replace(/]| /gi,"").split("[");return e(c,a,k)}function z(){if("function"==typeof __tcfapi){var a=document.querySelector("#ai-iab-tcf-status"),c=document.querySelector("#ai-iab-tcf-bar");null!=a&&(a.textContent="IAB TCF 2.0 DETECTED");__tcfapi("getTCData",2,function(k, l){l?(null!=c&&(c.classList.remove("status-error"),c.classList.add("status-ok")),"tcloaded"==k.eventStatus||"useractioncomplete"==k.eventStatus)?(ai_tcData=k,k.gdprApplies?null!=a&&(a.textContent="IAB TCF 2.0 DATA LOADED"):null!=a&&(a.textContent="IAB TCF 2.0 GDPR DOES NOT APPLY"),null!=c&&(c.classList.remove("status-error"),c.classList.add("status-ok")),setTimeout(function(){ai_process_lists()},10)):"cmpuishown"==k.eventStatus&&(ai_cmpuishown=!0,null!=a&&(a.textContent="IAB TCF 2.0 CMP UI SHOWN"), null!=c&&(c.classList.remove("status-error"),c.classList.add("status-ok"))):(null!=a&&(a.textContent="IAB TCF 2.0 __tcfapi getTCData failed"),null!=c&&(c.classList.remove("status-ok"),c.classList.add("status-error")))})}}function C(a){"function"==typeof __tcfapi?(ai_tcfapi_found=!0,"undefined"==typeof ai_iab_tcf_callback_installed&&Z(),"undefined"==typeof ai_tcData_requested&&(ai_tcData_requested=!0,z(),cookies_need_tcData=!0)):a&&("undefined"==typeof ai_tcfapi_found&&(ai_tcfapi_found=!1,setTimeout(function(){ai_process_lists()}, 10)),a=document.querySelector("#ai-iab-tcf-status"),null!=a&&(a.textContent="IAB TCF 2.0 MISSING: __tcfapi function not found"),a=document.querySelector("#ai-iab-tcf-bar"),null!=a&&(a.classList.remove("status-ok"),a.classList.add("status-error")))}if(null==b)b=document.querySelectorAll("div.ai-list-data, meta.ai-list-data");else{window.jQuery&&window.jQuery.fn&&b instanceof jQuery&&(b=Array.prototype.slice.call(b));var x=[];b.forEach((a,c)=>{a.matches(".ai-list-data")?x.push(a):(a=a.querySelectorAll(".ai-list-data"), a.length&&a.forEach((k,l)=>{x.push(k)}))});b=x}if(b.length){b.forEach((a,c)=>{a.classList.remove("ai-list-data")});var L=ia(window.location.search);if(null!=L.referrer)var A=L.referrer;else A=document.referrer,""!=A&&(A=ha(A));var R=window.navigator.userAgent,S=R.toLowerCase(),aa=navigator.language,M=aa.toLowerCase();if("undefined"!==typeof MobileDetect)var ba=new MobileDetect(R);b.forEach((a,c)=>{var k=document.cookie.split(";");k.forEach(function(f,h){k[h]=f.trim()});c=a.closest("div."+ai_block_class_def); var l=!0;if(a.hasAttribute("referer-list")){var p=a.getAttribute("referer-list");p=b64d(p).split(",");var v=a.getAttribute("referer-list-type"),E=!1;p.every((f,h)=>{f=f.trim();if(""==f)return!0;if("*"==f.charAt(0))if("*"==f.charAt(f.length-1)){if(f=f.substr(1,f.length-2),-1!=A.indexOf(f))return E=!0,!1}else{if(f=f.substr(1),A.substr(-f.length)==f)return E=!0,!1}else if("*"==f.charAt(f.length-1)){if(f=f.substr(0,f.length-1),0==A.indexOf(f))return E=!0,!1}else if("#"==f){if(""==A)return E=!0,!1}else if(f== A)return E=!0,!1;return!0});var r=E;switch(v){case "B":r&&(l=!1);break;case "W":r||(l=!1)}}if(l&&a.hasAttribute("client-list")&&"undefined"!==typeof ba)switch(p=a.getAttribute("client-list"),p=b64d(p).split(","),v=a.getAttribute("client-list-type"),r=!1,p.every((f,h)=>{if(""==f.trim())return!0;f.split("&&").every((d,t)=>{t=!0;var w=!1;for(d=d.trim();"!!"==d.substring(0,2);)t=!t,d=d.substring(2);"language:"==d.substring(0,9)&&(w=!0,d=d.substring(9).toLowerCase());var q=!1;w?"*"==d.charAt(0)?"*"==d.charAt(d.length- 1)?(d=d.substr(1,d.length-2).toLowerCase(),-1!=M.indexOf(d)&&(q=!0)):(d=d.substr(1).toLowerCase(),M.substr(-d.length)==d&&(q=!0)):"*"==d.charAt(d.length-1)?(d=d.substr(0,d.length-1).toLowerCase(),0==M.indexOf(d)&&(q=!0)):d==M&&(q=!0):"*"==d.charAt(0)?"*"==d.charAt(d.length-1)?(d=d.substr(1,d.length-2).toLowerCase(),-1!=S.indexOf(d)&&(q=!0)):(d=d.substr(1).toLowerCase(),S.substr(-d.length)==d&&(q=!0)):"*"==d.charAt(d.length-1)?(d=d.substr(0,d.length-1).toLowerCase(),0==S.indexOf(d)&&(q=!0)):ba.is(d)&& (q=!0);return(r=q?t:!t)?!0:!1});return r?!1:!0}),v){case "B":r&&(l=!1);break;case "W":r||(l=!1)}var N=p=!1;for(v=1;2>=v;v++)if(l){switch(v){case 1:var g=a.getAttribute("cookie-list");break;case 2:g=a.getAttribute("parameter-list")}if(null!=g){g=b64d(g);switch(v){case 1:var y=a.getAttribute("cookie-list-type");break;case 2:y=a.getAttribute("parameter-list-type")}g=g.replace("tcf-gdpr","tcf-v2[gdprApplies]=true");g=g.replace("tcf-no-gdpr","tcf-v2[gdprApplies]=false");g=g.replace("tcf-google","tcf-v2[vendor][consents][755]=true && tcf-v2[purpose][consents][1]=true"); g=g.replace("tcf-no-google","!!tcf-v2[vendor][consents][755]");g=g.replace("tcf-media.net","tcf-v2[vendor][consents][142]=true && tcf-v2[purpose][consents][1]=true");g=g.replace("tcf-no-media.net","!!tcf-v2[vendor][consents][142]");g=g.replace("tcf-amazon","tcf-v2[vendor][consents][793]=true && tcf-v2[purpose][consents][1]=true");g=g.replace("tcf-no-amazon","!!tcf-v2[vendor][consents][793]");g=g.replace("tcf-ezoic","tcf-v2[vendor][consents][347]=true && tcf-v2[purpose][consents][1]=true");g=g.replace("tcf-no-ezoic", "!!tcf-v2[vendor][consents][347]");var F=g.split(","),ca=[];k.forEach(function(f){f=f.split("=");try{var h=JSON.parse(decodeURIComponent(f[1]))}catch(d){h=decodeURIComponent(f[1])}ca[f[0]]=h});r=!1;var I=a;F.every((f,h)=>{f.split("&&").every((d,t)=>{t=!0;for(d=d.trim();"!!"==d.substring(0,2);)t=!t,d=d.substring(2);var w=d,q="!@!",T="tcf-v2"==w&&"!@!"==q,B=-1!=d.indexOf("["),J=0==d.indexOf("tcf-v2")||0==d.indexOf("euconsent-v2");J=J&&(B||T);-1!=d.indexOf("=")&&(q=d.split("="),w=q[0],q=q[1],B=-1!=w.indexOf("["), J=(J=0==w.indexOf("tcf-v2")||0==w.indexOf("euconsent-v2"))&&(B||T));if(J)document.querySelector("#ai-iab-tcf-status"),B=document.querySelector("#ai-iab-tcf-bar"),null!=B&&(B.style.display="block"),T&&"boolean"==typeof ai_tcfapi_found?r=ai_tcfapi_found?t:!t:"object"==typeof ai_tcData?(null!=B&&(B.classList.remove("status-error"),B.classList.add("status-ok")),w=w.replace(/]| /gi,"").split("["),w.shift(),r=(w=e(w,ai_tcData,q))?t:!t):"undefined"==typeof ai_tcfapi_found&&(I.classList.add("ai-list-data"), N=!0,"function"==typeof __tcfapi?C(!1):"undefined"==typeof ai_tcData_retrying&&(ai_tcData_retrying=!0,setTimeout(function(){"function"==typeof __tcfapi?C(!1):setTimeout(function(){"function"==typeof __tcfapi?C(!1):setTimeout(function(){C(!0)},3E3)},1E3)},600)));else if(B)r=(w=n(ca,w,q))?t:!t;else{var U=!1;"!@!"==q?k.every(function(ja){return ja.split("=")[0]==d?(U=!0,!1):!0}):U=-1!=k.indexOf(d);r=U?t:!t}return r?!0:!1});return r?!1:!0});r&&(N=!1,I.classList.remove("ai-list-data"));switch(y){case "B":r&& (l=!1);break;case "W":r||(l=!1)}}}a.classList.contains("ai-list-manual")&&(l?(I.classList.remove("ai-list-data"),I.classList.remove("ai-list-manual")):(p=!0,I.classList.add("ai-list-data")));(l||!p&&!N)&&a.hasAttribute("data-debug-info")&&(g=document.querySelector("."+a.dataset.debugInfo),null!=g&&(g=g.parentElement,null!=g&&g.classList.contains("ai-debug-info")&&g.remove()));y=X(a,".ai-debug-bar.ai-debug-lists");var ka=""==A?"#":A;0!=y.length&&y.forEach((f,h)=>{h=f.querySelector(".ai-debug-name.ai-list-info"); null!=h&&(h.textContent=ka,h.title=R+"\n"+aa);h=f.querySelector(".ai-debug-name.ai-list-status");null!=h&&(h.textContent=l?ai_front.visible:ai_front.hidden)});g=!1;if(l&&a.hasAttribute("scheduling-start")&&a.hasAttribute("scheduling-end")&&a.hasAttribute("scheduling-days")){var u=a.getAttribute("scheduling-start");v=a.getAttribute("scheduling-end");y=a.getAttribute("scheduling-days");g=!0;u=b64d(u);F=b64d(v);var V=parseInt(a.getAttribute("scheduling-fallback")),O=parseInt(a.getAttribute("gmt"));if(u.includes("-")|| F.includes("-"))P=Y(u)+O,K=Y(F)+O;else var P=Q(u),K=Q(F);P??=0;K??=0;var W=b64d(y).split(",");y=a.getAttribute("scheduling-type");var D=(new Date).getTime()+O;v=new Date(D);var G=v.getDay();0==G?G=6:G--;u.includes("-")||F.includes("-")||(u=(new Date(v.getFullYear(),v.getMonth(),v.getDate())).getTime()+O,D-=u,0>D&&(D+=864E5));scheduling_start_date_ok=D>=P;scheduling_end_date_ok=0==K||D<K;u=scheduling_start_date_ok&&scheduling_end_date_ok&&W.includes(G.toString());switch(y){case "B":u=!u}u||(l=!1); var la=v.toISOString().split(".")[0].replace("T"," ");y=X(a,".ai-debug-bar.ai-debug-scheduling");0!=y.length&&y.forEach((f,h)=>{h=f.querySelector(".ai-debug-name.ai-scheduling-info");null!=h&&(h.textContent=la+" "+G+" current_time: "+Math.floor(D.toString()/1E3)+" start_date:"+Math.floor(P/1E3).toString()+"=>"+scheduling_start_date_ok.toString()+" end_date:"+Math.floor(K/1E3).toString()+"=>"+scheduling_end_date_ok.toString()+" days:"+W.toString()+"=>"+W.includes(G.toString()).toString());h=f.querySelector(".ai-debug-name.ai-scheduling-status"); null!=h&&(h.textContent=l?ai_front.visible:ai_front.hidden);l||0==V||(f.classList.remove("ai-debug-scheduling"),f.classList.add("ai-debug-fallback"),h=f.querySelector(".ai-debug-name.ai-scheduling-status"),null!=h&&(h.textContent=ai_front.fallback+" = "+V))})}if(p||!l&&N)return!0;a.style.visibility="";a.style.position="";a.style.width="";a.style.height="";a.style.zIndex="";if(l){if(null!=c&&(c.style.visibility="",c.classList.contains("ai-remove-position")&&(c.style.position="")),a.hasAttribute("data-code")){p= b64d(a.dataset.code);u=document.createRange();g=!0;try{H=u.createContextualFragment(p)}catch(f){g=!1}g&&(null!=a.closest("head")?(a.parentNode.insertBefore(H,a.nextSibling),a.remove()):a.append(H));da(a)}}else if(g&&!u&&0!=V){null!=c&&(c.style.visibility="",c.classList.contains("ai-remove-position")&&c.css({position:""}));p=fa(a,".ai-fallback");0!=p.length&&p.forEach((f,h)=>{f.classList.remove("ai-fallback")});if(a.hasAttribute("data-fallback-code")){p=b64d(a.dataset.fallbackCode);u=document.createRange(); g=!0;try{var H=u.createContextualFragment(p)}catch(f){g=!1}g&&a.append(H);da(a)}else a.style.display="none",null!=c&&null==c.querySelector(".ai-debug-block")&&c.hasAttribute("style")&&-1==c.getAttribute("style").indexOf("height:")&&(c.style.display="none");null!=c&&c.hasAttribute("data-ai")&&(c.getAttribute("data-ai"),a.hasAttribute("fallback-tracking")&&(H=a.getAttribute("fallback-tracking"),c.setAttribute("data-ai-"+a.getAttribute("fallback_level"),H)))}else a.style.display="none",null!=c&&(c.removeAttribute("data-ai"), c.classList.remove("ai-track"),null!=c.querySelector(".ai-debug-block")?(c.style.visibility="",c.classList.remove("ai-close"),c.classList.contains("ai-remove-position")&&(c.style.position="")):c.hasAttribute("style")&&-1==c.getAttribute("style").indexOf("height:")&&(c.style.display="none"));a.setAttribute("data-code","");a.setAttribute("data-fallback-code","");null!=c&&c.classList.remove("ai-list-block")})}};function ea(b){b=`; ${document.cookie}`.split(`; ${b}=`);if(2===b.length)return b.pop().split(";").shift()} function ma(b,e,n){ea(b)&&(document.cookie=b+"="+(e?";path="+e:"")+(n?";domain="+n:"")+";expires=Thu, 01 Jan 1970 00:00:01 GMT")}function m(b){ea(b)&&(ma(b,"/",window.location.hostname),document.cookie=b+"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;")}(function(b){"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?b():document.addEventListener("DOMContentLoaded",b)})(function(){setTimeout(function(){ai_process_lists();setTimeout(function(){Z(); if("function"==typeof ai_load_blocks){document.addEventListener("cmplzEnableScripts",e);document.addEventListener("cmplz_event_marketing",e);function e(n){"cmplzEnableScripts"!=n.type&&"all"!==n.consentLevel||ai_load_blocks()}document.addEventListener("cmplz_enable_category",function(n){"marketing"===n.detail.category&&ai_load_blocks()})}},50);var b=document.querySelector(".ai-debug-page-type");null!=b&&b.addEventListener("dblclick",e=>{e=document.querySelector("#ai-iab-tcf-status");null!=e&&(e.textContent= "CONSENT COOKIES");e=document.querySelector("#ai-iab-tcf-bar");null!=e&&(e.style.display="block")});b=document.querySelector("#ai-iab-tcf-bar");null!=b&&b.addEventListener("click",e=>{m("euconsent-v2");m("__lxG__consent__v2");m("__lxG__consent__v2_daisybit");m("__lxG__consent__v2_gdaisybit");m("CookieLawInfoConsent");m("cookielawinfo-checkbox-advertisement");m("cookielawinfo-checkbox-analytics");m("cookielawinfo-checkbox-necessary");m("complianz_policy_id");m("complianz_consent_status");m("cmplz_marketing"); m("cmplz_consent_status");m("cmplz_preferences");m("cmplz_statistics-anonymous");m("cmplz_choice");m("cmplz_banner-status");m("cmplz_functional");m("cmplz_policy_id");m("cmplz_statistics");m("moove_gdpr_popup");m("real_cookie_banner-blog:1-tcf");m("real_cookie_banner-blog:1");e=document.querySelector("#ai-iab-tcf-status");null!=e&&(e.textContent="CONSENT COOKIES DELETED")})},5)});function da(b){setTimeout(function(){"function"==typeof ai_process_rotations_in_element&&ai_process_rotations_in_element(b); "function"==typeof ai_process_lists&&ai_process_lists();"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses();"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks();"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks(b);"function"==typeof ai_process_impressions&&1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)}, 5)}function ia(b){var e=b?b.split("?")[1]:window.location.search.slice(1);b={};if(e){e=e.split("#")[0];e=e.split("&");for(var n=0;n<e.length;n++){var z=e[n].split("="),C=void 0,x=z[0].replace(/\[\d*\]/,function(L){C=L.slice(1,-1);return""});z="undefined"===typeof z[1]?"":z[1];x=x.toLowerCase();z=z.toLowerCase();b[x]?("string"===typeof b[x]&&(b[x]=[b[x]]),"undefined"===typeof C?b[x].push(z):b[x][C]=z):b[x]=z}}return b}}; ai_js_code = true; </script> </body> </html> <!-- Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com --><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9cd62edad9a752f1',t:'MTc3MTAwNTE4Mw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>