{"id":10,"date":"2026-10-16T06:26:18","date_gmt":"2026-10-16T06:26:18","guid":{"rendered":"https:\/\/webkilat-sampel.duckdns.org\/?page_id=10"},"modified":"2026-10-16T07:37:40","modified_gmt":"2026-10-16T07:37:40","slug":"isfah-press","status":"publish","type":"page","link":"https:\/\/webkilat-sampel.duckdns.org\/?page_id=10","title":{"rendered":"Isfah Press"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10\" class=\"elementor elementor-10\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-43840ea e-con e-atomic-element e-flexbox-base e-default-div e-e544c99 \" data-id=\"43840ea\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"43840ea\">\n    \t\t<div class=\"elementor-element elementor-element-afded09 elementor-widget elementor-widget-html\" data-id=\"afded09\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600&family=Playfair+Display:ital,wght@0,500;0,600;0,700;1,500&display=swap\" rel=\"stylesheet\">\n\n<style>\n\/* Reset paksa khusus Elementor Container & Widget agar tidak ada celah atas\/bawah *\/\nhtml, body {\n  margin: 0 !important;\n  padding: 0 !important;\n}\n.elementor,\n.elementor-section,\n.elementor-section-wrap,\n.elementor-top-section,\n.elementor-column,\n.elementor-widget,\n.elementor-widget-wrap,\n.elementor-widget-container,\n.elementor-widget-html,\n.e-con,\n.e-con-inner {\n  margin: 0 !important;\n  padding: 0 !important;\n  gap: 0 !important;\n}\n\n:root {\n  --navy: #0A1F44;\n  --navy-2: color-mix(in srgb, var(--navy) 88%, #4f7bd9);\n  --blue: #1F4FD8;\n  --blue-d: color-mix(in srgb, var(--blue) 82%, #000);\n  --sky: #E9F0FC;\n  --paper: #F7F9FD;\n  --ink: #0F172A;\n  --muted: #5B6579;\n  --line: #DCE4F1;\n  --gold: #B8935A;\n  --white: #fff;\n  --serif: 'Playfair Display', Georgia, 'Times New Roman', serif;\n  --sans: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n  --wrap: 1180px;\n}\n\n* { box-sizing: border-box; margin: 0; padding: 0; }\nbody { font-family: var(--sans); color: var(--ink); background: var(--white); line-height: 1.6; font-size: 16px; -webkit-font-smoothing: antialiased; }\nimg { display: block; max-width: 100%; }\na { color: inherit; text-decoration: none; }\nbutton { font-family: inherit; cursor: pointer; }\n.wrap { max-width: var(--wrap); margin: 0 auto; padding: 0 24px; }\n.eyebrow { font-size: 12px; letter-spacing: .18em; text-transform: uppercase; font-weight: 600; color: var(--blue); }\n.serif { font-family: var(--serif); }\n\n\/* Top strip menempel rapat *\/\n.strip { background: var(--navy); color: #cfdaf3; font-size: 13px; margin: 0 !important; }\n.strip .wrap { display: flex; justify-content: space-between; gap: 16px; padding-top: 9px; padding-bottom: 9px; }\n.strip a { color: #fff; font-weight: 500; }\n\n\/* Header *\/\nheader.site { position: sticky; top: 0; z-index: 50; background: rgba(255,255,255,.92); backdrop-filter: saturate(1.4) blur(10px); border-bottom: 1px solid var(--line); margin: 0 !important; }\nbody.admin-bar header.site { top: 32px; }\n@media screen and (max-width: 782px) {\n  body.admin-bar header.site { top: 46px; }\n}\n\nheader.site .wrap { display: flex; align-items: center; justify-content: space-between; height: 74px; }\n.brand { display: flex; align-items: center; gap: 12px; }\n.brand-mark { width: 38px; height: 38px; background: var(--navy); display: grid; place-items: center; border-radius: 2px; }\n.brand-name { font-family: var(--serif); font-weight: 600; font-size: 22px; letter-spacing: .01em; color: var(--navy); line-height: 1; }\n.brand-sub { font-size: 10.5px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); margin-top: 4px; }\nnav.main { display: flex; gap: 34px; }\nnav.main a { font-size: 14.5px; font-weight: 500; color: #26324a; position: relative; padding: 6px 0; }\nnav.main a::after { content: \"\"; position: absolute; left: 0; bottom: 0; height: 1.5px; width: 0; background: var(--blue); transition: width .25s; }\nnav.main a:hover::after { width: 100%; }\n.head-actions { display: flex; align-items: center; gap: 10px; }\n.cart-btn { position: relative; display: flex; align-items: center; gap: 9px; background: var(--navy); color: #fff; border: 0; padding: 11px 18px; font-size: 14px; font-weight: 500; border-radius: 2px; transition: background .2s; }\n.cart-btn:hover { background: var(--blue); }\n.cart-count { background: #fff; color: var(--navy); font-size: 11.5px; font-weight: 700; min-width: 20px; height: 20px; border-radius: 10px; display: grid; place-items: center; padding: 0 5px; }\n.burger { display: none; background: none; border: 1px solid var(--line); width: 42px; height: 42px; border-radius: 2px; }\n\n\/* Hero *\/\n.hero { background: linear-gradient(180deg,var(--paper),#fff); padding: 84px 0 96px; overflow: hidden; }\n.hero .wrap { display: grid; grid-template-columns: 1.05fr .95fr; gap: 72px; align-items: center; }\n.hero h1 { font-family: var(--serif); font-weight: 600; font-size: clamp(38px,5vw,62px); line-height: 1.1; color: var(--navy); margin: 18px 0 22px; letter-spacing: -.01em; }\n.hero h1 em { font-style: italic; font-weight: 500; color: var(--blue); }\n.hero p.lead { font-size: 18px; color: var(--muted); max-width: 520px; }\n.cta-row { display: flex; gap: 14px; margin-top: 34px; flex-wrap: wrap; }\n.btn { display: inline-flex; align-items: center; justify-content: center; gap: 9px; padding: 14px 26px; font-size: 14.5px; font-weight: 600; border: 1px solid transparent; border-radius: 2px; transition: all .2s; letter-spacing: .01em; }\n.btn-primary { background: var(--blue); color: #fff; }\n.btn-primary:hover { background: var(--blue-d); }\n.btn-ghost { background: transparent; color: var(--navy); border-color: var(--navy); }\n.btn-ghost:hover { background: var(--navy); color: #fff; }\n.hero-points { display: flex; gap: 34px; margin-top: 46px; padding-top: 26px; border-top: 1px solid var(--line); flex-wrap: wrap; }\n.hero-points div { font-size: 13.5px; color: var(--muted); max-width: 150px; line-height: 1.45; }\n.hero-points strong { display: block; color: var(--navy); font-size: 14.5px; font-weight: 600; margin-bottom: 2px; }\n.hero-art { position: relative; height: 520px; }\n.hero-art .block { position: absolute; right: -24px; top: 34px; width: 78%; height: 86%; background: var(--navy); }\n.hero-art .img-a { position: absolute; left: 0; top: 0; width: 62%; height: 74%; object-fit: cover; border-radius: 2px; box-shadow: 0 24px 50px -22px rgba(10,31,68,.5); }\n.hero-art .img-b { position: absolute; right: 0; bottom: 0; width: 54%; height: 56%; object-fit: cover; border-radius: 2px; border: 8px solid #fff; box-shadow: 0 24px 50px -22px rgba(10,31,68,.5); }\n.hero-art .tag { position: absolute; left: 8%; bottom: 6%; background: #fff; padding: 16px 20px; border-left: 3px solid var(--gold); box-shadow: 0 18px 40px -20px rgba(10,31,68,.4); }\n.hero-art .tag b { font-family: var(--serif); font-size: 18px; color: var(--navy); display: block; }\n.hero-art .tag span { font-size: 12.5px; color: var(--muted); }\n\n\/* Sections *\/\nsection { padding: 92px 0; }\n.sec-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 30px; margin-bottom: 42px; flex-wrap: wrap; }\n.sec-head h2 { font-family: var(--serif); font-weight: 600; font-size: clamp(30px,3.6vw,42px); color: var(--navy); line-height: 1.15; margin-top: 10px; max-width: 560px; }\n.sec-head p { color: var(--muted); max-width: 380px; font-size: 15.5px; }\n\n\/* Catalog *\/\n.toolbar { display: flex; justify-content: space-between; gap: 20px; align-items: center; margin-bottom: 34px; flex-wrap: wrap; padding-bottom: 22px; border-bottom: 1px solid var(--line); }\n.chips { display: flex; gap: 8px; flex-wrap: wrap; }\n.chip { background: #fff; border: 1px solid var(--line); color: #33405a; padding: 8px 18px; font-size: 13.5px; font-weight: 500; border-radius: 40px; transition: all .2s; }\n.chip:hover { border-color: var(--blue); color: var(--blue); }\n.chip.on { background: var(--navy); color: #fff; border-color: var(--navy); }\n.search { position: relative; }\n.search input { border: 1px solid var(--line); padding: 11px 16px 11px 42px; font-size: 14px; font-family: inherit; width: 270px; border-radius: 2px; outline: none; transition: border .2s; }\n.search input:focus { border-color: var(--blue); }\n.search svg { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: var(--muted); }\n.grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 34px 26px; }\n.card { display: flex; flex-direction: column; }\n.cover { aspect-ratio: 4\/5; background: linear-gradient(145deg,var(--navy),var(--blue)); overflow: hidden; position: relative; border-radius: 2px; }\n.cover img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s cubic-bezier(.2,.7,.2,1); }\n.card:hover .cover img { transform: scale(1.05); }\n.cover .cat { position: absolute; left: 12px; top: 12px; background: #fff; color: var(--navy); font-size: 10.5px; letter-spacing:.14em; text-transform: uppercase; font-weight: 600; padding: 5px 10px; }\n.card h3 { font-family: var(--serif); font-weight: 600; font-size: 19px; line-height: 1.3; color: var(--navy); margin-top: 16px; }\n.card .author { font-size: 13.5px; color: var(--muted); margin-top: 3px; }\n.card .row { display: flex; align-items: center; justify-content: space-between; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--line); gap: 10px; }\n.price { font-weight: 600; color: var(--ink); font-size: 16px; }\n.add { background: none; border: 1px solid var(--navy); color: var(--navy); padding: 8px 14px; font-size: 12.5px; font-weight: 600; letter-spacing: .02em; border-radius: 2px; transition: all .2s; }\n.add:hover { background: var(--navy); color: #fff; }\n.empty { grid-column: 1\/-1; text-align: center; padding: 60px 0; color: var(--muted); }\n.skel { aspect-ratio: 4\/5; background: linear-gradient(90deg,#eef2f9 25%,#f7f9fd 50%,#eef2f9 75%); background-size: 200% 100%; animation: sh 1.3s infinite; border-radius: 2px; }\n@keyframes sh { to { background-position: -200% 0; } }\n\n\/* Services *\/\n.services { background: var(--navy); color: #fff; position: relative; }\n.services .eyebrow { color: #8fb0ff; }\n.services .sec-head h2 { color: #fff; }\n.services .sec-head p { color: #b5c3e2; }\n.svc-grid { display: grid; grid-template-columns: repeat(3,1fr); border-top: 1px solid rgba(255,255,255,.14); border-left: 1px solid rgba(255,255,255,.14); }\n.svc { padding: 36px 32px 32px; border-right: 1px solid rgba(255,255,255,.14); border-bottom: 1px solid rgba(255,255,255,.14); display: flex; flex-direction: column; transition: background .3s; }\n.svc:hover { background: var(--navy-2); }\n.svc .ico { width: 46px; height: 46px; border: 1px solid rgba(255,255,255,.28); display: grid; place-items: center; color: #9bb9ff; margin-bottom: 24px; }\n.svc h3 { font-family: var(--serif); font-size: 22px; font-weight: 600; line-height: 1.25; margin-bottom: 10px; }\n.svc p { color: #b5c3e2; font-size: 14.5px; flex: 1; }\n.svc .foot { margin-top: 26px; display: flex; justify-content: space-between; align-items: center; gap: 10px; }\n.svc .from { font-size: 12px; color: #8fa2c8; line-height: 1.3; }\n.svc .from b { display: block; color: #fff; font-size: 16px; font-weight: 600; }\n.svc a.ask { font-size: 13px; font-weight: 600; color: #fff; border-bottom: 1px solid var(--gold); padding-bottom: 2px; white-space: nowrap; }\n.svc a.ask:hover { color: #9bb9ff; }\n\n\/* Process *\/\n.steps { display: grid; grid-template-columns: repeat(4,1fr); gap: 0; counter-reset: s; }\n.step { padding: 0 28px 0 0; position: relative; }\n.step::before { counter-increment: s; content: \"0\" counter(s); font-family: var(--serif); font-size: 44px; color: var(--sky); font-weight: 700; line-height: 1; display: block; -webkit-text-stroke: 1px var(--blue); color: transparent; }\n.step h4 { font-family: var(--serif); font-size: 20px; color: var(--navy); margin: 16px 0 8px; }\n.step p { font-size: 14.5px; color: var(--muted); }\n\n\/* CTA Band *\/\n.band { background: var(--paper); padding: 0; }\n.band .wrap { display: grid; grid-template-columns: 1fr 1fr; align-items: stretch; gap: 0; padding: 0; }\n.band .txt { padding: 84px 64px 84px 24px; display: flex; flex-direction: column; justify-content: center; align-items: flex-start; }\n.band h2 { font-family: var(--serif); font-weight: 600; font-size: clamp(28px,3.4vw,40px); color: var(--navy); line-height: 1.2; margin: 12px 0 16px; }\n.band p { color: var(--muted); margin-bottom: 28px; max-width: 440px; }\n.band .pic { min-height: 420px; background-size: cover; background-position: center; }\n\n\/* Footer *\/\nfooter { background: var(--navy); color: #b5c3e2; padding: 72px 0 28px; margin: 0 !important; }\n.f-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 56px; padding-bottom: 48px; border-bottom: 1px solid rgba(255,255,255,.14); }\nfooter .brand-name { color: #fff; }\nfooter .brand-mark { background: var(--blue); }\nfooter h5 { color: #fff; font-size: 12px; letter-spacing: .18em; text-transform: uppercase; margin-bottom: 18px; font-weight: 600; }\nfooter li { list-style: none; margin-bottom: 10px; font-size: 14.5px; }\nfooter li a:hover { color: #fff; }\nfooter p { font-size: 14.5px; margin-top: 18px; max-width: 330px; }\n.copy { display: flex; justify-content: space-between; padding-top: 24px; font-size: 13px; flex-wrap: wrap; gap: 10px; }\n\n\/* Cart Drawer & Floating *\/\n.overlay { position: fixed; inset: 0; background: rgba(10,31,68,.5); opacity: 0; pointer-events: none; transition: opacity .3s; z-index: 99990; }\n.overlay.open { opacity: 1; pointer-events: auto; }\n.drawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(440px,100%); background: #fff; z-index: 99999; transform: translateX(100%); transition: transform .35s cubic-bezier(.2,.7,.2,1); display: flex; flex-direction: column; box-shadow: -20px 0 60px -20px rgba(10,31,68,.4); }\n.drawer.open { transform: none; }\n.d-head { display: flex; justify-content: space-between; align-items: center; padding: 22px 26px; border-bottom: 1px solid var(--line); }\n.d-head h3 { font-family: var(--serif); font-size: 22px; color: var(--navy); }\n.x { background: none; border: 0; font-size: 26px; line-height: 1; color: var(--muted); width: 36px; height: 36px; }\n.d-body { flex: 1; overflow: auto; padding: 8px 26px; }\n.item { display: grid; grid-template-columns: 64px 1fr auto; gap: 14px; padding: 18px 0; border-bottom: 1px solid var(--line); align-items: center; }\n.item img, .item .ph { width: 64px; height: 80px; object-fit: cover; background: linear-gradient(145deg,var(--navy),var(--blue)); border-radius: 2px; }\n.item h4 { font-family: var(--serif); font-size: 16px; line-height: 1.3; color: var(--navy); }\n.item .p { font-size: 13.5px; color: var(--muted); margin-top: 2px; }\n.qty { display: flex; align-items: center; margin-top: 8px; border: 1px solid var(--line); width: fit-content; }\n.qty button { width: 28px; height: 28px; border: 0; background: #fff; font-size: 15px; color: var(--navy); }\n.qty button:hover { background: var(--sky); }\n.qty span { min-width: 30px; text-align: center; font-size: 13.5px; font-weight: 600; }\n.item .rm { background: none; border: 0; color: #8a94a8; font-size: 12px; text-decoration: underline; align-self: start; }\n.item .sub { font-weight: 600; font-size: 14.5px; text-align: right; }\n.cart-empty { text-align: center; color: var(--muted); padding: 70px 10px; font-size: 15px; }\n.d-foot { padding: 20px 26px 26px; border-top: 1px solid var(--line); background: var(--paper); }\n.d-foot label { display: block; font-size: 12px; font-weight: 600; letter-spacing: .04em; color: #3a4660; margin-bottom: 5px; }\n.d-foot input, .d-foot textarea { width: 100%; border: 1px solid var(--line); padding: 11px 13px; font-family: inherit; font-size: 14px; margin-bottom: 12px; border-radius: 2px; outline: none; background: #fff; resize: none; }\n.d-foot input:focus, .d-foot textarea:focus { border-color: var(--blue); }\n.total { display: flex; justify-content: space-between; align-items: baseline; margin: 6px 0 16px; }\n.total span { font-size: 14px; color: var(--muted); }\n.total b { font-family: var(--serif); font-size: 26px; color: var(--navy); }\n.wa-btn { width: 100%; background: #16a34a; color: #fff; border: 0; padding: 15px; font-size: 15px; font-weight: 600; display: flex; align-items: center; justify-content: center; gap: 10px; border-radius: 2px; transition: background .2s; }\n.wa-btn:hover { background: #128a3e; }\n.wa-btn:disabled { background: #9aa5b8; cursor: not-allowed; }\n.note { font-size: 12px; color: var(--muted); margin-top: 10px; text-align: center; }\n\n.float-wa { position: fixed; right: 22px; bottom: 22px; z-index: 60; width: 56px; height: 56px; border-radius: 50%; background: #16a34a; color: #fff; display: grid; place-items: center; box-shadow: 0 12px 26px -8px rgba(22,163,74,.6); transition: transform .2s; }\n.float-wa:hover { transform: translateY(-3px); }\n.toast { position: fixed; left: 50%; bottom: 28px; transform: translate(-50%, 20px); background: var(--navy); color: #fff; padding: 13px 22px; font-size: 14px; z-index: 99999; opacity: 0; pointer-events: none; transition: all .3s; border-left: 3px solid var(--gold); }\n.toast.show { opacity: 1; transform: translate(-50%, 0); }\n\n.reveal { opacity: 0; transform: translateY(18px); transition: opacity .7s ease, transform .7s ease; }\n.reveal.in { opacity: 1; transform: none; }\n@media (prefers-reduced-motion: reduce) { .reveal { opacity: 1; transform: none; transition: none; } }\n\n@media (max-width: 1020px) {\n  .grid { grid-template-columns: repeat(3,1fr); }\n  .hero .wrap { grid-template-columns: 1fr; gap: 56px; }\n  .hero-art { height: 460px; max-width: 520px; }\n  .svc-grid { grid-template-columns: repeat(2,1fr); }\n  .steps { grid-template-columns: repeat(2,1fr); gap: 40px 0; }\n  .band .wrap { grid-template-columns: 1fr; }\n  .band .txt { padding: 64px 24px; }\n  .f-grid { grid-template-columns: 1fr 1fr; }\n}\n@media (max-width: 760px) {\n  .strip .wrap span:last-child { display: none; }\n  nav.main { display: none; position: absolute; top: 74px; left: 0; right: 0; background: #fff; flex-direction: column; gap: 0; padding: 8px 24px 18px; border-bottom: 1px solid var(--line); }\n  nav.main.open { display: flex; }\n  nav.main a { padding: 14px 0; border-bottom: 1px solid var(--line); }\n  .burger { display: grid; place-items: center; }\n  .cart-btn .lbl { display: none; }\n  .grid { grid-template-columns: repeat(2,1fr); gap: 28px 16px; }\n  .svc-grid { grid-template-columns: 1fr; }\n  section { padding: 68px 0; }\n  .hero { padding: 52px 0 64px; }\n  .hero-art { height: 380px; }\n  .search input { width: 100%; }\n  .search { width: 100%; }\n  .steps { grid-template-columns: 1fr; }\n  .f-grid { grid-template-columns: 1fr; gap: 36px; }\n  .card h3 { font-size: 16.5px; }\n  .card .row { flex-direction: column; align-items: flex-start; }\n  .add { width: 100%; }\n}\n<\/style>\n\n<div class=\"strip\">\n  <div class=\"wrap\">\n    <span data-t=\"strip_text\">Pengiriman ke seluruh Indonesia &nbsp;\u00b7&nbsp; Konsultasi jasa gratis<\/span>\n    <span>WhatsApp: <a id=\"stripWa\" data-t=\"wa_display\" href=\"https:\/\/wa.me\/6285179756031\" target=\"_blank\" rel=\"noopener\">0851-7975-6031<\/a><\/span>\n  <\/div>\n<\/div>\n\n<header class=\"site\">\n  <div class=\"wrap\">\n    <a href=\"#top\" class=\"brand\" aria-label=\"Isfah Press\">\n      <span class=\"brand-mark\" data-logo>\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 5.5C4 4.7 4.7 4 5.5 4H11v16H5.5C4.7 20 4 19.3 4 18.5v-13Z\"\/><path d=\"M20 5.5c0-.8-.7-1.5-1.5-1.5H13v16h5.5c.8 0 1.5-.7 1.5-1.5v-13Z\"\/><\/svg>\n      <\/span>\n      <span><div class=\"brand-name\" data-t=\"brand_name\">Isfah Press<\/div><div class=\"brand-sub\" data-t=\"brand_tagline\">Buku &amp; Jasa Penerbitan<\/div><\/span>\n    <\/a>\n    <nav class=\"main\" id=\"nav\">\n      <a href=\"#buku\" data-t=\"nav_buku\">Koleksi Buku<\/a>\n      <a href=\"#jasa\" data-t=\"nav_jasa\">Layanan Jasa<\/a>\n      <a href=\"#proses\" data-t=\"nav_proses\">Cara Kerja<\/a>\n      <a href=\"#kontak\" data-t=\"nav_kontak\">Kontak<\/a>\n    <\/nav>\n    <div class=\"head-actions\">\n      <button class=\"cart-btn\" id=\"openCart\" aria-label=\"Buka keranjang\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 7h13l-1.5 9H8L6 7Z\"\/><path d=\"M6 7 5 3H2\"\/><circle cx=\"9\" cy=\"20\" r=\"1\"\/><circle cx=\"17\" cy=\"20\" r=\"1\"\/><\/svg>\n        <span class=\"lbl\">Keranjang<\/span><span class=\"cart-count\" id=\"cartCount\">0<\/span>\n      <\/button>\n      <button class=\"burger\" id=\"burger\" aria-label=\"Menu\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#0A1F44\" stroke-width=\"1.8\" stroke-linecap=\"round\"><path d=\"M4 7h16M4 12h16M4 17h16\"\/><\/svg><\/button>\n    <\/div>\n  <\/div>\n<\/header>\n\n<main id=\"top\">\n  <section class=\"hero\">\n    <div class=\"wrap\">\n      <div>\n        <div class=\"eyebrow\" data-t=\"hero_eyebrow\">Penerbit \u00b7 Toko Buku \u00b7 Jasa Kreatif<\/div>\n        <h1 data-h=\"hero_title\">Buku yang layak dibaca, <em>karya<\/em> yang layak diterbitkan.<\/h1>\n        <p class=\"lead\" data-t=\"hero_lead\">Isfah Press menghadirkan koleksi buku pilihan dan layanan penerbitan menyeluruh, dari penyuntingan naskah, desain sampul, hingga cetak, dengan pendampingan yang personal.<\/p>\n        <div class=\"cta-row\">\n          <a href=\"#buku\" class=\"btn btn-primary\" data-t=\"hero_cta1\">Jelajahi Koleksi<\/a>\n          <a href=\"#jasa\" class=\"btn btn-ghost\" data-t=\"hero_cta2\">Lihat Layanan Jasa<\/a>\n        <\/div>\n        <div class=\"hero-points\" id=\"heroPoints\">\n          <div><strong>Pesan via WhatsApp<\/strong>Langsung terhubung dengan tim kami<\/div>\n          <div><strong>Pendampingan penuh<\/strong>Dari naskah sampai buku jadi<\/div>\n          <div><strong>Kirim ke mana saja<\/strong>Pengiriman seluruh Indonesia<\/div>\n        <\/div>\n      <\/div>\n      <div class=\"hero-art reveal\">\n        <div class=\"block\"><\/div>\n        <img decoding=\"async\" class=\"img-a\" data-img=\"hero_img_a\" src=\"https:\/\/images.unsplash.com\/photo-1481627834876-b7833e8f5570?w=900&q=80&auto=format&fit=crop\" alt=\"Rak buku perpustakaan\">\n        <img decoding=\"async\" class=\"img-b\" data-img=\"hero_img_b\" src=\"https:\/\/images.unsplash.com\/photo-1455390582262-044cdead277a?w=700&q=80&auto=format&fit=crop\" alt=\"Menulis naskah di atas meja\">\n        <div class=\"tag\"><b data-t=\"hero_tag_title\">Isfah Press<\/b><span data-t=\"hero_tag_text\">Menerbitkan gagasan sejak awal<\/span><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section id=\"buku\">\n    <div class=\"wrap\">\n      <div class=\"sec-head reveal\">\n        <div><div class=\"eyebrow\" data-t=\"books_eyebrow\">Koleksi Buku<\/div><h2 data-t=\"books_title\">Pilihan bacaan untuk setiap rak<\/h2><\/div>\n        <p data-t=\"books_desc\">Temukan judul-judul terbaru dari penulis kami. Tambahkan ke keranjang, lalu selesaikan pesanan lewat WhatsApp.<\/p>\n      <\/div>\n      <div class=\"toolbar\">\n        <div class=\"chips\" id=\"chips\"><\/div>\n        <div class=\"search\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"m20 20-3.5-3.5\"\/><\/svg>\n          <input type=\"search\" id=\"q\" placeholder=\"Cari judul atau penulis\" data-ph=\"books_search\" aria-label=\"Cari buku\">\n        <\/div>\n      <\/div>\n      <div class=\"grid\" id=\"grid\"><\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"services\" id=\"jasa\">\n    <div class=\"wrap\">\n      <div class=\"sec-head reveal\">\n        <div><div class=\"eyebrow\" data-t=\"services_eyebrow\">Layanan Jasa<\/div><h2 data-t=\"services_title\">Satu tim untuk seluruh proses penerbitan<\/h2><\/div>\n        <p data-t=\"services_desc\">Pilih layanan satuan atau paket lengkap. Harga final menyesuaikan kebutuhan naskah Anda.<\/p>\n      <\/div>\n      <div class=\"svc-grid\" id=\"svcGrid\"><\/div>\n    <\/div>\n  <\/section>\n\n  <section id=\"proses\">\n    <div class=\"wrap\">\n      <div class=\"sec-head reveal\">\n        <div><div class=\"eyebrow\" data-t=\"process_eyebrow\">Cara Kerja<\/div><h2 data-t=\"process_title\">Alur yang sederhana dan transparan<\/h2><\/div>\n      <\/div>\n      <div class=\"steps reveal\" id=\"steps\">\n        <div class=\"step\"><h4>Konsultasi<\/h4><p>Ceritakan kebutuhan Anda lewat WhatsApp. Kami dengarkan dan sarankan pilihan terbaik.<\/p><\/div>\n        <div class=\"step\"><h4>Penawaran<\/h4><p>Anda menerima rincian biaya dan jadwal yang jelas sebelum pengerjaan dimulai.<\/p><\/div>\n        <div class=\"step\"><h4>Pengerjaan<\/h4><p>Tim kami mengerjakan, dengan tahap revisi bersama agar hasil sesuai harapan.<\/p><\/div>\n        <div class=\"step\"><h4>Selesai &amp; Kirim<\/h4><p>Hasil akhir diserahkan, atau buku dikemas rapi dan dikirim ke alamat Anda.<\/p><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"band\" id=\"kontak\">\n    <div class=\"wrap\">\n      <div class=\"txt\">\n        <div class=\"eyebrow\" data-t=\"cta_eyebrow\">Mulai Sekarang<\/div>\n        <h2 data-t=\"cta_title\">Punya naskah atau ide buku? Mari kita bicarakan.<\/h2>\n        <p data-t=\"cta_text\">Konsultasi awal tanpa biaya. Kirim pesan kepada kami dan ceritakan apa yang ingin Anda wujudkan.<\/p>\n        <a class=\"btn btn-primary\" id=\"ctaWa\" href=\"#\" target=\"_blank\" rel=\"noopener\">\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12.04 2a9.93 9.93 0 0 0-8.5 15.06L2 22l5.07-1.5A9.94 9.94 0 1 0 12.04 2Zm5.8 14.1c-.25.7-1.45 1.33-2 1.4-.52.07-1.17.1-1.9-.12a17 17 0 0 1-1.72-.63c-3.03-1.3-5-4.37-5.15-4.57-.15-.2-1.23-1.64-1.23-3.13s.78-2.22 1.06-2.52c.27-.3.6-.37.8-.37h.58c.19 0 .43-.07.67.5.25.6.84 2.07.92 2.22.07.15.12.32.02.52-.1.2-.15.32-.3.5l-.45.52c-.15.15-.3.31-.13.6.17.3.77 1.27 1.65 2.05 1.13 1 2.1 1.32 2.4 1.47.3.15.47.12.65-.07.17-.2.75-.87.95-1.17.2-.3.4-.25.67-.15.27.1 1.72.82 2.02.97.3.15.5.22.57.35.07.12.07.72-.18 1.42Z\"\/><\/svg>\n          <span data-t=\"cta_button\">Chat WhatsApp Sekarang<\/span>\n        <\/a>\n      <\/div>\n      <div class=\"pic\" data-bg=\"cta_image\" style=\"background-image:url('https:\/\/images.unsplash.com\/photo-1507842217343-583bb7270b66?w=1200&q=80&auto=format&fit=crop');background-color:#102a5c\" role=\"img\" aria-label=\"Perpustakaan dengan rak buku tinggi\"><\/div>\n    <\/div>\n  <\/section>\n<\/main>\n\n<footer>\n  <div class=\"wrap\">\n    <div class=\"f-grid\">\n      <div>\n        <div class=\"brand\">\n          <span class=\"brand-mark\" data-logo><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 5.5C4 4.7 4.7 4 5.5 4H11v16H5.5C4.7 20 4 19.3 4 18.5v-13Z\"\/><path d=\"M20 5.5c0-.8-.7-1.5-1.5-1.5H13v16h5.5c.8 0 1.5-.7 1.5-1.5v-13Z\"\/><\/svg><\/span>\n          <span><div class=\"brand-name\" data-t=\"brand_name\">Isfah Press<\/div><\/span>\n        <\/div>\n        <p data-t=\"footer_about\">Toko buku online dan penyedia jasa penerbitan. Kami membantu gagasan menjadi buku yang rapi dan siap dibaca.<\/p>\n      <\/div>\n      <div>\n        <h5 data-t=\"footer_col1\">Jelajahi<\/h5>\n        <ul>\n          <li><a href=\"#buku\" data-t=\"nav_buku\">Koleksi Buku<\/a><\/li>\n          <li><a href=\"#jasa\" data-t=\"nav_jasa\">Layanan Jasa<\/a><\/li>\n          <li><a href=\"#proses\" data-t=\"nav_proses\">Cara Kerja<\/a><\/li>\n        <\/ul>\n      <\/div>\n      <div>\n        <h5 data-t=\"footer_col2\">Hubungi Kami<\/h5>\n        <ul>\n          <li><a id=\"footWa\" href=\"#\" target=\"_blank\" rel=\"noopener\">WhatsApp <span data-t=\"wa_display\">0851-7975-6031<\/span><\/a><\/li>\n          <li data-t=\"footer_hours\">Senin \u2013 Sabtu, 08.00 \u2013 17.00 WIB<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n    <div class=\"copy\"><span>\u00a9 <span id=\"yr\"><\/span> <span data-t=\"brand_name\">Isfah Press<\/span>. <span data-t=\"footer_copy\">Seluruh hak cipta dilindungi.<\/span><\/span><span data-t=\"footer_right\">Toko Buku &amp; Jasa Penerbitan<\/span><\/div>\n  <\/div>\n<\/footer>\n\n<div class=\"overlay\" id=\"overlay\"><\/div>\n<aside class=\"drawer\" id=\"drawer\" aria-label=\"Keranjang belanja\" aria-hidden=\"true\">\n  <div class=\"d-head\"><h3 data-t=\"cart_title\">Keranjang Anda<\/h3><button class=\"x\" id=\"closeCart\" aria-label=\"Tutup\">\u00d7<\/button><\/div>\n  <div class=\"d-body\" id=\"cartBody\"><\/div>\n  <div class=\"d-foot\" id=\"cartFoot\">\n    <label for=\"cName\">Nama<\/label>\n    <input id=\"cName\" type=\"text\" placeholder=\"Nama lengkap\" autocomplete=\"name\">\n    <label for=\"cNote\">Alamat pengiriman \/ catatan<\/label>\n    <textarea id=\"cNote\" rows=\"2\" placeholder=\"Alamat lengkap atau catatan tambahan\"><\/textarea>\n    <div class=\"total\"><span>Total<\/span><b id=\"cartTotal\">Rp 0<\/b><\/div>\n    <button class=\"wa-btn\" id=\"checkout\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12.04 2a9.93 9.93 0 0 0-8.5 15.06L2 22l5.07-1.5A9.94 9.94 0 1 0 12.04 2Zm5.8 14.1c-.25.7-1.45 1.33-2 1.4-.52.07-1.17.1-1.9-.12a17 17 0 0 1-1.72-.63c-3.03-1.3-5-4.37-5.15-4.57-.15-.2-1.23-1.64-1.23-3.13s.78-2.22 1.06-2.52c.27-.3.6-.37.8-.37h.58c.19 0 .43-.07.67.5.25.6.84 2.07.92 2.22.07.15.12.32.02.52-.1.2-.15.32-.3.5l-.45.52c-.15.15-.3.31-.13.6.17.3.77 1.27 1.65 2.05 1.13 1 2.1 1.32 2.4 1.47.3.15.47.12.65-.07.17-.2.75-.87.95-1.17.2-.3.4-.25.67-.15.27.1 1.72.82 2.02.97.3.15.5.22.57.35.07.12.07.72-.18 1.42Z\"\/><\/svg>\n      Pesan via WhatsApp\n    <\/button>\n    <div class=\"note\" data-t=\"cart_note\">Anda akan diarahkan ke WhatsApp untuk konfirmasi stok dan ongkir.<\/div>\n  <\/div>\n<\/aside>\n\n<a class=\"float-wa\" id=\"floatWa\" href=\"#\" target=\"_blank\" rel=\"noopener\" aria-label=\"Chat WhatsApp\">\n  <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12.04 2a9.93 9.93 0 0 0-8.5 15.06L2 22l5.07-1.5A9.94 9.94 0 1 0 12.04 2Zm5.8 14.1c-.25.7-1.45 1.33-2 1.4-.52.07-1.17.1-1.9-.12a17 17 0 0 1-1.72-.63c-3.03-1.3-5-4.37-5.15-4.57-.15-.2-1.23-1.64-1.23-3.13s.78-2.22 1.06-2.52c.27-.3.6-.37.8-.37h.58c.19 0 .43-.07.67.5.25.6.84 2.07.92 2.22.07.15.12.32.02.52-.1.2-.15.32-.3.5l-.45.52c-.15.15-.3.31-.13.6.17.3.77 1.27 1.65 2.05 1.13 1 2.1 1.32 2.4 1.47.3.15.47.12.65-.07.17-.2.75-.87.95-1.17.2-.3.4-.25.67-.15.27.1 1.72.82 2.02.97.3.15.5.22.57.35.07.12.07.72-.18 1.42Z\"\/><\/svg>\n<\/a>\n<div class=\"toast\" id=\"toast\"><\/div>\n\n<script>\nconst CONFIG = {\n  API_BASE: \"https:\/\/api-semua-sample.amirkun265.workers.dev\",\n  WA_NUMBER: \"6285179756031\",\n  STORE: \"Isfah Press\"\n};\n\nconst FALLBACK_PRODUCTS = [\n  {id:\"s1\",title:\"Senja di Ujung Dermaga\",author:\"Raisa Anindya\",category:\"Fiksi\",price:79000,image:\"https:\/\/images.unsplash.com\/photo-1544947950-fa07a98d237f?w=700&q=80&auto=format&fit=crop\"},\n  {id:\"s2\",title:\"Dasar-Dasar Menulis Efektif\",author:\"Dimas Pratama\",category:\"Nonfiksi\",price:95000,image:\"https:\/\/images.unsplash.com\/photo-1512820790803-83ca734da794?w=700&q=80&auto=format&fit=crop\"},\n  {id:\"s3\",title:\"Strategi Usaha Kecil Menengah\",author:\"Laila Kusuma\",category:\"Bisnis\",price:119000,image:\"https:\/\/images.unsplash.com\/photo-1495446815901-a7297e633e8d?w=700&q=80&auto=format&fit=crop\"},\n  {id:\"s4\",title:\"Matematika Asyik untuk SD\",author:\"Tim Isfah Press\",category:\"Pendidikan\",price:65000,image:\"https:\/\/images.unsplash.com\/photo-1589998059171-988d887df646?w=700&q=80&auto=format&fit=crop\"},\n  {id:\"s5\",title:\"Petualangan Si Kancil Modern\",author:\"Nadia Safitri\",category:\"Anak\",price:58000,image:\"https:\/\/images.unsplash.com\/photo-1543002588-bfa74002ed7e?w=700&q=80&auto=format&fit=crop\"},\n  {id:\"s6\",title:\"Hening: Seni Hidup Sederhana\",author:\"Arga Wibisono\",category:\"Nonfiksi\",price:89000,image:\"https:\/\/images.unsplash.com\/photo-1532012197267-da84d127e765?w=700&q=80&auto=format&fit=crop\"},\n  {id:\"s7\",title:\"Surat untuk Kota Lama\",author:\"Hafiz Ramadhan\",category:\"Fiksi\",price:72000,image:\"https:\/\/images.unsplash.com\/photo-1457369804613-52c61a468e7d?w=700&q=80&auto=format&fit=crop\"},\n  {id:\"s8\",title:\"Panduan Manajemen Keuangan Pribadi\",author:\"Rina Maharani\",category:\"Bisnis\",price:105000,image:\"https:\/\/images.unsplash.com\/photo-1516979187457-637abb4f9353?w=700&q=80&auto=format&fit=crop\"}\n];\nconst FALLBACK_SERVICES = [\n  {id:\"v1\",name:\"Penerbitan Buku\",description:\"Paket penerbitan lengkap: penyuntingan, ISBN, desain, layout, hingga cetak perdana.\",price_from:1500000,unit:\"\/ proyek\",icon:\"book\"},\n  {id:\"v2\",name:\"Desain Cover Buku\",description:\"Sampul yang kuat dan sesuai karakter buku, termasuk revisi hingga Anda puas.\",price_from:350000,unit:\"\/ cover\",icon:\"palette\"},\n  {id:\"v3\",name:\"Layout & Tata Letak Isi\",description:\"Penataan halaman isi yang rapi, nyaman dibaca, siap cetak maupun digital.\",price_from:500000,unit:\"\/ naskah\",icon:\"layout\"},\n  {id:\"v4\",name:\"Editing & Proofreading\",description:\"Penyuntingan bahasa dan pemeriksaan ejaan sesuai PUEBI oleh editor berpengalaman.\",price_from:25000,unit:\"\/ halaman\",icon:\"pen\"},\n  {id:\"v5\",name:\"Cetak Buku On-Demand\",description:\"Cetak sesuai kebutuhan, mulai dari satuan, dengan pilihan kertas dan jilid.\",price_from:45000,unit:\"\/ eksemplar\",icon:\"printer\"},\n  {id:\"v6\",name:\"Desain Grafis & Percetakan\",description:\"Brosur, undangan, spanduk, dan kebutuhan cetak lainnya dari desain sampai jadi.\",price_from:150000,unit:\"\/ desain\",icon:\"check\"}\n];\n\nconst ICONS = {\n  book:'<path d=\"M4 5.5C4 4.7 4.7 4 5.5 4H11v16H5.5C4.7 20 4 19.3 4 18.5v-13Z\"\/><path d=\"M20 5.5c0-.8-.7-1.5-1.5-1.5H13v16h5.5c.8 0 1.5-.7 1.5-1.5v-13Z\"\/>',\n  palette:'<path d=\"M12 3a9 9 0 1 0 0 18c1.2 0 2-.8 2-1.8 0-.5-.2-.9-.5-1.3-.3-.4-.5-.8-.5-1.3 0-1 .8-1.8 1.8-1.8H17a4 4 0 0 0 4-4C21 6.6 17 3 12 3Z\"\/><circle cx=\"7.5\" cy=\"11\" r=\"1\"\/><circle cx=\"10\" cy=\"7\" r=\"1\"\/><circle cx=\"15\" cy=\"7.5\" r=\"1\"\/>',\n  layout:'<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"1\"\/><path d=\"M3 10h18M10 10v10\"\/>',\n  pen:'<path d=\"M4 20l1-4L16.5 4.5a2 2 0 0 1 3 3L8 19l-4 1Z\"\/><path d=\"M14 7l3 3\"\/>',\n  printer:'<path d=\"M7 9V3h10v6\"\/><rect x=\"3\" y=\"9\" width=\"18\" height=\"8\" rx=\"1\"\/><path d=\"M7 14h10v7H7z\"\/>',\n  check:'<path d=\"M5 12l4.5 4.5L19 7\"\/><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"1\"\/>'\n};\n\nconst $ = s => document.querySelector(s);\nconst fmt = n => \"Rp \" + Number(n || 0).toLocaleString(\"id-ID\");\nconst esc = s => String(s ?? \"\").replace(\/[&<>\"']\/g, c => ({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"}[c]));\nconst imgUrl = u => {\n  if (!u) return \"\";\n  if (\/^https?:\\\/\\\/\/i.test(u)) return u;\n  if (u.startsWith(\"\/\")) return CONFIG.API_BASE + u;\n  return \"\";\n};\nconst waLink = text => \"https:\/\/wa.me\/\" + CONFIG.WA_NUMBER + (text ? \"?text=\" + encodeURIComponent(text) : \"\");\nfunction toast(msg){const t=$(\"#toast\");if(!t)return;t.textContent=msg;t.classList.add(\"show\");clearTimeout(toast._t);toast._t=setTimeout(()=>t.classList.remove(\"show\"),2200);}\nasync function api(path, opts = {}, timeout = 6000){\n  const ctrl = new AbortController();\n  const t = setTimeout(() => ctrl.abort(), timeout);\n  try{\n    const r = await fetch(CONFIG.API_BASE + path, {...opts, signal: ctrl.signal});\n    if(!r.ok) throw new Error(\"HTTP \" + r.status);\n    return await r.json();\n  } finally { clearTimeout(t); }\n}\n\nconst DEFAULTS = {\n  \"brand_name\": \"Isfah Press\",\n  \"brand_tagline\": \"Buku & Jasa Penerbitan\",\n  \"logo_url\": \"\",\n  \"meta_title\": \"Isfah Press \u2014 Toko Buku & Jasa Penerbitan\",\n  \"meta_description\": \"Isfah Press: toko buku online dan jasa penerbitan, editing, desain cover, layout, serta cetak. Pemesanan mudah lewat WhatsApp.\",\n  \"wa_display\": \"0851-7975-6031\",\n  \"wa_number\": \"6285179756031\",\n  \"wa_hello\": \"Halo {brand}, saya ingin bertanya tentang buku dan layanan jasa.\",\n  \"wa_order_intro\": \"Halo {brand}, saya ingin memesan:\",\n  \"wa_order_closing\": \"Mohon konfirmasi stok dan ongkos kirim. Terima kasih.\",\n  \"wa_service\": \"Halo {brand}, saya ingin konsultasi layanan \\\"{service}\\\". Mohon informasinya.\",\n  \"strip_text\": \"Pengiriman ke seluruh Indonesia \u00b7 Konsultasi jasa gratis\",\n  \"nav_buku\": \"Koleksi Buku\",\n  \"nav_jasa\": \"Layanan Jasa\",\n  \"nav_proses\": \"Cara Kerja\",\n  \"nav_kontak\": \"Kontak\",\n  \"hero_eyebrow\": \"Penerbit \u00b7 Toko Buku \u00b7 Jasa Kreatif\",\n  \"hero_title\": \"Buku yang layak dibaca, *karya* yang layak diterbitkan.\",\n  \"hero_lead\": \"Isfah Press menghadirkan koleksi buku pilihan dan layanan penerbitan menyeluruh, dari penyuntingan naskah, desain sampul, hingga cetak, dengan pendampingan yang personal.\",\n  \"hero_cta1\": \"Jelajahi Koleksi\",\n  \"hero_cta2\": \"Lihat Layanan Jasa\",\n  \"hero_points\": [\n    { \"title\": \"Pesan via WhatsApp\", \"text\": \"Langsung terhubung dengan tim kami\" },\n    { \"title\": \"Pendampingan penuh\", \"text\": \"Dari naskah sampai buku jadi\" },\n    { \"title\": \"Kirim ke mana saja\", \"text\": \"Pengiriman seluruh Indonesia\" }\n  ],\n  \"hero_img_a\": \"https:\/\/images.unsplash.com\/photo-1481627834876-b7833e8f5570?w=900&q=80&auto=format&fit=crop\",\n  \"hero_img_b\": \"https:\/\/images.unsplash.com\/photo-1455390582262-044cdead277a?w=700&q=80&auto=format&fit=crop\",\n  \"hero_tag_title\": \"Isfah Press\",\n  \"hero_tag_text\": \"Menerbitkan gagasan sejak awal\",\n  \"books_eyebrow\": \"Koleksi Buku\",\n  \"books_title\": \"Pilihan bacaan untuk setiap rak\",\n  \"books_desc\": \"Temukan judul-judul terbaru dari penulis kami. Tambahkan ke keranjang, lalu selesaikan pesanan lewat WhatsApp.\",\n  \"books_search\": \"Cari judul atau penulis\",\n  \"books_empty\": \"Buku yang Anda cari belum tersedia.\",\n  \"services_eyebrow\": \"Layanan Jasa\",\n  \"services_title\": \"Satu tim untuk seluruh proses penerbitan\",\n  \"services_desc\": \"Pilih layanan satuan atau paket lengkap. Harga final menyesuaikan kebutuhan naskah Anda.\",\n  \"services_cta\": \"Tanya via WhatsApp \u2192\",\n  \"process_eyebrow\": \"Cara Kerja\",\n  \"process_title\": \"Alur yang sederhana dan transparan\",\n  \"process_steps\": [\n    { \"title\": \"Konsultasi\", \"text\": \"Ceritakan kebutuhan Anda lewat WhatsApp. Kami dengarkan dan sarankan pilihan terbaik.\" },\n    { \"title\": \"Penawaran\", \"text\": \"Anda menerima rincian biaya dan jadwal yang jelas sebelum pengerjaan dimulai.\" },\n    { \"title\": \"Pengerjaan\", \"text\": \"Tim kami mengerjakan, dengan tahap revisi bersama agar hasil sesuai harapan.\" },\n    { \"title\": \"Selesai & Kirim\", \"text\": \"Hasil akhir diserahkan, atau buku dikemas rapi dan dikirim ke alamat Anda.\" }\n  ],\n  \"cta_eyebrow\": \"Mulai Sekarang\",\n  \"cta_title\": \"Punya naskah atau ide buku? Mari kita bicarakan.\",\n  \"cta_text\": \"Konsultasi awal tanpa biaya. Kirim pesan kepada kami dan ceritakan apa yang ingin Anda wujudkan.\",\n  \"cta_button\": \"Chat WhatsApp Sekarang\",\n  \"cta_image\": \"https:\/\/images.unsplash.com\/photo-1507842217343-583bb7270b66?w=1200&q=80&auto=format&fit=crop\",\n  \"footer_about\": \"Toko buku online dan penyedia jasa penerbitan. Kami membantu gagasan menjadi buku yang rapi dan siap dibaca.\",\n  \"footer_col1\": \"Jelajahi\",\n  \"footer_col2\": \"Hubungi Kami\",\n  \"footer_hours\": \"Senin \u2013 Sabtu, 08.00 \u2013 17.00 WIB\",\n  \"footer_copy\": \"Seluruh hak cipta dilindungi.\",\n  \"footer_right\": \"Toko Buku & Jasa Penerbitan\",\n  \"cart_title\": \"Keranjang Anda\",\n  \"cart_note\": \"Anda akan diarahkan ke WhatsApp untuk konfirmasi stok dan ongkir.\",\n  \"color_navy\": \"#0A1F44\",\n  \"color_blue\": \"#1F4FD8\",\n  \"color_accent\": \"#B8935A\"\n};\nconst MUST_FILL = [\"color_navy\",\"color_blue\",\"color_accent\",\"wa_number\",\"brand_name\"];\nlet S = {...DEFAULTS};\nconst tpl = (str, vars) => String(str ?? \"\").replace(\/\\{(\\w+)\\}\/g, (m, k) => vars[k] ?? m);\nconst titleHtml = t => esc(t).replace(\/\\*([^*]+)\\*\/g, \"<em>$1<\/em>\");\n\nfunction mergeSettings(data){\n  const out = {...DEFAULTS};\n  for(const k of Object.keys(DEFAULTS)){\n    const v = data[k];\n    if(v === undefined || v === null) continue;\n    if(typeof v === \"string\" && v === \"\" && MUST_FILL.includes(k)) continue;\n    if(Array.isArray(DEFAULTS[k]) && !Array.isArray(v)) continue;\n    out[k] = v;\n  }\n  return out;\n}\n\nfunction applySettings(){\n  CONFIG.WA_NUMBER = String(S.wa_number).replace(\/\\D\/g, \"\") || DEFAULTS.wa_number;\n  CONFIG.STORE = S.brand_name;\n  const r = document.documentElement.style;\n  r.setProperty(\"--navy\", S.color_navy); r.setProperty(\"--blue\", S.color_blue); r.setProperty(\"--gold\", S.color_accent);\n  document.querySelectorAll(\"[data-t]\").forEach(el => { const v = S[el.dataset.t]; if(v !== undefined) el.textContent = v; });\n  document.querySelectorAll(\"[data-h]\").forEach(el => { el.innerHTML = titleHtml(S[el.dataset.h]); });\n  document.querySelectorAll(\"[data-ph]\").forEach(el => { el.placeholder = S[el.dataset.ph]; });\n  document.querySelectorAll(\"img[data-img]\").forEach(el => { const u = imgUrl(S[el.dataset.img]); if(u) el.src = u; });\n  document.querySelectorAll(\"[data-bg]\").forEach(el => { const u = imgUrl(S[el.dataset.bg]); if(u) el.style.backgroundImage = \"url('\" + u.replace(\/'\/g, \"%27\") + \"')\"; });\n  \n  const logo = imgUrl(S.logo_url);\n  document.querySelectorAll(\"[data-logo]\").forEach(el => {\n    if(el.dataset.orig === undefined) el.dataset.orig = el.innerHTML;\n    if(logo){ el.innerHTML = '<img decoding=\"async\" src=\"' + esc(logo) + '\" alt=\"\" style=\"width:100%;height:100%;object-fit:contain\">'; el.style.background = \"transparent\"; }\n    else { el.innerHTML = el.dataset.orig; el.style.background = \"\"; }\n  });\n  \n  const hp = $(\"#heroPoints\");\n  if(hp) hp.innerHTML = (S.hero_points || []).map(p => `<div><strong>${esc(p.title)}<\/strong>${esc(p.text)}<\/div>`).join(\"\");\n  const st = $(\"#steps\");\n  if(st) st.innerHTML = (S.process_steps || []).map(p => `<div class=\"step\"><h4>${esc(p.title)}<\/h4><p>${esc(p.text)}<\/p><\/div>`).join(\"\");\n  \n  const hello = waLink(tpl(S.wa_hello, {brand: S.brand_name}));\n  [\"#ctaWa\",\"#footWa\",\"#floatWa\",\"#stripWa\"].forEach(sel => { const el = $(sel); if(el) el.href = hello; });\n}\n\nlet products = [], services = [], activeCat = \"Semua\", query = \"\";\nlet cart = [];\ntry { cart = JSON.parse(localStorage.getItem(\"isfah_cart\") || \"[]\"); } catch(e){ cart = []; }\nconst saveCart = () => { try{ localStorage.setItem(\"isfah_cart\", JSON.stringify(cart)); }catch(e){} };\n\nfunction renderChips(){\n  const chipsEl = $(\"#chips\");\n  if(!chipsEl) return;\n  const cats = [\"Semua\", ...new Set(products.map(p => p.category).filter(Boolean))];\n  chipsEl.innerHTML = cats.map(c => `<button class=\"chip ${c===activeCat?\"on\":\"\"}\" data-cat=\"${esc(c)}\">${esc(c)}<\/button>`).join(\"\");\n}\n\nfunction renderGrid(){\n  const gridEl = $(\"#grid\");\n  if(!gridEl) return;\n  const q = query.trim().toLowerCase();\n  const list = products.filter(p =>\n    (activeCat === \"Semua\" || p.category === activeCat) &&\n    (!q || (p.title||\"\").toLowerCase().includes(q) || (p.author||\"\").toLowerCase().includes(q))\n  );\n  if(!list.length){ gridEl.innerHTML = `<div class=\"empty\">${esc(S.books_empty)}<\/div>`; return; }\n  gridEl.innerHTML = list.map(p => {\n    const src = imgUrl(p.image);\n    return `<article class=\"card reveal\">\n      <div class=\"cover\">\n        ${src ? `<img decoding=\"async\" src=\"${esc(src)}\" alt=\"${esc(p.title)}\" loading=\"lazy\" onerror=\"this.style.display='none'\">` : \"\"}\n        ${p.category ? `<span class=\"cat\">${esc(p.category)}<\/span>` : \"\"}\n      <\/div>\n      <h3>${esc(p.title)}<\/h3>\n      <div class=\"author\">${esc(p.author)}<\/div>\n      <div class=\"row\"><span class=\"price\">${fmt(p.price)}<\/span><button class=\"add\" data-id=\"${esc(p.id)}\">+ Keranjang<\/button><\/div>\n    <\/article>`;\n  }).join(\"\");\n  observe();\n}\n\nfunction renderServices(){\n  const svcEl = $(\"#svcGrid\");\n  if(!svcEl) return;\n  svcEl.innerHTML = services.map(s => {\n    const msg = tpl(S.wa_service, {brand: S.brand_name, service: s.name});\n    return `<div class=\"svc reveal\">\n      <div class=\"ico\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${ICONS[s.icon] || ICONS.book}<\/svg><\/div>\n      <h3>${esc(s.name)}<\/h3>\n      <p>${esc(s.description)}<\/p>\n      <div class=\"foot\">\n        <div class=\"from\">Mulai dari<b>${fmt(s.price_from)} <small style=\"font-weight:400;color:#8fa2c8\">${esc(s.unit||\"\")}<\/small><\/b><\/div>\n        <a class=\"ask\" href=\"${waLink(msg)}\" target=\"_blank\" rel=\"noopener\">${esc(S.services_cta)}<\/a>\n      <\/div>\n    <\/div>`;\n  }).join(\"\");\n  observe();\n}\n\nfunction cartTotal(){ return cart.reduce((a,i)=>a+i.price*i.qty,0); }\n\nfunction renderCart(){\n  const cc = $(\"#cartCount\"); if(cc) cc.textContent = cart.reduce((a,i)=>a+i.qty,0);\n  const ct = $(\"#cartTotal\"); if(ct) ct.textContent = fmt(cartTotal());\n  const cf = $(\"#cartFoot\"); if(cf) cf.style.display = cart.length ? \"block\" : \"none\";\n  const cb = $(\"#cartBody\");\n  if(!cb) return;\n  if(!cart.length){ cb.innerHTML = '<div class=\"cart-empty\">Keranjang masih kosong.<br>Pilih buku dari koleksi kami.<\/div>'; return; }\n  cb.innerHTML = cart.map(i => {\n    const src = imgUrl(i.image);\n    return `<div class=\"item\">\n      ${src ? `<img decoding=\"async\" src=\"${esc(src)}\" alt=\"\" onerror=\"this.outerHTML='<div class=ph><\/div>'\">` : '<div class=\"ph\"><\/div>'}\n      <div>\n        <h4>${esc(i.title)}<\/h4>\n        <div class=\"p\">${fmt(i.price)}<\/div>\n        <div class=\"qty\"><button data-act=\"dec\" data-id=\"${esc(i.id)}\" aria-label=\"Kurangi\">\u2212<\/button><span>${i.qty}<\/span><button data-act=\"inc\" data-id=\"${esc(i.id)}\" aria-label=\"Tambah\">+<\/button><\/div>\n      <\/div>\n      <div style=\"text-align:right\"><div class=\"sub\">${fmt(i.price*i.qty)}<\/div><button class=\"rm\" data-act=\"rm\" data-id=\"${esc(i.id)}\">Hapus<\/button><\/div>\n    <\/div>`;\n  }).join(\"\");\n}\n\nfunction addToCart(id){\n  const p = products.find(x => String(x.id) === String(id));\n  if(!p) return;\n  const ex = cart.find(i => String(i.id) === String(id));\n  if(ex) ex.qty++; else cart.push({id:p.id,title:p.title,price:Number(p.price),image:p.image,qty:1});\n  saveCart(); renderCart(); toast(\"Ditambahkan ke keranjang\");\n}\n\nfunction openCart(){\n  const d = $(\"#drawer\"), o = $(\"#overlay\"), f = $(\"#floatWa\");\n  if(d) d.classList.add(\"open\");\n  if(o) o.classList.add(\"open\");\n  if(f) f.style.display = \"none\";\n}\n\nfunction closeCart(){\n  const d = $(\"#drawer\"), o = $(\"#overlay\"), f = $(\"#floatWa\");\n  if(d) d.classList.remove(\"open\");\n  if(o) o.classList.remove(\"open\");\n  if(f) f.style.display = \"\";\n}\n\nasync function checkout(){\n  if(!cart.length) return;\n  const nameEl = $(\"#cName\");\n  const noteEl = $(\"#cNote\");\n  const name = nameEl ? nameEl.value.trim() : \"\";\n  const note = noteEl ? noteEl.value.trim() : \"\";\n  if(!name){ if(nameEl) nameEl.focus(); toast(\"Mohon isi nama Anda\"); return; }\n  const btn = $(\"#checkout\"); if(btn) btn.disabled = true;\n  let code = \"\";\n  try{\n    const res = await api(\"\/api\/orders\", {\n      method:\"POST\", headers:{\"Content-Type\":\"application\/json\"},\n      body: JSON.stringify({customer:name, note, items: cart.map(i=>({id:i.id,qty:i.qty}))})\n    }, 5000);\n    code = res.code || \"\";\n  }catch(e){ \/* abaikan *\/ }\n  const lines = cart.map((i,n)=>`${n+1}. ${i.title} x${i.qty} = ${fmt(i.price*i.qty)}`);\n  const text = [\n    tpl(S.wa_order_intro, {brand: S.brand_name}), \"\", ...lines, \"\",\n    `Total: ${fmt(cartTotal())}`, \"\",\n    `Nama: ${name}`,\n    note ? `Alamat\/Catatan: ${note}` : \"\",\n    code ? `Kode pesanan: ${code}` : \"\",\n    \"\", S.wa_order_closing\n  ].filter((l,i,a)=> l !== \"\" || (a[i-1] !== \"\" && i !== a.length-1)).join(\"\\n\");\n  window.open(waLink(text), \"_blank\", \"noopener\");\n  if(btn) btn.disabled = false;\n}\n\nfunction observe(){\n  const els = document.querySelectorAll(\".reveal:not(.in)\");\n  if(!(\"IntersectionObserver\" in window)){ els.forEach(e=>e.classList.add(\"in\")); return; }\n  const io = new IntersectionObserver(es => es.forEach(e => { if(e.isIntersecting){ e.target.classList.add(\"in\"); io.unobserve(e.target); } }), {threshold:.08});\n  els.forEach(e => io.observe(e));\n}\n\nasync function load(){\n  const gridEl = $(\"#grid\");\n  if(gridEl) gridEl.innerHTML = Array(4).fill('<div><div class=\"skel\"><\/div><\/div>').join(\"\");\n  const [p, s, st] = await Promise.allSettled([api(\"\/api\/products\"), api(\"\/api\/services\"), api(\"\/api\/settings\")]);\n  if(st.status === \"fulfilled\" && st.value && st.value.data){ S = mergeSettings(st.value.data); applySettings(); }\n  products = (p.status===\"fulfilled\" && Array.isArray(p.value.data) && p.value.data.length) ? p.value.data : FALLBACK_PRODUCTS;\n  services = (s.status===\"fulfilled\" && Array.isArray(s.value.data) && s.value.data.length) ? s.value.data : FALLBACK_SERVICES;\n  renderChips(); renderGrid(); renderServices(); renderCart();\n}\n\ndocument.addEventListener(\"click\", e => {\n  const chip = e.target.closest(\".chip\"); if(chip){ activeCat = chip.dataset.cat; renderChips(); renderGrid(); return; }\n  const add = e.target.closest(\".add\"); if(add){ addToCart(add.dataset.id); return; }\n  const act = e.target.closest(\"[data-act]\");\n  if(act){\n    const i = cart.find(x => String(x.id) === act.dataset.id);\n    if(i){\n      if(act.dataset.act===\"inc\") i.qty++;\n      if(act.dataset.act===\"dec\") i.qty = Math.max(0, i.qty-1);\n      if(act.dataset.act===\"rm\") i.qty = 0;\n      cart = cart.filter(x => x.qty > 0); saveCart(); renderCart();\n    }\n  }\n});\n\nconst qEl = $(\"#q\"); if(qEl) qEl.addEventListener(\"input\", e => { query = e.target.value; renderGrid(); });\nconst oc = $(\"#openCart\"); if(oc) oc.addEventListener(\"click\", openCart);\nconst cc = $(\"#closeCart\"); if(cc) cc.addEventListener(\"click\", closeCart);\nconst ov = $(\"#overlay\"); if(ov) ov.addEventListener(\"click\", closeCart);\ndocument.addEventListener(\"keydown\", e => { if(e.key===\"Escape\") closeCart(); });\nconst co = $(\"#checkout\"); if(co) co.addEventListener(\"click\", checkout);\nconst bg = $(\"#burger\"); if(bg) bg.addEventListener(\"click\", () => { const n = $(\"#nav\"); if(n) n.classList.toggle(\"open\"); });\nconst nv = $(\"#nav\"); if(nv) nv.addEventListener(\"click\", e => { if(e.target.tagName===\"A\" && nv) nv.classList.remove(\"open\"); });\n\napplySettings();\nconst yr = $(\"#yr\"); if(yr) yr.textContent = new Date().getFullYear();\nobserve(); \nload();\n<\/script>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Pengiriman ke seluruh Indonesia &nbsp;\u00b7&nbsp; Konsultasi jasa gratis WhatsApp: 0851-7975-6031 Isfah PressBuku &amp; Jasa Penerbitan Koleksi Buku Layanan Jasa Cara Kerja Kontak Keranjang0 Penerbit \u00b7 Toko Buku \u00b7 Jasa Kreatif Buku yang layak dibaca, karya yang layak diterbitkan. Isfah Press menghadirkan koleksi buku pilihan dan layanan penerbitan menyeluruh, dari penyuntingan naskah, desain sampul, hingga cetak,<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-10","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=\/wp\/v2\/pages\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10"}],"version-history":[{"count":22,"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions"}],"predecessor-version":[{"id":38,"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions\/38"}],"wp:attachment":[{"href":"https:\/\/webkilat-sampel.duckdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}