{"title":"Ajax System Builder","description":"\u003c!-- ============================================================\n  AV EXPRESS — AJAX SECURITY KIT BUILDER  (v3 · Fully Responsive)\n  Paste this ENTIRE block into a \"Custom Liquid\" section on your\n  collection template (Online Store \u003e Customize). No theme files\n  are modified.\n  v3: full mobile \/ tablet \/ touch optimization —\n  fluid type, 44px+ tap targets, no iOS input zoom, grid review\n  layout on phones, sticky cart bar on phones \u0026 tablets,\n  reduced-motion support. Same cart logic as v2.\n  To swap products, edit the CATALOG object below.\n============================================================ --\u003e\n\u003cdiv id=\"avx-kit-builder\"\u003e\n\n  \u003cdiv class=\"axk-hero\"\u003e\n    \u003cdiv class=\"axk-hero-glow\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"axk-hero-in\"\u003e\n      \u003cdiv class=\"axk-eyebrow\"\u003eAV Express · Ajax Systems Kit Builder\u003c\/div\u003e\n      \u003ch2\u003eDesign Your Ajax Security System\u003cbr class=\"axk-br\"\u003ein 60 Seconds\u003c\/h2\u003e\n      \u003cp\u003eAnswer a few quick questions and we’ll assemble a professional-grade wireless security kit for your project — then add the whole thing to your cart in one click.\u003c\/p\u003e\n      \u003cbutton type=\"button\" class=\"axk-btn axk-hero-btn\" id=\"axk-start\"\u003eStart Building →\u003c\/button\u003e\n      \u003cdiv class=\"axk-trust\"\u003e\n        \u003cspan\u003e✓ Free shipping over $500\u003c\/span\u003e\n        \u003cspan\u003e✓ Dealer pricing \u0026amp; support\u003c\/span\u003e\n        \u003cspan\u003e✓ Live prices \u0026amp; stock\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"axk-prog\" id=\"axk-prog\"\u003e\n    \u003cdiv class=\"axk-track\"\u003e\u003cspan id=\"axk-barfill\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n    \u003cdiv class=\"axk-nodes\" id=\"axk-steplabels\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"axk-card\" id=\"axk-body\"\u003e\u003c\/div\u003e\n\n  \u003cdiv class=\"axk-foot\"\u003e\n    \u003cbutton type=\"button\" class=\"axk-btn axk-ghost\" id=\"axk-back\"\u003e← Back\u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"axk-btn axk-primary\" id=\"axk-next\"\u003eContinue →\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cp class=\"axk-note\"\u003ePrices and availability are pulled live from avexpress.net. Need a bigger system designed? Call our sales team — we quote!\u003c\/p\u003e\n\n  \u003cdiv class=\"axk-mbar\" id=\"axk-mbar\"\u003e\n    \u003cdiv class=\"axk-mbar-t\"\u003e\n\u003csmall id=\"axk-mcnt\"\u003e \u003c\/small\u003e\u003cb id=\"axk-mtot\"\u003e \u003c\/b\u003e\n\u003c\/div\u003e\n    \u003cbutton type=\"button\" class=\"axk-btn axk-primary\" id=\"axk-madd\"\u003eAdd Kit to Cart\u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n#avx-kit-builder{--teal:#17aec8;--teal-d:#0f93aa;--navy:#0f2437;--line:#e3ecf1;--bg:#f5fafc;--sh:0 10px 30px rgba(15,36,55,.08),0 2px 6px rgba(15,36,55,.05);\n  max-width:1020px;margin:28px auto 40px;padding:0 14px;color:var(--navy);font-family:inherit;box-sizing:border-box}\n#avx-kit-builder *,#avx-kit-builder *:before,#avx-kit-builder *:after{box-sizing:border-box;-webkit-tap-highlight-color:transparent}\n#avx-kit-builder button{touch-action:manipulation}\n@keyframes axkIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}\n@keyframes axkPop{0%{transform:scale(.6);opacity:0}70%{transform:scale(1.15)}100%{transform:scale(1);opacity:1}}\n@keyframes axkFloat{0%,100%{transform:translate(0,0)}50%{transform:translate(30px,-20px)}}\n\n\/* ---------- hero ---------- *\/\n#avx-kit-builder .axk-hero{position:relative;overflow:hidden;border-radius:clamp(16px,2.5vw,22px);padding:clamp(34px,6vw,54px) clamp(16px,4vw,28px) clamp(30px,5vw,46px);\n  text-align:center;color:#fff;background:linear-gradient(135deg,#0f2437 0%,#10536b 55%,#17aec8 130%);box-shadow:var(--sh);animation:axkIn .5s ease both}\n#avx-kit-builder .axk-hero-glow{position:absolute;top:-120px;right:-80px;width:380px;height:380px;border-radius:50%;\n  background:radial-gradient(circle,rgba(23,174,200,.45),transparent 70%);animation:axkFloat 9s ease-in-out infinite;pointer-events:none}\n#avx-kit-builder .axk-hero-in{position:relative;max-width:640px;margin:0 auto}\n#avx-kit-builder .axk-eyebrow{display:inline-block;font-weight:700;letter-spacing:.14em;text-transform:uppercase;font-size:clamp(.6rem,1.6vw,.72rem);\n  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);border-radius:99px;padding:6px 14px;margin-bottom:16px}\n#avx-kit-builder .axk-hero h2{margin:0 0 12px;font-size:clamp(1.45rem,4.6vw,2.3rem);line-height:1.14;letter-spacing:-.01em}\n#avx-kit-builder .axk-hero p{margin:0 auto 22px;color:rgba(255,255,255,.85);max-width:520px;font-size:clamp(.88rem,2.2vw,1rem)}\n#avx-kit-builder .axk-hero-btn{background:#fff;color:var(--navy);font-size:1.05rem;padding:15px 34px;border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,.25);transition:transform .15s,box-shadow .15s}\n#avx-kit-builder .axk-hero-btn:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(0,0,0,.3)}\n#avx-kit-builder .axk-trust{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 20px;margin-top:20px;font-size:clamp(.72rem,1.9vw,.82rem);color:rgba(255,255,255,.8)}\n\n\/* ---------- progress ---------- *\/\n#avx-kit-builder .axk-prog{position:relative;margin:30px 10px 18px}\n#avx-kit-builder .axk-track{position:absolute;top:16px;left:11%;right:11%;height:4px;background:var(--line);border-radius:99px}\n#avx-kit-builder .axk-track span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--teal-d),var(--teal));border-radius:99px;transition:width .45s ease}\n#avx-kit-builder .axk-nodes{display:flex;position:relative}\n#avx-kit-builder .axk-node{flex:1;text-align:center}\n#avx-kit-builder .axk-node i{display:inline-flex;width:34px;height:34px;border-radius:50%;background:#fff;border:2px solid var(--line);\n  align-items:center;justify-content:center;font-style:normal;font-weight:700;font-size:.9rem;color:#8ba0b1;transition:.25s}\n#avx-kit-builder .axk-node span{display:block;margin-top:6px;font-size:.74rem;color:#8ba0b1;font-weight:600;letter-spacing:.02em}\n#avx-kit-builder .axk-node.axk-cur i{border-color:var(--teal);color:var(--teal-d);box-shadow:0 0 0 5px rgba(23,174,200,.14)}\n#avx-kit-builder .axk-node.axk-cur span{color:var(--teal-d)}\n#avx-kit-builder .axk-node.axk-done i{background:var(--teal);border-color:var(--teal);color:#fff;animation:axkPop .3s ease}\n\n\/* ---------- card \u0026 steps ---------- *\/\n#avx-kit-builder .axk-card{background:#fff;border:1px solid var(--line);border-radius:20px;padding:clamp(16px,3vw,28px);min-height:300px;box-shadow:var(--sh)}\n#avx-kit-builder .axk-stepin{animation:axkIn .35s ease both}\n#avx-kit-builder h3.axk-q{margin:0 0 4px;font-size:clamp(1.12rem,3vw,1.35rem);letter-spacing:-.01em}\n#avx-kit-builder p.axk-hint{margin:0 0 20px;color:#5c7183;font-size:.92rem}\n#avx-kit-builder .axk-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px}\n#avx-kit-builder .axk-tile{position:relative;border:2px solid var(--line);border-radius:16px;padding:24px 16px 20px;text-align:center;cursor:pointer;background:#fff;transition:border-color .15s,transform .15s,box-shadow .15s}\n#avx-kit-builder .axk-tile.axk-on{border-color:var(--teal);box-shadow:0 0 0 4px rgba(23,174,200,.14)}\n#avx-kit-builder .axk-tile.axk-on:after{content:\"\\2713\";position:absolute;top:10px;right:10px;width:24px;height:24px;border-radius:50%;\n  background:var(--teal);color:#fff;font-size:.8rem;line-height:24px;animation:axkPop .25s ease}\n#avx-kit-builder .axk-tile svg{width:46px;height:46px;stroke:var(--teal-d);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;margin-bottom:10px;flex:none}\n#avx-kit-builder .axk-tile b{display:block;margin-bottom:4px;font-size:1.02rem}\n#avx-kit-builder .axk-tile small{color:#5c7183}\n#avx-kit-builder .axk-rows{display:flex;flex-direction:column;gap:10px}\n#avx-kit-builder .axk-row{display:flex;align-items:center;justify-content:space-between;gap:10px 12px;border:1px solid var(--line);border-radius:12px;padding:13px 16px;background:var(--bg);transition:border-color .15s}\n#avx-kit-builder .axk-row .axk-lbl{flex:1;min-width:0}\n#avx-kit-builder .axk-row .axk-lbl b{display:block}\n#avx-kit-builder .axk-row .axk-lbl small{color:#5c7183}\n#avx-kit-builder .axk-count{display:flex;align-items:center;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden;flex:none;box-shadow:0 1px 3px rgba(15,36,55,.06)}\n#avx-kit-builder .axk-count button{width:40px;height:40px;border:0;background:#fff;color:var(--teal-d);font-size:1.25rem;cursor:pointer;line-height:1;transition:background .12s}\n#avx-kit-builder .axk-count input{width:48px;height:40px;border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);text-align:center;\n  font-size:16px;font-weight:600;color:var(--navy);background:#fff;appearance:textfield;-moz-appearance:textfield}\n#avx-kit-builder .axk-count input::-webkit-outer-spin-button,#avx-kit-builder .axk-count input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}\n#avx-kit-builder .axk-sw{position:relative;width:52px;height:30px;flex:none;cursor:pointer}\n#avx-kit-builder .axk-sw input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}\n#avx-kit-builder .axk-sw i{position:absolute;inset:0;background:#c6d4dc;border-radius:99px;transition:.2s}\n#avx-kit-builder .axk-sw i:after{content:\"\";position:absolute;top:3px;left:3px;width:24px;height:24px;background:#fff;border-radius:50%;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}\n#avx-kit-builder .axk-sw input:checked+i{background:var(--teal)}\n#avx-kit-builder .axk-sw input:checked+i:after{left:25px}\n#avx-kit-builder .axk-pills{display:flex;flex-wrap:wrap;gap:9px}\n#avx-kit-builder .axk-pill{border:2px solid var(--line);border-radius:99px;padding:11px 18px;cursor:pointer;background:#fff;font-size:.9rem;color:var(--navy);transition:.15s;min-height:44px}\n#avx-kit-builder .axk-pill.axk-on{border-color:var(--teal);background:rgba(23,174,200,.08);font-weight:700}\n#avx-kit-builder .axk-sec{margin:22px 0 10px;font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;color:#8ba0b1;font-weight:700}\n\n\/* ---------- review ---------- *\/\n#avx-kit-builder .axk-item{display:flex;align-items:center;gap:14px;border-bottom:1px solid var(--line);padding:14px 0;animation:axkIn .4s ease both}\n#avx-kit-builder .axk-item img{width:66px;height:66px;object-fit:contain;background:var(--bg);border-radius:12px;flex:none;padding:4px}\n#avx-kit-builder .axk-item .axk-in{flex:1;min-width:0}\n#avx-kit-builder .axk-item .axk-in b{display:block}\n#avx-kit-builder .axk-item .axk-in small{color:#5c7183;display:block}\n#avx-kit-builder .axk-badge{display:inline-block;font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;border-radius:6px;padding:3px 8px;margin-top:5px;margin-right:6px}\n#avx-kit-builder .axk-b1{background:rgba(23,174,200,.14);color:var(--teal-d)}\n#avx-kit-builder .axk-b2{background:#eef3f7;color:#45617a}\n#avx-kit-builder .axk-b3{background:#f4f1fa;color:#6a5a96}\n#avx-kit-builder .axk-chip{display:inline-block;font-size:.7rem;font-weight:700;border-radius:99px;padding:3px 10px;background:#fdf1d9;color:#8a6d1a;margin-top:5px}\n#avx-kit-builder .axk-price{font-weight:800;min-width:88px;text-align:right}\n#avx-kit-builder .axk-del{border:0;background:none;color:#b0bec9;cursor:pointer;font-size:1.2rem;padding:10px;min-width:44px;min-height:44px;transition:color .12s}\n#avx-kit-builder .axk-del:hover{color:#d9534f}\n#avx-kit-builder .axk-total{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;padding:18px 0 4px;font-size:1.05rem;color:#5c7183}\n#avx-kit-builder .axk-total b{font-size:clamp(1.35rem,3.5vw,1.65rem);color:var(--navy)}\n#avx-kit-builder .axk-value{font-size:.82rem;color:#8ba0b1;margin:0 0 14px}\n\n\/* ---------- buttons \/ footer ---------- *\/\n#avx-kit-builder .axk-foot{display:flex;justify-content:space-between;margin-top:18px;gap:10px}\n#avx-kit-builder .axk-btn{border-radius:12px;padding:14px 28px;font-size:1rem;font-weight:700;cursor:pointer;border:2px solid transparent;transition:.15s;min-height:48px}\n#avx-kit-builder .axk-primary{background:var(--teal);color:#fff;box-shadow:0 4px 14px rgba(23,174,200,.35)}\n#avx-kit-builder .axk-primary:disabled{opacity:.5;cursor:default;transform:none}\n#avx-kit-builder .axk-ghost{background:#fff;color:var(--navy);border-color:var(--line)}\n#avx-kit-builder .axk-note{text-align:center;color:#8ba0b1;font-size:.8rem;margin-top:14px}\n#avx-kit-builder .axk-msg{margin-top:12px;padding:12px 14px;border-radius:10px;font-size:.9rem;display:none}\n#avx-kit-builder .axk-msg.axk-err{display:block;background:#fdecea;color:#8c2f28}\n#avx-kit-builder .axk-msg.axk-ok{display:block;background:#e7f7ef;color:#1d6b43}\n#avx-kit-builder .axk-spin{text-align:center;padding:60px 0;color:#8ba0b1}\n\n\/* ---------- sticky cart bar (phones \u0026 tablets) ---------- *\/\n#avx-kit-builder .axk-mbar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:9999;background:#fff;border-top:1px solid var(--line);\n  box-shadow:0 -6px 20px rgba(15,36,55,.12);padding:10px max(14px,env(safe-area-inset-left)) calc(10px + env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-right));\n  align-items:center;justify-content:space-between;gap:12px}\n#avx-kit-builder .axk-mbar-t small{display:block;color:#8ba0b1;font-size:.72rem}\n#avx-kit-builder .axk-mbar-t b{font-size:1.15rem}\n#avx-kit-builder .axk-mbar .axk-btn{padding:12px 22px;font-size:.95rem}\n\n\/* ---------- hover only where hover exists (desktop) ---------- *\/\n@media(hover:hover) and (pointer:fine){\n #avx-kit-builder .axk-tile:hover{border-color:var(--teal);transform:translateY(-3px);box-shadow:var(--sh)}\n #avx-kit-builder .axk-row:hover{border-color:#c8dde6}\n #avx-kit-builder .axk-count button:hover{background:var(--bg)}\n #avx-kit-builder .axk-pill:hover{border-color:var(--teal)}\n #avx-kit-builder .axk-primary:hover{background:var(--teal-d);transform:translateY(-1px)}\n #avx-kit-builder .axk-ghost:hover{border-color:var(--teal)}\n}\n\/* touch feedback instead of hover *\/\n@media(hover:none){\n #avx-kit-builder .axk-tile:active{border-color:var(--teal);transform:scale(.985)}\n #avx-kit-builder .axk-pill:active,#avx-kit-builder .axk-btn:active{transform:scale(.985)}\n #avx-kit-builder .axk-count button:active{background:var(--bg)}\n}\n\n\/* ---------- tablet (iPad portrait \u0026 small laptops) ---------- *\/\n@media(max-width:900px){\n #avx-kit-builder .axk-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}\n #avx-kit-builder .axk-item img{width:58px;height:58px}\n}\n\n\/* ---------- phones \u0026 tablets: sticky bar on ---------- *\/\n@media(max-width:820px){\n #avx-kit-builder.axk-mbar-on{padding-bottom:92px}\n #avx-kit-builder.axk-mbar-on .axk-mbar{display:flex;animation:axkIn .3s ease both}\n #avx-kit-builder .axk-count button{width:44px;height:44px}\n #avx-kit-builder .axk-count input{height:44px}\n}\n\n\/* ---------- phones ---------- *\/\n@media(max-width:640px){\n #avx-kit-builder{margin:16px auto 28px;padding:0 10px}\n #avx-kit-builder .axk-br{display:none}\n #avx-kit-builder .axk-hero-btn{width:100%;padding:16px 20px}\n \/* property tiles become horizontal cards — less scrolling *\/\n #avx-kit-builder .axk-grid{grid-template-columns:1fr;gap:10px}\n #avx-kit-builder .axk-tile{display:flex;align-items:center;text-align:left;gap:14px;padding:14px 16px}\n #avx-kit-builder .axk-tile svg{width:38px;height:38px;margin:0}\n #avx-kit-builder .axk-tile.axk-on{padding-right:44px}\n #avx-kit-builder .axk-tile.axk-on:after{top:50%;margin-top:-12px}\n \/* counter \/ toggle rows: label on top, control below right *\/\n #avx-kit-builder .axk-row{flex-wrap:wrap;padding:12px 14px}\n #avx-kit-builder .axk-row .axk-lbl{flex:1 1 100%}\n #avx-kit-builder .axk-count,#avx-kit-builder .axk-sw{margin-left:auto}\n \/* progress *\/\n #avx-kit-builder .axk-prog{margin:22px 4px 14px}\n #avx-kit-builder .axk-node i{width:30px;height:30px;font-size:.8rem}\n #avx-kit-builder .axk-track{top:14px}\n #avx-kit-builder .axk-node span{font-size:.6rem;letter-spacing:0}\n \/* review items: 2-row grid so nothing squishes *\/\n #avx-kit-builder .axk-item{display:grid;grid-template-columns:56px 1fr auto;grid-template-areas:\"img info del\" \"img ctrl price\";\n  gap:4px 12px;align-items:center;padding:12px 0}\n #avx-kit-builder .axk-item img{grid-area:img;width:56px;height:56px;align-self:start}\n #avx-kit-builder .axk-item .axk-in{grid-area:info}\n #avx-kit-builder .axk-item .axk-in small{font-size:.78rem}\n #avx-kit-builder .axk-item .axk-count{grid-area:ctrl;justify-self:start;margin-top:6px}\n #avx-kit-builder .axk-item .axk-price{grid-area:price;align-self:center;min-width:0;font-size:.98rem}\n #avx-kit-builder .axk-item .axk-del{grid-area:del;justify-self:end;align-self:start;padding:6px;min-height:36px;min-width:36px}\n \/* footer buttons full-width *\/\n #avx-kit-builder .axk-foot .axk-btn{flex:1;padding:15px 10px}\n #avx-kit-builder .axk-pill{flex:1 1 calc(50% - 5px);text-align:center}\n}\n\n\/* ---------- very small phones ---------- *\/\n@media(max-width:380px){\n #avx-kit-builder .axk-trust{flex-direction:column;gap:4px;align-items:center}\n #avx-kit-builder .axk-pill{flex:1 1 100%}\n #avx-kit-builder .axk-count button{width:40px}\n #avx-kit-builder .axk-count input{width:42px}\n #avx-kit-builder .axk-mbar .axk-btn{padding:12px 14px;font-size:.88rem}\n}\n\n\/* ---------- accessibility: respect reduced motion ---------- *\/\n@media(prefers-reduced-motion:reduce){\n #avx-kit-builder *,#avx-kit-builder *:before,#avx-kit-builder *:after{animation:none!important;transition:none!important}\n}\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(function(){\n\"use strict\";\n\/* ================= CATALOG — edit handles here ================= *\/\nvar CATALOG={\n hub:{n:\"Ajax Hub 2 Plus\",d:\"The brain of the system — Wi-Fi, Ethernet \u0026 LTE, supports photo verification\",wh:\"ajax-72011-40-wh3-hub-2-plus-9na-afa-upc-with-sim-white\",bl:\"ajax-72010-40-bl3-hub-2-plus-9na-afa-upc-with-sim-black\"},\n rex:{n:\"Ajax ReX 2 Range Extender\",d:\"Doubles radio range for large or multi-floor properties\",wh:\"ajax-42841-106-wh3-rex-2-9na-upc-white\",bl:\"ajax-42840-106-bl3-rex-2-9na-upc-black\"},\n door:{n:\"Ajax DoorProtect\",d:\"Opening detector for entry doors\",wh:\"ajax-42798-03-wh3-doorprotect-9na-upc-white\",bl:\"ajax-42797-03-bl3-doorprotect-9na-upc-black\"},\n motion:{n:\"Ajax MotionProtect\",d:\"Pet-immune indoor motion detector\",wh:\"ajax-42823-09-wh3-motionprotect-9na-upc-white\",bl:\"ajax-42822-09-bl3-motionprotect-9na-upc-black\"},\n motioncam:{n:\"Ajax MotionCam (PhOD)\",d:\"Motion detector with photo alarm verification \u0026 photo on demand\",wh:\"ajax-57538-120-wh3-motioncam-phod-jeweller-9na-upc-white\",bl:\"ajax-57539-120-bl3-motioncam-phod-jeweller-9na-upc-black\"},\n glass:{n:\"Ajax GlassProtect\",d:\"Acoustic glass-break detector, covers windows up to 9 m away\",wh:\"ajax-42805-05-wh3-glassprotect-9na-upc-white\",bl:\"ajax-42804-05-bl3-glassprotect-9na-upc-black\"},\n fire:{n:\"Ajax FireProtect 2 (Heat\/Smoke\/CO)\",d:\"UL-listed fire, smoke \u0026 carbon monoxide detector\",wh:\"ajax-68697-137-wh3-fireprotect-2-rb-heat-smoke-co-ul-9na-white\",bl:\"ajax-68698-137-bl3-fireprotect-2-rb-heat-smoke-co-ul-9na-black\"},\n leak:{n:\"Ajax LeaksProtect\",d:\"Water leak detector for kitchens, baths \u0026 laundry\",wh:\"ajax-42818-08-wh3-leaksprotect-9na-upc-white\",bl:\"ajax-42817-08-bl3-leaksprotect-9na-upc-black\"},\n kpstd:{n:\"Ajax KeyPad\",d:\"Wireless touch keypad for arming \u0026 disarming\",wh:\"ajax-42814-12-wh3-keypad-9na-upc-white\",bl:\"ajax-42813-12-bl3-keypad-9na-upc-black\"},\n kpplus:{n:\"Ajax KeyPad Plus\",d:\"Keypad with contactless cards \u0026 tags support\",wh:\"ajax-42816-83-wh3-keypad-plus-9na-upc-white\",bl:\"ajax-42815-83-bl3-keypad-plus-9na-upc-black\"},\n kptouch:{n:\"Ajax KeyPad TouchScreen\",d:\"Premium touchscreen keypad with Pass\/Tag support\",wh:\"ajax-58473-148-wh3-keypad-touchscreen-9na-upc-white\",bl:\"ajax-58472-148-bl3-keypad-touchscreen-9na-upc-black\"},\n kpout:{n:\"Ajax KeyPad Outdoor\",d:\"Weatherproof outdoor keypad\",wh:\"ajax-99973-286-wh3-keypad-outdoor-jeweller-9na-white\",bl:\"ajax-99974-286-bl3-keypad-outdoor-jeweller-9na-black\"},\n fob:{n:\"Ajax SpaceControl Key Fob\",d:\"Pocket remote to arm, disarm \u0026 send panic alerts\",wh:\"ajax-42843-04-wh3-spacecontrol-9na-upc-white\",bl:\"ajax-42842-04-bl3-spacecontrol-9na-upc-black\"},\n hsiren:{n:\"Ajax HomeSiren\",d:\"Indoor siren up to 105 dB\",wh:\"ajax-42809-11-wh3-homesiren-9na-upc-white\",bl:\"ajax-42808-11-bl3-homesiren-9na-upc-black\"},\n ssiren:{n:\"Ajax StreetSiren\",d:\"Outdoor siren with LED frame, up to 113 dB\",wh:\"ajax-42845-07-wh3-streetsiren-9na-upc-white\",bl:\"ajax-42844-07-bl3-streetsiren-9na-upc-black\"},\n outmotion:{n:\"Ajax MotionProtect Outdoor\",d:\"Outdoor motion detector with anti-masking \u0026 pet immunity\",wh:\"ajax-42826-33-wh3-motionprotect-outdoor-9na-upc-white\",bl:null},\n panic:{n:\"Ajax Button (Panic)\",d:\"Wireless panic \/ medical alert button\",wh:\"ajax-42794-26-wh3-button-9na-upc-white\",bl:null},\n holder:{n:\"Ajax Button Holder\",d:\"Wall mount for the panic Button\",wh:\"ajax-38215-82-wh-holder-for-button-doublebutton-asp-white\",bl:\"ajax-42806-82-bl-holder-for-button-doublebutton-upc-black\"}\n};\nvar BADGE={hub:[\"Core\",\"axk-b1\"],door:[\"Core\",\"axk-b1\"],motion:[\"Core\",\"axk-b1\"],motioncam:[\"Core\",\"axk-b1\"],\n kpstd:[\"Core\",\"axk-b1\"],kpplus:[\"Core\",\"axk-b1\"],kptouch:[\"Core\",\"axk-b1\"],kpout:[\"Core\",\"axk-b1\"],\n rex:[\"Recommended\",\"axk-b2\"],fire:[\"Recommended\",\"axk-b2\"],glass:[\"Recommended\",\"axk-b2\"],hsiren:[\"Recommended\",\"axk-b2\"],\n ssiren:[\"Recommended\",\"axk-b2\"],outmotion:[\"Recommended\",\"axk-b2\"],\n leak:[\"Add-on\",\"axk-b3\"],fob:[\"Add-on\",\"axk-b3\"],panic:[\"Add-on\",\"axk-b3\"],holder:[\"Add-on\",\"axk-b3\"]};\n\/* =============================================================== *\/\nvar S={step:0,type:null,doors:1,windows:4,rooms:3,floors:1,water:2,fobs:2,\n photo:false,fire:true,leak:true,glassOn:true,perim:false,panicOn:false,hsirenOn:true,ssirenOn:false,\n keypad:\"kpstd\",color:\"wh\",kit:null};\nvar PRESET={apartment:{doors:1,windows:4,rooms:3,floors:1,water:2,fobs:2,perim:false,ssirenOn:false,panicOn:false},\n house:{doors:2,windows:8,rooms:5,floors:2,water:3,fobs:2,perim:true,ssirenOn:true,panicOn:false},\n business:{doors:2,windows:6,rooms:6,floors:1,water:1,fobs:4,perim:false,ssirenOn:true,panicOn:true}};\nvar STEPS=[\"Property\",\"Your Space\",\"Protection\",\"Your Kit\"];\nvar cache={},root=document.getElementById(\"avx-kit-builder\"),\n body=document.getElementById(\"axk-body\"),back=document.getElementById(\"axk-back\"),\n next=document.getElementById(\"axk-next\"),bar=document.getElementById(\"axk-barfill\"),\n labels=document.getElementById(\"axk-steplabels\"),mbar=document.getElementById(\"axk-mbar\");\nvar fmt=function(c){return new Intl.NumberFormat(\"en-US\",{style:\"currency\",currency:\"USD\"}).format(c\/100)};\nfunction esc(s){return String(s).replace(\/[\u0026\u003c\u003e\"]\/g,function(m){return({\"\u0026\":\"\u0026amp;\",\"\u003c\":\"\u0026lt;\",\"\u003e\":\"\u0026gt;\",'\"':\"\u0026quot;\"})[m]})}\nvar ICONS={apartment:'\u003csvg viewBox=\"0 0 24 24\"\u003e\u003crect x=\"5\" y=\"3\" width=\"14\" height=\"18\" rx=\"1\"\/\u003e\u003cpath d=\"M9 7h2M13 7h2M9 11h2M13 11h2M9 15h2M13 15h2M10 21v-3h4v3\"\/\u003e\u003c\/svg\u003e',\n house:'\u003csvg viewBox=\"0 0 24 24\"\u003e\u003cpath d=\"M3 11 12 4l9 7\"\/\u003e\u003cpath d=\"M5 10v10h14V10\"\/\u003e\u003cpath d=\"M10 20v-5h4v5\"\/\u003e\u003c\/svg\u003e',\n business:'\u003csvg viewBox=\"0 0 24 24\"\u003e\u003cpath d=\"M3 9h18M4 9V5h16v4M5 9v11h14V9\"\/\u003e\u003cpath d=\"M9 13h6M9 16h6\"\/\u003e\u003c\/svg\u003e'};\n\nfunction counter(key,lbl,hint,min){\n return '\u003cdiv class=\"axk-row\"\u003e\u003cdiv class=\"axk-lbl\"\u003e\u003cb\u003e'+lbl+'\u003c\/b\u003e\u003csmall\u003e'+hint+'\u003c\/small\u003e\u003c\/div\u003e'+\n '\u003cdiv class=\"axk-count\"\u003e\u003cbutton type=\"button\" data-c=\"'+key+'\" data-d=\"-1\" aria-label=\"Decrease\"\u003e\u0026minus;\u003c\/button\u003e'+\n '\u003cinput data-i=\"'+key+'\" type=\"number\" inputmode=\"numeric\" pattern=\"[0-9]*\" min=\"'+min+'\" value=\"'+S[key]+'\"\u003e'+\n '\u003cbutton type=\"button\" data-c=\"'+key+'\" data-d=\"1\" aria-label=\"Increase\"\u003e+\u003c\/button\u003e\u003c\/div\u003e\u003c\/div\u003e';\n}\nfunction toggle(key,lbl,hint){\n return '\u003cdiv class=\"axk-row\"\u003e\u003cdiv class=\"axk-lbl\"\u003e\u003cb\u003e'+lbl+'\u003c\/b\u003e\u003csmall\u003e'+hint+'\u003c\/small\u003e\u003c\/div\u003e'+\n '\u003clabel class=\"axk-sw\"\u003e\u003cinput type=\"checkbox\" data-t=\"'+key+'\"'+(S[key]?\" checked\":\"\")+'\u003e\u003ci\u003e\u003c\/i\u003e\u003c\/label\u003e\u003c\/div\u003e';\n}\nfunction setMbar(on){root.classList[on?\"add\":\"remove\"](\"axk-mbar-on\")}\nfunction render(){\n bar.style.width=(S.step\/3*100)+\"%\";\n labels.innerHTML=STEPS.map(function(s,i){\n  var cls=i\u003cS.step?\"axk-done\":(i===S.step?\"axk-cur\":\"\");\n  return '\u003cdiv class=\"axk-node '+cls+'\"\u003e\u003ci\u003e'+(i\u003cS.step?\"\\u2713\":i+1)+'\u003c\/i\u003e\u003cspan\u003e'+s+'\u003c\/span\u003e\u003c\/div\u003e';\n }).join(\"\");\n back.style.visibility=S.step===0?\"hidden\":\"visible\";\n next.style.display=S.step===3?\"none\":\"\";\n next.disabled=(S.step===0\u0026\u0026!S.type);\n setMbar(false);\n var h=\"\";\n if(S.step===0){\n  h='\u003ch3 class=\"axk-q\"\u003eWhat are you protecting?\u003c\/h3\u003e\u003cp class=\"axk-hint\"\u003ePick the property type — we\\'ll pre-fill smart defaults you can adjust.\u003c\/p\u003e'+\n  '\u003cdiv class=\"axk-grid\"\u003e'+[[\"apartment\",\"Apartment\",\"Single-level unit or condo\"],[\"house\",\"House\",\"Multi-room home, optional outdoor coverage\"],[\"business\",\"Business\",\"Office, shop or commercial space\"]].map(function(t){\n   return '\u003cdiv class=\"axk-tile'+(S.type===t[0]?\" axk-on\":\"\")+'\" data-type=\"'+t[0]+'\"\u003e'+ICONS[t[0]]+'\u003cspan\u003e\u003cb\u003e'+t[1]+'\u003c\/b\u003e\u003csmall\u003e'+t[2]+'\u003c\/small\u003e\u003c\/span\u003e\u003c\/div\u003e';\n  }).join(\"\")+'\u003c\/div\u003e';\n }else if(S.step===1){\n  h='\u003ch3 class=\"axk-q\"\u003eTell us about the space\u003c\/h3\u003e\u003cp class=\"axk-hint\"\u003eThese numbers drive how many detectors we recommend.\u003c\/p\u003e\u003cdiv class=\"axk-rows\"\u003e'+\n  counter(\"doors\",\"Entry doors\",\"Front, back, garage entry — each gets an opening detector\",1)+\n  counter(\"rooms\",\"Rooms \/ areas to cover\",\"Each covered area gets a motion detector\",1)+\n  counter(\"windows\",\"Accessible windows\",\"Used to size glass-break coverage\",0)+\n  (S.type!==\"apartment\"?counter(\"floors\",\"Floors\",\"3+ floors adds a range extender\",1):\"\")+\n  counter(\"water\",\"Water points\",\"Kitchen, bathrooms, laundry, water heater\",0)+\n  counter(\"fobs\",\"People who arm\/disarm\",\"Each gets a key fob (you can remove them later)\",0)+\n  '\u003c\/div\u003e';\n }else if(S.step===2){\n  h='\u003ch3 class=\"axk-q\"\u003eProtection \u0026amp; control\u003c\/h3\u003e\u003cp class=\"axk-hint\"\u003eToggle the functions you need — the kit updates automatically.\u003c\/p\u003e\u003cdiv class=\"axk-rows\"\u003e'+\n  toggle(\"photo\",\"Photo alarm verification\",\"Upgrades motion detectors to MotionCam — see what triggered the alarm\")+\n  toggle(\"glassOn\",\"Glass-break detection\",\"Acoustic detectors covering your windows\")+\n  toggle(\"fire\",\"Fire, smoke \u0026 CO\",\"UL-listed FireProtect 2 detectors (1 per floor recommended)\")+\n  toggle(\"leak\",\"Water leak protection\",\"LeaksProtect at every water point\")+\n  (S.type!==\"apartment\"?toggle(\"perim\",\"Outdoor perimeter\",\"Outdoor motion detectors catch intruders before they're inside\"):\"\")+\n  toggle(\"panicOn\",\"Panic button\",\"Wall-mounted or portable silent alarm\")+\n  toggle(\"hsirenOn\",\"Indoor siren\",\"105 dB HomeSiren deters intruders\")+\n  toggle(\"ssirenOn\",\"Outdoor siren\",\"113 dB StreetSiren visible from the street\")+\n  '\u003c\/div\u003e\u003cdiv class=\"axk-sec\"\u003eKeypad\u003c\/div\u003e\u003cdiv class=\"axk-pills\"\u003e'+\n  [[\"kpstd\",\"KeyPad\"],[\"kpplus\",\"KeyPad Plus (cards\/tags)\"],[\"kptouch\",\"KeyPad TouchScreen\"],[\"kpout\",\"KeyPad Outdoor\"],[\"none\",\"No keypad (app only)\"]].map(function(k){\n   return '\u003cbutton type=\"button\" class=\"axk-pill'+(S.keypad===k[0]?\" axk-on\":\"\")+'\" data-kp=\"'+k[0]+'\"\u003e'+k[1]+'\u003c\/button\u003e'}).join(\"\")+\n  '\u003c\/div\u003e\u003cdiv class=\"axk-sec\"\u003eDevice color\u003c\/div\u003e\u003cdiv class=\"axk-pills\"\u003e'+\n  [[\"wh\",\"White\"],[\"bl\",\"Black\"]].map(function(c){return '\u003cbutton type=\"button\" class=\"axk-pill'+(S.color===c[0]?\" axk-on\":\"\")+'\" data-cl=\"'+c[0]+'\"\u003e'+c[1]+'\u003c\/button\u003e'}).join(\"\")+\n  '\u003c\/div\u003e\u003cp class=\"axk-hint\" style=\"margin-top:12px\"\u003eOutdoor devices and the panic button ship in white.\u003c\/p\u003e';\n }\n if(S.step\u003c3){body.innerHTML='\u003cdiv class=\"axk-stepin\"\u003e'+h+'\u003c\/div\u003e';}\n else renderReview();\n}\nfunction buildKit(){\n var k=[];function add(key,qty){if(qty\u003e0)k.push({key:key,qty:qty})}\n add(\"hub\",1);\n if((S.floors\u003e=3)||(S.type===\"business\"\u0026\u0026S.rooms\u003e=10))add(\"rex\",1);\n add(\"door\",S.doors);\n add(S.photo?\"motioncam\":\"motion\",S.rooms);\n if(S.glassOn)add(\"glass\",Math.max(1,Math.ceil(S.windows\/2)));\n if(S.fire)add(\"fire\",Math.max(1,S.floors));\n if(S.leak)add(\"leak\",S.water);\n if(S.keypad!==\"none\")add(S.keypad,1);\n add(\"fob\",S.fobs);\n if(S.hsirenOn)add(\"hsiren\",1);\n if(S.ssirenOn)add(\"ssiren\",1);\n if(S.perim)add(\"outmotion\",2);\n if(S.panicOn){add(\"panic\",1);add(\"holder\",1);}\n return k;\n}\nfunction getProduct(handle){\n if(cache[handle])return cache[handle];\n cache[handle]=fetch(\"\/products\/\"+handle+\".js\").then(function(r){if(!r.ok)throw 0;return r.json()}).catch(function(){return null});\n return cache[handle];\n}\nfunction renderReview(){\n if(!S.kit)S.kit=buildKit();\n body.innerHTML='\u003cdiv class=\"axk-spin\"\u003eAssembling your recommended kit\u0026hellip;\u003c\/div\u003e';\n Promise.all(S.kit.map(function(line){\n  var c=CATALOG[line.key],h=(S.color===\"bl\"\u0026\u0026c.bl)?c.bl:c.wh;\n  return getProduct(h).then(function(p){return{line:line,c:c,p:p,h:h}});\n })).then(function(rows){\n  rows=rows.filter(function(r){return r.p});\n  var anyUnavail=false;\n  var html='\u003cdiv class=\"axk-stepin\"\u003e\u003ch3 class=\"axk-q\"\u003eYour recommended kit\u003c\/h3\u003e\u003cp class=\"axk-hint\"\u003eAdjust quantities or remove anything you don\\'t need, then add the whole kit to your cart.\u003c\/p\u003e';\n  html+=rows.map(function(r,i){\n   var v=r.p.variants[0],img=r.p.featured_image?r.p.featured_image:\"\",b=BADGE[r.line.key];\n   if(!v.available)anyUnavail=true;\n   return '\u003cdiv class=\"axk-item\" data-idx=\"'+i+'\" style=\"animation-delay:'+(i*60)+'ms\"\u003e'+\n    (img?'\u003cimg src=\"'+esc(img)+'\" alt=\"'+esc(r.c.n)+'\" loading=\"lazy\"\u003e':'\u003cdiv style=\"width:56px\"\u003e\u003c\/div\u003e')+\n    '\u003cdiv class=\"axk-in\"\u003e\u003cb\u003e\u003ca href=\"\/products\/'+esc(r.h)+'\" target=\"_blank\" style=\"color:inherit;text-decoration:none\"\u003e'+esc(r.c.n)+'\u003c\/a\u003e\u003c\/b\u003e\u003csmall\u003e'+esc(r.c.d)+'\u003c\/small\u003e'+\n    (b?'\u003cspan class=\"axk-badge '+b[1]+'\"\u003e'+b[0]+'\u003c\/span\u003e':\"\")+\n    (v.available?\"\":'\u003cspan class=\"axk-chip\"\u003eCall for availability\u003c\/span\u003e')+'\u003c\/div\u003e'+\n    '\u003cdiv class=\"axk-count\"\u003e\u003cbutton type=\"button\" data-kq=\"'+i+'\" data-d=\"-1\" aria-label=\"Decrease\"\u003e\u0026minus;\u003c\/button\u003e\u003cinput data-kqi=\"'+i+'\" type=\"number\" inputmode=\"numeric\" pattern=\"[0-9]*\" min=\"1\" value=\"'+r.line.qty+'\"\u003e\u003cbutton type=\"button\" data-kq=\"'+i+'\" data-d=\"1\" aria-label=\"Increase\"\u003e+\u003c\/button\u003e\u003c\/div\u003e'+\n    '\u003cdiv class=\"axk-price\"\u003e'+fmt(v.price*r.line.qty)+'\u003c\/div\u003e'+\n    '\u003cbutton type=\"button\" class=\"axk-del\" data-del=\"'+i+'\" title=\"Remove\" aria-label=\"Remove item\"\u003e\u0026times;\u003c\/button\u003e\u003c\/div\u003e';\n  }).join(\"\");\n  html+='\u003cdiv class=\"axk-total\"\u003e\u003cspan id=\"axk-cnt\"\u003e\u003c\/span\u003e\u003cb id=\"axk-tot\"\u003e$0.00\u003c\/b\u003e\u003c\/div\u003e'+\n  '\u003cp class=\"axk-value\"\u003eDealer-direct pricing \u0026mdash; every device priced live from our store. Free shipping on kits over $500.\u003c\/p\u003e'+\n  (anyUnavail?'\u003cp class=\"axk-hint\"\u003eItems marked \"Call for availability\" may not add to cart — our team can quote them for you.\u003c\/p\u003e':\"\")+\n  '\u003cbutton type=\"button\" class=\"axk-btn axk-primary\" id=\"axk-add\" style=\"width:100%\"\u003eAdd Kit to Cart\u003c\/button\u003e'+\n  '\u003cdiv style=\"display:flex;gap:10px;margin-top:10px\"\u003e\u003cbutton type=\"button\" class=\"axk-btn axk-ghost\" id=\"axk-redo\" style=\"flex:1\"\u003eStart over\u003c\/button\u003e\u003c\/div\u003e'+\n  '\u003cdiv class=\"axk-msg\" id=\"axk-msg\"\u003e\u003c\/div\u003e\u003c\/div\u003e';\n  body.innerHTML=html;\n  root._rows=rows;root._shown=0;setMbar(true);refreshTotals();\n });\n}\nfunction tween(to){\n var from=root._shown||0;root._shown=to;\n var t0=null,el=document.getElementById(\"axk-tot\"),mel=document.getElementById(\"axk-mtot\");\n function f(ts){if(!t0)t0=ts;var p=Math.min(1,(ts-t0)\/450),e=1-Math.pow(1-p,3),v=Math.round(from+(to-from)*e);\n  if(el)el.textContent=fmt(v);if(mel)mel.textContent=fmt(v);if(p\u003c1)requestAnimationFrame(f);}\n requestAnimationFrame(f);\n}\nfunction refreshTotals(){\n var rows=root._rows||[],total=0,count=0;\n rows.forEach(function(r){total+=r.p.variants[0].price*r.line.qty;count+=r.line.qty});\n var c=document.getElementById(\"axk-cnt\"),mc=document.getElementById(\"axk-mcnt\");\n if(c)c.textContent=count+\" device\"+(count===1?\"\":\"s\")+\" · estimated total\";\n if(mc)mc.textContent=count+\" devices in kit\";\n tween(total);\n rows.forEach(function(r,i){\n  var el=body.querySelector('.axk-item[data-idx=\"'+i+'\"] .axk-price');\n  if(el)el.textContent=fmt(r.p.variants[0].price*r.line.qty);\n });\n}\nfunction addKit(){\n var rows=(root._rows||[]).filter(function(r){return r.line.qty\u003e0}),\n  msg=document.getElementById(\"axk-msg\"),\n  btns=[document.getElementById(\"axk-add\"),document.getElementById(\"axk-madd\")].filter(Boolean);\n if(!rows.length)return;\n btns.forEach(function(b){b.disabled=true;b.textContent=\"Adding to cart\\u2026\"});\n if(msg)msg.className=\"axk-msg\";\n var items=rows.map(function(r){return{id:r.p.variants[0].id,quantity:r.line.qty}});\n fetch(\"\/cart\/add.js\",{method:\"POST\",headers:{\"Content-Type\":\"application\/json\",\"Accept\":\"application\/json\"},body:JSON.stringify({items:items})})\n .then(function(r){if(!r.ok)throw 0;return r.json()})\n .then(function(){window.location.href=\"\/cart\"})\n .catch(function(){\n  var ok=0,failed=[];\n  var chain=rows.reduce(function(p,r){return p.then(function(){\n   return fetch(\"\/cart\/add.js\",{method:\"POST\",headers:{\"Content-Type\":\"application\/json\",\"Accept\":\"application\/json\"},body:JSON.stringify({items:[{id:r.p.variants[0].id,quantity:r.line.qty}]})})\n   .then(function(res){if(res.ok)ok++;else failed.push(r.c.n)}).catch(function(){failed.push(r.c.n)})\n  })},Promise.resolve());\n  chain.then(function(){\n   if(ok\u003e0){\n    if(msg){msg.className=\"axk-msg axk-ok\";\n    msg.innerHTML=ok+\" item(s) added to your cart.\"+(failed.length?\" Couldn\\u2019t add: \"+esc(failed.join(\", \"))+\" \\u2014 please call us for availability.\":\"\")+\" Taking you to your cart\\u2026\";}\n    setTimeout(function(){window.location.href=\"\/cart\"},2500);\n   }else{\n    if(msg){msg.className=\"axk-msg axk-err\";\n    msg.textContent=\"We couldn\\u2019t add these items to the cart \\u2014 they may be awaiting stock. Please call our sales team and we\\u2019ll quote your kit.\";}\n    btns.forEach(function(b){b.disabled=false;b.textContent=\"Add Kit to Cart\"});\n   }\n  });\n });\n}\nroot.addEventListener(\"click\",function(e){\n var t=e.target.closest(\"[data-type],[data-c],[data-kp],[data-cl],[data-kq],[data-del],#axk-add,#axk-madd,#axk-redo,#axk-back,#axk-next,#axk-start\");\n if(!t)return;\n if(t.id===\"axk-start\"){document.getElementById(\"axk-prog\").scrollIntoView({behavior:\"smooth\",block:\"start\"});return;}\n if(t.dataset.type){S.type=t.dataset.type;var p=PRESET[S.type];for(var k in p)S[k]=p[k];S.kit=null;render();return;}\n if(t.dataset.c){var key=t.dataset.c;S[key]=Math.max(+(key===\"doors\"||key===\"rooms\"||key===\"floors\"?1:0),S[key]+ +t.dataset.d);S.kit=null;\n  var inp=body.querySelector('[data-i=\"'+key+'\"]');if(inp)inp.value=S[key];return;}\n if(t.dataset.kp){S.keypad=t.dataset.kp;S.kit=null;render();return;}\n if(t.dataset.cl){S.color=t.dataset.cl;S.kit=null;render();return;}\n if(t.dataset.kq!==undefined){var i=+t.dataset.kq,r=root._rows[i];r.line.qty=Math.max(1,r.line.qty+ +t.dataset.d);\n  var qi=body.querySelector('[data-kqi=\"'+i+'\"]');if(qi)qi.value=r.line.qty;refreshTotals();return;}\n if(t.dataset.del!==undefined){var di=+t.dataset.del;root._rows[di].line.qty=0;\n  var it=body.querySelector('.axk-item[data-idx=\"'+di+'\"]');if(it)it.remove();refreshTotals();return;}\n if(t.id===\"axk-add\"||t.id===\"axk-madd\"){addKit();return;}\n if(t.id===\"axk-redo\"){S.kit=null;S.step=0;render();return;}\n if(t.id===\"axk-back\"\u0026\u0026S.step\u003e0){S.step--;render();return;}\n if(t.id===\"axk-next\"\u0026\u0026S.step\u003c3){if(S.step===0\u0026\u0026!S.type)return;S.step++;render();return;}\n});\nroot.addEventListener(\"change\",function(e){\n var t=e.target;\n if(t.dataset.i){S[t.dataset.i]=Math.max(+t.min||0,parseInt(t.value||0,10)||0);t.value=S[t.dataset.i];S.kit=null;}\n if(t.dataset.t){S[t.dataset.t]=t.checked;S.kit=null;}\n if(t.dataset.kqi!==undefined){var r=root._rows[+t.dataset.kqi];r.line.qty=Math.max(1,parseInt(t.value||1,10)||1);t.value=r.line.qty;refreshTotals();}\n});\nrender();\n})();\n\u003c\/script\u003e","products":[{"product_id":"ajax-101366-142-nc-lightcore-1-gang-120-9na","title":"Ajax 101366.142.NC LightCore (1-gang) [120] (9NA)","description":"\u003cp\u003e\u003cstrong\u003eAjax 101366.142.NC LightCore (1-gang) [120] (9NA)\u003c\/strong\u003e\u003c\/p\u003e\n\u003ch2\u003eProduct Details\u003c\/h2\u003e\n\u003cp\u003eLightCore (1-gang) [120] Jeweller is the relay half of an Ajax LightSwitch — the module that sits in the back box and actually switches the power. It carries the electronics, the radio and the load contacts; the touch panel that the user presses is a separate part.\u003c\/p\u003e\n\u003cp\u003eIt needs no neutral wire, which is what lets it replace an existing switch on the original two-wire drop rather than requiring a rewire. It handles up to 500 W of incandescent or 250 W of CFL\/LED lighting, with a 20 W minimum load, and the relay is rated beyond 200,000 operations. Ajax LightSwitch is a modular system rather than a single product: a complete switch is a LightCore relay behind the wall plus a touch-sensitive button panel on the face, with a frame added when two or more switches sit together. All three are sold separately.\u003c\/p\u003e\n\u003cp\u003eTo make a working switch, pair this with one touch panel — SoloButton (1-gang) [120] for a standalone position, or CenterButton \/ SideButton [120] when several switches share a frame.\u003c\/p\u003e\n\u003ch2\u003eFeatures\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003eNo neutral wire required\u003c\/li\u003e\n\u003cli\u003eMaximum load 500 W incandescent or 250 W CFL\/LED, minimum 20 W\u003c\/li\u003e\n\u003cli\u003eOvercurrent protection above 5 A and temperature protection above 140 °F\u003c\/li\u003e\n\u003cli\u003eRelay rated for more than 200,000 on\/off cycles — around 50 years of use\u003c\/li\u003e\n\u003cli\u003eAverage consumption 0.2 W\u003c\/li\u003e\n\u003cli\u003eSurge protection and tamper detection\u003c\/li\u003e\n\u003cli\u003eJeweller radio up to 3,600 ft with an Ajax hub or range extender\u003c\/li\u003e\n\u003cli\u003eRemote control, configuration and event log in the Ajax apps\u003c\/li\u003e\n\u003cli\u003ePresence simulation and scheduling through automation scenarios\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003eSpecifications\u003c\/h2\u003e\n\u003ctable style=\"width: 100%;\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth style=\"width: 51.086928%;\"\u003eTechnical\u003c\/th\u003e\n\u003cth style=\"width: 47.830039%;\"\u003e\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003ePart Type\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eRelay module for a 1-gang LightSwitch\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eRequired Companion Part\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eOne touch panel: SoloButton (1-gang) [120], CenterButton (1-gang) [120] or SideButton (1-gang) [120]\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eNeutral Wire\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eNot required\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003ePower Supply Voltage\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003e120 V~, 60 Hz\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eAverage Consumption\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eUp to 200 mW\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eMaximum Power\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eUp to 500 W (incandescent) | up to 250 W (CFL \/ LED)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eMinimum Load Power\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003e20 W\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eMaximum Load Current\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003e4.2 A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eOvercurrent Protection\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eMore than 5 A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eTemperature Protection\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eMore than 140 °F\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eFrequency Bands\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003e905.0–926.5 MHz\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eMaximum Effective Radiated Power (ERP)\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eUp to 20 mW\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eRadio Signal Modulation\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eGFSK\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eRadio Communication Range\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eUp to 3,600 ft between the device and a hub or range extender in open space\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 51.086928%;\"\u003eForm Factor\u003c\/td\u003e\n\u003ctd style=\"width: 47.830039%;\"\u003eNA form factor (120)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003ePhysical\u003c\/th\u003e\n\u003cth\u003e\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eRelay Dimensions\u003c\/td\u003e\n\u003ctd\u003e3.87″ × 1.65″ × 1.31″\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eRelay Weight\u003c\/td\u003e\n\u003ctd\u003e2.43 oz\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eOperating Temperature Range\u003c\/td\u003e\n\u003ctd\u003e14 °F to 104 °F\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eOperating Humidity\u003c\/td\u003e\n\u003ctd\u003eUp to 75%, no condensation\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eProtection Class\u003c\/td\u003e\n\u003ctd\u003eIP20\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eWarranty\u003c\/td\u003e\n\u003ctd\u003e24 months\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp\u003eSpecifications subject to change.\u003c\/p\u003e\n\u003ch2\u003eDownloads\u003c\/h2\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/ajax.systems\/support\/manuals\/lightswitch-1-gang-120-jeweller\/\" rel=\"noopener\" target=\"_blank\"\u003eUser Manual\u003c\/a\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/ajax.systems\/products\/specs\/lightswitch-1-gang-120-jeweller\/\" rel=\"noopener\" target=\"_blank\"\u003eTechnical Specifications\u003c\/a\u003e\u003c\/p\u003e","brand":"Ajax","offers":[{"title":"Default Title","offer_id":48015086420117,"sku":"101366.142.NC","price":42.71,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/4983\/2085\/files\/unnamed_31bf2afb-5ae0-4ccb-baec-baa2eaf216df.jpg?v=1789576828"}],"url":"https:\/\/www.avexpress.net\/collections\/test.oembed","provider":"AV Express","version":"1.0","type":"link"}