{"slug":"nasty","storeName":"Nasty","template":"custom","customHtml":"<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<link rel=\"preconnect\" href=\"https://api.mobu.market\" crossorigin>\n<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=Sedgwick+Ave+Display&family=Permanent+Marker&family=Space+Grotesk:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n<!--\n  NASTY Smoke Shop — customHtml del storefront de MOBU (slug «nasty»). Construido el 14/11/2026.\n  Rutas por hash: #/ · #/tienda · #/categoria/<slug> · #/producto/<handle> · #/contacto · #/carrito · #/checkout · #/pedido-ok · #/pagina/<key>\n  API pública (base = apiBase() del shell o https://api.mobu.market):\n    GET  /api/public/storefronts/{slug}/config | products | categories\n    POST /api/public/storefronts/{slug}/quote     {items:[{handle,quantity}],couponCode?}\n    POST /api/public/storefronts/{slug}/checkout  {externalOrderId,buyer,items,shippingMethod,shippingAddress,paymentMethod,couponCode?}\n    POST /api/public/crm/forms/{token}/submit     (formulario del CRM → Lead)\n    GET  /api/public/crm/webchat/{token} · GET|POST …/messages (chat web del CRM)\n  Cableado con MOBU: el catálogo, precios y stock salen de Inventario; cada pedido entra a Ventas › Bandeja de pedidos\n  (crea el contacto comprador, descuenta stock al facturar y asienta en Contabilidad); el formulario crea un Lead en CRM.\n  Si el shell ya cargó la config (window.MOBU.config) se renderiza al instante; products y categories se piden en paralelo.\n  Motion: sólo transform/opacity; todo apagado con prefers-reduced-motion. Clases con prefijo ns-.\n-->\n<style>\nbody{margin:0;background:#0b0b0f}\n.ns{\n  --bg:#0b0b0f;--bg2:#15151c;--card:#111118;--line:#262630;--line2:#3a3a48;--ink:#fff;--ink2:#d9d9e3;--muted:#9a9aab;\n  --pink:#ff2d8a;--pink-d:#d61a6e;--lime:#c9ff3b;--lime-ink:#1a2400;--ok:#7fe0a4;--bad:#ff8a7a;\n  --r:18px;--gut:18px;--max:1180px;\n  --out:cubic-bezier(.22,1,.36,1);--spring:cubic-bezier(.34,1.56,.64,1);--t-ui:200ms;\n  font-family:\"Space Grotesk\",system-ui,-apple-system,\"Segoe UI\",sans-serif;font-size:16px;line-height:1.55;color:var(--ink);background:var(--bg);\n  -webkit-font-smoothing:antialiased;overflow-x:clip;min-height:100vh;position:relative;\n}\n.ns::before{content:\"\";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.08;\n  background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)' opacity='.9'/></svg>\")}\n.ns>*{position:relative;z-index:1}\n.ns *,.ns *::before,.ns *::after{box-sizing:border-box}\n.ns img{max-width:100%;display:block}\n.ns button,.ns input,.ns select,.ns textarea{font:inherit;color:inherit}\n.ns :where(a){color:inherit;text-decoration:none}\n.ns h1,.ns h2,.ns h3,.ns p{margin:0}\n.ns :focus-visible{outline:3px solid var(--lime);outline-offset:3px;border-radius:4px}\n.ns [hidden]{display:none!important}\n.ns-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n.ns-wrap{max-width:var(--max);margin:0 auto;padding:0 var(--gut)}\n.ns-tag{font-family:\"Sedgwick Ave Display\",cursive;font-weight:400;letter-spacing:.01em}\n.ns-mk{font-family:\"Permanent Marker\",cursive;font-weight:400}\n/* El shell de MOBU fija .sf h1/h2/h3 {font-family:Plus Jakarta Sans}: lo anulamos con el id del contenedor. */\n#ns h1,#ns h2,#ns h3{font-family:inherit;letter-spacing:normal}\n#ns .ns-tag{font-family:\"Sedgwick Ave Display\",cursive;letter-spacing:.01em}\n#ns .ns-mk{font-family:\"Permanent Marker\",cursive}\n#ns .ns-pd h1{letter-spacing:-.01em}\n\n/* ===== header ===== */\n.ns-pv{background:var(--lime);color:var(--lime-ink);font-size:13px;font-weight:700;padding:8px var(--gut);text-align:center}\n.ns-hd{position:sticky;top:0;z-index:30;background:rgba(11,11,15,.86);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}\n.ns-hd .ns-wrap{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding-top:10px;padding-bottom:10px}\n.ns-logo{display:flex;align-items:center;min-height:44px;gap:10px}\n.ns-logo img{height:44px;width:auto}\n.ns-logo .ns-wm{font-size:34px;line-height:1;color:var(--pink);-webkit-text-stroke:1px #fff;paint-order:stroke fill;transform:rotate(-3deg)}\n.ns-nav{display:flex;gap:2px;order:3;width:100%;overflow-x:auto;scrollbar-width:none}\n.ns-nav::-webkit-scrollbar{display:none}\n.ns-nav a{position:relative;padding:8px 14px;border-radius:99px;font-size:15px;font-weight:500;color:var(--ink2);white-space:nowrap;transition:color var(--t-ui)}\n.ns-nav a::after{content:\"\";position:absolute;left:14px;right:14px;bottom:4px;height:3px;border-radius:2px;background:var(--pink);transform:scaleX(0);transform-origin:left;transition:transform 260ms var(--out)}\n.ns-nav a:hover,.ns-nav a[aria-current=\"page\"]{color:#fff}\n.ns-nav a:hover::after,.ns-nav a[aria-current=\"page\"]::after{transform:scaleX(1)}\n.ns-bag{position:relative;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border-radius:99px;border:2px solid var(--line2);background:transparent;cursor:pointer;font-weight:700;font-size:14px;transition:border-color var(--t-ui),transform var(--t-ui) var(--out)}\n.ns-bag:hover{border-color:var(--pink)}\n.ns-bag:active{transform:scale(.97)}\n.ns-bag svg{width:20px;height:20px}\n.ns-cnt{display:inline-grid;place-items:center;min-width:24px;height:24px;padding:0 7px;border-radius:99px;background:var(--pink);color:#fff;font-size:12px;font-weight:700}\n.ns-cnt.ns-beat{animation:ns-beat 420ms var(--spring)}\n@keyframes ns-beat{0%{transform:scale(1)}40%{transform:scale(1.45)}100%{transform:scale(1)}}\n@media(min-width:800px){.ns-nav{order:0;width:auto;overflow:visible}.ns-hd .ns-wrap{flex-wrap:nowrap}}\n\n.ns-view{outline:none;min-height:60vh}\n.ns-view.ns-in{animation:ns-route 280ms var(--out) both}\n@keyframes ns-route{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}\n\n/* ===== botones ===== */\n.ns-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 24px;border-radius:99px;border:2px solid var(--line2);background:transparent;font-weight:700;font-size:15px;cursor:pointer;transition:transform var(--t-ui) var(--out),background var(--t-ui),border-color var(--t-ui),color var(--t-ui)}\n.ns-btn:hover{border-color:#fff}\n.ns-btn:active{transform:scale(.97)}\n.ns-btn.ns-pri{background:var(--pink);border-color:var(--pink);color:#fff}\n.ns-btn.ns-pri:hover{background:var(--pink-d);border-color:var(--pink-d)}\n.ns-btn.ns-lime{background:var(--lime);border-color:var(--lime);color:var(--lime-ink)}\n.ns-btn.ns-lime:hover{background:#b8f024;border-color:#b8f024}\n.ns-btn.ns-sm{min-height:40px;padding:0 16px;font-size:14px}\n.ns-btn.ns-blk{width:100%}\n.ns-btn:disabled{opacity:.6;cursor:progress}\n.ns-btn.ns-jump{animation:ns-jump 360ms var(--spring)}\n@keyframes ns-jump{0%{transform:scale(1)}40%{transform:scale(1.06) rotate(-2deg)}100%{transform:scale(1)}}\n\n/* ===== hero ===== */\n.ns-hero{padding:56px 0 40px;overflow:hidden;position:relative}\n.ns-hero .ns-wrap{display:grid;gap:28px;align-items:center}\n@media(min-width:900px){.ns-hero{padding:72px 0 56px}.ns-hero .ns-wrap{grid-template-columns:1.1fr .9fr;gap:40px}}\n.ns-kick{display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--lime)}\n.ns-kick i{width:10px;height:10px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 4px rgba(201,255,59,.2)}\n.ns-h1{margin-top:18px;line-height:.92;letter-spacing:-.01em;font-size:clamp(54px,12.5vw,150px);color:var(--pink);\n  -webkit-text-stroke:3px #fff;paint-order:stroke fill;text-shadow:10px 10px 0 var(--lime);transform:rotate(-3deg);transform-origin:left bottom}\n.ns-h1 span{display:inline-block;opacity:0;transform:translateY(30px) scale(.6) rotate(-12deg);animation:ns-pop 560ms var(--spring) forwards;animation-delay:calc(var(--i)*70ms)}\n.ns-h1 span.ns-now{opacity:1;transform:none;animation:none}\n@keyframes ns-pop{to{opacity:1;transform:none}}\n.ns-h1 .ns-alt{transform:translateY(-6px) rotate(6deg)}\n.ns-sub{margin-top:22px;font-size:clamp(18px,2.2vw,22px);color:var(--ink2);max-width:520px}\n.ns-cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}\n.ns-hero-art{position:relative;min-height:280px;display:grid;place-items:center}\n.ns-stk{position:absolute;padding:14px 22px;border-radius:14px;font-size:clamp(20px,3vw,30px);line-height:1;color:#fff;background:var(--pink);box-shadow:0 14px 30px -14px rgba(0,0,0,.8);border:3px solid #fff;\n  transform:rotate(var(--rot)) translateY(0);animation:ns-float 6s ease-in-out infinite;animation-delay:var(--d)}\n.ns-stk.ns-l{background:var(--lime);color:var(--lime-ink)}\n.ns-stk.ns-k{background:#fff;color:#0b0b0f}\n.ns-stk.ns-o{background:#0b0b0f;color:#fff;border-color:var(--pink)}\n@keyframes ns-float{0%,100%{transform:rotate(var(--rot)) translateY(0)}50%{transform:rotate(calc(var(--rot) + 2deg)) translateY(-10px)}}\n.ns-blob{position:absolute;width:62%;aspect-ratio:1;border-radius:46% 54% 60% 40%/50% 40% 60% 50%;background:radial-gradient(circle at 30% 30%,rgba(255,45,138,.45),rgba(255,45,138,0) 70%);filter:blur(10px)}\n\n/* ===== cinta ===== */\n.ns-tape{background:var(--pink);color:#fff;padding:12px 0;overflow:hidden;white-space:nowrap;transform:rotate(-1.2deg) scale(1.02);border-top:3px solid #fff;border-bottom:3px solid #fff;margin:18px 0 0}\n.ns-tape-in{display:inline-flex;gap:40px;animation:ns-tape 36s linear infinite;will-change:transform}\n.ns-tape span{font-size:20px;letter-spacing:.02em;display:inline-flex;align-items:center;gap:40px}\n.ns-tape span::after{content:\"✦\";font-size:14px;color:var(--lime)}\n@keyframes ns-tape{to{transform:translateX(-50%)}}\n\n/* ===== secciones ===== */\n.ns-sec{padding:64px 0 24px}\n.ns-sec.ns-alt{background:var(--bg2)}\n.ns-hdr{display:flex;flex-wrap:wrap;align-items:end;justify-content:space-between;gap:12px 24px;margin-bottom:28px}\n.ns-h2{font-size:clamp(34px,5vw,56px);line-height:1;color:#fff;-webkit-text-stroke:0;transform:rotate(-1.5deg);transform-origin:left bottom;display:inline-block}\n.ns-h2 em{font-style:normal;color:var(--pink)}\n.ns-lead{color:var(--muted);margin-top:10px;max-width:560px}\n.ns-more{font-weight:700;color:var(--lime);border-bottom:2px solid transparent;transition:border-color var(--t-ui)}\n.ns-more:hover{border-color:var(--lime)}\n.ns-rv{opacity:0;transform:translateY(18px) rotate(var(--r0,0deg));transition:opacity 480ms var(--out),transform 560ms var(--out);transition-delay:calc(var(--i,0)*55ms)}\n.ns-rv.ns-in{opacity:1;transform:translateY(0) rotate(var(--r0,0deg))}\n.ns:not(.ns-js) .ns-rv{opacity:1;transform:none}\n\n/* categorías como tags */\n.ns-cats{display:flex;flex-wrap:wrap;gap:14px}\n.ns-cat{--r0:-2deg;display:inline-flex;align-items:center;gap:10px;padding:14px 22px;border-radius:14px;background:#fff;color:#0b0b0f;font-size:clamp(20px,2.6vw,28px);line-height:1;border:3px solid #fff;box-shadow:6px 6px 0 var(--pink);transition:transform 220ms var(--spring),box-shadow 220ms var(--out),background var(--t-ui)}\n.ns-cat:nth-child(2n){--r0:2deg;box-shadow:6px 6px 0 var(--lime)}\n.ns-cat:nth-child(3n){--r0:-1deg}\n.ns-cat small{font-family:\"Space Grotesk\",sans-serif;font-size:13px;font-weight:700;color:var(--muted)}\n.ns-cat:hover{transform:rotate(0deg) translate(-2px,-2px);box-shadow:10px 10px 0 var(--pink)}\n.ns-cat:nth-child(2n):hover{box-shadow:10px 10px 0 var(--lime)}\n.ns-cat:active{transform:translate(4px,4px);box-shadow:2px 2px 0 var(--pink)}\n\n/* grilla de productos */\n.ns-grid{display:grid;gap:18px;grid-template-columns:repeat(2,1fr)}\n@media(min-width:700px){.ns-grid{grid-template-columns:repeat(3,1fr);gap:22px}}\n@media(min-width:1000px){.ns-grid.ns-g4{grid-template-columns:repeat(4,1fr)}}\n.ns-card{position:relative;display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;transition:transform 260ms var(--out),border-color var(--t-ui),box-shadow 260ms var(--out)}\n.ns-card:hover{transform:translateY(-4px) rotate(0deg);border-color:var(--line2);box-shadow:0 24px 40px -24px rgba(255,45,138,.55)}\n.ns-card:focus-within{border-color:var(--pink)}\n.ns-im{position:relative;aspect-ratio:1;background:#17171f;overflow:hidden}\n.ns-im img{width:100%;height:100%;object-fit:cover;transition:transform 600ms var(--out)}\n.ns-card:hover .ns-im img{transform:scale(1.05)}\n.ns-ph{width:100%;height:100%;display:grid;place-items:center;font-size:clamp(44px,8vw,84px);line-height:1;color:var(--pink);-webkit-text-stroke:2px #fff;paint-order:stroke fill;text-shadow:6px 6px 0 var(--lime);transform:rotate(-6deg);background:\n  radial-gradient(circle at 70% 20%,rgba(201,255,59,.14),transparent 45%),radial-gradient(circle at 20% 80%,rgba(255,45,138,.18),transparent 50%),#17171f}\n.ns-ph small{position:absolute;left:12px;bottom:10px;font-family:\"Space Grotesk\",sans-serif;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);-webkit-text-stroke:0;text-shadow:none;transform:none}\n.ns-badge{position:absolute;top:12px;left:12px;padding:6px 10px;border-radius:8px;font-size:12px;font-weight:700;background:var(--lime);color:var(--lime-ink);transform:rotate(-3deg)}\n.ns-badge.ns-out{background:#fff;color:#0b0b0f}\n.ns-badge.ns-low{background:var(--pink);color:#fff}\n.ns-cb{display:flex;flex-direction:column;gap:6px;padding:14px 14px 16px;flex:1}\n.ns-br{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}\n.ns-nm{font-size:15px;font-weight:700;line-height:1.3}\n.ns-nm a::after{content:\"\";position:absolute;inset:0}\n.ns-pr{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:auto;padding-top:8px}\n.ns-pr b{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums}\n.ns-pr s{display:block;font-size:12px;color:var(--muted);font-weight:500}\n.ns-plus{position:relative;z-index:2;width:44px;height:44px;border-radius:50%;border:0;background:var(--pink);color:#fff;font-size:24px;line-height:1;cursor:pointer;display:grid;place-items:center;transition:transform var(--t-ui) var(--spring),background var(--t-ui)}\n.ns-plus:hover{transform:scale(1.1);background:var(--pink-d)}\n.ns-plus:active{transform:scale(.94)}\n.ns-fly{position:fixed;z-index:80;width:14px;height:14px;border-radius:50%;background:var(--lime);pointer-events:none;box-shadow:0 0 0 3px rgba(201,255,59,.3)}\n\n/* banda */\n.ns-band{display:grid;gap:22px;padding:34px;border-radius:24px;background:var(--pink);color:#fff;border:3px solid #fff;position:relative;overflow:hidden}\n@media(min-width:800px){.ns-band{grid-template-columns:1.2fr 1fr;align-items:center}}\n.ns-band h2{font-size:clamp(34px,5vw,60px);line-height:.95;text-shadow:6px 6px 0 rgba(0,0,0,.25)}\n.ns-band p{margin-top:12px;font-size:17px;max-width:460px}\n.ns-band .ns-cta{margin-top:20px}\n.ns-band .ns-btn{border-color:#fff;color:#fff}\n.ns-band .ns-btn.ns-lime{color:var(--lime-ink);border-color:var(--lime)}\n.ns-band-art{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}\n.ns-band-art span{padding:10px 16px;border-radius:12px;background:#fff;color:#0b0b0f;font-size:22px;line-height:1;transform:rotate(var(--rot));border:3px solid #0b0b0f}\n\n/* valores */\n.ns-why{display:grid;gap:20px}\n@media(min-width:760px){.ns-why{grid-template-columns:repeat(3,1fr);gap:28px}}\n.ns-why>div{padding:24px 0 0;border-top:3px solid var(--pink)}\n.ns-why .ns-big{font-size:40px;line-height:1;color:var(--lime)}\n.ns-why h3{margin-top:12px;font-size:18px;font-weight:700}\n.ns-why p{margin-top:6px;color:var(--muted);font-size:15px}\n\n/* migas, filtros, listas */\n.ns-crumb{display:flex;flex-wrap:wrap;gap:6px;font-size:13px;color:var(--muted);padding:22px 0 8px}\n.ns-crumb a:hover{color:var(--pink)}\n.ns-crumb span[aria-current]{color:var(--ink2)}\n.ns-chips{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}\n.ns-chip{min-height:40px;padding:0 16px;border-radius:99px;border:2px solid var(--line2);background:transparent;font-weight:700;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;transition:background var(--t-ui),color var(--t-ui),border-color var(--t-ui),transform var(--t-ui) var(--spring)}\n.ns-chip:hover{border-color:#fff;transform:rotate(-1.5deg)}\n.ns-chip[aria-pressed=\"true\"],.ns-chip[aria-current=\"page\"]{background:var(--lime);border-color:var(--lime);color:var(--lime-ink)}\n.ns-search{display:block;width:100%;max-width:440px;min-height:48px;padding:0 18px;border-radius:99px;border:2px solid var(--line2);background:var(--card);margin:6px 0 8px}\n.ns-search:focus-visible{border-color:var(--pink);outline-offset:0}\n.ns-empty{padding:48px 16px;text-align:center;color:var(--muted);border:2px dashed var(--line2);border-radius:var(--r)}\n\n/* ficha */\n.ns-pd{display:grid;gap:28px;padding-bottom:40px}\n@media(min-width:900px){.ns-pd{grid-template-columns:1.05fr 1fr;gap:48px}}\n.ns-gal .ns-im{border-radius:var(--r);border:1px solid var(--line)}\n.ns-th{display:flex;gap:10px;margin-top:12px;overflow-x:auto}\n.ns-th button{flex:none;width:68px;height:68px;border-radius:12px;border:2px solid var(--line);background:#17171f;padding:4px;cursor:pointer}\n.ns-th button[aria-current=\"true\"]{border-color:var(--pink)}\n.ns-th img{width:100%;height:100%;object-fit:cover;border-radius:8px}\n.ns-pd h1{font-size:clamp(28px,4vw,44px);font-weight:700;line-height:1.1;margin-top:6px;letter-spacing:-.01em}\n.ns-sku{color:var(--muted);font-size:13px;margin-top:8px}\n.ns-big-p{margin-top:20px;font-size:clamp(34px,5vw,48px);font-weight:700;color:var(--lime);line-height:1;font-variant-numeric:tabular-nums}\n.ns-big-p s{display:block;font-size:16px;color:var(--muted);font-weight:500;margin-top:4px}\n.ns-net{color:var(--muted);font-size:13px;margin-top:6px}\n.ns-st{display:inline-flex;align-items:center;gap:8px;margin-top:16px;font-size:13px;font-weight:700;color:var(--ink2)}\n.ns-st i{width:10px;height:10px;border-radius:50%;background:var(--ok)}\n.ns-st.ns-no i{background:var(--bad)}\n.ns-st.ns-lo i{background:var(--pink)}\n.ns-desc{margin-top:20px;color:var(--ink2);font-size:17px}\n.ns-buy{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px;align-items:center}\n.ns-qty{display:inline-flex;align-items:center;border:2px solid var(--line2);border-radius:99px;height:48px}\n.ns-qty button{width:44px;height:44px;border:0;background:transparent;font-size:20px;cursor:pointer;border-radius:50%}\n.ns-qty button:hover{color:var(--pink)}\n.ns-qty span{min-width:28px;text-align:center;font-weight:700;font-variant-numeric:tabular-nums}\n.ns-spec{margin-top:24px;border-top:1px solid var(--line)}\n.ns-spec div{display:flex;gap:16px;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}\n.ns-spec dt{color:var(--muted)}\n.ns-spec dd{margin:0;text-align:right;font-weight:600}\n.ns-note{margin-top:28px;padding:18px 20px;border:2px dashed var(--line2);border-radius:var(--r);color:var(--ink2);font-size:14px}\n.ns-note b{color:var(--lime)}\n\n/* formularios */\n.ns-form{display:grid;gap:16px}\n.ns-two{display:grid;gap:16px}\n@media(min-width:620px){.ns-two{grid-template-columns:1fr 1fr}}\n.ns-fld label,.ns-form legend{display:block;font-size:13px;font-weight:700;margin-bottom:6px;color:var(--ink2)}\n.ns-fld input,.ns-fld select,.ns-fld textarea{width:100%;min-height:48px;padding:10px 14px;border-radius:12px;border:2px solid var(--line2);background:var(--card);color:var(--ink)}\n.ns-fld textarea{min-height:110px;resize:vertical}\n.ns-fld select option{background:#111118}\n.ns-fld input:focus-visible,.ns-fld select:focus-visible,.ns-fld textarea:focus-visible{outline:none;border-color:var(--pink)}\n.ns-fld [aria-invalid=\"true\"]{border-color:var(--bad)}\n.ns-err{display:block;color:var(--bad);font-size:12px;margin-top:4px}\n.ns-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}\n.ns-msg{padding:12px 14px;border-radius:12px;font-size:14px;background:var(--bg2);border:1px solid var(--line2)}\n.ns-msg.ns-bad{color:var(--bad);border-color:var(--bad)}\n.ns-msg.ns-ok{color:var(--ok);border-color:var(--ok)}\n.ns-form fieldset{border:1px solid var(--line);border-radius:12px;margin:0;padding:12px 14px 6px;min-width:0}\n.ns-opt{display:flex;gap:12px;align-items:flex-start;padding:10px 0;cursor:pointer}\n.ns-opt input{margin-top:4px;accent-color:#ff2d8a;width:18px;height:18px;flex:none}\n.ns-opt small{display:block;color:var(--muted);font-size:12px}\n.ns-ct{display:grid;gap:32px;padding:24px 0 64px}\n@media(min-width:900px){.ns-ct{grid-template-columns:1fr 1.2fr;gap:56px}}\n.ns-info{display:grid;gap:18px;align-content:start}\n.ns-info h3{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--lime);font-weight:700}\n.ns-info p{color:var(--ink2);margin-top:4px}\n.ns-info a:not(.ns-btn){text-decoration:underline;text-underline-offset:3px}\n\n/* carrito y checkout */\n.ns-co{display:grid;gap:32px;padding:24px 0 64px}\n@media(min-width:900px){.ns-co{grid-template-columns:1.3fr 1fr;align-items:start}}\n.ns-co>*{min-width:0}\n.ns-sum{padding:20px;border:1px solid var(--line);border-radius:var(--r);background:var(--card);position:sticky;top:120px}\n.ns-sum h2{font-size:18px;font-weight:700;margin-bottom:8px}\n.ns-ln{display:grid;grid-template-columns:1fr auto;gap:6px 12px;padding:12px 0;border-bottom:1px solid var(--line);font-size:14px}\n.ns-ln b{font-weight:600}\n.ns-ln .ns-qty{height:38px;grid-column:1}\n.ns-ln .ns-qty button{width:36px;height:36px}\n.ns-lt{font-weight:700;color:var(--lime);font-variant-numeric:tabular-nums}\n.ns-tot{display:grid;grid-template-columns:1fr auto;gap:6px 12px;margin:14px 0;font-size:14px}\n.ns-tot dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}\n.ns-tot .ns-g{font-size:18px;font-weight:700;border-top:1px solid var(--line);padding-top:10px}\n.ns-cp{display:flex;gap:8px;margin-top:14px}\n.ns-cp input{flex:1;min-width:0;min-height:44px;padding:0 14px;border-radius:99px;border:2px solid var(--line2);background:#0b0b0f}\n.ns-done{text-align:center;padding:72px 0;max-width:560px;margin:0 auto}\n.ns-ck{width:72px;height:72px;border-radius:50%;background:var(--lime);color:var(--lime-ink);display:grid;place-items:center;margin:0 auto 20px;transform:rotate(-6deg);animation:ns-pop 600ms var(--spring) both}\n.ns-num{font-weight:700;color:var(--lime);font-size:22px;margin:10px 0}\n.ns-done .ns-btn{margin:8px 4px 0}\n.ns-pg{max-width:720px;padding:32px 0 72px}\n.ns-pg h1{font-size:clamp(28px,4vw,40px);font-weight:700;margin-bottom:20px}\n.ns-pg p{margin-bottom:12px;color:var(--ink2)}\n\n/* cajón */\n.ns-drawer{margin:0 0 0 auto;padding:0;border:0;width:min(420px,100vw);height:100dvh;max-height:100dvh;background:#0e0e14;color:#fff;border-left:1px solid var(--line2)}\n.ns-drawer::backdrop{background:rgba(0,0,0,.7)}\n.ns-drawer[open]{display:flex;animation:ns-slide 300ms var(--out)}\n@keyframes ns-slide{from{transform:translateX(40px);opacity:0}to{transform:none;opacity:1}}\n.ns-dl{display:flex;flex-direction:column;width:100%;height:100%}\n.ns-dl-h{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}\n.ns-dl-h h2{font-size:26px;line-height:1}\n.ns-x{width:44px;height:44px;border-radius:50%;border:0;background:transparent;cursor:pointer;color:#fff;display:grid;place-items:center}\n.ns-x:hover{color:var(--pink)}\n.ns-x svg{width:22px;height:22px}\n.ns-dl-b{flex:1;overflow-y:auto;padding:4px 20px}\n.ns-dl-f{padding:16px 20px;border-top:1px solid var(--line)}\n\n/* puerta 18+ */\n.ns-gate{margin:auto;padding:0;border:0;background:transparent;width:min(460px,92vw);max-width:92vw}\n.ns-gate::backdrop{background:rgba(11,11,15,.92);backdrop-filter:blur(6px)}\n.ns-gate-in{background:#fff;color:#0b0b0f;border-radius:24px;padding:32px 28px;text-align:center;border:4px solid var(--pink);box-shadow:12px 12px 0 var(--lime);transform:rotate(-1deg)}\n.ns-gate h2{font-size:56px;line-height:1;color:var(--pink);-webkit-text-stroke:2px #0b0b0f;paint-order:stroke fill}\n.ns-gate p{margin-top:12px;color:#333}\n.ns-gate .ns-cta{justify-content:center}\n.ns-gate .ns-btn{flex:1 1 auto}\n.ns-gate .ns-btn{border-color:#0b0b0f;color:#0b0b0f}\n.ns-gate .ns-btn.ns-pri{color:#fff;border-color:var(--pink)}\n\n/* aviso, footer */\n.ns-toast{position:fixed;z-index:90;left:50%;bottom:24px;transform:translate(-50%,20px) rotate(-1deg);opacity:0;background:var(--lime);color:var(--lime-ink);font-weight:700;font-size:14px;padding:12px 20px;border-radius:12px;pointer-events:none;transition:opacity 220ms,transform 260ms var(--spring);max-width:90vw}\n.ns-toast.ns-on{opacity:1;transform:translate(-50%,0) rotate(-1deg)}\n.ns-ft{background:#07070a;border-top:1px solid var(--line);padding:56px 0 32px;color:var(--ink2);font-size:14px}\n.ns-ft .ns-wrap{display:grid;gap:28px}\n@media(min-width:760px){.ns-ft .ns-wrap{grid-template-columns:1.4fr 1fr 1fr}}\n.ns-ft img{height:48px;width:auto;margin-bottom:12px}\n.ns-ft .ns-wm{font-size:44px;line-height:1;color:var(--pink);-webkit-text-stroke:1px #fff;paint-order:stroke fill;display:inline-block;transform:rotate(-3deg);margin-bottom:12px}\n.ns-ft h3{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--lime);margin-bottom:10px;font-weight:700}\n.ns-ft ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}\n.ns-ft a:hover{color:var(--pink)}\n.ns-ft .ns-fine{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px 24px;justify-content:space-between;border-top:1px solid var(--line);padding-top:20px;color:var(--muted);font-size:12px}\n\n/* chat */\n.ns-chat-b{position:fixed;z-index:40;right:18px;bottom:18px;width:58px;height:58px;border-radius:50%;border:3px solid #fff;background:var(--pink);color:#fff;cursor:pointer;display:grid;place-items:center;box-shadow:0 8px 24px rgba(0,0,0,.5);transition:transform var(--t-ui) var(--spring)}\n.ns-chat-b:hover{transform:scale(1.08) rotate(-6deg)}\n.ns-chat-b svg{width:26px;height:26px}\n.ns-chat{position:fixed;z-index:41;right:18px;bottom:88px;width:min(360px,calc(100vw - 36px));height:min(480px,calc(100dvh - 120px));display:none;flex-direction:column;background:#0e0e14;border:1px solid var(--line2);border-radius:var(--r);overflow:hidden;box-shadow:0 16px 48px rgba(0,0,0,.6)}\n.ns-chat.ns-on{display:flex;animation:ns-route 240ms var(--out)}\n.ns-chat-h{display:flex;align-items:center;justify-content:space-between;padding:6px 6px 6px 16px;background:var(--pink);color:#fff;font-weight:700}\n.ns-chat-h .ns-x{color:#fff}\n.ns-chat-m{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:8px}\n.ns-bub{max-width:82%;padding:9px 13px;border-radius:14px;font-size:14px;line-height:1.4;white-space:pre-wrap;overflow-wrap:anywhere}\n.ns-bub.ns-o{align-self:flex-start;background:var(--bg2);border-bottom-left-radius:4px}\n.ns-bub.ns-v{align-self:flex-end;background:var(--lime);color:var(--lime-ink);border-bottom-right-radius:4px}\n.ns-chat form{display:flex;gap:8px;padding:10px;border-top:1px solid var(--line)}\n.ns-chat input{flex:1;min-width:0;min-height:44px;padding:0 14px;border-radius:99px;border:2px solid var(--line2);background:#0b0b0f}\n.ns-chat-n{padding:10px 14px 0}\n.ns-chat-n input{width:100%;min-height:38px;border-radius:10px;border:2px solid var(--line2);background:#0b0b0f;padding:0 12px;font-size:13px}\n\n@media(prefers-reduced-motion:reduce){\n  .ns *,.ns *::before,.ns *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}\n  .ns.ns-js .ns-rv{opacity:1;transform:rotate(var(--r0,0deg))}\n  .ns-h1 span{opacity:1;transform:none}\n  .ns-tape-in{animation:none!important}\n}\n</style>\n<div class=\"ns\" id=\"ns\">\n  <div class=\"ns-pv\" id=\"nsPv\" hidden>Vista previa con datos de ejemplo: no hay conexión con la tienda, los pedidos no se envían.</div>\n  <header class=\"ns-hd\">\n    <div class=\"ns-wrap\">\n      <a class=\"ns-logo\" href=\"#/\" id=\"nsLogo\" aria-label=\"Nasty, inicio\"><span class=\"ns-tag ns-wm\">NASTY</span></a>\n      <nav class=\"ns-nav\" aria-label=\"Principal\" id=\"nsNav\">\n        <a href=\"#/\" data-nav=\"home\">Inicio</a>\n        <a href=\"#/tienda\" data-nav=\"tienda\">Tienda</a>\n        <a href=\"#/tienda?f=rosa\" data-nav=\"rosa\">Todo rosa</a>\n        <a href=\"#/contacto\" data-nav=\"contacto\">Contacto</a>\n      </nav>\n      <button class=\"ns-bag\" type=\"button\" id=\"nsBag\" aria-label=\"Abrir carrito\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 7h12l1 13H5z\"/><path d=\"M9 7a3 3 0 0 1 6 0\"/></svg>\n        <span>Carrito</span><span class=\"ns-cnt\" id=\"nsCount\">0</span>\n      </button>\n    </div>\n  </header>\n  <main class=\"ns-view\" id=\"nsView\" tabindex=\"-1\" aria-live=\"polite\"></main>\n  <footer class=\"ns-ft\" id=\"nsFt\"></footer>\n  <dialog class=\"ns-drawer\" id=\"nsDrawer\" aria-labelledby=\"nsDrawerH\">\n    <div class=\"ns-dl\">\n      <div class=\"ns-dl-h\"><h2 id=\"nsDrawerH\" class=\"ns-tag\">Tu carrito</h2><button class=\"ns-x\" type=\"button\" data-close aria-label=\"Cerrar carrito\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M6 6l12 12M18 6 6 18\"/></svg></button></div>\n      <div class=\"ns-dl-b\" id=\"nsLines\"></div>\n      <div class=\"ns-dl-f\" id=\"nsFoot\"></div>\n    </div>\n  </dialog>\n  <dialog class=\"ns-gate\" id=\"nsGate\" aria-labelledby=\"nsGateH\">\n    <div class=\"ns-gate-in\">\n      <h2 id=\"nsGateH\" class=\"ns-tag\">18+</h2>\n      <p>Vendemos artículos para fumadores. Para entrar tenés que ser mayor de 18 años.</p>\n      <div class=\"ns-cta\"><button class=\"ns-btn ns-pri\" type=\"button\" id=\"nsGateYes\">Sí, soy mayor de 18</button><a class=\"ns-btn\" href=\"https://www.google.com\" rel=\"noopener\">Salir</a></div>\n    </div>\n  </dialog>\n  <button class=\"ns-chat-b\" type=\"button\" id=\"nsChatB\" aria-label=\"Abrir chat con Nasty\" aria-expanded=\"false\" hidden>\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z\"/></svg>\n  </button>\n  <section class=\"ns-chat\" id=\"nsChat\" role=\"dialog\" aria-label=\"Chat con Nasty\">\n    <div class=\"ns-chat-h\"><span id=\"nsChatT\">Chateá con Nasty</span><button class=\"ns-x\" type=\"button\" id=\"nsChatX\" aria-label=\"Cerrar chat\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M6 6l12 12M18 6 6 18\"/></svg></button></div>\n    <div class=\"ns-chat-m\" id=\"nsChatM\" role=\"log\" aria-live=\"polite\"></div>\n    <div class=\"ns-chat-n\" id=\"nsChatN\"><label class=\"ns-sr\" for=\"nsChatName\">Tu nombre (opcional)</label><input id=\"nsChatName\" placeholder=\"Tu nombre (opcional)\" autocomplete=\"name\"></div>\n    <form id=\"nsChatF\"><label class=\"ns-sr\" for=\"nsChatI\">Mensaje</label><input id=\"nsChatI\" placeholder=\"Escribí tu consulta\" autocomplete=\"off\" maxlength=\"1000\"><button class=\"ns-btn ns-pri ns-sm\" type=\"submit\">Enviar</button></form>\n  </section>\n  <div class=\"ns-toast\" id=\"nsToast\" role=\"status\" aria-live=\"polite\"></div>\n</div>\n<script>\n(function(){\n'use strict';\n/* Token del formulario del CRM (Contacto). PENDIENTE = el formulario muestra «en configuración». Se puede sobreescribir con window.NS_CONFIG.formToken. */\nvar NS_FORM_TOKEN=\"79ab2daa999f44688e815685da1caac4\";\nvar NS_WEBCHAT_TOKEN=\"\"; /* fallback si config.webchatToken viene null */\n\nvar d=document,root=d.getElementById('ns');if(!root)return;\nvar HERO_DONE=false;\nroot.classList.add('ns-js');\nvar REDUCED=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;\nvar BRAND={name:'Nasty',slug:'nasty'};\nvar QS=new URLSearchParams(location.search);\nfunction resolveSlug(){if(QS.get('store'))return QS.get('store');if(QS.get('slug'))return QS.get('slug');var m=location.hostname.match(/^([a-z0-9-]+)\\.mobu\\.market$/i);if(m&&['www','app','api','staging','contact','back'].indexOf(m[1].toLowerCase())<0)return m[1];return BRAND.slug;}\nvar API=(typeof window.apiBase==='function'?window.apiBase():null)||QS.get('api')||(/staging|localhost|127\\.0\\.0\\.1/i.test(location.hostname)?'https://api-staging.mobu.market':'https://api.mobu.market');\nvar SLUG=resolveSlug(),BASE=API+'/api/public/storefronts/'+encodeURIComponent(SLUG),CRM=API+'/api/public/crm',CART_KEY='ns-cart:'+SLUG,ORDER_KEY='ns-order:'+SLUG,VIS_KEY='ns-visitor:'+SLUG,GATE_KEY='ns-18:'+SLUG;\nvar FORM_TOKEN=(window.NS_CONFIG&&window.NS_CONFIG.formToken)||NS_FORM_TOKEN;\n\n/* Datos de ejemplo: sólo si la API no responde (vista previa del panel). */\nvar SAMPLE=[['sedas-rok-xl-rosa','Sedas ROK XL Rosa','Sedas ROK tamaño XL edición rosa.','ROK','P',2500,25],['filtros-rok-rosa','Filtros ROK Rosa','Filtros de cartón ROK edición rosa.','ROK','P',1100,24],['pack-fumanchu-rosa','Pack Fumanchu Rosa (sedas + filtros)','Kit rosa con sedas y filtros para arrancar.','Nasty','K',2400,23],['mini-bong-rosa-15-cm','Mini bong rosa 15 cm','Mini bong de vidrio rosa de 15 cm.','Nasty','B',19200,2],['picador-t5','Picador T5','Picador metálico de 5 partes.','Nasty','G',40000,3],['cenicero-nasty','Cenicero Nasty','Cenicero artesanal de resina, hecho a mano.','Nasty','A',15500,10],['latita-nasty','Latita Nasty','Lata metálica para guardar tus cosas.','Nasty','A',10000,6],['encendedor-mini','Encendedor mini','Encendedor mini recargable.','Nasty','E',8000,12]];\nvar SAMPLE_CATS=[{id:'P',name:'Papelería',slug:'papeleria'},{id:'K',name:'Kits y packs',slug:'kits-y-packs'},{id:'B',name:'Bongs y pipas',slug:'bongs-y-pipas'},{id:'G',name:'Picadores',slug:'picadores'},{id:'A',name:'Accesorios',slug:'accesorios'},{id:'E',name:'Encendedores',slug:'encendedores'}];\nfunction sampleProducts(){return SAMPLE.map(function(r){return {id:r[0],handle:r[0],name:r[1],description:r[2],brand:r[3],categoryId:r[4],images:[],prices:[{currency:'ARS',amount:r[5],compareAt:null}],available:r[6],trackInventory:true,attributes:[]};});}\n\nfunction $(id){return d.getElementById(id);}\nfunction esc(s){return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;').replace(/'/g,'&#39;');}\nfunction norm(s){return String(s||'').normalize('NFD').replace(/[̀-ͯ]/g,'').toLowerCase();}\nfunction money(v,cur){var n=Number(v)||0;try{return new Intl.NumberFormat('es-AR',{style:'currency',currency:/usd|dolar/i.test(cur||'')?'USD':'ARS',maximumFractionDigits:n%1===0?0:2}).format(n);}catch(e){return '$ '+n.toFixed(0);}}\nfunction fetchJson(u,o){return fetch(u,o).then(function(r){return r.json().catch(function(){return null;}).then(function(b){return {ok:r.ok,status:r.status,body:b};});});}\nfunction parseJ(s,def){try{var v=typeof s==='string'?JSON.parse(s):s;return v==null?def:v;}catch(e){return def;}}\nfunction priceOf(p){var ps=(p&&p.prices)||[];for(var i=0;i<ps.length;i++){if(ps[i]&&ps[i].amount!=null)return {now:Number(ps[i].amount),old:ps[i].compareAt!=null?Number(ps[i].compareAt):null,cur:ps[i].currency};}return null;}\nvar tT;function toast(t){var el=$('nsToast');el.textContent=t;el.classList.add('ns-on');clearTimeout(tT);tT=setTimeout(function(){el.classList.remove('ns-on');},1900);}\nfunction anim(el,cls){if(!el||REDUCED)return;el.classList.remove(cls);void el.offsetWidth;el.classList.add(cls);}\nvar ICONS={ck:'<svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"/></svg>'};\n\n/* ---------- estado ---------- */\nvar CFG=null,PRODUCTS=[],CATS=[],byHandle={},PREVIEW=false;\nvar state={cart:{},coupon:'',quote:null,busy:false};\ntry{var sv=JSON.parse(localStorage.getItem(CART_KEY)||'{}');state.cart=sv.cart||{};state.coupon=sv.coupon||'';}catch(e){}\nfunction persist(){try{localStorage.setItem(CART_KEY,JSON.stringify({cart:state.cart,coupon:state.coupon}));}catch(e){}}\nfunction cartItems(){var o=[];for(var h in state.cart){var q=Number(state.cart[h])||0;if(q>0&&byHandle[h])o.push({handle:h,quantity:q});}return o;}\nfunction cartCount(){return cartItems().reduce(function(a,i){return a+i.quantity;},0);}\nfunction localSubtotal(){return cartItems().reduce(function(a,i){var pr=priceOf(byHandle[i.handle]);return a+(pr?pr.now*i.quantity:0);},0);}\nfunction catOf(p){for(var i=0;i<CATS.length;i++){if(CATS[i].id===p.categoryId)return CATS[i];}return null;}\nfunction catName(p){var c=catOf(p);return c?c.name:(p.category||'');}\nfunction catBySlug(s){for(var i=0;i<CATS.length;i++){if(CATS[i].slug===s)return CATS[i];}return null;}\nfunction imgs(p){return (p.images||[]).filter(function(i){return i&&i.url;});}\nfunction isPink(p){return /rosa|pink/.test(norm(p.name+' '+(p.description||'')));}\nfunction isHand(p){return /hecho a mano|artesanal|resina/.test(norm((p.description||'')+' '+p.name));}\n/* stock: MOBU manda available como true/false o como cantidad cuando controla inventario */\nfunction stockLine(st){return st.out?'<span class=\"ns-st ns-no\"><i></i>Sin stock por ahora</span>':(st.low?'<span class=\"ns-st ns-lo\"><i></i>Quedan '+st.n+' en stock</span>':(st.unknown?'':'<span class=\"ns-st\"><i></i>En stock, listo para enviar</span>'));}\nfunction stockOf(p){var a=p.available;if(typeof a==='string'&&a!=='')a=Number(a);if(a===false||a===0)return {out:true,n:0};if(typeof a==='number')return {out:false,n:a,low:a<=3};if(a===true)return {out:false,n:null};return {out:false,n:null,unknown:true};}\nfunction waLink(){var s=parseJ(CFG&&CFG.socialJson,{})||{};var w=s.whatsapp||s.wa||'';if(!w)return '';w=String(w);if(/^https?:/i.test(w))return w;var n=w.replace(/\\D/g,'');return n?'https://wa.me/'+n:'';}\nfunction ph(p){var n=norm(p.name||'');var ch=/seda|celulosa|filtro|blunt|papel/.test(n)?'S':/picador/.test(n)?'P':/bong|pipa/.test(n)?'B':/encendedor/.test(n)?'E':/pack|kit|lata/.test(n)?'K':/cenicero/.test(n)?'C':'N';return '<div class=\"ns-ph ns-tag\" aria-hidden=\"true\">'+ch+'<small>Foto en camino</small></div>';}\nfunction imgHtml(p,eager){var im=imgs(p)[0];return im?'<img src=\"'+esc(im.url)+'\" alt=\"'+esc(p.name)+'\" '+(eager?'':'loading=\"lazy\" ')+'decoding=\"async\" data-img>':ph(p);}\nroot.addEventListener('error',function(e){var t=e.target;if(t&&t.tagName==='IMG'&&t.hasAttribute('data-img')){var w=d.createElement('div');w.innerHTML=ph({name:t.alt});t.replaceWith(w.firstChild);}},true);\n\n/* ---------- movimiento ---------- */\nfunction fly(from){\n  if(REDUCED||!from||!from.animate)return;\n  var to=$('nsBag').getBoundingClientRect(),a=from.getBoundingClientRect();\n  var dot=d.createElement('span');dot.className='ns-fly';dot.style.left=(a.left+a.width/2-7)+'px';dot.style.top=(a.top+a.height/2-7)+'px';root.appendChild(dot);\n  var dx=to.left+to.width/2-(a.left+a.width/2),dy=to.top+to.height/2-(a.top+a.height/2);\n  dot.animate([{transform:'translate(0,0) scale(1)',opacity:1},{transform:'translate('+dx*.5+'px,'+(dy*.5-80)+'px) scale(1.3)',opacity:1,offset:.5},{transform:'translate('+dx+'px,'+dy+'px) scale(.3)',opacity:0}],{duration:580,easing:'cubic-bezier(.22,1,.36,1)'}).onfinish=function(){dot.remove();anim($('nsCount'),'ns-beat');};\n}\nvar rio;function reveals(){\n  var els=root.querySelectorAll('.ns-rv:not(.ns-in)');\n  if(REDUCED||!('IntersectionObserver' in window)){els.forEach(function(e){e.classList.add('ns-in');});return;}\n  if(!rio)rio=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('ns-in');rio.unobserve(e.target);}});},{rootMargin:'0px 0px -6% 0px',threshold:.08});\n  var vh=window.innerHeight||800;els.forEach(function(e){var r=e.getBoundingClientRect();if(r.top<vh*1.05){e.classList.add('ns-in');}else{rio.observe(e);}});\n  setTimeout(function(){els.forEach(function(e){e.classList.add('ns-in');});},700);\n}\n\n/* ---------- vistas ---------- */\nfunction card(p,i){\n  var pr=priceOf(p),st=stockOf(p),rot=[-1.2,.8,-.6,1.1][(i||0)%4];\n  var badge=st.out?'<span class=\"ns-badge ns-out\">Sin stock</span>':(st.low?'<span class=\"ns-badge ns-low\">Quedan '+st.n+'</span>':(isHand(p)?'<span class=\"ns-badge\">Hecho a mano</span>':''));\n  return '<article class=\"ns-card ns-rv\" style=\"--i:'+Math.min(i||0,8)+';--r0:'+rot+'deg\"><div class=\"ns-im\">'+imgHtml(p)+badge+'</div><div class=\"ns-cb\">'+\n   (p.brand&&p.brand!=='Nasty'?'<span class=\"ns-br\">'+esc(p.brand)+'</span>':'<span class=\"ns-br\">'+esc(catName(p)||'Nasty')+'</span>')+'<h3 class=\"ns-nm\"><a href=\"#/producto/'+encodeURIComponent(p.handle)+'\">'+esc(p.name)+'</a></h3>'+\n   '<div class=\"ns-pr\"><div><b>'+(pr?money(pr.now,pr.cur):'Consultar')+'</b>'+(pr&&pr.old&&pr.old>pr.now?'<s>'+money(pr.old,pr.cur)+'</s>':'')+'</div>'+\n   (st.out||!pr?'':'<button type=\"button\" class=\"ns-plus\" data-add=\"'+esc(p.handle)+'\" aria-label=\"Agregar '+esc(p.name)+' al carrito\">+</button>')+'</div></div></article>';\n}\nfunction crumb(items){return '<nav class=\"ns-crumb\" aria-label=\"Ruta\">'+items.map(function(x){return x.href?'<a href=\"'+x.href+'\">'+esc(x.t)+'</a><span aria-hidden=\"true\">/</span>':'<span aria-current=\"page\">'+esc(x.t)+'</span>';}).join('')+'</nav>';}\nfunction catsWithItems(){return CATS.filter(function(c){return PRODUCTS.some(function(p){return p.categoryId===c.id;});});}\nfunction countIn(c){return PRODUCTS.filter(function(p){return p.categoryId===c.id;}).length;}\n\nfunction vHome(){\n  var title=(CFG&&CFG.heroTitle)||'Smoke shop con onda.',sub=(CFG&&CFG.heroSubtitle)||'Sedas, filtros, picadores, bongs y accesorios hechos a mano. Todo rosa, si querés. Retirás o te lo llevamos en CABA y GBA.';\n  var words=title.split(/\\s+/).map(function(w,i){return '<span class=\"'+(HERO_DONE?'ns-now':'')+(i%2?' ns-alt':'')+'\" style=\"--i:'+i+'\">'+esc(w)+'</span>';}).join(' ');HERO_DONE=true;\n  var cats=catsWithItems(),pink=PRODUCTS.filter(function(p){return isPink(p)&&priceOf(p)&&!stockOf(p).out;}).slice(0,8),hand=PRODUCTS.filter(isHand).slice(0,4);\n  var news=PRODUCTS.filter(function(p){return priceOf(p);}).slice(0,8);\n  var tape=['Sedas y filtros','Picadores','Mini bongs','Encendedores','Ceniceros hechos a mano','Kits para regalar','Todo rosa','Envíos en CABA y GBA'].map(function(c){return '<span class=\"ns-tag\">'+esc(c)+'</span>';}).join('');\n  var wa=waLink();\n  return '<section class=\"ns-hero\"><div class=\"ns-wrap\"><div><span class=\"ns-kick\"><i></i>Smoke shop · '+esc((CFG&&CFG.storeName)||BRAND.name)+'</span><h1 class=\"ns-h1 ns-tag\" aria-label=\"'+esc(title)+'\">'+words+'</h1><p class=\"ns-sub\">'+esc(sub)+'</p>'+\n    '<div class=\"ns-cta\"><a class=\"ns-btn ns-pri\" href=\"#/tienda\">Ver la tienda</a><a class=\"ns-btn ns-lime\" href=\"#/tienda?f=rosa\">Todo rosa</a></div></div>'+\n    '<div class=\"ns-hero-art\" aria-hidden=\"true\"><div class=\"ns-blob\"></div>'+\n    '<span class=\"ns-stk ns-tag\" style=\"--rot:-8deg;--d:0s;left:6%;top:8%\">sedas</span><span class=\"ns-stk ns-l ns-tag\" style=\"--rot:6deg;--d:-1.3s;right:8%;top:14%\">filtros</span><span class=\"ns-stk ns-k ns-tag\" style=\"--rot:-4deg;--d:-2.6s;left:18%;top:46%\">picadores</span><span class=\"ns-stk ns-o ns-tag\" style=\"--rot:9deg;--d:-3.9s;right:14%;top:52%\">bongs</span><span class=\"ns-stk ns-tag\" style=\"--rot:-6deg;--d:-5.2s;left:40%;bottom:4%\">kits</span>'+\n    '</div></div></section>'+\n   '<div class=\"ns-tape\" aria-hidden=\"true\"><div class=\"ns-tape-in\">'+tape+tape+'</div></div>'+\n   (cats.length?'<section class=\"ns-sec\"><div class=\"ns-wrap\"><div class=\"ns-hdr\"><div><h2 class=\"ns-h2 ns-tag ns-rv\">¿Qué <em>buscás</em>?</h2></div><a class=\"ns-more\" href=\"#/tienda\">Toda la tienda →</a></div><div class=\"ns-cats\">'+cats.map(function(c,i){return '<a class=\"ns-cat ns-tag ns-rv\" style=\"--i:'+i+'\" href=\"#/categoria/'+esc(c.slug)+'\">'+esc(c.name)+'<small>'+countIn(c)+'</small></a>';}).join('')+'</div></div></section>':'')+\n   (pink.length?'<section class=\"ns-sec ns-alt\"><div class=\"ns-wrap\"><div class=\"ns-hdr\"><div><h2 class=\"ns-h2 ns-tag ns-rv\">Todo <em>rosa</em></h2><p class=\"ns-lead\">La línea que nos hizo conocidas: sedas, filtros, blunts, picadores y bongs en rosa.</p></div><a class=\"ns-more\" href=\"#/tienda?f=rosa\">Ver todo lo rosa →</a></div><div class=\"ns-grid ns-g4\">'+pink.map(card).join('')+'</div></div></section>':'')+\n   (hand.length?'<section class=\"ns-sec\"><div class=\"ns-wrap\"><div class=\"ns-hdr\"><div><h2 class=\"ns-h2 ns-tag ns-rv\">Hecho a <em>mano</em></h2><p class=\"ns-lead\">Ceniceros de resina y latitas que hacemos nosotras, de a una.</p></div></div><div class=\"ns-grid ns-g4\">'+hand.map(card).join('')+'</div></div></section>':'')+\n   '<section class=\"ns-sec\"><div class=\"ns-wrap\"><div class=\"ns-band ns-rv\"><div><h2 class=\"ns-tag\">Armá tu kit y regalalo.</h2><p>Latita + sedas + filtros + encendedor mini. Todo rosa, listo para regalar.</p><div class=\"ns-cta\"><a class=\"ns-btn ns-lime\" href=\"#/categoria/kits-y-packs\">Ver kits</a>'+(wa?'<a class=\"ns-btn\" href=\"'+esc(wa)+'\" target=\"_blank\" rel=\"noopener\">Escribinos</a>':'<a class=\"ns-btn\" href=\"#/contacto\">Escribinos</a>')+'</div></div>'+\n    '<div class=\"ns-band-art\" aria-hidden=\"true\"><span class=\"ns-tag\" style=\"--rot:-6deg\">latita</span><span class=\"ns-tag\" style=\"--rot:4deg\">sedas</span><span class=\"ns-tag\" style=\"--rot:-3deg\">filtros</span><span class=\"ns-tag\" style=\"--rot:7deg\">encendedor</span></div></div></div></section>'+\n   (news.length?'<section class=\"ns-sec ns-alt\"><div class=\"ns-wrap\"><div class=\"ns-hdr\"><h2 class=\"ns-h2 ns-tag ns-rv\">Lo <em>nuevo</em></h2><a class=\"ns-more\" href=\"#/tienda\">Toda la tienda →</a></div><div class=\"ns-grid ns-g4\">'+news.map(card).join('')+'</div></div></section>':'')+\n   '<section class=\"ns-sec\" style=\"padding-bottom:72px\"><div class=\"ns-wrap\"><div class=\"ns-hdr\"><h2 class=\"ns-h2 ns-tag ns-rv\">Por qué <em>Nasty</em></h2></div><div class=\"ns-why\">'+\n    [['100%','stock real','Lo que ves disponible, está. El stock se actualiza con cada venta.'],['a mano','ceniceros y latitas','Piezas artesanales de resina, hechas de a una en nuestro taller.'],['envíos','en CABA y GBA','Retirás sin cargo o te lo llevamos en moto. El costo del envío te lo confirmamos antes de salir.']].map(function(r,i){return '<div class=\"ns-rv\" style=\"--i:'+i+'\"><div class=\"ns-big ns-tag\">'+r[0]+'</div><h3>'+r[1]+'</h3><p>'+r[2]+'</p></div>';}).join('')+'</div></div></section>';\n}\n\nvar FILTER={q:'',f:''};\nfunction listFor(slug){var c=catBySlug(slug);return c?PRODUCTS.filter(function(p){return p.categoryId===c.id;}):PRODUCTS;}\nfunction filtered(slug){var q=norm(FILTER.q);return listFor(slug).filter(function(p){return (FILTER.f!=='rosa'||isPink(p))&&(FILTER.f!=='mano'||isHand(p))&&(!q||norm(p.name+' '+(p.brand||'')+' '+(p.description||'')+' '+catName(p)).indexOf(q)>=0);});}\nfunction gridHtml(slug){var l=filtered(slug);return l.length?l.map(card).join(''):'<div class=\"ns-empty\" style=\"grid-column:1/-1\">No encontramos productos con ese filtro. Probá con otra palabra o escribinos desde Contacto.</div>';}\nfunction vShop(slug,qs){\n  var c=catBySlug(slug);slug=c?slug:'';FILTER={q:qs.get('q')||'',f:qs.get('f')||''};\n  var title=c?c.name:(FILTER.f==='rosa'?'Todo rosa':'Toda la tienda'),all=listFor(slug),cats=catsWithItems();\n  return '<div class=\"ns-wrap\">'+crumb([{t:'Inicio',href:'#/'},{t:'Tienda',href:c?'#/tienda':''},c?{t:title}:null].filter(Boolean))+'<h1 class=\"ns-h2 ns-tag\">'+esc(title)+'</h1><p class=\"ns-lead\">'+all.length+' producto'+(all.length===1?'':'s')+'</p>'+\n   '<div class=\"ns-chips\" role=\"navigation\" aria-label=\"Categorías\"><a class=\"ns-chip\" href=\"#/tienda\"'+(!c&&!FILTER.f?' aria-current=\"page\"':'')+'>Todo</a>'+cats.map(function(x){return '<a class=\"ns-chip\" href=\"#/categoria/'+esc(x.slug)+'\"'+(c&&c.id===x.id?' aria-current=\"page\"':'')+'>'+esc(x.name)+'</a>';}).join('')+'</div>'+\n   '<label class=\"ns-sr\" for=\"nsQ\">Buscar productos</label><input class=\"ns-search\" id=\"nsQ\" type=\"search\" placeholder=\"Buscar: sedas, picador, bong…\" value=\"'+esc(FILTER.q)+'\" data-slug=\"'+esc(slug)+'\">'+\n   '<div class=\"ns-chips\" id=\"nsFilters\" role=\"group\" aria-label=\"Filtros\"><button type=\"button\" class=\"ns-chip\" data-f=\"\" aria-pressed=\"'+(!FILTER.f)+'\">Todos</button><button type=\"button\" class=\"ns-chip\" data-f=\"rosa\" aria-pressed=\"'+(FILTER.f==='rosa')+'\">Todo rosa</button><button type=\"button\" class=\"ns-chip\" data-f=\"mano\" aria-pressed=\"'+(FILTER.f==='mano')+'\">Hecho a mano</button></div>'+\n   '<div class=\"ns-grid ns-g4\" id=\"nsGrid\" style=\"margin:12px 0 64px\" data-slug=\"'+esc(slug)+'\">'+gridHtml(slug)+'</div></div>';\n}\nfunction vProd(handle){\n  var p=byHandle[handle];if(!p)return vNF('No encontramos ese producto.');\n  var pr=priceOf(p),im=imgs(p),c=catOf(p),st=stockOf(p);\n  var attrs=(p.attributes||[]).filter(function(a){return a&&a.name&&String(a.value||'').trim();});\n  var stHtml='<span id=\"nsSt\">'+stockLine(st)+'</span>';\n  if(st.unknown&&!PREVIEW&&!p.__stockAsked){p.__stockAsked=true;fetchJson(BASE+'/products/'+encodeURIComponent(handle)).then(function(r){if(!r.ok||!r.body)return;if(r.body.available!=null)p.available=Number(r.body.available);var el=$('nsSt');if(el&&parseHash().arg===handle){var s2=stockOf(p);el.innerHTML=stockLine(s2);if(s2.out){var b=$('nsAddP');if(b){b.disabled=true;b.textContent='Sin stock';}}}}).catch(function(){});}\n  var rel=PRODUCTS.filter(function(x){return x.handle!==p.handle&&x.categoryId===p.categoryId;}).slice(0,4);\n  if(rel.length<4)PRODUCTS.forEach(function(x){if(rel.length<4&&x.handle!==p.handle&&rel.indexOf(x)<0)rel.push(x);});\n  return '<div class=\"ns-wrap\">'+crumb([{t:'Inicio',href:'#/'},{t:'Tienda',href:'#/tienda'},c?{t:c.name,href:'#/categoria/'+c.slug}:null,{t:p.name}].filter(Boolean))+\n   '<div class=\"ns-pd\"><div class=\"ns-gal\"><div class=\"ns-im\" id=\"nsMain\">'+(im[0]?'<img src=\"'+esc(im[0].url)+'\" alt=\"'+esc(p.name)+'\" data-img>':ph(p))+'</div>'+\n   (im.length>1?'<div class=\"ns-th\">'+im.map(function(x,i){return '<button type=\"button\" data-thumb=\"'+esc(x.url)+'\" aria-label=\"Ver foto '+(i+1)+'\" aria-current=\"'+(i===0)+'\"><img src=\"'+esc(x.url)+'\" alt=\"\" loading=\"lazy\" data-img></button>';}).join('')+'</div>':'')+'</div>'+\n   '<div>'+(p.brand?'<span class=\"ns-br\">'+esc(p.brand)+(c?' · '+esc(c.name):'')+'</span>':'')+'<h1>'+esc(p.name)+'</h1>'+(p.sku?'<p class=\"ns-sku\">Código: '+esc(p.sku)+'</p>':'')+\n   (pr?'<p class=\"ns-big-p\">'+money(pr.now,pr.cur)+(pr.old&&pr.old>pr.now?'<s>Antes '+money(pr.old,pr.cur)+'</s>':'')+'</p><p class=\"ns-net\">Precio final en pesos, con IVA incluido.</p>':'<p class=\"ns-big-p\">Consultar</p>')+stHtml+\n   (p.description?'<p class=\"ns-desc\">'+esc(p.description)+'</p>':'')+\n   '<div class=\"ns-buy\">'+(st.out||!pr?'<a class=\"ns-btn\" href=\"#/contacto?producto='+encodeURIComponent(p.name)+'\">Avisame cuando vuelva</a>':'<div class=\"ns-qty\" role=\"group\" aria-label=\"Cantidad\"><button type=\"button\" data-q=\"-1\" aria-label=\"Restar uno\">−</button><span id=\"nsQ1\" aria-live=\"polite\">1</span><button type=\"button\" data-q=\"1\" aria-label=\"Sumar uno\">+</button></div><button type=\"button\" class=\"ns-btn ns-pri\" id=\"nsAddP\" data-add=\"'+esc(p.handle)+'\" data-qty=\"#nsQ1\">Agregar al carrito</button>')+'</div>'+\n   (attrs.length?'<dl class=\"ns-spec\">'+attrs.map(function(a){return '<div><dt>'+esc(a.name)+'</dt><dd>'+esc(a.value)+'</dd></div>';}).join('')+'</dl>':'')+\n   '<div class=\"ns-note\"><b>Envíos y retiro.</b> Retirás sin cargo o te lo llevamos en CABA y GBA. Te confirmamos el costo del envío antes de despachar.</div>'+\n   '</div></div>'+\n   (rel.length?'<div class=\"ns-hdr\"><h2 class=\"ns-h2 ns-tag\">Va <em>bien</em> con</h2></div><div class=\"ns-grid ns-g4\" style=\"margin-bottom:72px\">'+rel.map(card).join('')+'</div>':'')+'</div>';\n}\nfunction vContact(qs){\n  var pre=qs.get('producto')||'',wa=waLink(),soc=parseJ(CFG&&CFG.socialJson,{})||{},ig=soc.instagram;\n  var ok=FORM_TOKEN&&FORM_TOKEN!=='PENDIENTE';\n  var form=ok?'<form class=\"ns-form\" id=\"nsForm\" novalidate><div class=\"ns-fld\"><label for=\"cfN\">Nombre y apellido</label><input id=\"cfN\" name=\"name\" autocomplete=\"name\" required aria-describedby=\"cfNE\"><span class=\"ns-err\" id=\"cfNE\"></span></div>'+\n    '<div class=\"ns-two\"><div class=\"ns-fld\"><label for=\"cfM\">Email</label><input id=\"cfM\" name=\"email\" type=\"email\" autocomplete=\"email\" aria-describedby=\"cfME\"><span class=\"ns-err\" id=\"cfME\"></span></div><div class=\"ns-fld\"><label for=\"cfT\">Teléfono / WhatsApp</label><input id=\"cfT\" name=\"phone\" type=\"tel\" inputmode=\"tel\" autocomplete=\"tel\"></div></div>'+\n    '<div class=\"ns-fld\"><label for=\"cfP\">¿Sobre qué producto?</label><input id=\"cfP\" name=\"product\" value=\"'+esc(pre)+'\" placeholder=\"Opcional\"></div>'+\n    '<div class=\"ns-fld\"><label for=\"cfG\">Mensaje</label><textarea id=\"cfG\" name=\"msg\" maxlength=\"1500\"></textarea></div>'+\n    '<div class=\"ns-hp\" aria-hidden=\"true\"><label for=\"cfW\">No completar este campo</label><input id=\"cfW\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\"></div>'+\n    '<p class=\"ns-net\" style=\"margin:0\">Dejanos email o teléfono para poder responderte.</p><div id=\"cfMsg\" role=\"alert\"></div><button class=\"ns-btn ns-pri\" type=\"submit\" id=\"cfBtn\">Enviar consulta</button></form>'\n   :'<div class=\"ns-msg\">Formulario en configuración. Mientras tanto escribinos por Instagram'+(wa?' o WhatsApp':'')+'.</div>';\n  return '<div class=\"ns-wrap\">'+crumb([{t:'Inicio',href:'#/'},{t:'Contacto'}])+'<h1 class=\"ns-h2 ns-tag\">Hablemos</h1><div class=\"ns-ct\"><div class=\"ns-info\"><div><h3>Pedidos</h3><p>Hacés el pedido en la web y lo retirás o te lo enviamos. Te confirmamos todo por mail.</p></div>'+(ig?'<div><h3>Instagram</h3><p><a href=\"'+esc(ig)+'\" target=\"_blank\" rel=\"noopener\">'+esc(ig.replace(/^https?:\\/\\/(www\\.)?instagram\\.com\\//i,'@').replace(/\\/$/,''))+'</a></p></div>':'')+(wa?'<div><a class=\"ns-btn ns-lime\" href=\"'+esc(wa)+'\" target=\"_blank\" rel=\"noopener\">Escribinos por WhatsApp</a></div>':'')+'</div><div>'+form+'</div></div></div>';\n}\nfunction vNF(t){return '<div class=\"ns-wrap\"><div class=\"ns-done\"><h1 class=\"ns-h2 ns-tag\">'+esc(t||'Acá no hay nada.')+'</h1><p style=\"margin:12px 0 20px;color:var(--muted)\">Volvé a la tienda y seguí mirando.</p><a class=\"ns-btn ns-pri\" href=\"#/tienda\">Ir a la tienda</a></div></div>';}\nfunction vPage(key){\n  var pg=pages().filter(function(x){return x.key===key;})[0];if(!pg)return vNF();\n  var body=String(pg.body||'').split(/\\n{2,}/).map(function(b){return '<p>'+esc(b).replace(/\\n/g,'<br>')+'</p>';}).join('');\n  return '<div class=\"ns-wrap\"><div class=\"ns-pg\"><h1 class=\"ns-tag\">'+esc(pg.title)+'</h1>'+body+'</div></div>';\n}\nfunction lineHtml(i){var p=byHandle[i.handle],pr=priceOf(p);return '<div class=\"ns-ln\"><b>'+esc(p.name)+'</b><span class=\"ns-lt\">'+(pr?money(pr.now*i.quantity,pr.cur):'')+'</span><div class=\"ns-qty\" role=\"group\" aria-label=\"Cantidad de '+esc(p.name)+'\"><button type=\"button\" data-dec=\"'+esc(i.handle)+'\" aria-label=\"Restar uno\">−</button><span>'+i.quantity+'</span><button type=\"button\" data-inc=\"'+esc(i.handle)+'\" aria-label=\"Sumar uno\">+</button></div></div>';}\nfunction cpHtml(){return '<form class=\"ns-cp\" data-cp><label class=\"ns-sr\" for=\"nsCpIn\">Código de descuento</label><input class=\"nsCpIn\" id=\"nsCpIn\" placeholder=\"Código de descuento\" value=\"'+esc(state.coupon)+'\" autocomplete=\"off\"><button class=\"ns-btn ns-sm\" type=\"submit\">Aplicar</button></form><div class=\"nsCpMsg\"></div>';}\nfunction vCart(){\n  var items=cartItems();\n  return '<div class=\"ns-wrap\">'+crumb([{t:'Inicio',href:'#/'},{t:'Carrito'}])+'<h1 class=\"ns-h2 ns-tag\">Tu carrito</h1><div style=\"max-width:640px;padding:16px 0 72px\">'+(items.length?'<div>'+items.map(lineHtml).join('')+'</div>'+cpHtml()+'<dl class=\"ns-tot nsTot\"></dl><a class=\"ns-btn ns-pri ns-blk\" href=\"#/checkout\">Finalizar compra</a>':'<div class=\"ns-empty\">Todavía no sumaste nada.<br><br><a class=\"ns-btn ns-pri\" href=\"#/tienda\">Ver la tienda</a></div>')+'</div></div>';\n}\nfunction shipOpts(){\n  var o=(CFG&&CFG.shippingOptions&&CFG.shippingOptions.length)?CFG.shippingOptions:(CFG&&CFG.shippingMethods&&CFG.shippingMethods.length?CFG.shippingMethods:null);\n  if(o){o=o.map(function(x){return typeof x==='string'?{id:x,name:x,price:null}:x;}).filter(function(x){return x&&(x.id||x.name)&&x.enabled!==false;});if(o.length)return o.map(function(x){return {id:x.id||x.name,name:x.name||x.id,price:x.price,eta:[x.eta,x.note||x.description].filter(Boolean).join(' · '),pickup:/retir|local|sucursal|punto/i.test((x.name||'')+(x.id||''))};});}\n  return [{id:'Retiro',name:'Retiro en punto de entrega',price:0,eta:'Coordinamos día y horario por mensaje',pickup:true},{id:'Envío a domicilio',name:'Envío a domicilio',price:null,eta:'CABA y GBA · el costo se confirma antes de despachar',pickup:false}];\n}\nvar PAY_NAMES={mercadopago:'Mercado Pago',transferencia:'Transferencia bancaria',efectivo:'Efectivo al retirar',visa:'Tarjeta (Visa)',mastercard:'Tarjeta (Mastercard)',cash:'Efectivo'};\nfunction payOpts(){var p=(CFG&&CFG.paymentMethods&&CFG.paymentMethods.length)?CFG.paymentMethods:['transferencia','efectivo'];return p.map(function(x){var k=typeof x==='string'?x:(x.name||x.label||x.id);return {id:k,name:PAY_NAMES[String(k).toLowerCase()]||k};}).filter(function(x){return x.id;});}\nfunction vCheckout(){\n  var items=cartItems();if(!items.length)return '<div class=\"ns-wrap\">'+crumb([{t:'Inicio',href:'#/'},{t:'Checkout'}])+'<div class=\"ns-empty\" style=\"margin:24px 0 72px\">Tu carrito está vacío.<br><br><a class=\"ns-btn ns-pri\" href=\"#/tienda\">Ver la tienda</a></div></div>';\n  var ship=shipOpts().map(function(o,i){var pt=o.price==null?'A coordinar':(Number(o.price)===0?'Sin cargo':money(o.price));return '<label class=\"ns-opt\"><input type=\"radio\" name=\"ship\" value=\"'+esc(o.id)+'\" data-pick=\"'+(o.pickup?1:0)+'\"'+(i===0?' checked':'')+'><span><b>'+esc(o.name)+'</b> · '+pt+(function(){var e=String(o.eta||'').split(' · ').filter(function(x){return x&&norm(x)!==norm(pt);}).join(' · ');return e?'<small>'+esc(e)+'</small>':'';})()+'</span></label>';}).join('');\n  var pay=payOpts().map(function(p,i){return '<label class=\"ns-opt\"><input type=\"radio\" name=\"pay\" value=\"'+esc(p.id)+'\"'+(i===0?' checked':'')+'><span><b>'+esc(p.name)+'</b></span></label>';}).join('');\n  var first=shipOpts()[0];\n  return '<div class=\"ns-wrap\">'+crumb([{t:'Inicio',href:'#/'},{t:'Carrito',href:'#/carrito'},{t:'Checkout'}])+'<h1 class=\"ns-h2 ns-tag\">Finalizar compra</h1><div class=\"ns-co\"><form class=\"ns-form\" id=\"nsCo\" novalidate>'+\n   '<div class=\"ns-fld\"><label for=\"coN\">Nombre y apellido</label><input id=\"coN\" name=\"name\" autocomplete=\"name\" required aria-describedby=\"coNE\"><span class=\"ns-err\" id=\"coNE\"></span></div>'+\n   '<div class=\"ns-two\"><div class=\"ns-fld\"><label for=\"coM\">Email</label><input id=\"coM\" name=\"email\" type=\"email\" autocomplete=\"email\" required aria-describedby=\"coME\"><span class=\"ns-err\" id=\"coME\"></span></div><div class=\"ns-fld\"><label for=\"coT\">Teléfono / WhatsApp</label><input id=\"coT\" name=\"phone\" type=\"tel\" inputmode=\"tel\" autocomplete=\"tel\"></div></div>'+\n   '<fieldset><legend>Entrega</legend>'+ship+'</fieldset>'+\n   '<div class=\"ns-fld\" id=\"coAddrW\"'+(first.pickup?' hidden':'')+'><label for=\"coA\">Dirección de envío (calle, número, localidad, CP)</label><input id=\"coA\" name=\"addr\" autocomplete=\"street-address\" aria-describedby=\"coAE\"><span class=\"ns-err\" id=\"coAE\"></span></div>'+\n   '<fieldset><legend>Pago</legend>'+pay+'</fieldset>'+\n   '<div class=\"ns-fld\"><label for=\"coO\">Comentarios (opcional)</label><input id=\"coO\" name=\"notes\" placeholder=\"Color, horario de entrega, lo que necesites\"></div>'+\n   '<div id=\"coMsg\" role=\"alert\"></div><button class=\"ns-btn ns-pri ns-blk\" type=\"submit\" id=\"coBtn\">Confirmar pedido</button><p class=\"ns-net\" style=\"text-align:center\">Al confirmar declarás ser mayor de 18 años.</p></form>'+\n   '<aside class=\"ns-sum\" aria-label=\"Resumen\"><h2 class=\"ns-tag\" style=\"font-size:26px\">Tu pedido</h2><div id=\"nsSum\">'+items.map(lineHtml).join('')+'</div>'+cpHtml()+'<dl class=\"ns-tot nsTot\"></dl></aside></div></div>';\n}\nfunction vOk(){\n  var o=null;try{o=JSON.parse(sessionStorage.getItem(ORDER_KEY)||'null');}catch(e){}\n  if(!o)return vNF('No hay un pedido para mostrar.');\n  return '<div class=\"ns-wrap\"><div class=\"ns-done\"><div class=\"ns-ck\">'+ICONS.ck+'</div><h1 class=\"ns-h2 ns-tag\">¡Gracias'+(o.name?', '+esc(o.name.split(' ')[0]):'')+'!</h1><p class=\"ns-num\">Pedido '+esc(o.orderId)+(o.total!=null?' · '+money(o.total,o.currency):'')+'</p><p style=\"color:var(--ink2)\">'+esc(o.message||'Te mandamos la confirmación por email.')+'</p><p style=\"color:var(--muted);margin-top:8px;font-size:14px\">'+esc(o.ship||'')+'</p><div style=\"margin-top:20px\">'+(o.paymentUrl?'<a class=\"ns-btn ns-lime\" href=\"'+esc(o.paymentUrl)+'\" rel=\"noopener\">Pagar ahora</a>':'')+'<a class=\"ns-btn\" href=\"#/tienda\">Seguir mirando</a></div></div></div>';\n}\n\n/* ---------- footer ---------- */\nfunction pages(){var l=parseJ(CFG&&CFG.pagesJson,[]);return Array.isArray(l)?l.filter(function(x){return x&&x.key&&x.visible!==false;}):[];}\nfunction renderFooter(){\n  var soc=parseJ(CFG&&CFG.socialJson,{})||{},names={instagram:'Instagram',facebook:'Facebook',tiktok:'TikTok',youtube:'YouTube',whatsapp:'WhatsApp'};\n  var links=Object.keys(soc).filter(function(k){return soc[k]&&names[k]&&/^https?:/i.test(soc[k]);}).map(function(k){return '<li><a href=\"'+esc(soc[k])+'\" target=\"_blank\" rel=\"noopener\">'+names[k]+'</a></li>';}).join('');\n  var logo=CFG&&CFG.logoDarkUrl?'<img src=\"'+esc(CFG.logoDarkUrl)+'\" alt=\"Nasty\" data-img>':'<span class=\"ns-tag ns-wm\">NASTY</span>';\n  var cats=catsWithItems();\n  $('nsFt').innerHTML='<div class=\"ns-wrap\"><div>'+logo+'<p>Smoke shop. Sedas, filtros, picadores, bongs y accesorios hechos a mano.</p><p style=\"margin-top:8px;color:var(--muted)\">Venta sólo a mayores de 18 años.</p></div>'+\n   '<div><h3>Tienda</h3><ul>'+cats.slice(0,6).map(function(c){return '<li><a href=\"#/categoria/'+esc(c.slug)+'\">'+esc(c.name)+'</a></li>';}).join('')+'<li><a href=\"#/tienda?f=rosa\">Todo rosa</a></li></ul></div>'+\n   '<div><h3>Info</h3><ul>'+pages().map(function(x){return '<li><a href=\"#/pagina/'+esc(x.key)+'\">'+esc(x.title)+'</a></li>';}).join('')+'<li><a href=\"#/contacto\">Contacto</a></li>'+links+'</ul></div>'+\n   '<div class=\"ns-fine\"><span>© '+new Date().getFullYear()+' '+esc((CFG&&CFG.storeName)||'Nasty')+'. Precios en pesos con IVA incluido.</span><span>Tienda con MOBU</span></div></div>';\n  if(CFG&&CFG.logoDarkUrl)$('nsLogo').innerHTML='<img src=\"'+esc(CFG.logoDarkUrl)+'\" alt=\"\" data-img>';\n}\n\n/* ---------- router ---------- */\nvar routeKey='';\nfunction parseHash(){var raw=(location.hash||'#/').replace(/^#/,''),q='',i=raw.indexOf('?');if(i>=0){q=raw.slice(i+1);raw=raw.slice(0,i);}var parts=raw.split('/').filter(Boolean),a='';try{a=decodeURIComponent(parts[1]||'');}catch(e){a=parts[1]||'';}return {name:parts[0]||'',arg:a,qs:new URLSearchParams(q)};}\nfunction route(){\n  var r=parseHash(),h='';\n  if(!CFG)return;\n  switch(r.name){\n    case '':h=vHome();break;\n    case 'tienda':h=vShop('',r.qs);break;\n    case 'categoria':h=vShop(r.arg,r.qs);break;\n    case 'producto':h=vProd(r.arg);break;\n    case 'contacto':h=vContact(r.qs);break;\n    case 'carrito':h=vCart();break;\n    case 'checkout':h=vCheckout();break;\n    case 'pedido-ok':h=vOk();break;\n    case 'pagina':h=vPage(r.arg);break;\n    default:h=vNF();\n  }\n  if(!h)return;\n  var v=$('nsView'),first=!routeKey;routeKey=r.name||'home';v.innerHTML=h;v.classList.remove('ns-in');void v.offsetWidth;if(!REDUCED)v.classList.add('ns-in');\n  var cur=r.name||'home';if(cur==='tienda'&&r.qs.get('f')==='rosa')cur='rosa';if(cur==='categoria'||cur==='producto')cur='tienda';\n  Array.prototype.forEach.call(d.querySelectorAll('#nsNav a'),function(a){if(a.getAttribute('data-nav')===cur)a.setAttribute('aria-current','page');else a.removeAttribute('aria-current');});\n  if(!first){window.scrollTo(0,0);try{v.focus({preventScroll:true});}catch(e){}}\n  d.title=({'':'',tienda:'Tienda · ',categoria:'Tienda · ',producto:'',contacto:'Contacto · ',carrito:'Carrito · ',checkout:'Checkout · ','pedido-ok':'Pedido · '}[r.name]||'')+(r.name==='producto'&&byHandle[r.arg]?byHandle[r.arg].name+' · ':'')+(CFG.storeName||BRAND.name);\n  renderTotals();reveals();\n}\nwindow.addEventListener('hashchange',route);\n\n/* ---------- carrito y cotización (motor de ventas de MOBU) ---------- */\nfunction setQty(h,q,from){q=Math.max(0,Math.min(99,q|0));var prev=state.cart[h]||0;if(q)state.cart[h]=q;else delete state.cart[h];persist();renderCart();scheduleQuote();if(q>prev){fly(from);anim($('nsCount'),'ns-beat');}}\nvar qT,qS=0;\nfunction scheduleQuote(now){clearTimeout(qT);if(!cartItems().length||PREVIEW){state.quote=null;state.busy=false;renderTotals();return;}state.busy=true;renderTotals();qT=setTimeout(runQuote,now?0:400);}\nfunction runQuote(){var s=++qS,b={items:cartItems()};if(state.coupon)b.couponCode=state.coupon;\n  fetchJson(BASE+'/quote',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(b)}).then(function(r){if(s!==qS)return;state.busy=false;state.quote=r.ok&&r.body?r.body:null;renderTotals();}).catch(function(){if(s!==qS)return;state.busy=false;state.quote=null;renderTotals();});}\nfunction renderCart(){\n  var n=cartCount(),items=cartItems();$('nsCount').textContent=n;\n  if(!items.length){$('nsLines').innerHTML='<div class=\"ns-empty\" style=\"margin:16px 0\">Todavía no sumaste nada.</div>';$('nsFoot').innerHTML='<a class=\"ns-btn ns-pri ns-blk\" href=\"#/tienda\" data-close>Ver la tienda</a>';}\n  else{$('nsLines').innerHTML=items.map(lineHtml).join('');$('nsFoot').innerHTML=cpHtml()+'<dl class=\"ns-tot nsTot\"></dl><a class=\"ns-btn ns-pri ns-blk\" href=\"#/checkout\" data-close>Finalizar compra</a>';}\n  var r=parseHash(),sm=$('nsSum');\n  if(sm&&r.name==='checkout'){if(items.length)sm.innerHTML=items.map(lineHtml).join('');else location.hash='#/carrito';}\n  else if(r.name==='carrito'&&routeKey==='carrito')route();\n  renderTotals();\n}\nfunction renderTotals(){\n  var q=state.quote,sub=localSubtotal(),total=q&&q.total!=null?q.total:sub;\n  var h='<dt>Subtotal</dt><dd>'+money(q&&q.subtotal!=null?q.subtotal:sub)+'</dd>';\n  if(q&&Number(q.discount)>0)h+='<dt>'+esc(q.discountLabel||'Descuento')+'</dt><dd>− '+money(q.discount)+'</dd>';\n  h+='<dt class=\"ns-g\">Total</dt><dd class=\"ns-g\">'+(state.busy?'…':money(total))+'</dd>';\n  var msg=q&&q.discountError?'<p class=\"ns-msg ns-bad\" style=\"margin-top:8px\">'+esc(q.discountError)+'</p>':(q&&q.couponCode&&Number(q.discount)>0?'<p class=\"ns-msg ns-ok\" style=\"margin-top:8px\">Código aplicado.</p>':'');\n  Array.prototype.forEach.call(root.querySelectorAll('.nsTot'),function(t){t.innerHTML=h;});\n  Array.prototype.forEach.call(root.querySelectorAll('.nsCpMsg'),function(t){t.innerHTML=msg;});\n  var b=$('coBtn');if(b&&!b.disabled)b.textContent='Confirmar pedido · '+money(total);\n}\n\n/* ---------- eventos ---------- */\nvar drawer=$('nsDrawer');\nfunction openDrawer(){renderCart();if(!drawer.open)drawer.showModal();}\n$('nsBag').addEventListener('click',openDrawer);\ndrawer.addEventListener('click',function(e){if(e.target===drawer)drawer.close();});\nroot.addEventListener('click',function(e){\n  var t=e.target.closest('[data-add],[data-inc],[data-dec],[data-close],[data-f],[data-thumb],[data-q]');if(!t)return;\n  if(t.hasAttribute('data-add')){var h=t.getAttribute('data-add'),qs=t.getAttribute('data-qty'),n=qs&&$(qs.slice(1))?parseInt($(qs.slice(1)).textContent,10)||1:1;setQty(h,(state.cart[h]||0)+n,t);anim(t,'ns-jump');toast('Sumaste: '+byHandle[h].name);}\n  else if(t.hasAttribute('data-inc')){var a=t.getAttribute('data-inc');setQty(a,(state.cart[a]||0)+1);}\n  else if(t.hasAttribute('data-dec')){var b=t.getAttribute('data-dec');setQty(b,(state.cart[b]||0)-1);}\n  else if(t.hasAttribute('data-close')){var dl=t.closest('dialog');if(dl)dl.close();}\n  else if(t.hasAttribute('data-f')){FILTER.f=t.getAttribute('data-f');Array.prototype.forEach.call(root.querySelectorAll('#nsFilters .ns-chip'),function(x){x.setAttribute('aria-pressed',x===t);});var g=$('nsGrid');g.innerHTML=gridHtml(g.getAttribute('data-slug'));reveals();}\n  else if(t.hasAttribute('data-thumb')){$('nsMain').innerHTML='<img src=\"'+esc(t.getAttribute('data-thumb'))+'\" alt=\"\" data-img>';Array.prototype.forEach.call(root.querySelectorAll('[data-thumb]'),function(x){x.setAttribute('aria-current',x===t);});}\n  else if(t.hasAttribute('data-q')){var el=$('nsQ1');el.textContent=Math.max(1,Math.min(99,(parseInt(el.textContent,10)||1)+parseInt(t.getAttribute('data-q'),10)));}\n});\nroot.addEventListener('input',function(e){\n  if(e.target.id==='nsQ'){FILTER.q=e.target.value;var g=$('nsGrid');g.innerHTML=gridHtml(g.getAttribute('data-slug'));reveals();}\n});\nroot.addEventListener('change',function(e){\n  if(e.target.name==='ship'){var w=$('coAddrW');if(w)w.hidden=e.target.getAttribute('data-pick')==='1';}\n});\nroot.addEventListener('submit',function(e){\n  var f=e.target;\n  if(f.hasAttribute('data-cp')){e.preventDefault();state.coupon=f.querySelector('input').value.trim().toUpperCase();persist();if(PREVIEW){Array.prototype.forEach.call(root.querySelectorAll('.nsCpMsg'),function(m){m.innerHTML='<p class=\"ns-msg\" style=\"margin-top:8px\">En la vista previa los códigos no se validan.</p>';});return;}scheduleQuote(true);}\n  else if(f.id==='nsCo'){e.preventDefault();doCheckout(f);}\n  else if(f.id==='nsForm'){e.preventDefault();doContact(f);}\n  else if(f.id==='nsChatF'){e.preventDefault();sendChat();}\n});\n\n/* ---------- puerta 18+ ---------- */\n(function gate(){var g=$('nsGate'),ok=false;try{ok=localStorage.getItem(GATE_KEY)==='1';}catch(e){}\n  if(ok||!g.showModal)return;\n  try{g.showModal();}catch(e){return;}\n  g.addEventListener('cancel',function(e){e.preventDefault();});\n  $('nsGateYes').addEventListener('click',function(){try{localStorage.setItem(GATE_KEY,'1');}catch(e){}g.close();});\n})();\n\n/* ---------- checkout → Ventas › Bandeja de pedidos ---------- */\nfunction setErr(id,m){var el=$(id+'E');var inp=$(id);if(inp)inp.setAttribute('aria-invalid',m?'true':'false');if(el)el.textContent=m;return !m;}\nfunction doCheckout(f){\n  var name=f.name.value.trim(),mail=f.email.value.trim(),pick=(f.querySelector('input[name=\"ship\"]:checked')||{}).getAttribute('data-pick')==='1',addr=(f.addr.value||'').trim();\n  var ok=setErr('coN',name.length<2?'Escribí tu nombre.':'');\n  ok=setErr('coM',/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/.test(mail)?'':'Revisá el email: ahí te llega la confirmación.')&&ok;\n  ok=setErr('coA',(!pick&&addr.length<5)?'Escribí la dirección de envío.':'')&&ok;\n  if(!ok){var bad=f.querySelector('[aria-invalid=\"true\"]');if(bad)bad.focus();return;}\n  var btn=$('coBtn'),msg=$('coMsg'),notes=f.notes?f.notes.value.trim():'';\n  var shipTxt=pick?'Retira en punto de entrega':addr;if(notes)shipTxt+=' · Nota: '+notes;\n  var req={externalOrderId:'NS-'+Date.now().toString(36).toUpperCase()+'-'+Math.random().toString(36).slice(2,8).toUpperCase(),\n    buyer:{name:name,email:mail,phone:f.phone.value.trim()||null},items:cartItems(),\n    shippingMethod:(f.querySelector('input[name=\"ship\"]:checked')||{}).value||null,shippingAddress:shipTxt,\n    paymentMethod:(f.querySelector('input[name=\"pay\"]:checked')||{}).value||null};\n  if(state.coupon)req.couponCode=state.coupon;\n  if(PREVIEW){msg.innerHTML='<p class=\"ns-msg\">Vista previa: el pedido no se envió.</p>';return;}\n  btn.disabled=true;btn.textContent='Enviando el pedido…';msg.innerHTML='';\n  fetchJson(BASE+'/checkout',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(req)}).then(function(r){\n    if(r.ok&&r.body&&r.body.orderId){\n      try{sessionStorage.setItem(ORDER_KEY,JSON.stringify({orderId:r.body.orderId,total:r.body.total,currency:r.body.currency,message:r.body.message,paymentUrl:r.body.paymentUrl||null,name:name,ship:shipTxt}));}catch(e){}\n      state.cart={};state.quote=null;state.coupon='';persist();renderCart();location.hash='#/pedido-ok';return;\n    }\n    btn.disabled=false;btn.textContent='Confirmar pedido';var sm=r.body&&(r.body.error||r.body.message);\n    msg.innerHTML='<p class=\"ns-msg ns-bad\">'+esc(r.status===503?'Los pedidos online están pausados en este momento. Escribinos por Instagram.':r.status===429?(sm||'Demasiados intentos seguidos. Esperá unos minutos.'):(sm||'No pudimos confirmar el pedido. Revisá los datos y probá otra vez.'))+'</p>';\n  }).catch(function(){btn.disabled=false;btn.textContent='Confirmar pedido';msg.innerHTML='<p class=\"ns-msg ns-bad\">No hay conexión con la tienda. Revisá tu internet: el pedido no se cargó.</p>';});\n}\n\n/* ---------- formulario del CRM → Lead ---------- */\nfunction doContact(f){\n  var name=f.name.value.trim(),mail=f.email.value.trim(),tel=f.phone.value.trim(),msg=$('cfMsg'),btn=$('cfBtn');\n  var ok=setErr('cfN',name.length<2?'Escribí tu nombre.':'');\n  ok=setErr('cfM',mail&&!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/.test(mail)?'Revisá el email.':'')&&ok;\n  if(ok&&!mail&&!tel){ok=false;msg.innerHTML='<p class=\"ns-msg ns-bad\">Dejanos un email o un teléfono para poder responderte.</p>';}else if(ok)msg.innerHTML='';\n  if(!ok){var bad=f.querySelector('[aria-invalid=\"true\"]');if(bad)bad.focus();return;}\n  var parts=name.split(/\\s+/),ans={};\n  if(f.product.value.trim())ans.product=f.product.value.trim();\n  var body={firstName:parts[0],lastName:parts.slice(1).join(' ')||null,email:mail||null,phone:tel||null,message:f.msg.value.trim()||null,website:f.website.value,answers:ans};\n  ['utm_source','utm_medium','utm_campaign','utm_content'].forEach(function(k){var v=QS.get(k);if(v)body[k.replace(/_(\\w)/,function(m,c){return c.toUpperCase();})]=v.slice(0,120);});\n  btn.disabled=true;btn.textContent='Enviando…';\n  fetchJson(CRM+'/forms/'+encodeURIComponent(FORM_TOKEN)+'/submit',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)}).then(function(r){\n    if(r.ok){f.outerHTML='<div class=\"ns-msg ns-ok\" role=\"alert\"><b>¡Recibimos tu mensaje!</b><br>Te respondemos a la brevedad.</div>';return;}\n    btn.disabled=false;btn.textContent='Enviar consulta';\n    msg.innerHTML='<p class=\"ns-msg ns-bad\">'+esc(r.status===404?'Este formulario no está disponible por ahora. Escribinos por Instagram.':((r.body&&r.body.error)||'No pudimos enviar la consulta. Revisá los datos y probá otra vez.'))+'</p>';\n  }).catch(function(){btn.disabled=false;btn.textContent='Enviar consulta';msg.innerHTML='<p class=\"ns-msg ns-bad\">No hay conexión. Probá de nuevo en un rato.</p>';});\n}\n\n/* ---------- chat web del CRM ---------- */\nvar WC={tok:null,vid:null,last:'',seen:{},timer:null,open:false,ready:false};\nfunction visitor(){var v=null;try{v=localStorage.getItem(VIS_KEY);}catch(e){}if(!v){v='ns-'+((window.crypto&&crypto.randomUUID)?crypto.randomUUID():Date.now().toString(36)+Math.random().toString(36).slice(2,12));try{localStorage.setItem(VIS_KEY,v);}catch(e){}}return v;}\nfunction initChat(){\n  var tk=CFG&&(CFG.webchatToken||(CFG.webchatEnabled!==false?NS_WEBCHAT_TOKEN:''));\n  if(PREVIEW||!tk)return;\n  WC.tok=tk;WC.vid=visitor();var b=$('nsChatB');b.hidden=false;\n  try{$('nsChatName').value=localStorage.getItem('ns-vname')||'';}catch(e){}\n  b.addEventListener('click',function(){setChat(!WC.open);});$('nsChatX').addEventListener('click',function(){setChat(false);$('nsChatB').focus();});\n  d.addEventListener('keydown',function(e){if(e.key==='Escape'&&WC.open){setChat(false);$('nsChatB').focus();}});\n}\nfunction addBub(m){if(m.id&&WC.seen[m.id])return;if(m.id)WC.seen[m.id]=1;if(m.createdAt&&m.createdAt>WC.last)WC.last=m.createdAt;\n  var el=d.createElement('div');el.className='ns-bub '+(String(m.direction).toUpperCase()==='IN'?'ns-v':'ns-o');el.textContent=m.body||m.text||'';var box=$('nsChatM');box.appendChild(el);box.scrollTop=box.scrollHeight;}\nfunction setChat(on){\n  WC.open=on;$('nsChat').classList.toggle('ns-on',on);$('nsChatB').setAttribute('aria-expanded',on);clearInterval(WC.timer);\n  if(!on)return;\n  if(!WC.ready){WC.ready=true;\n    fetchJson(CRM+'/webchat/'+encodeURIComponent(WC.tok)).then(function(r){\n      if(r.status===404){$('nsChatB').hidden=true;setChat(false);return;}\n      var c=r.body||{};if(c.displayName)$('nsChatT').textContent=c.displayName;\n      if(c.welcomeMessage)addBub({body:c.welcomeMessage,direction:'OUT'});\n      pollChat();\n    }).catch(function(){WC.ready=false;});\n  }else pollChat();\n  WC.timer=setInterval(function(){if(!d.hidden)pollChat();},5000);\n  setTimeout(function(){$('nsChatI').focus();},60);\n}\nfunction pollChat(){\n  var u=CRM+'/webchat/'+encodeURIComponent(WC.tok)+'/messages?visitorId='+encodeURIComponent(WC.vid)+(WC.last?'&after='+encodeURIComponent(WC.last):'');\n  fetchJson(u).then(function(r){if(r.ok&&Array.isArray(r.body)){r.body.forEach(addBub);if(r.body.length)$('nsChatN').hidden=true;}}).catch(function(){});\n}\nfunction sendChat(){\n  var i=$('nsChatI'),t=i.value.trim();if(!t)return;\n  var nm=$('nsChatName').value.trim();try{if(nm)localStorage.setItem('ns-vname',nm);}catch(e){}\n  i.value='';\n  fetchJson(CRM+'/webchat/'+encodeURIComponent(WC.tok)+'/messages',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({visitorId:WC.vid,visitorName:nm||null,text:t})}).then(function(r){\n    if(r.ok&&r.body){addBub(r.body.body?r.body:{id:null,body:t,direction:'IN'});$('nsChatN').hidden=true;}\n    else{addBub({body:'No pudimos enviar tu mensaje. Probá de nuevo.',direction:'OUT'});i.value=t;}\n  }).catch(function(){addBub({body:'Sin conexión. Probá de nuevo.',direction:'OUT'});i.value=t;});\n}\n\n/* ---------- arranque: render inmediato con la config del shell, datos en paralelo ---------- */\nrenderCart();\nvar shellCfg=(window.MOBU&&window.MOBU.config&&window.MOBU.config.slug)?window.MOBU.config:null;\nif(shellCfg){CFG=shellCfg;}\ntry{renderFooter();route();}catch(e){}\nPromise.all([\n  shellCfg?Promise.resolve(null):fetchJson(BASE+'/config').then(function(r){if(r.ok&&r.body)CFG=r.body;}).catch(function(){}),\n  fetchJson(BASE+'/products').then(function(r){return r.ok&&Array.isArray(r.body)?r.body:[];}).catch(function(){return [];}),\n  fetchJson(BASE+'/categories').then(function(r){return r.ok&&Array.isArray(r.body)?r.body:[];}).catch(function(){return [];})\n]).then(function(res){\n  if(!CFG||!res[1]||!res[1].length){PREVIEW=true;CFG=CFG||{storeName:BRAND.name};PRODUCTS=sampleProducts();CATS=SAMPLE_CATS;$('nsPv').hidden=false;}\n  else{PRODUCTS=res[1];CATS=res[2]||[];}\n  byHandle={};PRODUCTS.forEach(function(p){if(p&&p.handle)byHandle[p.handle]=p;});\n  for(var h in state.cart){if(!byHandle[h])delete state.cart[h];}\n  persist();renderFooter();renderCart();route();initChat();\n  if(cartItems().length)scheduleQuote(true);\n});\n})();\n</script>\n","accentColor":"#ff2d8a","secondaryColor":"#0b0b0f","logoUrl":"https://firebasestorage.googleapis.com/v0/b/mobu-idp-app.firebasestorage.app/o/storefront%2F9857a285-0dbd-4750-9d55-4c1c4964f6d7%2F1794674671250_nasty-logo-light-web.png?alt=media&token=27c2df6e-7aaa-454c-85a1-796f97c20894","logoDarkUrl":"https://firebasestorage.googleapis.com/v0/b/mobu-idp-app.firebasestorage.app/o/storefront%2F9857a285-0dbd-4750-9d55-4c1c4964f6d7%2F1794674671405_nasty-logo-dark-web.png?alt=media&token=2df715b6-b06d-4d1b-a3d5-d28d0e652106","logoScale":40,"faviconUrl":"https://firebasestorage.googleapis.com/v0/b/mobu-idp-app.firebasestorage.app/o/storefront%2F9857a285-0dbd-4750-9d55-4c1c4964f6d7%2F1794674671986_nasty-icon-dark-web.png?alt=media&token=74cf38d8-d553-4bde-9268-a53fb7982474","heroTitle":"Smoke shop con onda.","heroSubtitle":"Sedas, filtros, picadores, bongs y accesorios hechos a mano. Todo rosa, si querés. Retirás o te lo llevamos en CABA y GBA.","currencyCode":null,"paymentMethods":[],"shippingMethods":[],"shippingOptions":[{"id":"mmwh4g7by","name":"Retiro sin cargo","price":0,"eta":"A coordinar","note":"Coordinamos punto y horario de retiro por mensaje"},{"id":"mmwh4mubb","name":"Envío en moto CABA y GBA","price":null,"eta":"A coordinar","note":"Sólo CABA y GBA. Te confirmamos el costo antes de despachar"}],"gtmContainerId":null,"gaMeasurementId":null,"metaPixelId":null,"pagesJson":"[{\"key\":\"como-comprar\",\"title\":\"Cómo comprar\",\"body\":\"Comprar en nuestra tienda es muy fácil:\\n\\n1. Navegá el catálogo y elegí tus productos.\\n2. Agregalos al carrito y revisá tu pedido.\\n3. Completá tus datos y la dirección de envío.\\n4. Elegí el medio de pago y confirmá la compra.\\n\\nTe llega la confirmación por email con el seguimiento del pedido.\",\"visible\":true,\"placement\":\"footer\",\"format\":\"text\",\"type\":\"help\",\"inHeader\":false,\"inHome\":false},{\"key\":\"medios-pago\",\"title\":\"Medios de pago\",\"body\":\"Aceptamos:\\n\\n• Tarjetas de crédito y débito (Visa, Mastercard, Amex).\\n• Mercado Pago, en cuotas.\\n• Transferencia bancaria.\\n\\nTodos los pagos se procesan de forma segura.\",\"visible\":true,\"placement\":\"footer\",\"format\":\"text\",\"type\":\"help\",\"inHeader\":false,\"inHome\":false},{\"key\":\"envios\",\"title\":\"Envíos y entregas\",\"body\":\"Hacemos envíos a todo el país (Mercado Envíos, OCA, Correo Argentino).\\n\\nEl costo y el plazo se calculan en el checkout según tu código postal. También podés retirar en nuestro local. Al despachar, te enviamos el número de seguimiento.\",\"visible\":true,\"placement\":\"footer\",\"format\":\"text\",\"type\":\"help\",\"inHeader\":false,\"inHome\":false},{\"key\":\"cambios\",\"title\":\"Cambios y devoluciones\",\"body\":\"Tenés 30 días desde que recibís el producto para cambiarlo o devolverlo.\\n\\nDebe estar sin uso, con su empaque y etiquetas. Escribinos y te ayudamos con el proceso.\",\"visible\":true,\"placement\":\"footer\",\"format\":\"text\",\"type\":\"help\",\"inHeader\":false,\"inHome\":false}]","footerJson":"{\"about\":\"\",\"email\":\"\",\"phone\":\"\",\"address\":\"\",\"hours\":\"\"}","secondaryJson":"{\"type\":\"cta\",\"title\":\"\",\"text\":\"\",\"buttonText\":\"\",\"buttonTarget\":\"shop\"}","webMode":"shop","fontFamily":null,"webchatEnabled":false,"webchatToken":null,"analyticsEnabled":true,"socialJson":null,"bannerEnabled":false,"bannerImageUrl":null,"bannerAnimation":"mobu","bannerFeaturedHandle":null,"contentJson":null,"shareTitle":null,"shareDescription":null,"shareImageUrl":null,"customDomain":null,"customDomainStatus":null,"popupsJson":null}