{"id":31080,"date":"2026-05-13T22:39:20","date_gmt":"2026-05-13T22:39:20","guid":{"rendered":"https:\/\/www.bwmo.com\/?page_id=31080"},"modified":"2026-07-04T21:50:24","modified_gmt":"2026-07-04T21:50:24","slug":"bwmo-smart-locks","status":"publish","type":"page","link":"https:\/\/www.bwmo.com\/index.php\/bwmo-smart-locks\/","title":{"rendered":"BWMO Smart Locks"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"31080\" class=\"elementor elementor-31080\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"wd-negative-gap elementor-element elementor-element-54b7369c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"54b7369c\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2f602276 color-scheme-inherit text-left elementor-widget elementor-widget-text-editor\" data-id=\"2f602276\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>\n<div id=\"bwmo-lock-configurator\">\n  <section class=\"bwmo-lock-hero\">\n    <div class=\"bwmo-lock-hero-shell\">\n      <div class=\"bwmo-lock-copy\">\n        <span>BWMO AI Smart Lock<\/span>\n        <h1>Smarter access. Safer homes.<\/h1>\n        <p>Face, palm vein, password and app control for modern Ghana homes.<\/p>\n      <\/div>\n      <div class=\"bwmo-lock-hero-media\">\n        <img decoding=\"async\" id=\"bwmo-lock-hero-image\" src=\"https:\/\/www.bwmo.com\/wp-content\/uploads\/2026\/05\/01-800x800.jpg\" alt=\"BWMO AI Smart Lock\">\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"bwmo-lock-step\" id=\"bwmo-lock-step-design\">\n    <div class=\"bwmo-lock-step-head\">\n      <span>Step 1<\/span>\n      <h2>Choose your smart lock.<\/h2>\n      <p>Swipe through the collection and preview each model instantly.<\/p>\n    <\/div>\n    <div class=\"bwmo-lock-preview-card is-empty\">\n      <img decoding=\"async\" id=\"bwmo-lock-preview\" src=\"https:\/\/via.placeholder.com\/1400x900\/f5f5f7\/1d1d1f?text=BWMO+AI+Smart+Lock\" alt=\"Smart Lock Preview\">\n      <div class=\"bwmo-lock-empty-preview-card\">\n        <div class=\"bwmo-lock-empty-icon\">BWMO<\/div>\n        <h3>Choose a smart lock<\/h3>\n        <p>Select a model below to preview your BWMO smart lock.<\/p>\n      <\/div>\n    <\/div>\n    <div id=\"bwmo-lock-designs\" class=\"bwmo-lock-horizontal-scroll\"><\/div>\n  <\/section>\n\n  <section class=\"bwmo-lock-step\">\n    <div class=\"bwmo-lock-step-head\">\n      <span>Core Features<\/span>\n      <h2>Access that feels effortless.<\/h2>\n      <p>Built for daily use, family access and better entrance security.<\/p>\n    <\/div>\n    <div class=\"bwmo-lock-feature-grid\">\n      <div><strong>Face Recognition<\/strong><span>Fast unlock for everyday entry.<\/span><\/div>\n      <div><strong>Palm Vein Unlock<\/strong><span>More private biometric access.<\/span><\/div>\n      <div><strong>Password Access<\/strong><span>Simple backup for family and guests.<\/span><\/div>\n      <div><strong>App Control<\/strong><span>Remote access and smarter alerts.<\/span><\/div>\n      <div><strong>Outdoor Alert Recording<\/strong><span>Record abnormal activity at the door.<\/span><\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"bwmo-lock-step bwmo-lock-summary\" id=\"bwmo-lock-summary-section\">\n    <div class=\"bwmo-lock-step-head\">\n      <span>Current Build<\/span>\n      <h2>Your BWMO smart lock.<\/h2>\n      <p>Review the current smart lock, then add it to your selection.<\/p>\n    <\/div>\n    <div class=\"bwmo-lock-summary-card\">\n      <div><span>Model<\/span><strong id=\"lock-sum-design\">&#8211;<\/strong><\/div>\n      <div>\n        <span>Quantity<\/span>\n        <strong class=\"bwmo-lock-qty-control\">\n          <button type=\"button\" id=\"bwmo-lock-current-qty-minus\">&#8211;<\/button>\n          <b id=\"bwmo-lock-current-qty\">1<\/b>\n          <button type=\"button\" id=\"bwmo-lock-current-qty-plus\">+<\/button>\n        <\/strong>\n      <\/div>\n      <div><span>Unit Price<\/span><strong id=\"lock-sum-unit-total\">\u20b50<\/strong><\/div>\n      <div class=\"bwmo-lock-total\"><span>Current Subtotal<\/span><strong id=\"lock-sum-total\">\u20b50<\/strong><\/div>\n    <\/div>\n  <\/section>\n\n  <div id=\"bwmo-lock-drawer-backdrop\" class=\"bwmo-lock-drawer-backdrop\"><\/div>\n\n  <aside id=\"bwmo-lock-selection-drawer\" class=\"bwmo-lock-selection-drawer\" aria-hidden=\"true\">\n    <div class=\"bwmo-lock-drawer-handle\"><\/div>\n    <div class=\"bwmo-lock-drawer-head\">\n      <div>\n        <span>Your Selection<\/span>\n        <h3>Selected smart locks<\/h3>\n        <em id=\"bwmo-lock-selection-count\">0 item<\/em>\n      <\/div>\n      <button id=\"bwmo-lock-close-selection\" type=\"button\">\u00d7<\/button>\n    <\/div>\n    <div id=\"bwmo-lock-selection-items\" class=\"bwmo-lock-selection-items\">\n      <p class=\"bwmo-lock-empty-selection\">Your selection is empty. Add a smart lock to begin.<\/p>\n    <\/div>\n    <div class=\"bwmo-lock-drawer-footer\">\n      <div class=\"bwmo-lock-selection-total\">\n        <span>Selection Total<\/span>\n        <strong id=\"bwmo-lock-selection-total\">\u20b50<\/strong>\n      <\/div>\n      <button id=\"bwmo-lock-add-cart\" class=\"bwmo-lock-main-btn\" type=\"button\">Add Selection to Cart<\/button>\n      <button id=\"bwmo-lock-drawer-continue\" class=\"bwmo-lock-secondary-btn\" type=\"button\">Continue Choosing<\/button>\n    <\/div>\n  <\/aside>\n\n  <div id=\"bwmo-lock-sticky-bar\" class=\"bwmo-lock-bottom-bar\">\n    <div class=\"bwmo-lock-sticky-info\">\n      <span id=\"bwmo-lock-sticky-label\">Current Subtotal<\/span>\n      <strong id=\"bwmo-lock-bottom-total\">\u20b50<\/strong>\n      <em id=\"bwmo-lock-sticky-meta\">\u8bf7\u9009\u62e9\u667a\u80fd\u9501\u6b3e\u5f0f<\/em>\n      <small id=\"bwmo-lock-free-service\">Limited-time free installation<\/small>\n    <\/div>\n    <div class=\"bwmo-lock-sticky-actions\">\n      <button id=\"bwmo-lock-add-selection\" type=\"button\">BUY NOW<\/button>\n      <button id=\"bwmo-lock-view-selection\" type=\"button\">View Selection<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.entry-title,.page-title,.elementor-page-title{display:none!important}\n#bwmo-lock-configurator{--bg:#f5f5f7;--card:#fff;--text:#1d1d1f;--muted:#6e6e73;--line:#d2d2d7;--blue:#0071e3;--orange:#ff6b00;background:#fff;color:var(--text);font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;min-height:100vh;padding-bottom:120px}\n#bwmo-lock-configurator *{box-sizing:border-box}\n#bwmo-lock-configurator button{font-family:inherit!important;appearance:none!important;-webkit-appearance:none!important}\n#bwmo-lock-configurator .bwmo-lock-hero{margin:14px 10px;padding:0!important;text-align:center;background:#fff!important;border-radius:0!important;overflow:visible!important}\n#bwmo-lock-configurator .bwmo-lock-hero-shell{width:100%;padding:34px 14px 28px;text-align:center;border-radius:32px!important;overflow:hidden!important;background:#f5f5f7!important;-webkit-mask-image:-webkit-radial-gradient(white,black);clip-path:inset(0 round 32px)}\n#bwmo-lock-configurator .bwmo-lock-copy span,#bwmo-lock-configurator .bwmo-lock-step-head span{display:block;color:var(--muted);font-size:12px;font-weight:700;margin-bottom:8px}\n#bwmo-lock-configurator .bwmo-lock-copy h1{margin:0 auto 10px;max-width:380px;font-size:34px;line-height:1.05;letter-spacing:-1.2px;font-weight:800}\n#bwmo-lock-configurator .bwmo-lock-copy p,#bwmo-lock-configurator .bwmo-lock-step-head p{margin:0 auto;max-width:350px;color:var(--muted);font-size:15px;line-height:1.42}\n#bwmo-lock-configurator .bwmo-lock-hero-media{margin-top:24px;width:100%;height:390px;border-radius:30px!important;overflow:hidden!important;background:#f5f5f7;border:1px solid rgba(0,0,0,.05);display:flex;align-items:center;justify-content:center;-webkit-mask-image:-webkit-radial-gradient(white,black);clip-path:inset(0 round 30px)}\n#bwmo-lock-configurator .bwmo-lock-hero-media img{width:100%;height:100%;object-fit:contain;border-radius:30px}\n#bwmo-lock-configurator .bwmo-lock-step{padding:34px 14px 38px;background:#fff;border-radius:32px;margin:14px 10px;box-shadow:0 10px 35px rgba(0,0,0,.045)}\n#bwmo-lock-configurator .bwmo-lock-step-head{margin-bottom:20px;text-align:center}\n#bwmo-lock-configurator .bwmo-lock-step-head h2{margin:0 auto 10px;max-width:350px;font-size:28px;line-height:1.06;letter-spacing:-.8px;font-weight:800}\n#bwmo-lock-configurator .bwmo-lock-preview-card{width:100%;height:360px;border-radius:28px;overflow:hidden;background:#f5f5f7;border:1px solid rgba(0,0,0,.06);display:flex;align-items:center;justify-content:center;margin-bottom:22px;position:relative}\n#bwmo-lock-configurator .bwmo-lock-preview-card img{width:100%;height:100%;object-fit:contain;object-position:center;border-radius:28px;transition:opacity .3s ease,transform .3s ease,filter .3s ease}\n#bwmo-lock-configurator .bwmo-lock-preview-card.is-empty img{display:none}\n#bwmo-lock-configurator .bwmo-lock-preview-card:not(.is-empty) .bwmo-lock-empty-preview-card{display:none}\n#bwmo-lock-configurator img.is-changing{opacity:0;transform:scale(.985);filter:blur(5px)}\n#bwmo-lock-configurator .bwmo-lock-empty-preview-card{width:100%;height:100%;min-height:360px;border-radius:28px;background:radial-gradient(circle at top, rgba(255,106,0,0.08), transparent 36%),linear-gradient(180deg,#fff 0%,#f5f5f7 100%);border:1px solid rgba(0,0,0,.06);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:34px 24px;box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}\n#bwmo-lock-configurator .bwmo-lock-empty-icon{width:88px;height:88px;border-radius:26px;background:#111;color:#fff;display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:800;letter-spacing:-.04em;margin-bottom:22px;box-shadow:0 18px 45px rgba(0,0,0,.16)}\n#bwmo-lock-configurator .bwmo-lock-empty-preview-card h3{margin:0 0 10px;font-size:28px;line-height:1.08;letter-spacing:-.05em;font-weight:800;color:#111}\n#bwmo-lock-configurator .bwmo-lock-empty-preview-card p{margin:0;max-width:320px;font-size:15px;line-height:1.45;color:#6e6e73;font-weight:500}\n#bwmo-lock-configurator .bwmo-lock-horizontal-scroll{display:flex;gap:12px;overflow-x:auto;padding:2px 0 14px;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-snap-type:x mandatory}\n#bwmo-lock-configurator .bwmo-lock-horizontal-scroll::-webkit-scrollbar{display:none}\n#bwmo-lock-configurator .bwmo-lock-design-card{border:none!important;background:transparent!important;padding:0!important;margin:0!important;text-align:center!important;scroll-snap-align:start;cursor:pointer;display:flex!important;flex-direction:column!important;align-items:center!important;gap:8px!important;flex:0 0 36%;min-width:112px}\n#bwmo-lock-configurator .bwmo-lock-thumb-frame{width:100%;height:124px;border:1.5px solid var(--line);border-radius:24px;overflow:hidden;background:#f5f5f7;display:flex;align-items:center;justify-content:center;position:relative;transition:border-color .22s ease,box-shadow .22s ease,opacity .22s ease}\n#bwmo-lock-configurator .bwmo-lock-design-card.active .bwmo-lock-thumb-frame{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue)}\n#bwmo-lock-configurator .bwmo-lock-design-card.active .bwmo-lock-thumb-frame:after{content:\"\u2713\";position:absolute;right:8px;bottom:8px;width:20px;height:20px;border-radius:50%;background:var(--orange);color:#fff;font-size:12px;font-weight:800;display:flex;align-items:center;justify-content:center}\n#bwmo-lock-configurator .bwmo-lock-design-card.is-unavailable{opacity:.45;cursor:not-allowed}\n#bwmo-lock-configurator .bwmo-lock-thumb-frame img{width:100%;height:100%;object-fit:cover;display:block;border-radius:22px}\n#bwmo-lock-configurator .bwmo-lock-thumb-label{display:block!important;width:100%!important;font-size:12px!important;font-weight:760!important;color:var(--text)!important;line-height:1.2!important;text-align:center!important}\n#bwmo-lock-configurator .bwmo-lock-feature-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\n#bwmo-lock-configurator .bwmo-lock-feature-grid div{background:#f5f5f7;border-radius:18px;padding:14px 12px;text-align:left;border:1px solid rgba(0,0,0,.05)}\n#bwmo-lock-configurator .bwmo-lock-feature-grid strong{display:block;font-size:13px;font-weight:800;margin-bottom:4px;color:var(--text);line-height:1.18}\n#bwmo-lock-configurator .bwmo-lock-feature-grid span{display:block;font-size:11px;line-height:1.28;color:var(--muted)}\n#bwmo-lock-configurator .bwmo-lock-summary-card{background:#f5f5f7;border-radius:26px;padding:18px;margin-bottom:18px}\n#bwmo-lock-configurator .bwmo-lock-summary-card div{display:flex;justify-content:space-between;gap:14px;padding:13px 0;border-bottom:1px solid rgba(0,0,0,.08)}\n#bwmo-lock-configurator .bwmo-lock-summary-card div:last-child{border-bottom:none}\n#bwmo-lock-configurator .bwmo-lock-summary-card span{color:var(--muted);font-size:13px}\n#bwmo-lock-configurator .bwmo-lock-summary-card strong{font-size:14px;text-align:right}\n#bwmo-lock-configurator .bwmo-lock-total strong{font-size:22px}\n#bwmo-lock-configurator .bwmo-lock-qty-control{display:flex!important;align-items:center!important;justify-content:flex-end!important;gap:10px!important}\n#bwmo-lock-configurator .bwmo-lock-qty-control button{width:32px;height:32px;border:none;border-radius:50%;background:#fff;color:#1d1d1f;font-size:20px;font-weight:800;line-height:1;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.08);cursor:pointer}\n#bwmo-lock-configurator .bwmo-lock-qty-control b{min-width:26px;text-align:center;font-size:16px;font-weight:800;color:#1d1d1f}\n#bwmo-lock-configurator .bwmo-lock-main-btn{width:100%;height:52px;border:none;border-radius:999px;background:#1d1d1f;color:#fff;font-size:16px;font-weight:760;cursor:pointer}\n#bwmo-lock-configurator .bwmo-lock-main-btn:disabled{opacity:.6;cursor:not-allowed}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar{position:fixed;left:0;right:0;bottom:0;z-index:999999;padding:12px 14px calc(12px + env(safe-area-inset-bottom));background:rgba(255,255,255,.88);-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px);border-top:1px solid rgba(0,0,0,.08);box-shadow:0 -12px 34px rgba(0,0,0,.08);display:flex;align-items:center;justify-content:space-between;gap:12px}\n#bwmo-lock-configurator .bwmo-lock-sticky-info{min-width:0;flex:1;text-align:left}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar span{display:block;font-size:11px;font-weight:750;color:var(--muted);line-height:1.1;margin-bottom:3px}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar strong{display:block;font-size:20px;line-height:1.05;font-weight:850;color:var(--text);white-space:nowrap}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar em{display:block;margin-top:3px;color:var(--muted);font-size:11px;line-height:1.15;font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar small{display:block;margin-top:3px;color:var(--orange);font-size:11px;line-height:1.15;font-weight:800;white-space:nowrap;overflow:visible;text-overflow:clip}\n#bwmo-lock-configurator .bwmo-lock-sticky-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:0 0 auto}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar button,#bwmo-lock-configurator .bwmo-lock-secondary-btn{height:44px;border-radius:999px;padding:0 16px;font-size:13px;font-weight:800;cursor:pointer;border:1px solid rgba(0,0,0,.12);white-space:nowrap;background:#fff;color:var(--text)}\n#bwmo-lock-configurator #bwmo-lock-add-selection{border:none;color:#fff;background:var(--orange);box-shadow:0 10px 24px rgba(255,107,0,.23)}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar.is-added #bwmo-lock-add-selection{background:#fff;color:var(--text);border:1px solid rgba(0,0,0,.14);box-shadow:none}\n#bwmo-lock-configurator .bwmo-lock-bottom-bar.is-added #bwmo-lock-view-selection{background:var(--orange);color:#fff;border:none;box-shadow:0 10px 24px rgba(255,107,0,.23)}\n#bwmo-lock-configurator .bwmo-lock-drawer-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.28);opacity:0;pointer-events:none;z-index:1000000;transition:opacity .26s ease}\n#bwmo-lock-configurator .bwmo-lock-drawer-backdrop.open{opacity:1;pointer-events:auto}\n#bwmo-lock-configurator .bwmo-lock-selection-drawer{position:fixed;left:0;right:0;bottom:0;z-index:1000001;height:min(82svh,720px);background:#fff;border-radius:30px 30px 0 0;box-shadow:0 -24px 70px rgba(0,0,0,.22);transform:translateY(105%);transition:transform .34s cubic-bezier(.2,.85,.25,1);padding:10px 14px calc(16px + env(safe-area-inset-bottom));display:flex;flex-direction:column}\n#bwmo-lock-configurator .bwmo-lock-selection-drawer.open{transform:translateY(0)}\n#bwmo-lock-configurator .bwmo-lock-drawer-handle{width:44px;height:5px;border-radius:99px;background:#d2d2d7;margin:4px auto 14px;flex:0 0 auto}\n#bwmo-lock-configurator .bwmo-lock-drawer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:0 4px 14px;border-bottom:1px solid rgba(0,0,0,.08);flex:0 0 auto}\n#bwmo-lock-configurator .bwmo-lock-drawer-head span{display:block;color:var(--muted);font-size:12px;font-weight:750;margin-bottom:6px}\n#bwmo-lock-configurator .bwmo-lock-drawer-head h3{margin:0;color:var(--text);font-size:24px;line-height:1.05;letter-spacing:-.6px;font-weight:850}\n#bwmo-lock-configurator .bwmo-lock-drawer-head em{display:block;margin-top:8px;color:var(--muted);font-size:12px;font-weight:750;font-style:normal}\n#bwmo-lock-configurator .bwmo-lock-drawer-head button{width:34px;height:34px;border-radius:50%;border:none;background:#f5f5f7;color:var(--text);font-size:24px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer}\n#bwmo-lock-configurator .bwmo-lock-selection-items{overflow:auto;-webkit-overflow-scrolling:touch;padding:14px 0;flex:1 1 auto}\n#bwmo-lock-configurator .bwmo-lock-empty-selection{margin:0;color:var(--muted);font-size:13px;line-height:1.35;background:#f5f5f7;padding:16px;border-radius:20px}\n#bwmo-lock-configurator .bwmo-lock-selection-item{background:#f5f5f7;border-radius:22px;padding:15px;margin-bottom:12px}\n#bwmo-lock-configurator .bwmo-lock-selection-item-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px}\n#bwmo-lock-configurator .bwmo-lock-selection-item-title{margin:0;font-size:15px;line-height:1.2;font-weight:800;color:var(--text)}\n#bwmo-lock-configurator .bwmo-lock-selection-item-meta{display:block;margin-top:5px;color:var(--muted);font-size:12px;line-height:1.35}\n#bwmo-lock-configurator .bwmo-lock-selection-item-price{font-size:15px;font-weight:850;color:var(--text);white-space:nowrap}\n#bwmo-lock-configurator .bwmo-lock-selection-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid rgba(0,0,0,.07);padding-top:12px}\n#bwmo-lock-configurator .bwmo-lock-remove-item{border:none;background:transparent;color:#bf4800;font-size:13px;font-weight:700;cursor:pointer;padding:6px 0}\n#bwmo-lock-configurator .bwmo-lock-drawer-footer{flex:0 0 auto;background:#fff;border-top:1px solid rgba(0,0,0,.08);padding-top:12px}\n#bwmo-lock-configurator .bwmo-lock-selection-total{display:flex;align-items:center;justify-content:space-between;padding:0 0 12px}\n#bwmo-lock-configurator .bwmo-lock-selection-total span{color:var(--muted);font-size:14px;font-weight:650}\n#bwmo-lock-configurator .bwmo-lock-selection-total strong{color:var(--text);font-size:24px;font-weight:850}\n#bwmo-lock-configurator .bwmo-lock-drawer-footer .bwmo-lock-secondary-btn{width:100%;margin-top:10px;height:48px}\n@media(max-width:768px){#bwmo-lock-configurator .bwmo-lock-empty-preview-card{min-height:340px;border-radius:26px;padding:30px 20px}#bwmo-lock-configurator .bwmo-lock-empty-icon{width:76px;height:76px;border-radius:22px;font-size:15px}#bwmo-lock-configurator .bwmo-lock-empty-preview-card h3{font-size:25px}#bwmo-lock-configurator .bwmo-lock-empty-preview-card p{font-size:14px}}\n@media(max-width:380px){#bwmo-lock-configurator .bwmo-lock-bottom-bar{padding-left:10px;padding-right:10px;gap:8px}#bwmo-lock-configurator .bwmo-lock-bottom-bar button{padding:0 12px;font-size:12px}#bwmo-lock-configurator .bwmo-lock-bottom-bar strong{font-size:18px}}\n<\/style>\n\n<script>\n(function(){\n  const designs = [{\"code\":\"BWMO AI LOCK A\",\"product\":\"https:\\\/\\\/www.bwmo.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/01-800x800.jpg\",\"scene\":\"https:\\\/\\\/www.bwmo.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/01-800x800.jpg\",\"price\":0,\"available\":true},{\"code\":\"BWMO AI LOCK B\",\"product\":\"https:\\\/\\\/www.bwmo.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/02-800x800.jpg\",\"scene\":\"https:\\\/\\\/www.bwmo.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/02-800x800.jpg\",\"price\":0,\"available\":true},{\"code\":\"BWMO AI LOCK C\",\"product\":\"https:\\\/\\\/www.bwmo.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/03-1-800x800.jpg\",\"scene\":\"https:\\\/\\\/www.bwmo.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/03-1-800x800.jpg\",\"price\":0,\"available\":true}];\n  const fallback = \"https:\/\/via.placeholder.com\/1400x900\/f5f5f7\/1d1d1f?text=BWMO+AI+Smart+Lock\";\n  const bwmoLockCart = {\n    ajaxUrl: \"https:\/\/www.bwmo.com\/wp-admin\/admin-ajax.php\",\n    nonce: \"b5d0e53d6d\",\n    productId: 30918  };\n\n  const state = {design:\"\",price:0,selectedDesign:null,quantity:1};\n  let selection = [];\n  let stickyMode = \"current\";\n\n  const previewImage = document.getElementById(\"bwmo-lock-preview\");\n  const designsWrap = document.getElementById(\"bwmo-lock-designs\");\n  const sumDesign = document.getElementById(\"lock-sum-design\");\n  const sumTotal = document.getElementById(\"lock-sum-total\");\n  const sumUnitTotal = document.getElementById(\"lock-sum-unit-total\");\n  const currentQty = document.getElementById(\"bwmo-lock-current-qty\");\n  const currentQtyMinus = document.getElementById(\"bwmo-lock-current-qty-minus\");\n  const currentQtyPlus = document.getElementById(\"bwmo-lock-current-qty-plus\");\n  const stickyBar = document.getElementById(\"bwmo-lock-sticky-bar\");\n  const stickyLabel = document.getElementById(\"bwmo-lock-sticky-label\");\n  const bottomTotal = document.getElementById(\"bwmo-lock-bottom-total\");\n  const stickyMeta = document.getElementById(\"bwmo-lock-sticky-meta\");\n  const addSelectionBtn = document.getElementById(\"bwmo-lock-add-selection\");\n  const viewSelectionBtn = document.getElementById(\"bwmo-lock-view-selection\");\n  const drawer = document.getElementById(\"bwmo-lock-selection-drawer\");\n  const drawerBackdrop = document.getElementById(\"bwmo-lock-drawer-backdrop\");\n  const closeSelectionBtn = document.getElementById(\"bwmo-lock-close-selection\");\n  const drawerContinueBtn = document.getElementById(\"bwmo-lock-drawer-continue\");\n  const selectionItemsWrap = document.getElementById(\"bwmo-lock-selection-items\");\n  const selectionTotalEl = document.getElementById(\"bwmo-lock-selection-total\");\n  const selectionCountEl = document.getElementById(\"bwmo-lock-selection-count\");\n  const addCartBtn = document.getElementById(\"bwmo-lock-add-cart\");\n\n  function money(num){ return \"\u20b5\" + Number(num || 0).toLocaleString(); }\n  function unitTotal(){ return Number(state.price || 0); }\n  function total(){ return unitTotal() * Number(state.quantity || 1); }\n  function selectionTotal(){ return selection.reduce((sum,item)=>sum+(Number(item.unitPrice||0)*Number(item.quantity||1)),0); }\n  function selectionCount(){ return selection.reduce((sum,item)=>sum+Number(item.quantity||0),0); }\n  function preload(src){ if(src){ const img = new Image(); img.src = src; } }\n  function scrollToSummary(delay = 260){\n    setTimeout(()=>{\n      const el = document.getElementById(\"bwmo-lock-summary-section\");\n      if(el) el.scrollIntoView({behavior:\"smooth\",block:\"center\"});\n    }, delay);\n  }\n\n  function fadeSwap(imgEl, src){\n    if(!imgEl || !src) return;\n    preload(src);\n    imgEl.classList.add(\"is-changing\");\n    setTimeout(()=>{\n      imgEl.src = src;\n      imgEl.onerror = function(){ imgEl.src = fallback; };\n      requestAnimationFrame(()=>imgEl.classList.remove(\"is-changing\"));\n    },160);\n  }\n\n  function updateImages(){\n    if(!state.selectedDesign) return;\n    const src = state.selectedDesign.scene || state.selectedDesign.product;\n    const previewWrap = document.querySelector(\"#bwmo-lock-configurator .bwmo-lock-preview-card\");\n    if(previewWrap) previewWrap.classList.remove(\"is-empty\");\n    fadeSwap(previewImage, src);\n  }\n\n  function updateSummary(){\n    sumDesign.textContent = state.design || \"-\";\n    sumTotal.textContent = money(total());\n    sumUnitTotal.textContent = money(unitTotal());\n    currentQty.textContent = state.quantity;\n    updateStickyBar();\n  }\n\n  function updateStickyBar(){\n    if(stickyMode === \"added\") return;\n    const count = selectionCount();\n    stickyBar.classList.remove(\"is-added\");\n    if(count > 0){\n      stickyLabel.textContent = \"Selection Total\";\n      bottomTotal.textContent = money(selectionTotal());\n      stickyMeta.textContent = count + (count === 1 ? \" lock selected\" : \" locks selected\");\n    }else{\n      stickyLabel.textContent = \"Current Subtotal\";\n      bottomTotal.textContent = money(total());\n      stickyMeta.textContent = state.design ? \"Ready to buy now\" : \"Choose a smart lock first\";\n    }\n    addSelectionBtn.textContent = \"BUY NOW\";\n    viewSelectionBtn.textContent = \"View Selection\";\n  }\n\n  function openSelectionDrawer(){\n    drawer.classList.add(\"open\");\n    drawerBackdrop.classList.add(\"open\");\n    drawer.setAttribute(\"aria-hidden\",\"false\");\n  }\n\n  function closeSelectionDrawer(){\n    drawer.classList.remove(\"open\");\n    drawerBackdrop.classList.remove(\"open\");\n    drawer.setAttribute(\"aria-hidden\",\"true\");\n  }\n\n  function continueChoosing(){\n    closeSelectionDrawer();\n    state.quantity = 1;\n    stickyMode = \"current\";\n    updateSummary();\n    setTimeout(()=>{\n      const el = document.getElementById(\"bwmo-lock-step-design\");\n      if(el) el.scrollIntoView({behavior:\"smooth\",block:\"start\"});\n    },80);\n  }\n\n  function showAddedState(item){\n    stickyMode = \"added\";\n    stickyBar.classList.add(\"is-added\");\n    stickyLabel.textContent = \"Added to Selection\";\n    bottomTotal.textContent = item.design;\n    stickyMeta.textContent = \"Qty \" + item.quantity + \" \u00b7 \" + money(Number(item.unitPrice || 0) * Number(item.quantity || 1));\n    addSelectionBtn.textContent = \"Continue\";\n    viewSelectionBtn.textContent = \"View Selection\";\n  }\n\n  function changeDesign(item){\n    if(item.available === false) return;\n    stickyMode = \"current\";\n    state.design = item.code;\n    state.price = Number(item.price || 0);\n    if(!state.price) state.price = Number(1700);\n    state.selectedDesign = item;\n    updateImages();\n    updateSummary();\n    scrollToSummary();\n  }\n\n  function addCurrentToSelection(){\n    if(!state.design){ alert(\"Please choose a smart lock first.\"); return; }\n    const key = state.design;\n    let item = selection.find(x => x.key === key);\n    if(item){\n      item.quantity += Number(state.quantity || 1);\n    }else{\n      item = {key:key,design:state.design,quantity:Number(state.quantity || 1),unitPrice:unitTotal(),image:(state.selectedDesign ? (state.selectedDesign.product || state.selectedDesign.scene || \"\") : \"\")};\n      selection.push(item);\n    }\n    renderSelection();\n    showAddedState(item);\n    state.quantity = 1;\n    currentQty.textContent = state.quantity;\n  }\n\n  function changeSelectionQty(index, delta){\n    if(!selection[index]) return;\n    selection[index].quantity = Math.max(1, Number(selection[index].quantity || 1) + delta);\n    renderSelection();\n  }\n\n  function removeSelectionItem(index){\n    selection.splice(index,1);\n    stickyMode = \"current\";\n    renderSelection();\n  }\n\n  function renderSelection(){\n    if(!selection.length){\n      selectionItemsWrap.innerHTML = '<p class=\"bwmo-lock-empty-selection\">Your selection is empty. Add a smart lock to begin.<\/p>';\n    }else{\n      selectionItemsWrap.innerHTML = selection.map((item,index)=>{\n        const subtotal = Number(item.unitPrice || 0) * Number(item.quantity || 1);\n        return `\n          <div class=\"bwmo-lock-selection-item\">\n            <div class=\"bwmo-lock-selection-item-top\">\n              <div>\n                <p class=\"bwmo-lock-selection-item-title\">${item.design}<\/p>\n                <span class=\"bwmo-lock-selection-item-meta\">Unit Price: ${money(item.unitPrice)}<\/span>\n              <\/div>\n              <strong class=\"bwmo-lock-selection-item-price\">${money(subtotal)}<\/strong>\n            <\/div>\n            <div class=\"bwmo-lock-selection-actions\">\n              <strong class=\"bwmo-lock-qty-control\">\n                <button type=\"button\" class=\"bwmo-lock-selection-minus\" data-index=\"${index}\">-<\/button>\n                <b>${item.quantity}<\/b>\n                <button type=\"button\" class=\"bwmo-lock-selection-plus\" data-index=\"${index}\">+<\/button>\n              <\/strong>\n              <button type=\"button\" class=\"bwmo-lock-remove-item\" data-index=\"${index}\">Remove<\/button>\n            <\/div>\n          <\/div>`;\n      }).join(\"\");\n    }\n\n    const count = selectionCount();\n    selectionCountEl.textContent = count + (count === 1 ? \" item\" : \" items\");\n    selectionTotalEl.textContent = money(selectionTotal());\n\n    document.querySelectorAll(\"#bwmo-lock-configurator .bwmo-lock-selection-minus\").forEach(btn=>btn.addEventListener(\"click\",()=>changeSelectionQty(Number(btn.dataset.index),-1)));\n    document.querySelectorAll(\"#bwmo-lock-configurator .bwmo-lock-selection-plus\").forEach(btn=>btn.addEventListener(\"click\",()=>changeSelectionQty(Number(btn.dataset.index),1)));\n    document.querySelectorAll(\"#bwmo-lock-configurator .bwmo-lock-remove-item\").forEach(btn=>btn.addEventListener(\"click\",()=>removeSelectionItem(Number(btn.dataset.index))));\n\n    if(stickyMode !== \"added\") updateStickyBar();\n  }\n\n  function renderDesigns(){\n    designsWrap.innerHTML = \"\";\n    if(!designs.length){\n      designsWrap.innerHTML = \"<p style='color:#6e6e73;font-size:13px;'>No smart lock models available.<\/p>\";\n      return;\n    }\n\n    designs.forEach((item)=>{\n      preload(item.product);\n      preload(item.scene);\n\n      const card = document.createElement(\"button\");\n      card.type = \"button\";\n      card.className = \"bwmo-lock-design-card\" + (item.available === false ? \" is-unavailable\" : \"\");\n      card.innerHTML = `<div class=\"bwmo-lock-thumb-frame\"><img decoding=\"async\" src=\"${item.product || item.scene || fallback}\" alt=\"${item.code}\" onerror=\"this.onerror=null;this.src='${fallback}'\"><\/div><span class=\"bwmo-lock-thumb-label\">${String(item.code || '').toUpperCase()}<\/span>`;\n      card.addEventListener(\"click\",()=>{\n        if(item.available === false) return;\n        document.querySelectorAll(\"#bwmo-lock-configurator .bwmo-lock-design-card\").forEach(el=>el.classList.remove(\"active\"));\n        card.classList.add(\"active\");\n        changeDesign(item);\n      });\n      designsWrap.appendChild(card);\n    });\n  }\n\n  async function addSelectionToCart(){\n    if(!selection.length){\n      alert(\"Your selection is empty. Please add at least one smart lock.\");\n      return;\n    }\n\n    addCartBtn.disabled = true;\n    addCartBtn.textContent = \"Adding...\";\n\n    const form = new FormData();\n    form.append(\"action\", \"bwmo_lock_add_to_cart\");\n    form.append(\"nonce\", bwmoLockCart.nonce);\n    form.append(\"product_id\", bwmoLockCart.productId);\n    form.append(\"items\", JSON.stringify(selection));\n\n    try{\n      const res = await fetch(bwmoLockCart.ajaxUrl, {method:\"POST\",credentials:\"same-origin\",body:form});\n      const data = await res.json();\n\n      if(!data.success){\n        alert(data.data && data.data.message ? data.data.message : \"Could not add to cart.\");\n        addCartBtn.disabled = false;\n        addCartBtn.textContent = \"Add Selection to Cart\";\n        return;\n      }\n\n      window.location.href = data.data.cart_url;\n    }catch(e){\n      alert(\"Network error. Please try again.\");\n      addCartBtn.disabled = false;\n      addCartBtn.textContent = \"Add Selection to Cart\";\n    }\n  }\n\n  currentQtyMinus.addEventListener(\"click\",()=>{stickyMode=\"current\";state.quantity=Math.max(1,Number(state.quantity||1)-1);updateSummary();});\n  currentQtyPlus.addEventListener(\"click\",()=>{stickyMode=\"current\";state.quantity=Math.min(99,Number(state.quantity||1)+1);updateSummary();});\n  addSelectionBtn.addEventListener(\"click\",()=>{if(stickyMode === \"added\"){continueChoosing();return;}addCurrentToSelection();});\n  viewSelectionBtn.addEventListener(\"click\",()=>{stickyMode=\"current\";updateStickyBar();openSelectionDrawer();});\n  closeSelectionBtn.addEventListener(\"click\", closeSelectionDrawer);\n  drawerBackdrop.addEventListener(\"click\", closeSelectionDrawer);\n  drawerContinueBtn.addEventListener(\"click\", continueChoosing);\n  addCartBtn.addEventListener(\"click\", addSelectionToCart);\n\n  renderDesigns();\n  renderSelection();\n  updateSummary();\n})();\n<\/script>\n\n<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-31080","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/pages\/31080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/comments?post=31080"}],"version-history":[{"count":4,"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/pages\/31080\/revisions"}],"predecessor-version":[{"id":31312,"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/pages\/31080\/revisions\/31312"}],"wp:attachment":[{"href":"https:\/\/www.bwmo.com\/index.php\/wp-json\/wp\/v2\/media?parent=31080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}