{"product_id":"stealthlock-pro-keyless-mechanical-combination-door-lock","title":"StealthLock Pro – Keyless Mechanical Combination Door Lock","description":"\u003cbody\u003e\n\n\n\u003cmeta charset=\"utf-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1\"\u003e\n\u003ctitle\u003eStealthLock Pro Mechanical Combination Lock\u003c\/title\u003e\n\u003cmeta name=\"description\" content=\"StealthLock Pro keyless mechanical combination lock with heavy-duty zinc alloy construction, resettable code, outdoor-rated durability and Silver or Black finish.\"\u003e\n\u003cstyle\u003e\n:root{--bg:#f4f1e8;--ink:#1f261d;--olive:#59684f;--olive2:#35402f;--card:#fffdf7;--line:#d9decf;--yellow:#ffd51f}\n*{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:var(--bg);color:var(--ink);line-height:1.55}\n.wrap{width:min(1120px,92%);margin:auto;padding:54px 0}.eyebrow{text-transform:uppercase;letter-spacing:.16em;font-weight:800;color:var(--olive);font-size:.82rem}\nh1{font-size:clamp(2.4rem,7vw,5.4rem);line-height:.95;margin:.15em 0}.accent{display:block;color:var(--olive)}\n.tag{font-size:clamp(1.2rem,2.5vw,1.8rem);font-weight:800}.intro{max-width:800px;font-size:1.08rem}\n.hero{display:grid;grid-template-columns:1.1fr .9fr;gap:34px;align-items:center}.visual{min-height:390px;border-radius:28px;background:linear-gradient(145deg,#dce6d3,#b8c7aa);position:relative;overflow:hidden}\n.flag{position:absolute;width:150px;height:190px;background:var(--yellow);border:7px solid #171917;border-radius:20px;top:75px;box-shadow:0 18px 25px #0002}.f1{left:22%;transform:rotate(-8deg)}.f2{right:22%;transform:rotate(8deg)}\n.stem{position:absolute;left:50%;top:16px;width:48px;height:115px;border:5px solid #171917;border-radius:14px;background:var(--yellow);transform:translateX(-50%)}.stem:after{content:\"\";position:absolute;left:50%;bottom:-44px;width:18px;height:56px;border:4px solid #171917;border-top:0;background:var(--yellow);transform:translateX(-50%)}\n.empty{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);border:3px solid #171917;border-radius:9px;padding:7px 10px;font-weight:900;letter-spacing:.12em}\n.badge{position:absolute;right:20px;top:20px;background:var(--olive2);color:white;padding:10px 14px;border-radius:999px;font-weight:800}\nsection{margin-top:34px;background:var(--card);border:1px solid var(--line);border-radius:24px;padding:28px}.dark{background:var(--olive2);color:white}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.card{padding:18px;border:1px solid var(--line);border-radius:16px;background:#f8faf3}.dark .card{background:#465241;border-color:#66725f}\n.step{display:grid;grid-template-columns:52px 1fr;gap:14px;padding:16px 0;border-bottom:1px solid var(--line)}.step:last-child{border-bottom:0}.num{width:42px;height:42px;display:grid;place-items:center;border-radius:50%;background:#dce7be;font-weight:900}\ntable{width:100%;border-collapse:collapse}th,td{text-align:left;padding:12px;border-bottom:1px solid var(--line)}th{width:34%}\n.note{border-left:6px solid var(--olive);background:#edf1e1}.cta{display:flex;justify-content:space-between;gap:20px;align-items:center;background:var(--olive2);color:white}.btn{display:inline-block;padding:14px 20px;border-radius:999px;background:#e8efda;color:#1f261d;text-decoration:none;font-weight:900;border:0;cursor:pointer}\n@media(max-width:800px){.hero{grid-template-columns:1fr}.grid{grid-template-columns:1fr}.visual{min-height:320px}.flag{width:120px;height:160px}.f1{left:18%}.f2{right:18%}.cta{display:block}.cta .btn{margin-top:12px}}\n@media(max-width:480px){.wrap{width:min(94%,1120px)}.visual{min-height:255px}.flag{width:92px;height:128px;top:62px;border-width:5px}.stem{width:32px;height:78px;border-width:4px}.stem:after{height:40px;bottom:-31px}.empty{font-size:.62rem;padding:5px 6px}.badge{font-size:.75rem}.f1{left:14%}.f2{right:14%}}\n\u003c\/style\u003e\n\n\u003cstyle id=\"stealthlock-shopify-product-layout-fix\"\u003e\n\/*\n  Force common Shopify\/Dawn product templates into a true desktop\n  two-column layout: media gallery LEFT, product information RIGHT.\n  Mobile remains stacked.\n*\/\n@media screen and (min-width: 750px) {\n\n  \/* Dawn and closely related Shopify themes *\/\n  .product.grid,\n  .product.grid--1-col,\n  .product.grid--2-col,\n  main .product {\n    display: grid !important;\n    grid-template-columns: minmax(0, 56%) minmax(320px, 44%) !important;\n    column-gap: 42px !important;\n    align-items: start !important;\n    width: 100% !important;\n  }\n\n  .product__media-wrapper,\n  .product__media-list-wrapper,\n  .product-media-container {\n    grid-column: 1 !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    min-width: 0 !important;\n  }\n\n  .product__info-wrapper,\n  .product__information,\n  .product__info-container {\n    grid-column: 2 !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    min-width: 0 !important;\n    padding-left: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  \/* Prevent common width utility classes from overriding the split *\/\n  .product__media-wrapper.grid__item,\n  .product__info-wrapper.grid__item {\n    width: 100% !important;\n    max-width: 100% !important;\n    flex: none !important;\n  }\n\n  \/* Keep the native product title readable in the right column *\/\n  .product__title,\n  .product__title h1,\n  .product__info-wrapper h1,\n  .product__info-container h1 {\n    max-width: 100% !important;\n    font-size: clamp(2rem, 3.2vw, 3.8rem) !important;\n    line-height: 1.02 !important;\n    overflow-wrap: normal !important;\n    word-break: normal !important;\n  }\n\n  \/* Make gallery thumbnails stay with the gallery *\/\n  .thumbnail-list,\n  .product__media-list,\n  slider-component {\n    max-width: 100% !important;\n  }\n\n  \/* Sticky info is fine, but keep it inside its column *\/\n  .product__info-container {\n    position: sticky;\n    top: 24px;\n  }\n}\n\n\/* Slightly tighter split for tablets \/ smaller desktop windows *\/\n@media screen and (min-width: 750px) and (max-width: 1050px) {\n  .product.grid,\n  .product.grid--1-col,\n  .product.grid--2-col,\n  main .product {\n    grid-template-columns: minmax(0, 52%) minmax(300px, 48%) !important;\n    column-gap: 26px !important;\n  }\n\n  .product__title,\n  .product__title h1,\n  .product__info-wrapper h1,\n  .product__info-container h1 {\n    font-size: clamp(1.8rem, 3.6vw, 3rem) !important;\n  }\n}\n\n\/* Mobile: restore normal vertical flow *\/\n@media screen and (max-width: 749px) {\n  .product.grid,\n  .product.grid--1-col,\n  .product.grid--2-col,\n  main .product {\n    display: block !important;\n  }\n\n  .product__media-wrapper,\n  .product__info-wrapper,\n  .product__media-list-wrapper,\n  .product__information,\n  .product__info-container {\n    width: 100% !important;\n    max-width: 100% !important;\n  }\n\n  .product__info-container {\n    position: static !important;\n  }\n}\n\u003c\/style\u003e\n\n\n\n\n\u003cmain class=\"wrap\"\u003e\n\n  \u003cstyle\u003e\n    .lock-hero{\n      display:grid;\n      grid-template-columns:1.05fr .95fr;\n      gap:34px;\n      align-items:center;\n    }\n\n    .lock-visual{\n      position:relative;\n      min-height:430px;\n      border-radius:28px;\n      overflow:hidden;\n      background:\n        radial-gradient(circle at 72% 18%,rgba(255,255,255,.34),transparent 23%),\n        linear-gradient(145deg,#dce6d3,#aebda1);\n    }\n\n    .lock-shadow{\n      position:absolute;\n      left:50%;\n      bottom:38px;\n      width:300px;\n      height:58px;\n      border-radius:50%;\n      background:rgba(30,36,28,.18);\n      filter:blur(12px);\n      transform:translateX(-50%);\n    }\n\n    .lock-device{\n      position:absolute;\n      left:50%;\n      top:54px;\n      width:240px;\n      height:310px;\n      transform:translateX(-50%);\n      filter:drop-shadow(0 24px 20px rgba(25,31,23,.22));\n    }\n\n    .lock-plate{\n      position:absolute;\n      left:50%;\n      top:20px;\n      width:190px;\n      height:250px;\n      border:8px solid #171917;\n      border-radius:22px;\n      background:\n        linear-gradient(145deg,rgba(255,255,255,.28),transparent 28%),\n        linear-gradient(180deg,#b8bcb7,#747b75);\n      transform:translateX(-50%);\n      box-shadow:inset 0 0 0 3px rgba(255,255,255,.18);\n    }\n\n    .lock-dial-wrap{\n      position:absolute;\n      left:50%;\n      top:52px;\n      width:112px;\n      height:112px;\n      border:7px solid #171917;\n      border-radius:50%;\n      background:#404841;\n      transform:translateX(-50%);\n    }\n\n    .lock-dial{\n      position:absolute;\n      left:50%;\n      top:50%;\n      width:76px;\n      height:76px;\n      border:5px solid #bfc7bd;\n      border-radius:50%;\n      background:\n        repeating-conic-gradient(#d8ded4 0 6deg,#626b63 6deg 12deg);\n      transform:translate(-50%,-50%);\n    }\n\n    .lock-center{\n      position:absolute;\n      left:50%;\n      top:50%;\n      width:36px;\n      height:36px;\n      border:4px solid #171917;\n      border-radius:50%;\n      background:#838c82;\n      transform:translate(-50%,-50%);\n    }\n\n    .lock-latch{\n      position:absolute;\n      left:50%;\n      bottom:34px;\n      width:104px;\n      height:72px;\n      border:7px solid #171917;\n      border-radius:16px;\n      background:linear-gradient(#8d968c,#646d64);\n      transform:translateX(-50%);\n    }\n\n    .lock-latch::after{\n      position:absolute;\n      right:-58px;\n      top:18px;\n      width:70px;\n      height:24px;\n      border:6px solid #171917;\n      border-left:0;\n      border-radius:0 12px 12px 0;\n      background:#7c857c;\n      content:\"\";\n    }\n\n    .lock-code{\n      position:absolute;\n      left:50%;\n      top:184px;\n      width:114px;\n      padding:8px;\n      border:3px solid #171917;\n      border-radius:10px;\n      background:#2f3630;\n      color:#eff4e8;\n      font-weight:900;\n      letter-spacing:.18em;\n      text-align:center;\n      transform:translateX(-50%);\n    }\n\n    .lock-badge{\n      position:absolute;\n      right:18px;\n      top:18px;\n      padding:10px 14px;\n      border-radius:999px;\n      background:var(--olive2);\n      color:#fff;\n      font-weight:800;\n    }\n\n    .lock-colours{\n      position:absolute;\n      left:18px;\n      bottom:18px;\n      display:flex;\n      gap:8px;\n      align-items:center;\n      padding:9px 12px;\n      border-radius:999px;\n      background:rgba(255,255,255,.74);\n      font-size:.8rem;\n      font-weight:800;\n    }\n\n    .swatch{\n      width:18px;\n      height:18px;\n      border:2px solid #1f261d;\n      border-radius:50%;\n    }\n\n    .swatch.silver{background:#b9beb9}\n    .swatch.black{background:#242824}\n\n    .lock-grid{\n      display:grid;\n      grid-template-columns:repeat(2,1fr);\n      gap:16px;\n    }\n\n    .lock-card{\n      padding:18px;\n      border:1px solid var(--line);\n      border-radius:16px;\n      background:#f8faf3;\n    }\n\n    .lock-card strong{\n      display:block;\n      margin-bottom:5px;\n      font-size:1.03rem;\n    }\n\n    .lock-icon{\n      display:grid;\n      width:48px;\n      height:48px;\n      place-items:center;\n      margin-bottom:12px;\n      border-radius:14px;\n      background:#dce7be;\n      font-size:1.25rem;\n    }\n\n    .spec-note{\n      padding:20px 22px;\n      border-left:6px solid var(--olive);\n      background:#edf1e1;\n    }\n\n    @media(max-width:800px){\n      .lock-hero{grid-template-columns:1fr}\n      .lock-grid{grid-template-columns:1fr}\n      .lock-visual{min-height:350px}\n      .lock-device{top:38px;transform:translateX(-50%) scale(.84)}\n    }\n\n    @media(max-width:480px){\n      .lock-visual{min-height:285px}\n      .lock-device{top:18px;transform:translateX(-50%) scale(.68)}\n      .lock-badge{font-size:.72rem}\n      .lock-colours{font-size:.7rem}\n    }\n  \u003c\/style\u003e\n\n  \u003cdiv class=\"lock-hero\"\u003e\n    \u003cdiv\u003e\n      \u003cp class=\"eyebrow\"\u003eKeyless security without batteries or Bluetooth\u003c\/p\u003e\n      \u003ch1\u003eStealthLock Pro \u003cspan class=\"accent\"\u003eMechanical Combination Lock\u003c\/span\u003e\n\u003c\/h1\u003e\n      \u003cp class=\"tag\"\u003eNo Key. No Fuss. No Compromise.\u003c\/p\u003e\n      \u003cp class=\"intro\"\u003e\n        Secure your home, garage, office or patio with a lock that doesn't rely on keys,\n        batteries or electronics. StealthLock Pro delivers dependable access control through\n        precision rotary engineering, weather-resistant materials and a resettable mechanical code.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"lock-visual\" role=\"img\" aria-label=\"StealthLock Pro mechanical combination lock in silver finish with rotary dial and secure latch\"\u003e\n      \u003cdiv class=\"lock-badge\"\u003eOutdoor-Rated\u003c\/div\u003e\n      \u003cdiv class=\"lock-shadow\"\u003e\u003c\/div\u003e\n\n      \u003cdiv class=\"lock-device\"\u003e\n        \u003cdiv class=\"lock-plate\"\u003e\n          \u003cdiv class=\"lock-dial-wrap\"\u003e\n            \u003cdiv class=\"lock-dial\"\u003e\n              \u003cdiv class=\"lock-center\"\u003e\u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"lock-code\"\u003e3 • 7 • 2\u003c\/div\u003e\n          \u003cdiv class=\"lock-latch\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-colours\"\u003e\n        \u003cspan class=\"swatch silver\" aria-hidden=\"true\"\u003e\u003c\/span\u003e Silver\n        \u003cspan class=\"swatch black\" aria-hidden=\"true\"\u003e\u003c\/span\u003e Black\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"dark\"\u003e\n    \u003ch2\u003eReliable access control. Zero ongoing maintenance.\u003c\/h2\u003e\n    \u003cdiv class=\"grid\"\u003e\n      \u003cdiv class=\"card\"\u003e\n        \u003cstrong\u003eNo Batteries\u003c\/strong\u003e\n        \u003cp\u003eMechanical operation means there is nothing to recharge, replace or reconnect.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"card\"\u003e\n        \u003cstrong\u003eNo Keys to Lose\u003c\/strong\u003e\n        \u003cp\u003eUse a resettable combination instead of carrying, copying or replacing keys.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"card\"\u003e\n        \u003cstrong\u003eBuilt for Daily Use\u003c\/strong\u003e\n        \u003cp\u003eZinc-alloy construction and a firm latch are designed for regular indoor and outdoor access.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection\u003e\n    \u003ch2\u003eIdeal For\u003c\/h2\u003e\n    \u003cdiv class=\"lock-grid\"\u003e\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🏠\u003c\/div\u003e\n        \u003cstrong\u003eHome \u0026amp; Residential Gates\u003c\/strong\u003e\n        \u003cp\u003eSimple keyless access for gates, side entrances and everyday household use.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🧰\u003c\/div\u003e\n        \u003cstrong\u003eGarages \u0026amp; Outbuildings\u003c\/strong\u003e\n        \u003cp\u003eUseful for workshops, sheds and storage areas where durable mechanical access is preferred.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🏢\u003c\/div\u003e\n        \u003cstrong\u003eOffice \u0026amp; Commercial Doors\u003c\/strong\u003e\n        \u003cp\u003eProvide controlled access without issuing physical keys to every user.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🌿\u003c\/div\u003e\n        \u003cstrong\u003ePatio \u0026amp; Garden Access\u003c\/strong\u003e\n        \u003cp\u003eWeather-resistant construction suits covered and outdoor entry points.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🔒\u003c\/div\u003e\n        \u003cstrong\u003eSecure Storage Rooms\u003c\/strong\u003e\n        \u003cp\u003eAdd mechanical access control to compatible storage areas and cabinets.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🛠️\u003c\/div\u003e\n        \u003cstrong\u003eWorkshops \u0026amp; Utility Areas\u003c\/strong\u003e\n        \u003cp\u003eA practical fit for spaces that need simple, repeatable access without electronics.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection id=\"features\"\u003e\n    \u003ch2\u003eKey Features\u003c\/h2\u003e\n\n    \u003cdiv class=\"step\"\u003e\n      \u003cdiv class=\"num\"\u003e01\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cstrong\u003eKeyless Mechanical Combination\u003c\/strong\u003e\n        \u003cp\u003eNo batteries, Bluetooth, apps or electronic lockouts.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"step\"\u003e\n      \u003cdiv class=\"num\"\u003e02\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cstrong\u003eHeavy-Duty Zinc Alloy Construction\u003c\/strong\u003e\n        \u003cp\u003eBuilt to resist corrosion, tampering and everyday wear.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"step\"\u003e\n      \u003cdiv class=\"num\"\u003e03\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cstrong\u003ePrecision Rotary Mechanism\u003c\/strong\u003e\n        \u003cp\u003eSmooth mechanical operation provides dependable access every time.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"step\"\u003e\n      \u003cdiv class=\"num\"\u003e04\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cstrong\u003eSecure Latch Design\u003c\/strong\u003e\n        \u003cp\u003ePositive engagement helps create a firm, rattle-free closure on compatible doors.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"step\"\u003e\n      \u003cdiv class=\"num\"\u003e05\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cstrong\u003eOutdoor-Rated\u003c\/strong\u003e\n        \u003cp\u003eDesigned to handle moisture, UV exposure and changing temperatures.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"step\"\u003e\n      \u003cdiv class=\"num\"\u003e06\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cstrong\u003eSilver \u0026amp; Black Finishes\u003c\/strong\u003e\n        \u003cp\u003eChoose the finish that best matches your door hardware or surrounding fittings.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"step\"\u003e\n      \u003cdiv class=\"num\"\u003e07\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cstrong\u003eResettable Combination\u003c\/strong\u003e\n        \u003cp\u003eChange the access code whenever your security needs change.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection\u003e\n    \u003ch2\u003eWhy Choose a Mechanical Combination Lock?\u003c\/h2\u003e\n    \u003cdiv class=\"lock-grid\"\u003e\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🔋\u003c\/div\u003e\n        \u003cstrong\u003eNo Battery Failure\u003c\/strong\u003e\n        \u003cp\u003eMechanical operation keeps working without charge levels, battery warnings or power interruptions.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🔑\u003c\/div\u003e\n        \u003cstrong\u003eNo Lost Keys\u003c\/strong\u003e\n        \u003cp\u003eAccess is controlled by your combination, reducing the hassle of misplaced or duplicated keys.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e⚙️\u003c\/div\u003e\n        \u003cstrong\u003eSimple, Proven Mechanism\u003c\/strong\u003e\n        \u003cp\u003eFewer electronic components means fewer failure points and less ongoing maintenance.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"lock-card\"\u003e\n        \u003cdiv class=\"lock-icon\"\u003e🌦️\u003c\/div\u003e\n        \u003cstrong\u003eMade for Real Environments\u003c\/strong\u003e\n        \u003cp\u003eA practical choice for areas exposed to dust, temperature changes and outdoor conditions.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection\u003e\n    \u003ch2\u003eProduct Specifications\u003c\/h2\u003e\n    \u003ctable\u003e\n      \u003ctr\u003e\n\u003cth\u003eProduct\u003c\/th\u003e\n\u003ctd\u003eStealthLock Pro Mechanical Combination Lock\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003eLock Type\u003c\/th\u003e\n\u003ctd\u003eKeyless mechanical combination lock\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003eBody Material\u003c\/th\u003e\n\u003ctd\u003eHeavy-duty zinc alloy\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003eMechanism\u003c\/th\u003e\n\u003ctd\u003ePrecision rotary combination\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003eCode\u003c\/th\u003e\n\u003ctd\u003eResettable combination\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003eLatch\u003c\/th\u003e\n\u003ctd\u003ePositive-engagement secure latch\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003eEnvironment\u003c\/th\u003e\n\u003ctd\u003eIndoor and outdoor-rated use\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003eFinishes\u003c\/th\u003e\n\u003ctd\u003eSilver and Black\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003cth\u003ePower Required\u003c\/th\u003e\n\u003ctd\u003eNone\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/table\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"spec-note\"\u003e\n    \u003cstrong\u003eInstallation note:\u003c\/strong\u003e\n    Confirm door thickness, latch orientation, cut-out dimensions and mounting requirements before installation.\n    Security performance depends on correct fitting and the strength of the surrounding door, frame or enclosure.\n  \u003c\/section\u003e\n\n  \u003csection class=\"cta\"\u003e\n    \u003cdiv\u003e\n      \u003ch2\u003eNo key. No battery. Just dependable access.\u003c\/h2\u003e\n      \u003cp\u003e\n        Choose durable mechanical security for gates, doors, workshops and compatible storage spaces.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cbutton class=\"btn\" type=\"button\" data-bosveld-add-to-cart\u003eAdd to Cart\u003c\/button\u003e\n  \u003c\/section\u003e\n\n\u003c\/main\u003e\n\n\u003cscript\u003e\n(function () {\n  const button = document.querySelector('[data-bosveld-add-to-cart]');\n  if (!button) return;\n\n  function validVariantId(value) {\n    const id = Number(value);\n    return Number.isInteger(id) \u0026\u0026 id \u003e 0 ? id : null;\n  }\n\n  function getVariantId() {\n    \/\/ 1) Variant selector\/form closest to the actual Shopify product form.\n    const productForms = document.querySelectorAll('form[action*=\"\/cart\/add\"]');\n    for (const form of productForms) {\n      const selected = form.querySelector('[name=\"id\"]');\n      const id = selected \u0026\u0026 validVariantId(selected.value);\n      if (id) return id;\n    }\n\n    \/\/ 2) Common Shopify theme variant fields.\n    const fields = document.querySelectorAll(\n      'select[name=\"id\"], input[name=\"id\"]:checked, input[name=\"id\"][type=\"hidden\"], [data-variant-id]'\n    );\n    for (const field of fields) {\n      const id = validVariantId(field.value || field.getAttribute('data-variant-id'));\n      if (id) return id;\n    }\n\n    \/\/ 3) Optional manual variant ID on this custom button.\n    return validVariantId(button.dataset.variantId);\n  }\n\n  button.addEventListener('click', async function () {\n    const variantId = getVariantId();\n\n    if (!variantId) {\n      alert('Please select a product variant first. If your Shopify theme does not expose the variant automatically, add data-variant-id=\"YOUR_VARIANT_ID\" to this button.');\n      return;\n    }\n\n    const original = button.innerHTML;\n    button.disabled = true;\n    button.setAttribute('aria-busy', 'true');\n    button.innerHTML = 'Adding…';\n\n    try {\n      const root = (window.Shopify \u0026\u0026 Shopify.routes \u0026\u0026 Shopify.routes.root) || '\/';\n      const response = await fetch(root + 'cart\/add.js', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application\/json',\n          'Accept': 'application\/json'\n        },\n        body: JSON.stringify({\n          items: [{ id: variantId, quantity: 1 }]\n        })\n      });\n\n      const result = await response.json();\n      if (!response.ok) {\n        throw new Error(result.description || result.message || 'Could not add this item to cart.');\n      }\n\n      button.innerHTML = 'Added ✓';\n\n      \/\/ Notify common Shopify themes\/drawers that the cart changed.\n      document.documentElement.dispatchEvent(new CustomEvent('cart:refresh', { bubbles: true }));\n      document.dispatchEvent(new CustomEvent('cart:updated', {\n        bubbles: true,\n        detail: result\n      }));\n\n      \/\/ Reliable fallback: open the Shopify cart after adding.\n      setTimeout(function () {\n        window.location.href = root + 'cart';\n      }, 450);\n    } catch (error) {\n      console.error('StealthLock Add to Cart:', error);\n      alert(error.message || 'Could not add this item to cart. Please try again.');\n      button.disabled = false;\n      button.removeAttribute('aria-busy');\n      button.innerHTML = original;\n    }\n  });\n})();\n\u003c\/script\u003e\n\n\n\n\n\u003cstyle id=\"stealthlock-website-friendly-fix\"\u003e\nhtml,body{width:100%;max-width:100%;margin:0;overflow-x:hidden}\n.wrap{width:min(1180px,calc(100% - 56px))!important;max-width:1180px!important;margin:0 auto!important;padding:64px 0 80px!important}\n.lock-hero{display:grid!important;grid-template-columns:1fr!important;gap:30px!important;align-items:start!important;width:100%!important}\n.lock-hero\u003e*{min-width:0!important}\n.lock-hero h1{width:100%!important;max-width:980px!important;margin:0 0 14px!important;font-size:clamp(3.7rem,6vw,6.4rem)!important;line-height:.98!important;letter-spacing:-.045em!important;overflow-wrap:normal!important;word-break:normal!important}\n.lock-hero h1 .accent{display:block!important;width:100%!important;color:var(--olive)!important}\n.lock-hero .eyebrow{margin:0 0 14px!important;max-width:100%!important;white-space:normal!important}\n.lock-hero .tag{margin:18px 0 12px!important;max-width:760px!important}\n.lock-hero .intro{max-width:900px!important;margin:0!important;line-height:1.7!important}\n.lock-visual{width:100%!important;min-height:560px!important;margin-top:6px!important;border-radius:26px!important;background:radial-gradient(circle at center,rgba(168,180,134,.25),transparent 46%),linear-gradient(150deg,#fff,#e8eddc)!important;box-shadow:0 22px 48px rgba(38,53,31,.14)!important}\n.lock-device{top:105px!important;transform:translateX(-50%) scale(1.12)!important}\n.lock-badge{top:22px!important;right:22px!important}\n.lock-colours{left:22px!important;bottom:22px!important}\n.wrap\u003esection{width:100%!important;margin-top:36px!important;padding:38px!important;border-radius:22px!important;overflow:hidden!important;box-shadow:0 14px 35px rgba(38,53,31,.08)}\n.wrap\u003esection h2{font-size:clamp(1.7rem,3.6vw,2.45rem)!important;line-height:1.15!important;margin:0 0 18px!important}\n.grid,.lock-grid{display:grid!important;grid-template-columns:1fr!important;gap:16px!important;width:100%!important}\n.card,.lock-card{width:100%!important;max-width:100%!important;min-width:0!important}\n.step{grid-template-columns:52px minmax(0,1fr)!important;gap:14px!important}\ntable{width:100%!important;table-layout:fixed!important} th,td{overflow-wrap:anywhere!important}\n.cta{display:grid!important;grid-template-columns:minmax(0,1fr) minmax(260px,.45fr)!important;gap:22px!important;align-items:center!important}\n.cta .btn{justify-self:stretch!important;text-align:center!important}\n@media(max-width:980px){\n.wrap{width:min(860px,calc(100% - 40px))!important;padding-top:52px!important}\n.lock-hero h1{font-size:clamp(3.1rem,8vw,5.3rem)!important}\n.lock-visual{min-height:480px!important}\n.lock-device{top:80px!important;transform:translateX(-50%) scale(.98)!important}\n.cta{grid-template-columns:1fr!important}}\n@media(max-width:760px){\n.wrap{width:calc(100% - 32px)!important;padding:42px 0 56px!important}\n.lock-hero h1{font-size:clamp(2.6rem,12vw,4.1rem)!important;line-height:1!important}\n.lock-visual{min-height:390px!important}\n.lock-device{top:55px!important;transform:translateX(-50%) scale(.82)!important}\n.wrap\u003esection{padding:26px 20px!important}}\n@media(max-width:430px){\n.wrap{width:calc(100% - 20px)!important;padding-top:34px!important}\n.lock-hero h1{font-size:clamp(2.2rem,13vw,3.25rem)!important}\n.lock-hero .eyebrow{font-size:.7rem!important;letter-spacing:.12em!important}\n.lock-visual{min-height:325px!important;border-radius:20px!important}\n.lock-device{top:28px!important;transform:translateX(-50%) scale(.67)!important}\n.lock-badge{top:12px!important;right:12px!important;max-width:46%!important;font-size:.7rem!important;text-align:center!important}\n.lock-colours{left:12px!important;bottom:12px!important;max-width:82%!important;flex-wrap:wrap!important;font-size:.68rem!important}\n.wrap\u003esection{padding:22px 16px!important}\n.step{grid-template-columns:42px minmax(0,1fr)!important;gap:10px!important}\ntable,tbody,tr,th,td{display:block!important;width:100%!important}\ntr{padding:12px 0!important;border-bottom:1px solid var(--line)!important}\nth,td{border:0!important;padding:4px 0!important}}\n\u003c\/style\u003e\n\n\n\u003cstyle id=\"stealthlock-image-left-copy-right\"\u003e\n@media screen and (min-width:801px){\n  .lock-hero{\n    display:grid !important;\n    grid-template-columns:minmax(420px,1fr) minmax(420px,.9fr) !important;\n    grid-template-areas:\"visual copy\" !important;\n    gap:46px !important;\n    align-items:center !important;\n  }\n\n  .lock-hero \u003e div:first-child{\n    grid-area:copy !important;\n    min-width:0 !important;\n  }\n\n  .lock-hero \u003e .lock-visual{\n    grid-area:visual !important;\n    min-width:0 !important;\n    margin:0 !important;\n  }\n\n  .lock-hero h1{\n    max-width:100% !important;\n    font-size:clamp(3rem,4.4vw,5.1rem) !important;\n    line-height:.98 !important;\n  }\n\n  .lock-hero .intro{\n    max-width:620px !important;\n  }\n\n  .lock-visual{\n    min-height:540px !important;\n  }\n}\n\n@media screen and (min-width:801px) and (max-width:1050px){\n  .lock-hero{\n    grid-template-columns:minmax(360px,1fr) minmax(340px,.9fr) !important;\n    gap:30px !important;\n  }\n\n  .lock-hero h1{\n    font-size:clamp(2.7rem,4.7vw,4rem) !important;\n  }\n\n  .lock-visual{\n    min-height:470px !important;\n  }\n\n  .lock-device{\n    top:72px !important;\n    transform:translateX(-50%) scale(.94) !important;\n  }\n}\n\n\/* Mobile stays stacked for readability: copy first, image underneath *\/\n@media screen and (max-width:800px){\n  .lock-hero{\n    grid-template-columns:1fr !important;\n  }\n}\n\u003c\/style\u003e\n\n\n\u003cstyle id=\"stealthlock-container-responsive-fix\"\u003e\n\/* Respond to the REAL width Shopify gives this content, not the browser width *\/\n.wrap{\n  container-type:inline-size !important;\n  container-name:stealthlock !important;\n  width:min(1180px,100%) !important;\n  max-width:1180px !important;\n  padding-left:18px !important;\n  padding-right:18px !important;\n}\n\n\/* Safe default: stack so nothing can be clipped *\/\n.lock-hero{\n  display:grid !important;\n  grid-template-columns:1fr !important;\n  grid-template-areas:\n    \"copy\"\n    \"visual\" !important;\n  gap:28px !important;\n  width:100% !important;\n  max-width:100% !important;\n  overflow:visible !important;\n}\n\n.lock-hero \u003e div:first-child{\n  grid-area:copy !important;\n  width:100% !important;\n  max-width:100% !important;\n  min-width:0 !important;\n}\n\n.lock-hero \u003e .lock-visual{\n  grid-area:visual !important;\n  width:100% !important;\n  max-width:100% !important;\n  min-width:0 !important;\n}\n\n.lock-hero h1{\n  width:100% !important;\n  max-width:100% !important;\n  margin:0 0 14px !important;\n  font-size:clamp(2.35rem,10cqw,4.4rem) !important;\n  line-height:1 !important;\n  letter-spacing:-.04em !important;\n  white-space:normal !important;\n  overflow-wrap:normal !important;\n  word-break:normal !important;\n}\n\n.lock-hero h1 .accent{\n  display:block !important;\n  width:100% !important;\n  max-width:100% !important;\n}\n\n.lock-hero .eyebrow,\n.lock-hero .tag,\n.lock-hero .intro{\n  width:100% !important;\n  max-width:100% !important;\n  white-space:normal !important;\n  overflow-wrap:normal !important;\n  word-break:normal !important;\n}\n\n.lock-hero .intro{\n  font-size:1rem !important;\n  line-height:1.65 !important;\n}\n\n\/* Product visual remains contained *\/\n.lock-visual{\n  min-height:390px !important;\n  overflow:hidden !important;\n}\n\n.lock-device{\n  left:50% !important;\n  top:48px !important;\n  transform:translateX(-50%) scale(.82) !important;\n}\n\n\/* Only use image-left \/ copy-right when THIS section itself has enough space *\/\n@container stealthlock (min-width: 900px){\n  .lock-hero{\n    grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr) !important;\n    grid-template-areas:\"visual copy\" !important;\n    gap:42px !important;\n    align-items:center !important;\n  }\n\n  .lock-hero h1{\n    font-size:clamp(2.65rem,5.7cqw,4.8rem) !important;\n  }\n\n  .lock-hero .intro{\n    max-width:600px !important;\n    font-size:1.04rem !important;\n  }\n\n  .lock-visual{\n    min-height:500px !important;\n  }\n\n  .lock-device{\n    top:78px !important;\n    transform:translateX(-50%) scale(1) !important;\n  }\n}\n\n\/* Bigger desktop *\/\n@container stealthlock (min-width: 1080px){\n  .lock-hero{\n    grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr) !important;\n    gap:52px !important;\n  }\n\n  .lock-hero h1{\n    font-size:clamp(3rem,5.5cqw,5.1rem) !important;\n  }\n\n  .lock-visual{\n    min-height:540px !important;\n  }\n\n  .lock-device{\n    top:92px !important;\n    transform:translateX(-50%) scale(1.08) !important;\n  }\n}\n\n\/* Narrow embedded Shopify columns *\/\n@container stealthlock (max-width: 620px){\n  .wrap{\n    padding-left:10px !important;\n    padding-right:10px !important;\n  }\n\n  .lock-hero h1{\n    font-size:clamp(2.1rem,11cqw,3.25rem) !important;\n  }\n\n  .lock-hero .eyebrow{\n    font-size:.68rem !important;\n    letter-spacing:.11em !important;\n  }\n\n  .lock-hero .tag{\n    font-size:1.12rem !important;\n  }\n\n  .lock-visual{\n    min-height:315px !important;\n    border-radius:20px !important;\n  }\n\n  .lock-device{\n    top:24px !important;\n    transform:translateX(-50%) scale(.66) !important;\n  }\n\n  .lock-badge{\n    top:12px !important;\n    right:12px !important;\n    max-width:48% !important;\n    font-size:.68rem !important;\n  }\n\n  .lock-colours{\n    left:12px !important;\n    bottom:12px !important;\n    max-width:82% !important;\n    flex-wrap:wrap !important;\n    font-size:.67rem !important;\n  }\n}\n\u003c\/style\u003e\n\n\n\u003cstyle id=\"stealthlock-lighter-dark-sections\"\u003e\n\/* Lighter treatment for the dark feature and CTA sections *\/\n.wrap \u003e section[style*=\"background\"],\n.lock-section--dark,\n.section-dark,\n.dark-section,\n.cta{\n  background:#e7ecd9 !important;\n  color:#26341f !important;\n  border-color:#cbd5b5 !important;\n}\n\n\/* Feature cards inside the previously dark section *\/\n.wrap \u003e section[style*=\"background\"] .card,\n.wrap \u003e section[style*=\"background\"] .lock-card,\n.lock-section--dark .card,\n.lock-section--dark .lock-card,\n.section-dark .card,\n.dark-section .card{\n  background:#f5f7ef !important;\n  color:#26341f !important;\n  border-color:#c8d1ba !important;\n}\n\n\/* Ensure all copy remains readable *\/\n.wrap \u003e section[style*=\"background\"] h2,\n.wrap \u003e section[style*=\"background\"] h3,\n.wrap \u003e section[style*=\"background\"] strong,\n.wrap \u003e section[style*=\"background\"] p,\n.lock-section--dark h2,\n.lock-section--dark h3,\n.lock-section--dark strong,\n.lock-section--dark p,\n.cta h2,\n.cta h3,\n.cta p{\n  color:#26341f !important;\n}\n\n\/* CTA button: light olive with dark text *\/\n.cta .btn,\n.cta a,\n.cta button{\n  background:#f8faF2 !important;\n  color:#26341f !important;\n  border-color:#9eac80 !important;\n}\n\n.cta .btn:hover,\n.cta a:hover,\n.cta button:hover{\n  background:#dce5c8 !important;\n  color:#26341f !important;\n}\n\u003c\/style\u003e\n\n\n\u003cstyle id=\"stealthlock-extra-light-sections\"\u003e\n\/* Extra-light Bosveld treatment for the feature panel shown *\/\n.wrap \u003e section[style*=\"background\"],\n.lock-section--dark,\n.section-dark,\n.dark-section{\n  background:#eef2e4 !important;\n  color:#26341f !important;\n  border:1px solid #d5ddc5 !important;\n  box-shadow:0 14px 34px rgba(38,53,31,.07) !important;\n}\n\n.wrap \u003e section[style*=\"background\"] .card,\n.wrap \u003e section[style*=\"background\"] .lock-card,\n.lock-section--dark .card,\n.lock-section--dark .lock-card,\n.section-dark .card,\n.section-dark .lock-card,\n.dark-section .card,\n.dark-section .lock-card{\n  background:#fafbf6 !important;\n  color:#26341f !important;\n  border:1px solid #cbd5ba !important;\n  box-shadow:none !important;\n}\n\n.wrap \u003e section[style*=\"background\"] h2,\n.wrap \u003e section[style*=\"background\"] h3,\n.wrap \u003e section[style*=\"background\"] strong,\n.wrap \u003e section[style*=\"background\"] p,\n.lock-section--dark h2,\n.lock-section--dark h3,\n.lock-section--dark strong,\n.lock-section--dark p,\n.section-dark h2,\n.section-dark h3,\n.section-dark strong,\n.section-dark p,\n.dark-section h2,\n.dark-section h3,\n.dark-section strong,\n.dark-section p{\n  color:#26341f !important;\n}\n\u003c\/style\u003e\n\n\u003c\/body\u003e","brand":"Bosveld Tactical ","offers":[{"title":"Silver","offer_id":48353314635929,"sku":null,"price":649.0,"currency_code":"ZAR","in_stock":true},{"title":"Black","offer_id":48353314668697,"sku":null,"price":649.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0732\/9375\/8617\/files\/ChatGPTImageJul23_2026_11_01_47AM.png?v=1784797330","url":"https:\/\/bosveldtactical.co.za\/products\/stealthlock-pro-keyless-mechanical-combination-door-lock","provider":"Bosveld Tactical ","version":"1.0","type":"link"}