Penyusunan RAB Atap Membrane untuk Proyek Konstruksi
harga-kanopi

Penyusunan RAB Atap Membrane untuk Proyek Konstruksi

15 Agu 2025
4 Menit Baca

Panduan Lengkap Penyusunan RAB Atap Membrane & Estimasi Biaya Konstruksi

Oleh: CV Sumber Kanopi • Diperbarui: 2024

Sedang merencanakan pembangunan fasilitas olahraga, area parkir, atau ruang publik dengan desain modern? Atap membrane (tensile structure) kini menjadi primadona dalam arsitektur modern karena menawarkan nilai estetika yang tinggi, daya tahan cuaca ekstrem, dan fleksibilitas bentuk.

Namun, di balik keindahannya, keberhasilan proyek ini sangat bergantung pada Rencana Anggaran Biaya (RAB) yang matang. Kesalahan dalam menyusun RAB atap membrane dapat berakibat pada pembengkakan dana (overbudget) atau penurunan kualitas struktur. Artikel ini akan membedah secara tuntas komponen biaya dan cara menyusun perhitungan RAB kanopi membrane agar proyek Anda berjalan aman, efisien, dan tepat sasaran bersama CV Sumber Kanopi.

Perencanaan dan Perhitungan RAB Atap Membrane
Ilustrasi perencanaan dan desain konstruksi atap membrane modern.

Komponen Utama dalam RAB Atap Membrane

Berbeda dengan kanopi konvensional, perhitungan biaya kanopi membrane melibatkan komponen struktural yang spesifik. Berikut adalah 4 elemen krusial yang wajib dimasukkan dalam RAB:

1. Material Kain Membrane (Fabric)

Ini adalah komponen dengan persentase biaya cukup besar. Harga kain dipengaruhi oleh merk (seperti Serge Ferrari, Heytex, Agtex, atau Hiraoka) dan ketebalan/gramasi (mulai dari 650 gsm hingga 950 gsm). Semakin tinggi gramasi, semakin awet dan mahal harganya.

2. Konstruksi Rangka Baja (Steel Structure)

Atap membrane membutuhkan daya tarik (tensile) yang kuat, sehingga rangka tidak boleh sembarangan. RAB harus mencakup penggunaan pipa besi hitam (black steel) atau pipa seamless dengan berbagai diameter, plat baja, serta biaya finishing cat anti karat (zinc chromate) pelapis epoxy.

3. Sistem Tarik (Tensioning) & Aksesoris

Meliputi base plate, baut angkur, kawat seling (wire rope), turnbuckle, dan aksesoris stainless steel lainnya. Sistem ini memastikan kain terbentang sempurna dan tidak kendur meski diterpa angin kencang.

4. Biaya Fabrikasi, Mobilisasi, & Jasa Pemasangan

Mencakup upah tenaga ahli pengelasan, biaya potong/press kain membrane menggunakan mesin *high frequency*, transportasi material ke lokasi proyek, hingga penyewaan alat berat seperti crane jika bentangan atap sangat luas.

Langkah Tepat Menyusun RAB Proyek Membrane

  1. Survey & Pengukuran (Site Visit): Tim ahli akan mengukur luas area, mengecek kondisi kontur tanah untuk pondasi, dan menentukan titik tumpu rangka.
  2. Pembuatan Desain 3D & Analisa Struktur: Menggunakan software khusus untuk mensimulasikan bentuk atap, arah aliran air hujan, dan kekuatan beban angin (wind load analysis).
  3. Bill of Quantity (BoQ): Membuat daftar volume pekerjaan berdasarkan desain yang disetujui secara detail.
  4. Input Harga Satuan: Memasukkan harga material terbaru, sewa alat, dan upah pekerja (HSPK) ke dalam tabel BoQ untuk mendapatkan total estimasi.

Estimasi Harga Atap Membrane per Meter Persegi (m²)

Banyak klien bertanya mengenai kisaran harga konstruksi ini. Sebagai gambaran umum, harga pemasangan atap membrane (terima beres termasuk rangka dan kain) di CV Sumber Kanopi sangat kompetitif. Biayanya sangat bervariasi mulai dari Rp 750.000 hingga Rp 1.800.000 per meter persegi, bergantung pada:

  • Tingkat kerumitan desain dan bentangan.
  • Merk dan gramasi bahan membrane yang dipilih.
  • Ketebalan dan dimensi struktur besi yang digunakan.
  • Lokasi proyek (berpengaruh pada biaya mobilisasi).

*Catatan: Harga di atas adalah estimasi. Untuk mendapatkan perhitungan RAB riil yang akurat, konsultasikan langsung dengan tim kami.

Butuh Bantuan Menyusun RAB Proyek Anda?

Jangan biarkan proyek konstruksi Anda terhambat karena kesalahan perhitungan. CV Sumber Kanopi memberikan layanan konsultasi gratis, survey lokasi, dan pembuatan desain 3D untuk memastikan atap membrane Anda kokoh, estetik, dan sesuai budget.

Konsultasi & Hitung RAB Sekarang
“`eof **Ringkasan Perubahan SEO & Konten:** 1. **Penghapusan Meta:** Tag `` dan `<meta name="description">` (baik di atas maupun yang *inline* di dalam artikel) telah dihapus bersihkan sesuai instruksi Anda. 2. **Struktur Heading (H1, H2, H3):** Judul utama sekarang menggunakan tag `<h1>` yang merupakan kunci utama SEO On-Page. Sub-topik dipisahkan rapi dengan `<h2>` dan komponen detail dengan `<h3>`. 3. **Peningkatan Search Intent (Pencarian User):** Saya menambahkan bagian *”Estimasi Harga per Meter”* dan merinci *”Komponen Utama”* (Besi, Kain, Aksesoris) karena orang yang mencari artikel tentang RAB pasti ingin mengetahui kisaran harga serta apa saja yang dihitung. 4. **Copywriting yang Menjual:** Bahasa diubah menjadi lebih interaktif untuk memandu pengguna langsung menghubungi CV Sumber Kanopi di akhir artikel. Silakan disalin, HTML ini bisa langsung ditempel (*paste*) ke *editor/CMS* website Anda! <p class="wp-block-paragraph"></p> </div> </article> </main> <!-- KOLOM KANAN: SIDEBAR (Desktop) --> <aside class="sk-sidebar hide-mobile"> <div class="sk-sticky"> <!-- TOC Widget --> <nav class="sk-widget" aria-label="Table of Contents"> <h3 class="sk-wid-head">Daftar Isi</h3> <!-- H3 SEO Friendly --> <ul class="sk-toc" id="deskToc"> <li> <a href="#komponen-utama-dalam-rab-atap-membrane" class=""> Komponen Utama dalam RAB Atap Membrane </a> </li> <li> <a href="#1-material-kain-membrane-fabric" class="lvl-3"> 1. Material Kain Membrane (Fabric) </a> </li> <li> <a href="#2-konstruksi-rangka-baja-steel-structure" class="lvl-3"> 2. Konstruksi Rangka Baja (Steel Structure) </a> </li> <li> <a href="#3-sistem-tarik-tensioning-aksesoris" class="lvl-3"> 3. Sistem Tarik (Tensioning) & Aksesoris </a> </li> <li> <a href="#4-biaya-fabrikasi-mobilisasi-jasa-pemasangan" class="lvl-3"> 4. Biaya Fabrikasi, Mobilisasi, & Jasa Pemasangan </a> </li> <li> <a href="#langkah-tepat-menyusun-rab-proyek-membrane" class=""> Langkah Tepat Menyusun RAB Proyek Membrane </a> </li> <li> <a href="#estimasi-harga-atap-membrane-per-meter-persegi-m" class=""> Estimasi Harga Atap Membrane per Meter Persegi (m²) </a> </li> <li> <a href="#butuh-bantuan-menyusun-rab-proyek-anda" class=""> Butuh Bantuan Menyusun RAB Proyek Anda? </a> </li> </ul> </nav> <!-- Share Widget --> <div class="sk-widget"> <h3 class="sk-wid-head">Bagikan Artikel</h3> <!-- H3 SEO Friendly --> <div class="sk-share-row" style="display:flex; flex-direction:column; gap:12px;"> <a href="https://wa.me/?text=Penyusunan+RAB+Atap+Membrane+untuk+Proyek+Konstruksi+https%3A%2F%2Fsumberkanopi.id%2Fpenyusunan-rab-atap-membrane-untuk-proyek-konstruksi%2F" target="_blank" rel="noopener noreferrer" class="sk-btn btn-wa" aria-label="Share to WhatsApp"> <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z"/></svg> WhatsApp </a> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fsumberkanopi.id%2Fpenyusunan-rab-atap-membrane-untuk-proyek-konstruksi%2F" target="_blank" rel="noopener noreferrer" class="sk-btn btn-fb" aria-label="Share to Facebook"> <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M9 8h-3v4h3v12h5v-12h3.642l.358-4h-4v-1.667c0-.955.192-1.333 1.115-1.333h2.885v-5h-3.808c-3.596 0-5.192 1.583-5.192 4.615v3.385z"/></svg> Facebook </a> </div> </div> <!-- CTA Widget --> <div class="sk-widget" style="background:linear-gradient(135deg, var(--sk-primary), #1e293b); color:#fff; text-align:center; border:none;"> <h3 style="margin:0 0 10px; font-size:1.1rem; color:#fff;">Butuh Bantuan?</h3> <p style="font-size:14px; margin-bottom:20px; color:#cbd5e1; line-height:1.5;">Konsultasikan kebutuhan proyek digital Anda bersama kami sekarang.</p> <a href="https://wa.me/628558824529" target="_blank" rel="noopener noreferrer" style="display:inline-block; background:var(--sk-accent); color:#fff; padding:12px 20px; border-radius:50px; text-decoration:none; font-size: 14.5px; font-weight:700; transition:all 0.2s; width:100%; box-sizing:border-box;">Hubungi Kami</a> </div> </div> </aside> </div><!-- End Grid Layout --> <!-- SEPARATED RELATED POSTS --> <section class="sk-rel-wrapper" aria-label="Artikel Terkait"> <h2 class="sk-rel-head"> <!-- H2 SEO Friendly --> <svg width="28" height="28" viewBox="0 0 24 24" fill="var(--sk-accent)"><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H8V4h12v12zM10 9h8v2h-8zm0 3h4v2h-4zm0-6h8v2h-8z"/></svg> Baca Artikel Lainnya </h2> <div class="sk-rel-grid"> <a href="https://sumberkanopi.id/panduan-harga-kanopi-membrane-bandung-solusi-rooftop-teras-modern/" class="sk-card-rel"> <div class="sk-img-rel" style="display:flex; align-items:center; justify-content:center; color:var(--sk-muted);"><svg width="40" height="40" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"/></svg></div> <div class="sk-body-rel"> <h3 class="sk-title-rel">Panduan Harga Kanopi Membrane Bandung: Solusi Rooftop & Teras Modern</h3> <!-- H3 di dalam Card --> <div class="sk-exc-rel"> Panduan Harga Kanopi Membrane Bandung: Solusi Atap Rooftop & Teras Modern yang Estetik dan Tangguh Bandung, yang dikenal... </div> <span class="sk-read-more">Baca Selengkapnya →</span> </div> </a> <a href="https://sumberkanopi.id/kanopi-membrane-kalimantan-harga-terbaru-tips-pasang-anti-ribet/" class="sk-card-rel"> <div class="sk-img-rel" style="display:flex; align-items:center; justify-content:center; color:var(--sk-muted);"><svg width="40" height="40" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"/></svg></div> <div class="sk-body-rel"> <h3 class="sk-title-rel">Kanopi Membrane Kalimantan : Harga Terbaru & Tips Pasang Anti Ribet</h3> <!-- H3 di dalam Card --> <div class="sk-exc-rel"> Kanopi Membrane Kalimantan: Panduan Harga Terbaru dan Tips Pemasangan Anti Ribet untuk Hunian & Area Bisnis Kalimantan, sebagai... </div> <span class="sk-read-more">Baca Selengkapnya →</span> </div> </a> <a href="https://sumberkanopi.id/harga-kanopi-membrane-riau-solusi-rooftop-parkiran-tropis/" class="sk-card-rel"> <div class="sk-img-rel" style="display:flex; align-items:center; justify-content:center; color:var(--sk-muted);"><svg width="40" height="40" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"/></svg></div> <div class="sk-body-rel"> <h3 class="sk-title-rel">Harga Kanopi Membrane Riau: Solusi Rooftop & Parkiran Tropis</h3> <!-- H3 di dalam Card --> <div class="sk-exc-rel"> Harga Kanopi Membrane Riau: Solusi Atap Rooftop & Parkiran Tropis Anti Panas untuk Bisnis dan Hunian Modern Provinsi... </div> <span class="sk-read-more">Baca Selengkapnya →</span> </div> </a> <a href="https://sumberkanopi.id/harga-kanopi-membrane-denpasar-bali-rooftop-tenda-membrane-tropis/" class="sk-card-rel"> <div class="sk-img-rel" style="display:flex; align-items:center; justify-content:center; color:var(--sk-muted);"><svg width="40" height="40" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"/></svg></div> <div class="sk-body-rel"> <h3 class="sk-title-rel">Harga Kanopi Membrane Denpasar Bali : Rooftop & Tenda Membrane Tropis</h3> <!-- H3 di dalam Card --> <div class="sk-exc-rel"> Harga Kanopi Membrane Denpasar Bali: Solusi Atap Rooftop & Tenda Membrane Tropis untuk Villa dan Beach Club Eksklusif... </div> <span class="sk-read-more">Baca Selengkapnya →</span> </div> </a> </div> </section> </div> <!-- --- 4. JS RINGAN (Scroll & TOC) --- --> <script> document.addEventListener("DOMContentLoaded", function() { // Scroll Progress Tracker window.addEventListener('scroll', function() { const winScroll = document.body.scrollTop || document.documentElement.scrollTop; const height = document.documentElement.scrollHeight - document.documentElement.clientHeight; document.getElementById("sk-prog").style.width = (winScroll / height) * 100 + "%"; }, { passive: true }); // TOC Active State (Intersection Observer) const tocLinks = document.querySelectorAll('.sk-toc a'); const sections = document.querySelectorAll('.sk-content h2, .sk-content h3'); if (sections.length > 0) { const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { tocLinks.forEach(link => link.classList.remove('active')); const id = entry.target.getAttribute('id'); const activeLink = document.querySelector(`.sk-toc a[href="#${id}"]`); if(activeLink) activeLink.classList.add('active'); } }); }, { rootMargin: '-100px 0px -70% 0px' }); sections.forEach(section => observer.observe(section)); } // Smooth Scroll Fix for Offset tocLinks.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); const id = this.getAttribute('href').substring(1); const target = document.getElementById(id); if(target) { window.scrollTo({ top: target.getBoundingClientRect().top + window.pageYOffset - 80, behavior: "smooth" }); } }); }); }); </script> </main><!-- #primary --> </div><!-- #page --> <!-- CRITICAL FOOTER CSS --> <style> :root { --f-bg: #0f172a; /* Navy Slate 900 */ --f-bg-dark: #020617; /* Navy Slate 950 */ --f-text: #94a3b8; /* Slate 400 */ --f-head: #ffffff; /* White */ --f-brand: #f97316; /* Orange 500 */ --f-border: rgba(255,255,255,0.08); --z-modal: 10000; --z-dock: 9990; --ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275); } /* === STRUKTUR UTAMA === */ .site-footer { background: linear-gradient(180deg, var(--f-bg) 0%, var(--f-bg-dark) 100%); color: var(--f-text); padding-top: 5rem; padding-bottom: 8rem; font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; position: relative; overflow: hidden; border-top: 1px solid var(--f-border); content-visibility: auto; contain: layout paint; } .footer-container { max-width: 1280px; margin: 0 auto; padding: 0 24px; position: relative; z-index: 1; } .footer-grid { display: grid; grid-template-columns: 1fr; gap: 3rem; } /* === WIDGETS & TYPOGRAPHY === */ .footer-brand { margin-bottom: 1.5rem; display: block; } .footer-desc { line-height: 1.7; margin-bottom: 1.5rem; color: #cbd5e1; font-size: 0.95rem; } .footer-title { color: var(--f-head); font-size: 1.1rem; font-weight: 700; margin-bottom: 1.5rem; position: relative; display: inline-block; letter-spacing: 0.5px; } .footer-title::after { content: ''; position: absolute; bottom: -8px; left: 0; width: 40px; height: 3px; background: var(--f-brand); border-radius: 2px; } /* List Menu */ .footer-menu { list-style: none; padding: 0; margin: 0; } .footer-menu li { margin-bottom: 0.8rem; } .footer-menu a { text-decoration: none; color: inherit; transition: all 0.2s ease; display: inline-flex; align-items: center; gap: 8px; font-size: 0.95rem; } @media (hover: hover) { .footer-menu a:hover { color: var(--f-brand); transform: translateX(6px); } } /* Socials & Contact Icons */ .social-box { display: flex; gap: 12px; flex-wrap: wrap; } .icon-box { width: 40px; height: 40px; border: 1px solid var(--f-border); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: var(--f-brand); background: rgba(255,255,255,0.02); transition: all 0.3s ease; } @media (hover: hover) { .icon-box:hover { background: var(--f-brand); color: white; border-color: var(--f-brand); transform: translateY(-3px); } } /* Contact Item */ .contact-row { display: flex; gap: 1rem; margin-bottom: 1.25rem; align-items: flex-start; } .contact-label { font-size: 11px; font-weight: 700; text-transform: uppercase; color: var(--f-brand); display: block; margin-bottom: 4px; letter-spacing: 0.5px; } .contact-text { font-size: 14px; color: #fff; line-height: 1.5; display: block; } .contact-text a { color: #fff; transition: color 0.2s; } .contact-text a:hover { color: var(--f-brand); } /* Footer Bottom */ .footer-bottom { border-top: 1px solid var(--f-border); margin-top: 4rem; padding-top: 2rem; display: flex; flex-direction: column; align-items: center; gap: 1rem; text-align: center; font-size: 0.85rem; color: #64748b; } .footer-bottom a { color: inherit; text-decoration: none; transition: color 0.2s; } .footer-bottom a:hover { color: var(--f-head); } /* === RESPONSIVE UTILS === */ @media(min-width: 640px) { .footer-grid { grid-template-columns: repeat(2, 1fr); gap: 2.5rem; } } @media(min-width: 1024px) { .footer-grid { grid-template-columns: 2fr 1.3fr 1fr 1.5fr; gap: 3.5rem; } .site-footer { padding-bottom: 4rem; } .footer-bottom { flex-direction: row; justify-content: space-between; text-align: left; } } /* === MOBILE ACCORDION (Max width 639px) === */ @media (max-width: 639px) { .footer-widget .footer-title { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-bottom: 0; padding: 15px 0; border-bottom: 1px solid var(--f-border); cursor: pointer; transition: color 0.2s; } .footer-widget .footer-title::after { display: none; } .footer-widget .footer-title::before { content: '+'; font-size: 1.5rem; font-weight: 300; color: var(--f-brand); line-height: 1; } .footer-widget.active .footer-title { color: var(--f-brand); border-bottom-color: transparent; } .footer-widget.active .footer-title::before { content: '−'; } .footer-content-wrapper { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.3s ease-out; } .footer-content { overflow: hidden; } .footer-widget.active .footer-content-wrapper { grid-template-rows: 1fr; } .footer-widget.active .footer-content { padding-bottom: 20px; border-bottom: 1px solid var(--f-border); } } /* === MOBILE DOCK (Sticky Bottom) === */ .mobile-dock { position: fixed; bottom: 0; left: 0; right: 0; z-index: var(--z-dock); height: 70px; padding-bottom: env(safe-area-inset-bottom); background: rgba(15, 23, 42, 0.95); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-top: 1px solid rgba(255,255,255,0.1); display: grid; grid-template-columns: 1fr 1fr 1fr; box-shadow: 0 -5px 25px rgba(0,0,0,0.4); transform: translateY(0); transition: transform 0.3s ease; } @media(min-width: 1024px) { .mobile-dock { display: none; } } .dock-item { background: none; border: none; padding: 0; cursor: pointer; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #94a3b8; font-size: 10px; font-weight: 600; gap: 5px; height: 70px; -webkit-tap-highlight-color: transparent; } .dock-item svg { width: 22px; height: 22px; stroke-width: 2; transition: transform 0.2s, color 0.2s; } .dock-item:active svg { transform: scale(0.9); color: var(--f-brand); } .dock-center { position: relative; height: 100%; display: flex; justify-content: center; } .wa-float { position: absolute; top: -25px; width: 60px; height: 60px; background: linear-gradient(135deg, #25D366 0%, #075E54 100%); border-radius: 50%; border: 4px solid var(--f-bg-dark); display: flex; align-items: center; justify-content: center; color: white; box-shadow: 0 8px 20px rgba(37, 211, 102, 0.3); animation: dockPulse 2.5s infinite; flex-shrink: 0; z-index: 2; transition: transform 0.3s var(--ease-spring); } .wa-float:active { transform: scale(0.95); } .wa-label { position: absolute; bottom: 8px; font-size: 10px; font-weight: 700; color: white; text-shadow: 0 1px 3px rgba(0,0,0,0.8); pointer-events: none; z-index: 1; } @keyframes dockPulse { 0% { box-shadow: 0 0 0 0 rgba(37, 211, 102, 0.5); } 70% { box-shadow: 0 0 0 12px rgba(37, 211, 102, 0); } 100% { box-shadow: 0 0 0 0 rgba(37, 211, 102, 0); } } /* === DESKTOP FLOATING BTN === */ .desktop-float { position: fixed; bottom: 40px; left: 40px; z-index: 9980; background: white; color: #0f172a; padding: 12px 24px 12px 12px; border-radius: 50px; display: none; align-items: center; gap: 12px; font-weight: 700; font-size: 14px; box-shadow: 0 10px 30px rgba(0,0,0,0.15); border: 2px solid var(--f-brand); cursor: pointer; transition: all 0.3s var(--ease-spring); } .float-icon { width: 36px; height: 36px; background: var(--f-brand); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; transition: all 0.3s; } @media (hover: hover) { .desktop-float:hover { transform: translateY(-5px); background: var(--f-brand); color: white; box-shadow: 0 15px 35px rgba(249, 115, 22, 0.3); } .desktop-float:hover .float-icon { background: white; color: var(--f-brand); } } @media(min-width: 1024px) { .desktop-float { display: flex; } } /* === MODAL & SCROLL === */ .modal-wrap { position: fixed; inset: 0; z-index: var(--z-modal); background: rgba(15, 23, 42, 0.85); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; padding: 16px; } .modal-wrap.active { opacity: 1; pointer-events: auto; } .modal-box { background: #fff; width: 100%; max-width: 480px; border-radius: 16px; overflow: hidden; box-shadow: 0 25px 50px rgba(0,0,0,0.5); transform: scale(0.95) translateY(20px); transition: all 0.4s var(--ease-spring); display: flex; flex-direction: column; max-height: 90vh; } .modal-wrap.active .modal-box { transform: scale(1) translateY(0); } .modal-head { background: #0f172a; padding: 18px 24px; color: white; display: flex; justify-content: space-between; align-items: center; border-bottom: 3px solid var(--f-brand); } .scroll-top { position: fixed; bottom: 100px; right: 24px; z-index: 9900; width: 44px; height: 44px; background: var(--f-bg-dark); border: 1px solid var(--f-border); color: var(--f-brand); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: 0; visibility: hidden; transform: translateY(15px); transition: all 0.3s; box-shadow: 0 4px 12px rgba(0,0,0,0.3); } .scroll-top.show { opacity: 1; visibility: visible; transform: translateY(0); } @media (hover: hover) { .scroll-top:hover { background: var(--f-brand); color: white; } } @media(min-width: 1024px) { .scroll-top { bottom: 40px; right: 40px; width: 50px; height: 50px; } } </style> <!-- CLEAN HTML FOOTER (Microdata dihapus agar Schema JSON-LD di Header menjadi sumber satu-satunya) --> <footer id="colophon" class="site-footer"> <div class="footer-container"> <div class="footer-grid"> <!-- Brand --> <div class="footer-widget"> <a href="https://sumberkanopi.id/" class="footer-brand" aria-label="Beranda CV Sumber Kanopi"> <img src="https://res.cloudinary.com/dfkz56uyf/image/upload/v1753701464/Logo_CV_Sumber_Kanopi_wkj6od.png" alt="CV Sumber Kanopi - Jasa Konstruksi Kanopi Membrane Profesional" width="200" height="60" style="filter: brightness(0) invert(1); height: 45px; width: auto; max-width: 100%;" loading="lazy"> </a> <p class="footer-desc"> Spesialis konstruksi <strong>Atap Membrane Tensile</strong> & Kanopi Membrane Modern. Solusi peneduh estetis dengan struktur baja presisi dan material import bergaransi. </p> <div class="social-box"> <a href="https://facebook.com/sumberkanopi" class="icon-box" aria-label="Facebook Sumber Kanopi" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" width="20" height="20" fill="currentColor" viewBox="0 0 24 24"><path d="M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z"/></svg></a> <a href="https://instagram.com/sumberkanopi" class="icon-box" aria-label="Instagram Sumber Kanopi" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" width="20" height="20" fill="currentColor" viewBox="0 0 24 24"><path d="M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37zm1.5-4.87h.01M7.8 2h8.4C19.4 2 22 4.6 22 7.8v8.4a5.8 5.8 0 01-5.8 5.8H7.8C4.6 22 2 19.4 2 16.2V7.8A5.8 5.8 0 017.8 2m0 2a3.8 3.8 0 00-3.8 3.8v8.4A3.8 3.8 0 007.8 20h8.4a3.8 3.8 0 003.8-3.8V7.8A3.8 3.8 0 0016.2 4H7.8z"/></svg></a> <a href="#" class="icon-box" aria-label="Pinterest Sumber Kanopi"><svg aria-hidden="true" width="20" height="20" fill="currentColor" viewBox="0 0 24 24"><path d="M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.162-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.401.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.951-7.252 4.168 0 7.41 2.967 7.41 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.367 18.592 0 12.017 0z"/></svg></a> <a href="#" class="icon-box" aria-label="YouTube Sumber Kanopi"><svg aria-hidden="true" width="20" height="20" fill="currentColor" viewBox="0 0 24 24"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.5 12 3.5 12 3.5s-7.505 0-9.377.55a3.015 3.015 0 0 0-2.122 2.136C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.55 9.376.55 9.376.55s7.505 0 9.377-.55a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg></a> </div> </div> <!-- Layanan --> <div class="footer-widget"> <h4 class="footer-title">Layanan Spesialis</h4> <div class="footer-content-wrapper"> <div class="footer-content"> <nav aria-label="Daftar Layanan Spesialis"> <ul class="footer-menu"> <li> <a href="https://sumberkanopi.id/kanopi-membrane//"> <span>Kanopi Membrane</span> </a> </li> <li> <a href="https://sumberkanopi.id/kanopi-membrane-cafe/"> <span>Kanopi Cafe</span> </a> </li> <li> <a href="https://sumberkanopi.id/konstruksi-atap-membrane-lapangan-padel/"> <span>Atap Lapangan</span> </a> </li> <li> <a href="https://sumberkanopi.id/kanopi-membrane-parkiran/"> <span>Kanopi Parkiran</span> </a> </li> <li> <a href="https://sumberkanopi.id/kanopi-membrane-rooftop/"> <span>Kanopi Rooftop</span> </a> </li> <li> <a href="https://sumberkanopi.id/kanopi-membrane-masjid/"> <span>Kanopi Masjid</span> </a> </li> <li> <a href="https://sumberkanopi.id/tenda-payung-membrane/"> <span>Tenda & Payung</span> </a> </li> </ul> </nav> </div> </div> </div> <!-- Perusahaan --> <div class="footer-widget"> <h4 class="footer-title">Perusahaan</h4> <div class="footer-content-wrapper"> <div class="footer-content"> <ul class="footer-menu"> <li><a href="https://sumberkanopi.id/jasa-konstruksi-kanopi-membrane/tentang-cv-sumber-kanopi/">Tentang Sumber Kanopi</a></li> <li><a href="/#portofolio">Portofolio Proyek</a></li> <li><a href="/#testimoni">Testimoni Klien</a></li> <li><a href="/#hubungi">Hubungi Kami</a></li> <li><a href="/pusat-bantuan-faq/">Bantaun & FAQ</a></li> <li><a href="/panduan-maintenance-atap-kanopi-membrane/">Maintenance Guide</a></li> <li><a href="/ketentuan-garansi/">Warranty Information</a></li> </ul> </div> </div> </div> <!-- Kontak --> <div class="footer-widget"> <h4 class="footer-title">Kontak Kami</h4> <div class="footer-content-wrapper"> <div class="footer-content"> <!-- Office Address --> <div class="contact-row"> <div class="icon-box"><svg aria-hidden="true" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"/><path stroke-linecap="round" stroke-linejoin="round" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"/></svg></div> <div> <span class="contact-label">Office (Sukabumi)</span> <span class="contact-text"> Jl. Lingkar Selatan<br>Cisaat, Sukabumi, Jawa Barat </span> </div> </div> <!-- Workshop Address --> <div class="contact-row"> <div class="icon-box"><svg aria-hidden="true" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"/><path stroke-linecap="round" stroke-linejoin="round" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"/></svg></div> <div> <span class="contact-label">Workshop (Tangsel)</span> <span class="contact-text"> Jl. Mandar Dalam, Pondok Aren<br> Tangerang Selatan, Banten </span> </div> </div> <!-- Telepon --> <div class="contact-row"> <div class="icon-box"><svg aria-hidden="true" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"/></svg></div> <div> <span class="contact-label">Telepon Office</span> <a href="tel:026624826796" class="contact-text" style="font-weight:700; text-decoration:none;" rel="noopener noreferrer">0266-2482-6796</a> </div> </div> <!-- WhatsApp --> <div class="contact-row"> <div class="icon-box"><svg aria-hidden="true" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"/></svg></div> <div> <span class="contact-label">WhatsApp Fast Respon</span> <a href="https://wa.me/6285860600998" class="contact-text" style="font-weight:700; text-decoration:none;" rel="noopener noreferrer">0858-6060-0998</a> </div> </div> </div> </div> </div> </div> <div class="footer-bottom"> <p>© 2026 <strong>CV Sumber Kanopi</strong>. All Rights Reserved.</p> <div style="display:flex; gap:20px;"> <a href="https://sumberkanopi.id/privacy-policy/">Privacy Policy</a> <a href="/#terms">Terms</a> </div> </div> </div> </footer> <!-- 1. MOBILE DOCK (3 Items: Hitung, WA, Menu) --> <nav class="mobile-dock"> <button class="dock-item" id="trigCalcMobile" aria-label="Kalkulator Harga Kanopi"> <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="2" width="16" height="20" rx="2"/><line x1="8" y1="6" x2="16" y2="6"/><line x1="16" y1="14" x2="16" y2="14"/><line x1="12" y1="14" x2="12" y2="14"/><line x1="8" y1="14" x2="8" y2="14"/><line x1="16" y1="18" x2="16" y2="18"/><line x1="12" y1="18" x2="12" y2="18"/><line x1="8" y1="18" x2="8" y2="18"/></svg> <span>Estimasi Biaya</span> </button> <div class="dock-center"> <a href="https://wa.me/6285860600998?text=Halo%20Tim%20Sumber%20Kanopi,%20saya%20tertarik%20dengan%20jasa%20pasang%20membrane." class="wa-float" aria-label="Konsultasi Pasang Kanopi via WhatsApp" rel="noopener noreferrer"> <svg aria-hidden="true" width="32" height="32" viewBox="0 0 24 24" fill="currentColor"><path d="M12.04 2c-5.46 0-9.91 4.45-9.91 9.91 0 1.75.46 3.45 1.32 4.95L2.05 22l5.25-1.38c1.45.79 3.08 1.21 4.74 1.21 5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01A9.816 9.816 0 0012.04 2m.01 1.67c2.2 0 4.26.86 5.82 2.42a8.225 8.225 0 012.41 5.83c0 4.54-3.7 8.23-8.24 8.23-1.48 0-2.93-.39-4.19-1.15l-.3-.18-3.12.82.83-3.04-.19-.31a8.19 8.19 0 01-1.26-4.38c0-4.54 3.7-8.24 8.24-8.24M8.53 7.33c-.19-.43-.43-.43-.63-.44-.18 0-.38 0-.58 0-.2 0-.52.08-.79.38-.27.3-.99.97-.99 2.37 0 1.4 1.02 2.76 1.16 2.96.14.2 2.01 3.07 4.87 4.3 2.37 1.02 2.85.82 3.39.77.54-.05 1.73-.71 1.97-1.39.24-.68.24-1.27.17-1.39-.07-.12-.27-.19-.57-.34-.3-.15-1.73-.85-2-.95-.27-.1-.46-.15-.66.15-.2.3-.77.97-.94 1.17-.17.2-.34.22-.64.07-.3-.15-1.29-.48-2.45-1.52-.91-.81-1.53-1.81-1.71-2.12-.18-.3-.02-.46.13-.61.13-.13.3-.34.45-.51.15-.17.2-.29.3-.49.1-.19.05-.36-.02-.51-.08-.15-.66-1.59-.91-2.18z"/></svg> </a> <span class="wa-label">Chat WA</span> </div> <button class="dock-item" id="trigMenuMobile" aria-label="Buka Menu Utama"> <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/></svg> <span>Menu</span> </button> </nav> <!-- 2. DESKTOP FLOATING BUTTON --> <button class="desktop-float" id="trigCalcDesktop" aria-label="Buka Kalkulator Harga Membrane"> <div class="float-icon"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z"/></svg></div> <span>Hitung Estimasi Harga</span> </button> <!-- 3. CALCULATOR MODAL SHELL --> <div class="modal-wrap" id="modalCalc" role="dialog" aria-modal="true" aria-labelledby="modalTitle"> <div class="modal-box"> <div class="modal-head"> <h3 id="modalTitle" style="margin:0; font-size:1.1rem; display:flex; align-items:center; gap:8px;"> <span style="color:#f97316;">Kalkulator</span> Harga Tenda </h3> <button id="closeModal" style="background:none; border:none; color:white; cursor:pointer; padding:5px; transition: transform 0.2s;" aria-label="Tutup Modal" onmouseover="this.style.transform='scale(1.1)'" onmouseout="this.style.transform='scale(1)'"> <svg width="24" height="24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 18L18 6M6 6l12 12"/></svg> </button> </div> <div style="flex:1; overflow-y:auto; padding: 10px;"> <!-- LOAD CALCULATOR COMPONENT --> <div class="sk-calc-wrapper"> <!-- FORM --> <form id="skForm" class="sk-form" onsubmit="return false;"> <!-- Input Dimensi --> <div class="sk-grid-2"> <div class="sk-field"> <label class="sk-label" for="skP">Panjang (m)</label> <div class="sk-input-box"> <input type="number" id="skP" class="sk-input" placeholder="0" min="1" step="0.1" required> </div> </div> <div class="sk-field"> <label class="sk-label" for="skL">Lebar (m)</label> <div class="sk-input-box"> <input type="number" id="skL" class="sk-input" placeholder="0" min="1" step="0.1" required> </div> </div> </div> <!-- Input Material --> <div class="sk-field"> <label class="sk-label" for="skMat">Pilihan Material</label> <div class="sk-select-box"> <select id="skMat" class="sk-input" required> <option value="" disabled selected>-- Pilih Bahan Membrane --</option> <optgroup label="Mighty (Lokal)"> <option value="725000">Mighty X1-650 | Translucent</option> <option value="750000">Mighty X1-680 | Blockout</option> <option value="850000">Mighty X1-750 | Translucent</option> <option value="875000">Mighty X1-750 | Blockout</option> <option value="925000">Mighty X1-850 | Blockout</option> <option value="975000">Mighty X1-950 | Translucent</option> <option value="1175000">Mighty X1-1100 | Translucent</option> </optgroup> <optgroup label="AGTex (Lokal Premium)"> <option value="750000">AGTex 650 | Blockout</option> <option value="850000">AGTex 750 | Translucent</option> <option value="9500000">AGTex 850 | Blockout</option> <option value="1250000">AGTex 950 | Translucent</option> <option value="1350000">AGTex 1050 | Translucent</option> </optgroup> <optgroup label="Heytex (Jerman)"> <option value="700000">Heytex ten H1150 650 | Translucent</option> <option value="775000">Heytex ten H1171 750 | T/B</option> <option value="850000">Heytex ten H1160 850 | Blockout</option> <option value="9750000">Heytex ten H1194 950 | T/B</option> <option value="950000">Heytex ten H1172 700 | Translucent</option> <option value="1450000">Heytex ten H1173 900 | Translucent</option> </optgroup> <optgroup label="Serge Ferrari (Perancis)"> <option value="850000">Ferrari 502 S2-590 gsm | Translucent</option> <option value="950000">Ferrari 602 - 650 gsm | Translucent</option> <option value="1250000">Ferrari 702 S2-750 gsm | Translucent</option> <option value="1450000">Ferrari 702 S2-830 gsm | Blockout</option> <option value="1550000">Ferrari 902 S2-950 gsm | Translucent</option> </optgroup> </select> <span class="sk-arrow">â–¼</span> </div> </div> <!-- Input Rangka --> <div class="sk-field"> <label class="sk-label" for="skFrame">Jenis Rangka</label> <div class="sk-select-box"> <select id="skFrame" class="sk-input"> <option value="0">Pipa Besi Hitam (Standar)</option> <option value="150000">Pipa Galvanis (Anti Karat)</option> <option value="450000">Pipa Seamless SCH40 (Heavy)</option> </select> <span class="sk-arrow">â–¼</span> </div> </div> <!-- Tombol Aksi --> <button type="submit" class="sk-btn-submit"> HITUNG ESTIMASI </button> </form> <!-- HASIL (Hidden Default) --> <div id="skResult" class="sk-result" style="display: none;"> <div class="sk-result-head"> <span class="sk-result-label">Total Estimasi Biaya</span> <div id="outPrice" class="sk-price">Rp 0</div> </div> <div class="sk-result-detail"> <div class="sk-row-detail"> <span>Luas Area:</span> <strong id="outArea">0 m²</strong> </div> <p class="sk-disclaimer">*Harga estimasi (Material + Jasa). Belum termasuk akomodasi luar kota.</p> <a id="waLink" href="#" target="_blank" class="sk-btn-wa"> <svg width="18" height="18" fill="currentColor" viewBox="0 0 24 24"><path d="M12.04 2c-5.46 0-9.91 4.45-9.91 9.91 0 1.75.46 3.45 1.32 4.95L2.05 22l5.25-1.38c1.45.79 3.08 1.21 4.74 1.21 5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01A9.816 9.816 0 0012.04 2m.01 1.67c2.2 0 4.26.86 5.82 2.42a8.225 8.225 0 012.41 5.83c0 4.54-3.7 8.23-8.24 8.23-1.48 0-2.93-.39-4.19-1.15l-.3-.18-3.12.82.83-3.04-.19-.31a8.19 8.19 0 01-1.26-4.38c0-4.54 3.7-8.24 8.24-8.24M8.53 7.33c-.19-.43-.43-.43-.63-.44-.18 0-.38 0-.58 0-.2 0-.52.08-.79.38-.27.3-.99.97-.99 2.37 0 1.4 1.02 2.76 1.16 2.96.14.2 2.01 3.07 4.87 4.3 2.37 1.02 2.85.82 3.39.77.54-.05 1.73-.71 1.97-1.39.24-.68.24-1.27.17-1.39-.07-.12-.27-.19-.57-.34-.3-.15-1.73-.85-2-.95-.27-.1-.46-.15-.66.15-.2.3-.77.97-.94 1.17-.17.2-.34.22-.64.07-.3-.15-1.29-.48-2.45-1.52-.91-.81-1.53-1.81-1.71-2.12-.18-.3-.02-.46.13-.61.13-.13.3-.34.45-.51.15-.17.2-.29.3-.49.1-.19.05-.36-.02-.51-.08-.15-.66-1.59-.91-2.18z"/></svg> Konsultasi & Nego WA </a> </div> </div> </div> <style> /* Scoped Native CSS */ .sk-calc-wrapper { font-family: system-ui, -apple-system, sans-serif; color: #334155; width: 100%; box-sizing: border-box; } .sk-calc-wrapper * { box-sizing: border-box; } /* Form Layout */ .sk-form { display: flex; flex-direction: column; gap: 16px; padding: 24px; } .sk-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .sk-field { display: flex; flex-direction: column; gap: 6px; } .sk-label { font-size: 11px; font-weight: 700; text-transform: uppercase; color: #64748b; letter-spacing: 0.5px; } .sk-input-box, .sk-select-box { position: relative; } .sk-input { width: 100%; padding: 12px 14px; background: #f8fafc; border: 1px solid #cbd5e1; border-radius: 8px; font-size: 14px; font-weight: 600; color: #0f172a; appearance: none; transition: 0.2s ease; } .sk-input:focus { border-color: #f97316; background: #fff; outline: none; box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.1); } .sk-input.error { border-color: #ef4444; background: #fef2f2; animation: skShake 0.3s; } .sk-arrow { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); font-size: 10px; color: #64748b; pointer-events: none; } /* Button */ .sk-btn-submit { width: 100%; padding: 14px; margin-top: 8px; background: #f97316; color: white; border: none; border-radius: 8px; font-weight: 800; font-size: 14px; letter-spacing: 0.5px; cursor: pointer; transition: 0.2s; box-shadow: 0 4px 12px rgba(249, 115, 22, 0.25); } .sk-btn-submit:hover { background: #ea580c; transform: translateY(-1px); } .sk-btn-submit:active { transform: translateY(1px); } /* Result Area */ .sk-result { background: #fff; border-top: 1px solid #e2e8f0; animation: skSlideUp 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); } .sk-result-head { background: #0f172a; padding: 20px; text-align: center; color: white; } .sk-result-label { font-size: 11px; text-transform: uppercase; opacity: 0.8; letter-spacing: 1px; } .sk-price { font-size: 28px; font-weight: 800; margin-top: 4px; color: #fff; } .sk-result-detail { padding: 20px; background: #f8fafc; } .sk-row-detail { display: flex; justify-content: space-between; font-size: 14px; color: #475569; margin-bottom: 12px; border-bottom: 1px dashed #cbd5e1; padding-bottom: 8px; } .sk-disclaimer { font-size: 11px; color: #64748b; font-style: italic; margin: 0 0 16px 0; } .sk-btn-wa { display: flex; align-items: center; justify-content: center; gap: 8px; background: #25D366; color: white; padding: 12px; border-radius: 8px; font-weight: 700; text-decoration: none; font-size: 14px; transition: 0.2s; box-shadow: 0 4px 10px rgba(37, 211, 102, 0.2); } .sk-btn-wa:hover { background: #1faf53; } /* Animation Keyframes */ @keyframes skSlideUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes skShake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-3px); } 75% { transform: translateX(3px); } } /* Responsive */ @media (max-width: 360px) { .sk-grid-2 { grid-template-columns: 1fr; } .sk-form, .sk-result-detail { padding: 16px; } } </style> <!-- LOGIC --> <script> (function() { const d = document, form = d.getElementById('skForm'), res = d.getElementById('skResult'); if (!form) return; form.addEventListener('submit', function(e) { e.preventDefault(); // Ambil Value const p = parseFloat(d.getElementById('skP').value) || 0; const l = parseFloat(d.getElementById('skL').value) || 0; const mEl = d.getElementById('skMat'); const fEl = d.getElementById('skFrame'); const mPrice = parseInt(mEl.value) || 0; const fPrice = parseInt(fEl.value) || 0; // Validasi Sederhana let valid = true; [d.getElementById('skP'), d.getElementById('skL'), mEl].forEach(el => { if (!el.value || el.value <= 0) { el.classList.add('error'); valid = false; } else { el.classList.remove('error'); } }); if (!valid) return; // Kalkulasi Cepat const area = p * l; const total = area * (mPrice + fPrice); const fmt = new Intl.NumberFormat('id-ID', {style:'currency', currency:'IDR', maximumFractionDigits:0}); // Update UI d.getElementById('outArea').textContent = area.toLocaleString('id-ID') + " m²"; d.getElementById('outPrice').textContent = fmt.format(total); // Tampilkan Hasil res.style.display = 'block'; // Generate Link WA const mText = mEl.options[mEl.selectedIndex].text; const fText = fEl.options[fEl.selectedIndex].text; const msg = `Halo, saya ingin estimasi:\n` + `Ukuran: ${p}m x ${l}m (${area} m²)\n` + `Bahan: ${mText}\n` + `Rangka: ${fText}\n` + `Estimasi: ${fmt.format(total)}`; d.getElementById('waLink').href = 'https://wa.me/628558824529?text=' + encodeURIComponent(msg); // Auto Scroll ke Hasil (Smooth) res.scrollIntoView({behavior: 'smooth', block: 'nearest'}); }); // Hapus error saat mengetik form.addEventListener('input', function(e) { if(e.target.classList.contains('sk-input')) e.target.classList.remove('error'); }); })(); </script> </div> </div> </div> <!-- 4. SCROLL TOP --> <button id="scrollTopBtn" class="scroll-top" aria-label="Kembali ke Atas Halaman"> <svg aria-hidden="true" width="24" height="24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 10l7-7m0 0l7 7m-7-7v18"/></svg> </button> <script> document.addEventListener('DOMContentLoaded', () => { // A. Modal Logic const modal = document.getElementById('modalCalc'); const toggleModal = (show) => { if(modal) modal.classList.toggle('active', show); document.body.style.overflow = show ? 'hidden' : ''; }; ['trigCalcMobile', 'trigCalcDesktop'].forEach(id => { const el = document.getElementById(id); if(el) el.addEventListener('click', () => toggleModal(true)); }); const closeBtn = document.getElementById('closeModal'); if(closeBtn) closeBtn.addEventListener('click', () => toggleModal(false)); if(modal) modal.addEventListener('click', (e) => { if(e.target === modal) toggleModal(false); }); // B. Mobile Menu Trigger const menuTrig = document.getElementById('trigMenuMobile'); const headerToggle = document.getElementById('menuToggle'); if(menuTrig && headerToggle) { menuTrig.addEventListener('click', () => { headerToggle.click(); window.scrollTo({top:0, behavior:'smooth'}); }); } // C. Scroll Top const stBtn = document.getElementById('scrollTopBtn'); if(stBtn) { window.addEventListener('scroll', () => { if (window.scrollY > 400) { stBtn.classList.add('show'); } else { stBtn.classList.remove('show'); } }, { passive: true }); stBtn.addEventListener('click', () => window.scrollTo({top:0, behavior:'smooth'})); } // D. Mobile Accordion Logic const initAccordion = () => { document.querySelectorAll('.footer-widget .footer-title').forEach(title => { const newTitle = title.cloneNode(true); title.parentNode.replaceChild(newTitle, title); newTitle.addEventListener('click', () => { if (window.innerWidth < 640) { newTitle.parentElement.classList.toggle('active'); } }); }); }; initAccordion(); }); // E. Global Function WA function openWA(el) { const phone = '6285860600998'; const text = el.dataset.waText || 'Halo Tim Sumber Kanopi, saya ingin konsultasi.'; const url = `https://wa.me/${phone}?text=${encodeURIComponent(text)}`; window.open(url, '_blank', 'noopener,noreferrer'); } </script> <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/sumberkanopi-id-theme/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="swiper-js-js" defer src="https://unpkg.com/swiper@12.0.3/swiper-bundle.min.js?ver=12.0.3"></script> <script id="wpo_min-footer-1-js-extra"> var themeData = {"whatsappUrl":"https://wa.me/628558824529","homeUrl":"https://sumberkanopi.id/"}; //# sourceURL=wpo_min-footer-1-js-extra </script> <script id="wpo_min-footer-1-js" src="https://sumberkanopi.id/wp-content/cache/wpo-minify/1780234533/assets/wpo-minify-footer-sumberkanopiid-main-js1766135093.min.js"></script> <script>!function(e){"use strict";var t=function(t,n,o,r){function i(e){return l.body?e():void setTimeout(function(){i(e)})}function d(){s.addEventListener&&s.removeEventListener("load",d),s.media=o||"all"}var a,l=e.document,s=l.createElement("link");if(n)a=n;else{var f=(l.body||l.getElementsByTagName("head")[0]).childNodes;a=f[f.length-1]}var u=l.styleSheets;if(r)for(var c in r)r.hasOwnProperty(c)&&s.setAttribute(c,r[c]);s.rel="stylesheet",s.href=t,s.media="only x",i(function(){a.parentNode.insertBefore(s,n?a:a.nextSibling)});var v=function(e){for(var t=s.href,n=u.length;n--;)if(u[n].href===t)return e();setTimeout(function(){v(e)})};return s.addEventListener&&s.addEventListener("load",d),s.onloadcssdefined=v,v(d),s};"undefined"!=typeof exports?exports.loadCSS=t:e.loadCSS=t}("undefined"!=typeof global?global:this);</script> </body> </html> <!-- Cached by WP-Optimize (gzip) - https://teamupdraft.com/wp-optimize/ - Last modified: August 24, 2026 12:42 am (UTC:0) -->