{"id":103276,"date":"2026-07-09T05:31:29","date_gmt":"2026-07-09T10:31:29","guid":{"rendered":"https:\/\/sirixmonitoring.com\/?page_id=103276"},"modified":"2026-07-09T11:19:19","modified_gmt":"2026-07-09T16:19:19","slug":"cost-calculator","status":"publish","type":"page","link":"https:\/\/sirixmonitoring.com\/fr-ca\/cost-calculator\/","title":{"rendered":"Cost calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"103276\" class=\"elementor elementor-103276\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-11254a89 e-flex e-con-boxed e-con e-parent\" data-id=\"11254a89\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b197ed7 elementor-widget elementor-widget-html\" data-id=\"b197ed7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n<style>\n.sirix-estimator-widget{display:block;width:100%;\n  --paper:#FFFFFF; --mist:#F5F5F7; --mist-2:#FAFAFB;\n  --hairline:rgba(0,0,0,0.09); --hairline-2:rgba(0,0,0,0.06);\n  --ink:#1A1A1A; --ink-2:#2E2E30; --gray:#6E6E73; --gray-faint:#A1A1A6;\n  --accent:#41C5A0; --accent-deep:#0E8F6F; --accent-soft:rgba(65,197,160,0.10);\n  --accent-line:rgba(65,197,160,0.32);\n  --ff:\"Montserrat\",-apple-system,BlinkMacSystemFont,system-ui,sans-serif;\n  --maxw:900px;\n  --r-sm:10px; --r-md:16px; --r-lg:22px; --r-pill:980px;\n  --shadow-rest:0 1px 2px rgba(0,0,0,0.04);\n  --shadow-card:0 12px 40px rgba(0,0,0,0.09);\n  --t-fast:.16s ease; --t-base:.3s cubic-bezier(.4,0,.2,1);\n}.sirix-estimator-widget *{margin:0;padding:0;box-sizing:border-box;}.sirix-estimator-widget{font-family:var(--ff);background:var(--mist);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.5;}.sirix-estimator-widget button{font-family:inherit;cursor:pointer;}.sirix-estimator-widget svg{display:block;}\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 SHELL \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/.sirix-estimator-widget .estimator{max-width:var(--maxw);margin:0 auto;padding:10px;}.sirix-estimator-widget .est-card{background:var(--paper);border:1px solid var(--hairline);border-radius:var(--r-lg);box-shadow:var(--shadow-card);overflow:hidden;}\/* header + progress *\/.sirix-estimator-widget .est-top{padding:clamp(24px,4vw,34px) clamp(24px,4vw,44px) 0;}.sirix-estimator-widget .est-brand{display:flex;align-items:center;gap:11px;margin-bottom:22px;}.sirix-estimator-widget .est-brand svg{height:19px;color:var(--ink);}.sirix-estimator-widget .est-brand .est-brand-logo{height:19px;width:auto;max-width:72px;display:block;object-fit:contain;}.sirix-estimator-widget .est-brand b{font-size:12px;letter-spacing:0.04em;font-weight:600;color:var(--gray);text-transform:uppercase;}.sirix-estimator-widget .prog-meta{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px;}.sirix-estimator-widget .prog-step{font-size:12.5px;font-weight:700;letter-spacing:0.03em;color:var(--accent-deep);text-transform:uppercase;white-space:nowrap;}.sirix-estimator-widget .prog-pct{font-size:12.5px;font-weight:600;color:var(--gray-faint);white-space:nowrap;padding-left:12px;}.sirix-estimator-widget .prog-track{height:6px;background:var(--mist);border-radius:6px;overflow:hidden;}.sirix-estimator-widget .prog-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-deep));border-radius:6px;width:20%;transition:width .45s cubic-bezier(.4,0,.2,1);}\/* body *\/.sirix-estimator-widget .est-body{padding:clamp(24px,4vw,40px) clamp(24px,4vw,44px);}.sirix-estimator-widget .step{display:none;animation:fade .4s ease;}.sirix-estimator-widget .step.active{display:block;}@keyframes fade{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:none;}}.sirix-estimator-widget .step-q{font-size:clamp(23px,3.4vw,32px);font-weight:700;letter-spacing:-0.02em;line-height:1.1;margin-bottom:8px;}.sirix-estimator-widget .step-sub{font-size:15px;color:var(--gray);margin-bottom:26px;line-height:1.55;max-width:60ch;}\/* option grid (cards) *\/.sirix-estimator-widget .opt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;}.sirix-estimator-widget .opt{position:relative;display:flex;align-items:center;gap:13px;text-align:left;background:var(--paper);border:1.5px solid var(--hairline);border-radius:var(--r-md);padding:17px 18px;transition:all var(--t-fast);width:100%;}.sirix-estimator-widget .opt:hover{border-color:var(--accent-line);background:var(--mist-2);}.sirix-estimator-widget .opt.sel{border-color:var(--accent);background:var(--accent-soft);}\/* per-card accent colors (step 1) *\/.sirix-estimator-widget .opt[data-tone]{--tone:var(--accent);--tone-soft:var(--accent-soft);}.sirix-estimator-widget .opt[data-tone=\"blue\"]{--tone:#2176AE;--tone-soft:rgba(33,118,174,0.10);}.sirix-estimator-widget .opt[data-tone=\"amber\"]{--tone:#D98A26;--tone-soft:rgba(217,138,38,0.12);}.sirix-estimator-widget .opt[data-tone=\"violet\"]{--tone:#7C5CBF;--tone-soft:rgba(124,92,191,0.10);}.sirix-estimator-widget .opt[data-tone=\"orange\"]{--tone:#E5683C;--tone-soft:rgba(229,104,60,0.10);}.sirix-estimator-widget .opt[data-tone=\"teal\"]{--tone:#2FA98A;--tone-soft:rgba(47,169,138,0.10);}.sirix-estimator-widget .opt[data-tone=\"indigo\"]{--tone:#4B5BC4;--tone-soft:rgba(75,91,196,0.10);}.sirix-estimator-widget .opt[data-tone=\"rose\"]{--tone:#C2477E;--tone-soft:rgba(194,71,126,0.10);}.sirix-estimator-widget .opt[data-tone=\"slate\"]{--tone:#556070;--tone-soft:rgba(85,96,112,0.10);}.sirix-estimator-widget .opt[data-tone] .ic{background:var(--tone-soft);}.sirix-estimator-widget .opt[data-tone] .ic svg{stroke:var(--tone);}.sirix-estimator-widget .opt[data-tone]:hover{border-color:var(--tone);background:var(--tone-soft);}.sirix-estimator-widget .opt[data-tone].sel{border-color:var(--tone);background:var(--tone-soft);}.sirix-estimator-widget .opt[data-tone].sel .ic{background:var(--tone);}.sirix-estimator-widget .opt[data-tone].sel .ic svg{stroke:#fff;}.sirix-estimator-widget .opt[data-tone].sel .chk{background:var(--tone);border-color:var(--tone);}.sirix-estimator-widget .opt .ic{flex:none;width:42px;height:42px;border-radius:11px;background:var(--mist);display:flex;align-items:center;justify-content:center;transition:all var(--t-fast);}.sirix-estimator-widget .opt.sel .ic{background:var(--accent);}.sirix-estimator-widget .opt .ic svg{width:22px;height:22px;stroke:var(--accent-deep);stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round;transition:stroke var(--t-fast);}.sirix-estimator-widget .opt.sel .ic svg{stroke:#fff;}.sirix-estimator-widget .opt .lbl{min-width:0;}.sirix-estimator-widget .opt .lbl b{display:block;font-size:15px;font-weight:600;color:var(--ink);line-height:1.25;}.sirix-estimator-widget .opt .lbl span{display:block;font-size:12.5px;color:var(--gray);margin-top:2px;line-height:1.35;}.sirix-estimator-widget .opt .chk{position:absolute;top:12px;right:12px;width:20px;height:20px;border-radius:50%;border:1.5px solid var(--hairline);display:flex;align-items:center;justify-content:center;opacity:0;transition:all var(--t-fast);}.sirix-estimator-widget .opt.sel .chk{opacity:1;background:var(--accent);border-color:var(--accent);}.sirix-estimator-widget .opt .chk svg{width:12px;height:12px;stroke:#fff;stroke-width:2.6;fill:none;stroke-linecap:round;stroke-linejoin:round;}.sirix-estimator-widget .multi-hint{font-size:13px;color:var(--gray-faint);margin-bottom:18px;font-weight:500;}\/* service checkbox (step 2, no icons) *\/.sirix-estimator-widget .opt .chkbox{flex:none;width:20px;height:20px;border-radius:7px;border:1.8px solid var(--hairline);display:flex;align-items:center;justify-content:center;transition:all var(--t-fast);}.sirix-estimator-widget .opt .chkbox svg{width:12.5px;height:12.5px;stroke:#fff;stroke-width:3.2;fill:none;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.6);transition:all var(--t-fast);}.sirix-estimator-widget .opt.sel .chkbox{background:var(--accent);border-color:var(--accent);}.sirix-estimator-widget .opt.sel .chkbox svg{opacity:1;transform:scale(1);}\/* per-site cards (setup step) *\/.sirix-estimator-widget .sites-wrap{display:flex;flex-direction:column;gap:14px;margin-bottom:30px;}.sirix-estimator-widget .site-card{display:grid;grid-template-columns:minmax(0,0.85fr) minmax(0,1.15fr);gap:20px;align-items:center;border:1.5px solid var(--hairline);border-radius:var(--r-md);padding:18px 20px;background:var(--mist-2);}@media(max-width:560px){.sirix-estimator-widget .site-card{grid-template-columns:1fr;gap:16px;}}\/* tier options (intercom \/ gate) *\/.sirix-estimator-widget .tier-seg{display:flex;flex-direction:column;gap:10px;}.sirix-estimator-widget .tier-opt{display:flex;align-items:center;justify-content:space-between;gap:16px;text-align:left;background:var(--paper);border:1.5px solid var(--hairline);border-radius:var(--r-md);padding:16px 20px;transition:all var(--t-fast);}.sirix-estimator-widget .tier-opt:hover{border-color:var(--accent-line);}.sirix-estimator-widget .tier-opt.sel{border-color:var(--accent);background:var(--accent-soft);}.sirix-estimator-widget .tier-vol{font-size:15px;font-weight:600;color:var(--ink);}.sirix-estimator-widget .tier-price{font-size:19px;font-weight:800;color:var(--accent-deep);white-space:nowrap;font-variant-numeric:tabular-nums;}.sirix-estimator-widget .tier-price small{font-size:12px;font-weight:600;color:var(--gray);}.sirix-estimator-widget .site-card .inp label{font-size:13px;font-weight:600;color:var(--ink-2);margin-bottom:7px;}.sirix-estimator-widget .site-card .inp input{font-family:inherit;font-size:15px;color:var(--ink);background:var(--paper);border:1.5px solid var(--hairline);border-radius:var(--r-sm);padding:12px 14px;width:100%;transition:border-color var(--t-fast);}.sirix-estimator-widget .site-card .inp input:focus{outline:none;border-color:var(--accent);}\/* specifics controls *\/.sirix-estimator-widget .field{margin-bottom:30px;}.sirix-estimator-widget .field:last-child{margin-bottom:0;}.sirix-estimator-widget .field-label{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px;}.sirix-estimator-widget .field-label b{font-size:16px;font-weight:600;color:var(--ink);}.sirix-estimator-widget .field-label .val{font-size:22px;font-weight:800;color:var(--accent-deep);font-variant-numeric:tabular-nums;letter-spacing:-0.01em;}.sirix-estimator-widget .field-label .val small{font-size:13px;font-weight:600;color:var(--gray);}.sirix-estimator-widget input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:6px;background:var(--mist);outline:none;}.sirix-estimator-widget input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:26px;height:26px;border-radius:50%;background:var(--accent);border:3px solid #fff;box-shadow:0 2px 8px rgba(14,143,111,0.35);cursor:pointer;transition:transform var(--t-fast);}.sirix-estimator-widget input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.12);}.sirix-estimator-widget input[type=range]::-moz-range-thumb{width:26px;height:26px;border-radius:50%;background:var(--accent);border:3px solid #fff;box-shadow:0 2px 8px rgba(14,143,111,0.35);cursor:pointer;}.sirix-estimator-widget .range-ends{display:flex;justify-content:space-between;font-size:12px;color:var(--gray-faint);margin-top:8px;}.sirix-estimator-widget .stepper{display:inline-flex;align-items:center;gap:0;border:1.5px solid var(--hairline);border-radius:var(--r-pill);overflow:hidden;}.sirix-estimator-widget .stepper button{width:46px;height:46px;background:var(--paper);border:none;font-size:22px;font-weight:600;color:var(--accent-deep);display:flex;align-items:center;justify-content:center;transition:background var(--t-fast);}.sirix-estimator-widget .stepper button:hover{background:var(--accent-soft);}.sirix-estimator-widget .stepper button:disabled{color:var(--gray-faint);cursor:not-allowed;}.sirix-estimator-widget .stepper .num{min-width:64px;text-align:center;font-size:19px;font-weight:800;font-variant-numeric:tabular-nums;}.sirix-estimator-widget .seg{display:flex;gap:10px;flex-wrap:wrap;}.sirix-estimator-widget .seg button{flex:1;min-width:130px;text-align:left;background:var(--paper);border:1.5px solid var(--hairline);border-radius:var(--r-md);padding:15px 17px;transition:all var(--t-fast);}.sirix-estimator-widget .seg button:hover{border-color:var(--accent-line);}.sirix-estimator-widget .seg button.sel{border-color:var(--accent);background:var(--accent-soft);}.sirix-estimator-widget .seg button b{display:block;font-size:14.5px;font-weight:600;color:var(--ink);}.sirix-estimator-widget .seg button span{display:block;font-size:12.5px;color:var(--gray);margin-top:3px;}.sirix-estimator-widget .selectwrap{position:relative;}.sirix-estimator-widget .selectwrap select{width:100%;font-family:inherit;font-size:15px;font-weight:500;color:var(--ink);background:var(--paper);border:1.5px solid var(--hairline);border-radius:var(--r-md);padding:15px 44px 15px 17px;appearance:none;cursor:pointer;transition:border-color var(--t-fast);}.sirix-estimator-widget .selectwrap select:focus{outline:none;border-color:var(--accent);}.sirix-estimator-widget .selectwrap .caret{position:absolute;right:16px;top:50%;transform:translateY(-50%);pointer-events:none;color:var(--gray-faint);}\/* estimate *\/.sirix-estimator-widget .est-hero{background:linear-gradient(180deg,rgba(65,197,160,0.14),rgba(65,197,160,0.06));border:1px solid var(--accent-line);border-radius:var(--r-lg);padding:clamp(28px,4vw,44px);}.sirix-estimator-widget .est-context{font-size:clamp(17px,2.2vw,21px);font-weight:500;color:var(--ink-2);line-height:1.4;margin-bottom:18px;}.sirix-estimator-widget .est-context b{font-weight:700;color:var(--ink);}.sirix-estimator-widget .est-bigrange{font-size:clamp(40px,7.5vw,64px);font-weight:800;letter-spacing:-0.03em;line-height:0.98;color:var(--accent-deep);}.sirix-estimator-widget .est-savings{font-size:clamp(14px,1.9vw,16px);font-style:italic;color:var(--accent-deep);line-height:1.5;margin-top:20px;}.sirix-estimator-widget .est-savings b{font-weight:700;}.sirix-estimator-widget .incl{margin-top:clamp(28px,4vw,40px);}.sirix-estimator-widget .incl h3{font-size:clamp(18px,2.4vw,22px);font-weight:700;letter-spacing:-0.01em;margin-bottom:20px;color:#1a1a1a;}.sirix-estimator-widget .incl ul{list-style:none;display:flex;flex-direction:column;gap:16px;}.sirix-estimator-widget .incl li{display:flex;align-items:flex-start;gap:14px;font-size:15.5px;color:var(--ink-2);line-height:1.45;}.sirix-estimator-widget .incl li .tick{flex:none;width:26px;height:26px;border-radius:50%;background:var(--accent);display:flex;align-items:center;justify-content:center;margin-top:1px;}.sirix-estimator-widget .incl li .tick svg{width:15px;height:15px;stroke:#fff;stroke-width:2.6;fill:none;stroke-linecap:round;stroke-linejoin:round;}.sirix-estimator-widget .est-disc{font-size:12.5px;color:var(--gray-faint);line-height:1.6;margin-top:26px;max-width:100% !important;}.sirix-estimator-widget .est-price{font-size:clamp(46px,9vw,76px);font-weight:800;letter-spacing:-0.03em;line-height:0.95;color:var(--ink);}.sirix-estimator-widget .est-price .cur{font-size:0.45em;font-weight:700;color:var(--gray);vertical-align:top;}.sirix-estimator-widget .est-price .per{font-size:0.26em;font-weight:600;color:var(--gray);letter-spacing:0;}.sirix-estimator-widget .est-range{font-size:15px;color:var(--gray);margin-top:14px;}.sirix-estimator-widget .est-setup{font-size:14px;color:var(--gray-faint);margin-top:6px;}.sirix-estimator-widget .est-break{margin-top:28px;text-align:left;background:var(--mist-2);border:1px solid var(--hairline);border-radius:var(--r-md);overflow:hidden;}.sirix-estimator-widget .brk-row{display:flex;justify-content:space-between;align-items:center;padding:13px 20px;border-bottom:1px solid var(--hairline-2);font-size:14px;}.sirix-estimator-widget .brk-row:last-child{border-bottom:none;}.sirix-estimator-widget .brk-row .k{color:var(--gray);}.sirix-estimator-widget .brk-row .k b{color:var(--ink);font-weight:600;}.sirix-estimator-widget .brk-row .v{font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;}.sirix-estimator-widget .est-disc{font-size:12.5px;color:var(--gray-faint);line-height:1.6;margin-top:18px;max-width:64ch;}\/* contact *\/.sirix-estimator-widget .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;}.sirix-estimator-widget .form-grid .full{grid-column:1\/-1;}.sirix-estimator-widget .inp{display:flex;flex-direction:column;gap:7px;}.sirix-estimator-widget .inp label{font-size:13px;font-weight:600;color:var(--ink-2);}.sirix-estimator-widget .inp label .req{color:var(--accent-deep);}.sirix-estimator-widget .inp input,.sirix-estimator-widget .inp select{font-family:inherit;font-size:15px;color:var(--ink);background:var(--paper);border:1.5px solid var(--hairline);border-radius:var(--r-sm);padding:13px 15px;transition:border-color var(--t-fast);width:100%;}.sirix-estimator-widget .inp input:focus,.sirix-estimator-widget .inp select:focus{outline:none;border-color:var(--accent);}.sirix-estimator-widget .inp input::placeholder{color:var(--gray-faint);}.sirix-estimator-widget .summary-strip{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:24px;}.sirix-estimator-widget .summary-strip .pill{font-size:12.5px;font-weight:500;color:var(--ink-2);background:var(--mist);border:1px solid var(--hairline);padding:6px 13px;border-radius:var(--r-pill);}.sirix-estimator-widget .summary-strip .pill b{font-weight:700;color:var(--accent-deep);}\/* success *\/.sirix-estimator-widget .success{text-align:center;padding:20px 0;}.sirix-estimator-widget .success .tick{width:72px;height:72px;border-radius:50%;background:var(--accent-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 22px;}.sirix-estimator-widget .success .tick svg{width:38px;height:38px;stroke:var(--accent-deep);stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round;}.sirix-estimator-widget .success h2{font-size:clamp(24px,4vw,32px);font-weight:800;letter-spacing:-0.02em;margin-bottom:12px;}.sirix-estimator-widget .success p{font-size:15.5px;color:var(--gray);max-width:52ch;margin:0 auto;line-height:1.6;}.sirix-estimator-widget .est-foot.contact-mode{justify-content:flex-start;}\/* footer nav *\/.sirix-estimator-widget .est-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:clamp(20px,3vw,26px) clamp(24px,4vw,44px);border-top:1px solid var(--hairline);background:var(--mist-2);}.sirix-estimator-widget .btn{display:inline-flex;align-items:center;gap:9px;font-size:15px;font-weight:600;border-radius:var(--r-pill);padding:13px 28px;border:1.5px solid transparent;transition:all var(--t-fast);}.sirix-estimator-widget .btn-primary{background:var(--accent);color:#fff;box-shadow:0 6px 18px rgba(65,197,160,0.30);}.sirix-estimator-widget .btn-primary:hover{background:var(--accent-deep);}.sirix-estimator-widget .btn-primary:disabled{background:var(--mist);color:var(--gray-faint);box-shadow:none;cursor:not-allowed;}.sirix-estimator-widget .btn-ghost{background:transparent;color:var(--gray);border-color:transparent;padding-left:8px;}.sirix-estimator-widget .btn-ghost:hover{color:var(--ink);}.sirix-estimator-widget .btn-ghost svg,.sirix-estimator-widget .btn-primary svg{width:17px;height:17px;stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round;}.sirix-estimator-widget .btn.hidden{visibility:hidden;}@media(max-width:560px){.sirix-estimator-widget .form-grid{grid-template-columns:1fr;}.sirix-estimator-widget .est-foot{padding:18px 22px;}.sirix-estimator-widget .btn{padding:12px 20px;font-size:14px;}\n}\n\n\n\n\/* ===== Global font lock: Montserrat everywhere in estimator ===== *\/\n.sirix-estimator-widget,\n.sirix-estimator-widget *{\n  font-family:\"Montserrat\",-apple-system,BlinkMacSystemFont,system-ui,sans-serif!important;\n}\n\n\n\/* ===== Elementor visual fix: keep Sirix original colors + prevent text clipping ===== *\/\n.sirix-estimator-widget{\n  background:#F5F5F7!important;\n  color:#1A1A1A!important;\n  overflow:visible!important;\n}\n.sirix-estimator-widget .estimator{\n  max-width:100%;\n  width:100%!important;\n}\n.sirix-estimator-widget .est-card{\n  background:#FFFFFF!important;\n  border-color:rgba(0,0,0,0.09)!important;\n  overflow:hidden!important;\n}\n.sirix-estimator-widget .opt-grid{\n  display:grid!important;\n  grid-template-columns:repeat(3,minmax(0,1fr))!important;\n  gap:14px!important;\n}\n.sirix-estimator-widget .opt{\n  min-width:0!important;\n  align-items:flex-start!important;\n  gap:15px!important;\n  padding:10px !important;\n  overflow:visible!important;\n  white-space:normal!important;\n  text-align:left!important;\n  background:#FFFFFF!important;\n  color:#1A1A1A!important;\n  border:1.5px solid rgba(0,0,0,0.09)!important;\n  border-radius:16px!important;\n  box-shadow:none!important;\n}\n.sirix-estimator-widget .opt:hover{\n  border-color:rgba(65,197,160,0.32)!important;\n  background:#FAFAFB!important;\n}\n.sirix-estimator-widget .opt.sel{\n  border-color:#41C5A0!important;\n  background:rgba(65,197,160,0.10)!important;\n}\n.sirix-estimator-widget .opt .lbl{\n  flex:1 1 auto!important;\n  min-width:0!important;\n  max-width:none!important;\n  overflow:visible!important;\n  white-space:normal!important;\n}\n.sirix-estimator-widget .opt .lbl,\n.sirix-estimator-widget .opt .lbl b,\n.sirix-estimator-widget .opt .lbl span{\n  display:block!important;\n  white-space:normal!important;\n  overflow:visible!important;\n  text-overflow:clip!important;\n  word-break:normal!important;\n  overflow-wrap:break-word!important;\n  max-width:100%!important;\n}\n.sirix-estimator-widget .opt .lbl b{\n  font-size:15px!important;\n  font-weight:600!important;\n  line-height:1.25!important;\n  color:#1A1A1A!important;\n  margin:0 0 2px!important;\n}\n.sirix-estimator-widget .opt .lbl span{\n  font-size:12.5px!important;\n  line-height:1.35!important;\n  color:#6E6E73!important;\n  margin-top:2px!important;\n}\n.sirix-estimator-widget .opt .chkbox{\n  flex:0 0 20px!important;\n  width:20px!important;\n  height:20px!important;\n  margin-top:3px!important;\n  border-color:rgba(0,0,0,0.09)!important;\n  background:#FFFFFF!important;\n}\n.sirix-estimator-widget .opt.sel .chkbox{\n  background:#41C5A0!important;\n  border-color:#41C5A0!important;\n}\n.sirix-estimator-widget .opt.sel .chkbox svg{\n  stroke:#FFFFFF!important;\n}\n.sirix-estimator-widget .btn-primary{\n  background:#41C5A0!important;\n  color:#FFFFFF!important;\n  box-shadow:0 6px 18px rgba(65,197,160,0.30)!important;\n}\n.sirix-estimator-widget .btn-primary:hover{\n  background:#0E8F6F!important;\n}\n.sirix-estimator-widget .prog-fill{\n  background:linear-gradient(90deg,#41C5A0,#0E8F6F)!important;\n}\n.sirix-estimator-widget .prog-step,\n.sirix-estimator-widget .field-label .val,\n.sirix-estimator-widget .tier-price,\n.sirix-estimator-widget .est-bigrange,\n.sirix-estimator-widget .summary-strip .pill b{\n  color:#0E8F6F!important;\n}\n@media(max-width:920px){\n  .sirix-estimator-widget .opt-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;}\n}\n@media(max-width:640px){\n  .sirix-estimator-widget .opt-grid{grid-template-columns:1fr!important;}\n  .sirix-estimator-widget .opt{min-height:auto!important;padding:17px 18px!important;}\n}\n\n\n\/* ===== Compact setup bar: sites + schedule + location in one section ===== *\/\n.sirix-estimator-widget .setup-compact-card{\n  display:grid!important;\n  grid-template-columns:190px minmax(330px,0.95fr) minmax(260px,1fr)!important;\n  gap:14px!important;\n  align-items:end!important;\n  background:#FAFAFB!important;\n  border:1.5px solid rgba(0,0,0,0.09)!important;\n  border-radius:16px!important;\n  padding:14px 16px!important;\n  margin-bottom:18px!important;\n}\n.sirix-estimator-widget .setup-compact-card .setup-item{\n  min-width:0!important;\n  margin:0!important;\n}\n.sirix-estimator-widget .setup-compact-card .field-label{\n  margin:0 0 8px!important;\n}\n.sirix-estimator-widget .setup-compact-card .field-label b{\n  font-size:14px!important;\n  font-weight:700!important;\n  line-height:1.2!important;\n  color:#1A1A1A!important;\n}\n.sirix-estimator-widget .setup-compact-card .stepper{\n  height:46px!important;\n  background:#FFFFFF!important;\n  border-radius:999px!important;\n}\n.sirix-estimator-widget .setup-compact-card .stepper button{\n  width:44px!important;\n  height:44px!important;\n  font-size:20px!important;\n}\n.sirix-estimator-widget .setup-compact-card .stepper .num{\n  min-width:58px!important;\n  font-size:18px!important;\n}\n.sirix-estimator-widget .setup-compact-card .seg{\n  display:grid!important;\n  grid-template-columns:repeat(2,minmax(0,1fr))!important;\n  gap:8px!important;\n}\n.sirix-estimator-widget .setup-compact-card .seg button{\n  min-width:0!important;\n  min-height:46px!important;\n  padding:9px 12px!important;\n  background:#FFFFFF!important;\n  border-radius:14px!important;\n}\n.sirix-estimator-widget .setup-compact-card .seg button b{\n  font-size:13.5px!important;\n  line-height:1.15!important;\n}\n.sirix-estimator-widget .setup-compact-card .seg button span{\n  font-size:11.5px!important;\n  line-height:1.2!important;\n  margin-top:3px!important;\n}\n.sirix-estimator-widget .setup-compact-card #locInput{\n  height:46px!important;\n  padding:10px 14px!important;\n  background:#FFFFFF!important;\n  border-radius:14px!important;\n  font-size:14px!important;\n}\n.sirix-estimator-widget .setup-compact-card .selectwrap{\n  height:46px!important;\n}\n@media(max-width:980px){\n  .sirix-estimator-widget .setup-compact-card{\n    grid-template-columns:180px 1fr!important;\n  }\n  .sirix-estimator-widget .setup-compact-card .setup-location{\n    grid-column:1\/-1!important;\n  }\n}\n@media(max-width:640px){\n  .sirix-estimator-widget .setup-compact-card{\n    grid-template-columns:1fr!important;\n    gap:12px!important;\n    padding:14px!important;\n  }\n  .sirix-estimator-widget .setup-compact-card .setup-location{\n    grid-column:auto!important;\n  }\n}\n@media(max-width:460px){\n  .sirix-estimator-widget .setup-compact-card .seg{\n    grid-template-columns:1fr!important;\n  }\n}\n\n\n\/* ===== Final success message after Freshworks submit ===== *\/\n.sirix-estimator-widget .success{\n  text-align:center!important;\n  padding:clamp(42px,7vw,72px) 20px clamp(36px,6vw,60px)!important;\n}\n.sirix-estimator-widget .success .tick{\n  width:90px!important;\n  height:90px!important;\n  border-radius:50%!important;\n  background:rgba(65,197,160,0.12)!important;\n  display:flex!important;\n  align-items:center!important;\n  justify-content:center!important;\n  margin:0 auto 34px!important;\n}\n.sirix-estimator-widget .success .tick svg{\n  width:42px!important;\n  height:42px!important;\n  stroke:#0E8F6F!important;\n  stroke-width:2.4!important;\n  fill:none!important;\n  stroke-linecap:round!important;\n  stroke-linejoin:round!important;\n}\n.sirix-estimator-widget .success h2{\n  font-size:clamp(32px,5.2vw,42px)!important;\n  line-height:1.08!important;\n  font-weight:800!important;\n  letter-spacing:-0.035em!important;\n  color:#0B0B0D!important;\n  margin:0 0 24px!important;\n}\n.sirix-estimator-widget .success p{\n  font-size:clamp(18px,2.3vw,21px)!important;\n  line-height:1.45!important;\n  color:#69707D!important;\n  max-width:760px!important;\n  margin:0 auto!important;\n}\n\n\n\n\/* ===== Freshworks iframe height fix ===== *\/\n.sirix-estimator-widget .freshworks-form-wrap{\n  min-height:0!important;\n  overflow:hidden!important;\n}\n.sirix-estimator-widget .freshworks-form-wrap iframe{\n  min-height:0!important;\n  margin:0!important;\n}\n<\/style>\n\n<div class=\"sirix-estimator-widget\">\n<div class=\"estimator\">\n  <div class=\"est-card\">\n    <div class=\"est-top\">\n      <div class=\"est-brand\">\n        <img class=\"est-brand-logo\" src=\"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2026\/01\/Sirix-logo-for-home-page-table.svg\" alt=\"Sirix\" loading=\"eager\" decoding=\"async\">\n        <b>Instant estimate<\/b>\n      <\/div>\n      <div class=\"prog-meta\">\n        <span class=\"prog-step\" id=\"progStep\">Step 1 of 5 \u00b7 Property<\/span>\n        <span class=\"prog-pct\" id=\"progPct\">20%<\/span>\n      <\/div>\n      <div class=\"prog-track\"><div class=\"prog-fill\" id=\"progFill\"><\/div><\/div>\n    <\/div>\n\n    <div class=\"est-body\" id=\"estBody\"><\/div>\n\n    <div class=\"est-foot\">\n      <button class=\"btn btn-ghost hidden\" id=\"btnBack\"><svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>Back<\/button>\n      <button class=\"btn btn-primary\" id=\"btnNext\" disabled=\"\">Continue<svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg><\/button>\n    <\/div>\n  <\/div>\n<\/div>\n<\/div>\n\n<script>\n\n(function(){\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 CONFIG \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  var ic = {\n    retail:'<path d=\"M3 9l1.5-5h15L21 9M4 9v11h16V9M4 9h16M9 20v-6h6v6\"\/>',\n    warehouse:'<path d=\"M3 21V9l9-5 9 5v12M3 21h18M8 21v-7h8v7\"\/>',\n    auto:'<path d=\"M5 17h14M6 17l-1.5-5.5L6 7h12l1.5 4.5L18 17M7.5 11h9\"\/><circle cx=\"7.5\" cy=\"17.5\" r=\"1.5\"\/><circle cx=\"16.5\" cy=\"17.5\" r=\"1.5\"\/>',\n    construction:'<path d=\"M3 21h18M5 21v-8l7-4 7 4v8M9 21v-5h6v5\"\/><path d=\"M12 9V4l4 2\"\/>',\n    residential:'<path d=\"M4 11l8-6 8 6v9a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1z\"\/><path d=\"M9 21v-6h6v6\"\/>',\n    commercial:'<path d=\"M5 21V4h9v17M14 9h5v12M8 8h3M8 12h3M8 16h3M17 13h1M17 17h1\"\/>',\n    campus:'<path d=\"M3 10l9-5 9 5-9 5-9-5z\"\/><path d=\"M7 12v5c0 1 2.2 2 5 2s5-1 5-2v-5\"\/><path d=\"M21 10v5\"\/>',\n    other:'<circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.8.4-1 .8-1 1.7M12 17h.01\"\/>'\n  };\n  var sic = {\n    continuous:'<circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><path d=\"M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12z\"\/>',\n    event:'<path d=\"M13 3L5 13h6l-1 8 8-10h-6z\"\/>',\n    verify:'<path d=\"M12 3l7 3v5c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6z\"\/><path d=\"M9 12l2 2 4-4\"\/>',\n    tour:'<circle cx=\"11\" cy=\"11\" r=\"6\"\/><path d=\"M20 20l-4.5-4.5\"\/>',\n    access:'<rect x=\"4\" y=\"10\" width=\"16\" height=\"11\" rx=\"2\"\/><path d=\"M8 10V7a4 4 0 0 1 8 0v3\"\/><circle cx=\"12\" cy=\"15.5\" r=\"1.4\"\/>',\n    gate:'<path d=\"M3 21V6l4-2 4 2v15M13 21V6l4-2 4 2v15M3 21h18M6 9v0M6 13v0M17 9v0M17 13v0\"\/>',\n    lone:'<circle cx=\"12\" cy=\"7\" r=\"3.2\"\/><path d=\"M6 21v-1a6 6 0 0 1 12 0v1\"\/><path d=\"M12 10.5v3M19 4l1.5 1.5M4 20l1.5-1.5\"\/>',\n    support:'<path d=\"M4 12a8 8 0 0 1 16 0\"\/><rect x=\"3\" y=\"12\" width=\"3.5\" height=\"6\" rx=\"1.5\"\/><rect x=\"17.5\" y=\"12\" width=\"3.5\" height=\"6\" rx=\"1.5\"\/><path d=\"M19 18a4 4 0 0 1-4 3h-2\"\/>',\n    help:'<circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.8.4-1 .8-1 1.7M12 17h.01\"\/>',\n    ai:'<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2.5\"\/><path d=\"M9 2v4M15 2v4M9 18v4M15 18v4M2 9h4M2 15h4M18 9h4M18 15h4\"\/><circle cx=\"12\" cy=\"12\" r=\"2.2\"\/>'\n  };\n\n  var CONFIG = {\n    properties:[\n      {id:'retail', label:'Retail store', desc:'Shops, malls, showrooms', icon:ic.retail, risk:1.0, tone:'blue'},\n      {id:'warehouse', label:'Warehouse \/ storage', desc:'Self-storage, distribution', icon:ic.warehouse, risk:1.1, tone:'amber'},\n      {id:'auto', label:'Auto & lots', desc:'Dealerships, parking, yards', icon:ic.auto, risk:1.15, tone:'orange'},\n      {id:'construction', label:'Construction site', desc:'Active or dormant sites', icon:ic.construction, risk:1.2, tone:'violet'},\n      {id:'residential', label:'Residential \/ condo', desc:'Buildings, communities', icon:ic.residential, risk:1.0, tone:'teal'},\n      {id:'commercial', label:'Commercial building', desc:'Offices, mixed-use', icon:ic.commercial, risk:1.0, tone:'indigo'},\n      {id:'campus', label:'School \/ campus', desc:'Education, institutions', icon:ic.campus, risk:1.05, tone:'rose'},\n      {id:'other', label:'Something else', desc:'Tell us more later', icon:ic.other, risk:1.05, tone:'slate'}\n    ],\n    services:[\n      {id:'video', label:'Video monitoring', desc:'Live or event-based camera monitoring', icon:sic.continuous, rate:75, unit:'camera'},\n      {id:'intercom', label:'Intercom response', desc:'We answer & handle intercom requests', icon:sic.access, rate:107, unit:'site'},\n      {id:'gate', label:'Gate \/ door control', desc:'Remote access control for entries', icon:sic.gate, rate:180, unit:'site'},\n      {id:'lone', label:'Lone worker', desc:'Safety for isolated staff', icon:sic.lone, rate:60, unit:'site'},\n      {id:'support', label:'Support to user', desc:'End-user help & troubleshooting', icon:sic.support, rate:50, unit:'site'},\n      {id:'unsure', label:'Not sure, help me decide', desc:'A specialist will guide you', icon:sic.help, rate:0, unit:'none'}\n    ],\n    schedules:[\n      {id:'afterhours', label:'After hours', desc:'Nights & weekends', mult:1.0, phrase:'after-hours monitoring'},\n      {id:'always', label:'24 \/ 7 coverage', desc:'Around the clock', mult:2.0, phrase:'24\/7 monitoring'}\n    ],\n    locations:[\n      {id:'ca', label:'Canada', cur:'CAD', sym:'$', fx:1.0},\n      {id:'us', label:'United States', cur:'USD', sym:'$', fx:0.72},\n      {id:'other', label:'Other \/ international', cur:'USD', sym:'$', fx:0.72}\n    ],\n    setupPerCamera:64,\n    tiers:{\n      intercom:{ label:'Expected intercom responses per month', options:[\n        {id:'t1', vol:'50 responses or less', price:375},\n        {id:'t2', vol:'51 to 100 responses', price:665},\n        {id:'t3', vol:'101 to 150 responses', price:915}\n      ]},\n      gate:{ label:'Expected gate \/ door events per month', options:[\n        {id:'t1', vol:'50 events or less', price:215},\n        {id:'t2', vol:'51 to 100 events', price:375},\n        {id:'t3', vol:'101 to 150 events', price:500}\n      ]}\n    },\n    lone:{ perSite:42, perUser:42 },\n    contactTimes:['Morning (8am to 12pm)','Afternoon (12pm to 5pm)','Evening (5pm to 8pm)','Anytime']\n  };\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STATE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  var state = { step:0, property:null, services:[], sites:1, siteData:[{name:'Site 1', cameras:16}], intercomTier:'t1', gateTier:'t1', loneUsers:5, schedule:'afterhours', location:'ca', locationText:'',\n                name:'', email:'', phone:'', besttime:'Anytime' };\n  function totalCameras(){ return state.siteData.reduce(function(a,s){ return a + s.cameras; }, 0); }\n  function syncSites(n){\n    n = Math.max(1, Math.min(10, n));\n    state.sites = n;\n    while(state.siteData.length < n) state.siteData.push({ name:'Site '+(state.siteData.length+1), cameras:16 });\n    state.siteData.length = n;\n  }\n  var STEP_NAMES = ['Property','Services','Details','Estimate','Contact'];\n  var TOTAL = 5;\n\n  var root = document.currentScript ? document.currentScript.previousElementSibling : null;\n  if(!root || !root.classList || !root.classList.contains('sirix-estimator-widget')) root = document.querySelector('.sirix-estimator-widget');\n  if(!root) return;\n  var $ = function(sel){ return root.querySelector(sel); };\n  var body = $('#estBody');\n  var btnNext = $('#btnNext');\n  var btnBack = $('#btnBack');\n  var esc = function(s){ return String(s).replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;'); };\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 RENDER STEPS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  function stepProperty(){\n    var opts = CONFIG.properties.map(function(p){\n      return '<button class=\"opt'+(state.property===p.id?' sel':'')+'\" data-tone=\"'+p.tone+'\" data-prop=\"'+p.id+'\">'+\n        '<span class=\"ic\"><svg viewBox=\"0 0 24 24\">'+p.icon+'<\/svg><\/span>'+\n        '<span class=\"lbl\"><b>'+esc(p.label)+'<\/b><span>'+esc(p.desc)+'<\/span><\/span>'+\n        '<span class=\"chk\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 12l5 5L20 6\"\/><\/svg><\/span><\/button>';\n    }).join('');\n    return '<div class=\"step-q\">What type of property do you protect?<\/div>'+\n           '<p class=\"step-sub\">This helps us match the right monitoring approach to your site.<\/p>'+\n           '<div class=\"opt-grid\">'+opts+'<\/div>';\n  }\n\n  function stepServices(){\n    var opts = CONFIG.services.map(function(s){\n      var on = state.services.indexOf(s.id)>-1;\n      return '<button class=\"opt'+(on?' sel':'')+'\" data-svc=\"'+s.id+'\">'+\n        '<span class=\"chkbox\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 12l5 5L20 6\"\/><\/svg><\/span>'+\n        '<span class=\"lbl\"><b>'+esc(s.label)+'<\/b><span>'+esc(s.desc)+'<\/span><\/span><\/button>';\n    }).join('');\n    return '<div class=\"step-q\">Which services do you need?<\/div>'+\n           '<p class=\"step-sub\">Pick everything that applies. Not sure? Choose what sounds closest, we\\u2019ll refine it together.<\/p>'+\n           '<p class=\"multi-hint\">Select one or more<\/p>'+\n           '<div class=\"opt-grid\">'+opts+'<\/div>';\n  }\n\n  function priceStr(n){ return '$' + Math.round(n).toLocaleString('en-US'); }\n  function tierPrice(group){ var o = CONFIG.tiers[group].options.find(function(x){return x.id===state[group+'Tier'];}); return o?o.price:0; }\n\n  function stepDetails(){\n    var svc = state.services;\n    var hasVideo = svc.indexOf('video')>-1;\n    var hasIntercom = svc.indexOf('intercom')>-1;\n    var hasGate = svc.indexOf('gate')>-1;\n    var hasLone = svc.indexOf('lone')>-1;\n    var hasSupport = svc.indexOf('support')>-1;\n    var needSites = hasVideo || hasIntercom || hasGate || hasLone || hasSupport;\n\n    var out = '<div class=\"step-q\">Tell us about your setup<\/div>'+\n      '<p class=\"step-sub\">A few details let us shape a realistic estimate.<\/p>';\n\n    if(needSites){\n      var scheduleBlock = '';\n      if(hasVideo){\n        var segs = CONFIG.schedules.map(function(s){\n          return '<button class=\"'+(state.schedule===s.id?'sel':'')+'\" data-sched=\"'+s.id+'\"><b>'+esc(s.label)+'<\/b><span>'+esc(s.desc)+'<\/span><\/button>';\n        }).join('');\n        scheduleBlock = '<div class=\"setup-item setup-schedule\">'+\n          '<div class=\"field-label\"><b>Monitoring schedule<\/b><\/div>'+\n          '<div class=\"seg\">'+segs+'<\/div>'+\n        '<\/div>';\n      }\n\n      out += '<div class=\"setup-compact-card\">'+\n        '<div class=\"setup-item setup-sites\">'+\n          '<div class=\"field-label\"><b>How many sites?<\/b><\/div>'+\n          '<div class=\"stepper\"><button id=\"siteMinus\" aria-label=\"fewer\">\\u2013<\/button><span class=\"num\" id=\"siteNum\">'+state.sites+'<\/span><button id=\"sitePlus\" aria-label=\"more\">+<\/button><\/div>'+\n        '<\/div>'+\n        scheduleBlock+\n        '<div class=\"setup-item setup-location\">'+\n          '<div class=\"field-label\"><b>Location<\/b><\/div>'+\n          '<div class=\"selectwrap\"><input type=\"text\" id=\"locInput\" placeholder=\"City, province \/ state, or country\" value=\"'+esc(state.locationText)+'\" \/><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    }\n\n    if(hasVideo){\n      var siteCards = state.siteData.map(function(s,i){\n        return '<div class=\"site-card\">'+\n          '<div class=\"inp\"><label>Site name<\/label>'+\n            '<input type=\"text\" class=\"siteName\" data-i=\"'+i+'\" value=\"'+esc(s.name)+'\" placeholder=\"Site '+(i+1)+'\" \/><\/div>'+\n          '<div class=\"field\" style=\"margin-bottom:0;\">'+\n            '<div class=\"field-label\"><b>Cameras<\/b><span class=\"val siteCamVal\" data-i=\"'+i+'\">'+s.cameras+(s.cameras>=100?'+':'')+' <small>cams<\/small><\/span><\/div>'+\n            '<input type=\"range\" class=\"siteCam\" data-i=\"'+i+'\" min=\"1\" max=\"100\" value=\"'+s.cameras+'\" \/>'+\n            '<div class=\"range-ends\"><span>1<\/span><span>100+<\/span><\/div>'+\n          '<\/div>'+\n        '<\/div>';\n      }).join('');\n      out += '<div class=\"sites-wrap\">'+siteCards+'<\/div>';\n    }\n\n    if(hasIntercom) out += tierBlock('intercom', false);\n    if(hasGate) out += tierBlock('gate', true);\n\n    if(hasLone){\n      out += '<div class=\"field\">'+\n        '<div class=\"field-label\"><b>How many lone workers?<\/b><\/div>'+\n        '<div class=\"stepper\"><button id=\"userMinus\" aria-label=\"fewer\">\\u2013<\/button><span class=\"num\" id=\"userNum\">'+state.loneUsers+'<\/span><button id=\"userPlus\" aria-label=\"more\">+<\/button><\/div>'+\n      '<\/div>';\n    }\n\n    return out;\n  }\n\n  function tierBlock(group, showPrice){\n    var cfg = CONFIG.tiers[group], cur = state[group+'Tier'];\n    var btns = cfg.options.map(function(o){\n      var price = showPrice ? '<span class=\"tier-price\">'+priceStr(o.price)+'<small>\/mo<\/small><\/span>' : '';\n      return '<button class=\"tier-opt'+(cur===o.id?' sel':'')+'\" data-tiergroup=\"'+group+'\" data-tierid=\"'+o.id+'\">'+\n        '<span class=\"tier-vol\">'+esc(o.vol)+'<\/span>'+price+'<\/button>';\n    }).join('');\n    return '<div class=\"field\"><div class=\"field-label\"><b>'+esc(cfg.label)+'<\/b><\/div><div class=\"tier-seg\">'+btns+'<\/div><\/div>';\n  }\n\n  function calc(){\n    var loc = CONFIG.locations[0]; \/\/ default currency CAD; location captured as free text\n    var sched = CONFIG.schedules.find(function(s){return s.id===state.schedule;});\n    var prop = CONFIG.properties.find(function(p){return p.id===state.property;}) || {risk:1};\n    var lines = [];\n    var monthly = 0;\n    state.services.forEach(function(sid){\n      var s = CONFIG.services.find(function(x){return x.id===sid;});\n      if(!s) return;\n      var amt = 0;\n      if(sid==='video'){ amt = s.rate * totalCameras() * sched.mult * prop.risk; }\n      else if(sid==='intercom'){ amt = tierPrice('intercom') * state.sites; }\n      else if(sid==='gate'){ amt = tierPrice('gate') * state.sites; }\n      else if(sid==='lone'){ amt = CONFIG.lone.perSite * state.sites + CONFIG.lone.perUser * state.loneUsers; }\n      else if(sid==='support'){ return; } \/\/ custom live assistance, priced via Sirix assessment\n      else { return; } \/\/ 'none' (not sure) carries no price\n      amt = amt * loc.fx;\n      monthly += amt;\n      lines.push({ label:s.label, amt:amt });\n    });\n    var setup = CONFIG.setupPerCamera * totalCameras() * loc.fx;\n    return { monthly:monthly, setup:setup, loc:loc, lines:lines };\n  }\n\n  function fmt(n, loc){ return loc.sym + Math.round(n).toLocaleString('en-US'); }\n  function round50(n){ return Math.round(n\/50)*50; }\n\n  \/\/ benefit checklist derived from selected services (deduped, order-preserving)\n  var FEATURES = {\n    video:['24\/7 AI-powered detection with live human verification','Voice intervention \/ talk-down via on-site speakers'],\n    intercom:['Live operators answer and handle intercom requests','Access granted or denied to your protocols'],\n    gate:['Remote gate and door access control','Entry logged and verified on every request'],\n    lone:['Fall detection, GPS tracking and panic alerts','Check-ins for staff working alone'],\n    support:['Direct line to a Sirix support specialist','Setup help, troubleshooting and guidance'],\n    unsure:['A specialist reviews your site and recommends the right mix']\n  };\n  var FEATURES_LEAD = ['Connects to your existing cameras, no new hardware'];\n  var FEATURES_COMMON = ['Police \/ security dispatch on verified threats','Real-time instant reporting on critical events'];\n  function buildFeatures(){\n    var out = [], seen = {};\n    if(state.services.indexOf('video')>-1){ FEATURES_LEAD.forEach(function(f){ if(!seen[f]){ seen[f]=1; out.push(f); } }); }\n    state.services.forEach(function(id){ (FEATURES[id]||[]).forEach(function(f){ if(!seen[f]){ seen[f]=1; out.push(f); } }); });\n    FEATURES_COMMON.forEach(function(f){ if(!seen[f]){ seen[f]=1; out.push(f); } });\n    return out;\n  }\n\n  function findById(list, id){\n    return (list || []).find(function(x){ return x.id === id; }) || null;\n  }\n\n  function selectedTierLabel(group){\n    var cfg = CONFIG.tiers[group];\n    if(!cfg) return '';\n    var selected = findById(cfg.options, state[group + 'Tier']);\n    return selected ? selected.vol : '';\n  }\n\n  function estimateRangeText(){\n    var r = calc();\n    if(r.monthly <= 0) return 'Tailored plan';\n    var lo = round50(r.monthly * 0.85);\n    var hi = round50(r.monthly * 1.2);\n    if(lo < 50) lo = 50;\n    if(hi <= lo) hi = lo + 100;\n    return fmt(lo, r.loc) + ' - ' + fmt(hi, r.loc) + ' \/ month';\n  }\n\n  function buildFreshworksSummary(){\n    var r = calc();\n    var prop = findById(CONFIG.properties, state.property);\n    var sched = findById(CONFIG.schedules, state.schedule);\n    var serviceLabels = state.services.map(function(id){\n      var svc = findById(CONFIG.services, id);\n      return svc ? svc.label : id;\n    });\n    var lines = [];\n\n    lines.push('Sirix Instant Estimate Summary');\n    lines.push('');\n    lines.push('Property type: ' + (prop ? prop.label : 'Not selected'));\n    lines.push('Selected services: ' + (serviceLabels.length ? serviceLabels.join(', ') : 'Not selected'));\n    lines.push('Number of sites: ' + state.sites);\n    lines.push('Location: ' + ((state.locationText || '').trim() || 'Not provided'));\n\n    if(state.services.indexOf('video') > -1){\n      lines.push('Monitoring schedule: ' + (sched ? sched.label : 'Not selected'));\n      lines.push('Total cameras: ' + totalCameras());\n      lines.push('Site camera details:');\n      state.siteData.forEach(function(site, i){\n        lines.push('  ' + (i + 1) + '. ' + ((site.name || '').trim() || ('Site ' + (i + 1))) + ': ' + site.cameras + (site.cameras >= 100 ? '+' : '') + ' cameras');\n      });\n    }\n\n    if(state.services.indexOf('intercom') > -1){\n      lines.push('Intercom response volume: ' + selectedTierLabel('intercom'));\n    }\n\n    if(state.services.indexOf('gate') > -1){\n      lines.push('Gate \/ door event volume: ' + selectedTierLabel('gate'));\n    }\n\n    if(state.services.indexOf('lone') > -1){\n      lines.push('Lone workers: ' + state.loneUsers);\n    }\n\n    if(state.services.indexOf('support') > -1){\n      lines.push('Support note: Custom live assistance selected. Pricing requires a short scoping assessment.');\n    }\n\n    if(state.services.indexOf('unsure') > -1){\n      lines.push('Support note: User is not sure and wants help choosing the right service mix.');\n    }\n\n    lines.push('');\n    lines.push('Estimated range: ' + estimateRangeText());\n\n    if(r.monthly > 0){\n      lines.push('Estimated monthly subtotal before final review: ' + fmt(r.monthly, r.loc) + ' \/ month');\n    }\n\n    lines.push('');\n    lines.push('Note: This is a ballpark estimate from the calculator selections. Final pricing may change after Sirix reviews the exact site setup, layout, service volume, and discounts.');\n\n    return lines.join('\\n');\n  }\n\n  function autofillFreshworksTextarea(doc){\n    try{\n      if(!doc) return false;\n      var textarea = doc.querySelector('.formserv-textarea-field textarea.fserv-textarea, textarea.fserv-textarea, .formserv-textarea-field textarea');\n      if(!textarea) return false;\n\n      if(textarea.getAttribute('data-sirix-autofilled') === 'true'){\n        return true;\n      }\n\n      if(textarea.getAttribute('data-sirix-user-edited') === 'true'){\n        return true;\n      }\n\n      if(textarea.getAttribute('data-sirix-listener') !== 'true'){\n        textarea.setAttribute('data-sirix-listener', 'true');\n        textarea.addEventListener('input', function(){\n          if(textarea.getAttribute('data-sirix-autofilling') !== 'true'){\n            textarea.setAttribute('data-sirix-user-edited', 'true');\n          }\n        });\n      }\n\n      var summary = buildFreshworksSummary();\n\n      textarea.setAttribute('data-sirix-autofilling', 'true');\n      textarea.value = summary;\n      textarea.setAttribute('data-sirix-autofilled', 'true');\n\n      ['input','change'].forEach(function(evtName){\n        try{\n          textarea.dispatchEvent(new Event(evtName, { bubbles:true }));\n        }catch(e){}\n      });\n\n      textarea.removeAttribute('data-sirix-autofilling');\n      return true;\n    }catch(e){\n      return false;\n    }\n  }\n\n\n  function readFreshworksCustomerName(doc){\n    try{\n      if(!doc) return '';\n      var inputs = Array.prototype.slice.call(doc.querySelectorAll('input'));\n      var named = inputs.filter(function(input){\n        var type = (input.getAttribute('type') || 'text').toLowerCase();\n        if(type === 'hidden' || type === 'email' || type === 'tel' || type === 'submit' || type === 'button') return false;\n        var value = (input.value || '').trim();\n        if(!value) return false;\n        var meta = [\n          input.getAttribute('name') || '',\n          input.getAttribute('placeholder') || '',\n          input.getAttribute('aria-label') || '',\n          input.id || '',\n          input.className || ''\n        ].join(' ').toLowerCase();\n        return meta.indexOf('name') > -1 || meta.indexOf('first') > -1 || meta.indexOf('contact') > -1;\n      });\n      if(named.length) return named[0].value.trim();\n      var textInput = inputs.find(function(input){\n        var type = (input.getAttribute('type') || 'text').toLowerCase();\n        return type !== 'hidden' && type !== 'email' && type !== 'tel' && type !== 'submit' && type !== 'button' && (input.value || '').trim();\n      });\n      return textInput ? textInput.value.trim() : '';\n    }catch(e){\n      return '';\n    }\n  }\n\n  function hasFreshworksVisibleError(doc){\n    try{\n      if(!doc) return false;\n      var nodes = Array.prototype.slice.call(doc.querySelectorAll('.fs-notifier, .fserv-control, .error, .has-error, [role=\"alert\"]'));\n      return nodes.some(function(node){\n        var text = (node.textContent || '').trim().toLowerCase();\n        if(!text) return false;\n        var style = doc.defaultView.getComputedStyle(node);\n        if(style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') return false;\n        return text.indexOf('required') > -1 || text.indexOf('invalid') > -1 || text.indexOf('error') > -1 || text.indexOf('please') > -1;\n      });\n    }catch(e){\n      return false;\n    }\n  }\n\n  function showQuoteSubmittedSuccess(customerName){\n    if(done) return;\n    customerName = (customerName || '').trim();\n    if(customerName) state.name = customerName;\n    done = true;\n    paint();\n    try{\n      root.scrollIntoView({ behavior:'smooth', block:'center' });\n    }catch(e){}\n  }\n\n  function wireFreshworksSubmitSuccess(doc){\n    try{\n      if(!doc) return false;\n      var form = doc.querySelector('form, .fserv-form');\n      var submitBtn = doc.querySelector('.fserv-button-submit, button[type=\"submit\"], input[type=\"submit\"]');\n      if(!form && !submitBtn) return false;\n      if(doc.documentElement.getAttribute('data-sirix-submit-wired') === 'true') return true;\n      doc.documentElement.setAttribute('data-sirix-submit-wired', 'true');\n\n      var handled = false;\n      var completeAfterSubmit = function(){\n        if(handled) return;\n        handled = true;\n        var customerName = readFreshworksCustomerName(doc);\n        setTimeout(function(){\n          if(hasFreshworksVisibleError(doc)){\n            handled = false;\n            return;\n          }\n          showQuoteSubmittedSuccess(customerName);\n        }, 1400);\n      };\n\n      if(form){\n        form.addEventListener('submit', function(){\n          completeAfterSubmit();\n        }, true);\n      }\n\n      if(submitBtn){\n        submitBtn.addEventListener('click', function(){\n          var customerName = readFreshworksCustomerName(doc);\n          setTimeout(function(){\n            if(handled || hasFreshworksVisibleError(doc)) return;\n            var formStillVisible = form && form.offsetParent !== null;\n            var successText = (doc.body ? doc.body.textContent : '').toLowerCase();\n            var looksSubmitted = successText.indexOf('thank') > -1 || successText.indexOf('success') > -1 || successText.indexOf('submitted') > -1 || !formStillVisible;\n            if(looksSubmitted){\n              handled = true;\n              showQuoteSubmittedSuccess(customerName);\n            }\n          }, 1800);\n        }, true);\n      }\n\n      return true;\n    }catch(e){\n      return false;\n    }\n  }\n\n  function stepEstimate(){\n    var r = calc();\n    var prop = CONFIG.properties.find(function(p){return p.id===state.property;}) || {label:'site'};\n    var sched = CONFIG.schedules.find(function(s){return s.id===state.schedule;});\n    var propPhrase = prop.label.toLowerCase();\n    var hasVideo = state.services.indexOf('video')>-1;\n    var tc = totalCameras();\n    var scope = hasVideo ? ('<b>'+tc+(tc>=100?'+':'')+'-camera '+esc(propPhrase)+'<\/b>') : ('<b>'+esc(propPhrase)+'<\/b>');\n    var schedTxt = hasVideo ? (' with '+esc(sched.phrase)) : '';\n    var context = 'Based on your '+scope+schedTxt+':';\n    var checks = buildFeatures().map(function(f){\n      return '<li><span class=\"tick\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 12l5 5L20 6\"\/><\/svg><\/span>'+esc(f)+'<\/li>';\n    }).join('');\n    var inclBlock = '<div class=\"incl\"><h3>What\u2019s included in this range<\/h3><ul>'+checks+'<\/ul><\/div>';\n\n    \/\/ tailored (no priced services)\n    if(r.monthly <= 0){\n      var isSupport = state.services.indexOf('support')>-1;\n      if(isSupport){\n        var supFeat = ['Trained operators answer in your business name, 24\/7','Simple issues resolved on the spot, the rest escalated','Escalation follows a cascade list you control','Priced from a short scoping assessment with our team'];\n        var supChecks = supFeat.map(function(f){ return '<li><span class=\"tick\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 12l5 5L20 6\"\/><\/svg><\/span>'+esc(f)+'<\/li>'; }).join('');\n        return '<div class=\"est-hero\">'+\n          '<p class=\"est-context\">You picked <b>Support to user<\/b>, customized live assistance for almost anything.<\/p>'+\n          '<div class=\"est-bigrange\" style=\"font-size:clamp(28px,5vw,44px);\">Built around your needs<\/div>'+\n          '<p class=\"est-savings\">From our 24\/7 command center, our operators handle end-user requests on your behalf and escalate what they can\u2019t resolve. Because every program is scoped differently, software, escalation, reporting, languages and SLAs, we build your price from a short assessment with our team.<\/p>'+\n        '<\/div>'+\n        '<div class=\"incl\"><h3>What this includes<\/h3><ul>'+supChecks+'<\/ul><\/div>';\n      }\n      return '<div class=\"est-hero\">'+\n        '<p class=\"est-context\">'+context+'<\/p>'+\n        '<div class=\"est-bigrange\" style=\"font-size:clamp(30px,5.5vw,48px);\">A tailored plan<\/div>'+\n        '<p class=\"est-savings\">Every site is different. A Sirix specialist will recommend the right services and give you an exact price, no guesswork.<\/p>'+\n      '<\/div>'+inclBlock;\n    }\n\n    var lo = round50(r.monthly*0.85), hi = round50(r.monthly*1.2);\n    if(lo<50) lo = 50;\n    if(hi<=lo) hi = lo+100;\n    var savings = '';\n    if(state.services.indexOf('video')>-1){\n      var hpd = sched.id==='always' ? 24 : 12;            \/\/ 24\/7 = 24h\/day, off-hours = 12h\/day\n      var guard = 30 * hpd * 30 * state.sites;             \/\/ $30\/hr on-site guard equivalent, 30-day month\n      var pct = guard>0 ? Math.round((guard - r.monthly)\/guard*100) : 0;\n      if(pct<0) pct = 0;\n      savings = '<p class=\"est-savings\">This typically replaces <b>'+fmt(guard,r.loc)+'\/mo<\/b> in on-site guard costs, a savings of <b>'+pct+'%<\/b>.<\/p>';\n    }\n    var disc = 'This is a ballpark based on your inputs, not a formal quote. Final pricing depends on your exact setup, site layout and volume discounts. Continue to get a detailed quote built for your site.';\n    return '<div class=\"est-hero\">'+\n      '<p class=\"est-context\">'+context+'<\/p>'+\n      '<div class=\"est-bigrange\">'+fmt(lo,r.loc)+' - '+fmt(hi,r.loc)+' \/ month<\/div>'+\n      savings+\n    '<\/div>'+\n    inclBlock+\n    '<p class=\"est-disc\">'+disc+'<\/p>';\n  }\n\n  function stepContact(){\n    var r = calc();\n    var propLabel = (CONFIG.properties.find(function(p){return p.id===state.property;})||{}).label||'Property not selected';\n    var svcCount = state.services.length;\n    var estPill = r.monthly>0 ? '<span class=\"pill\">~'+fmt(r.monthly,r.loc)+'\/mo<\/span>' : '<span class=\"pill\"><b>Tailored<\/b> plan<\/span>';\n    return '<div class=\"step-q\">Get your detailed quote<\/div>'+ \n      '<p class=\"step-sub\">Submit the form below and the Sirix team will follow up with a tailored quote. Your calculator selections are summarized here for context.<\/p>'+ \n      '<div class=\"summary-strip\">'+\n        '<span class=\"pill\">'+esc(propLabel)+'<\/span>'+ \n        '<span class=\"pill\"><b>'+svcCount+'<\/b> service'+(svcCount!==1?'s':'')+'<\/span>'+ \n        (state.services.indexOf('video')>-1 ? '<span class=\"pill\"><b>'+totalCameras()+'<\/b> cameras<\/span>' : '')+ \n        '<span class=\"pill\"><b>'+state.sites+'<\/b> site'+(state.sites!==1?'s':'')+'<\/span>'+ \n        estPill+ \n      '<\/div>'+ \n      '<div id=\"sirixFreshworksMount\" class=\"freshworks-form-wrap\" aria-live=\"polite\">'+\n        '<p class=\"freshworks-loading\">Loading secure quote form...<\/p>'+ \n      '<\/div>';\n  }\n\n  function loadFreshworksForm(){\n    var mount = root.querySelector('#sirixFreshworksMount');\n    if(!mount || mount.getAttribute('data-loaded') === 'true') return;\n    mount.setAttribute('data-loaded', 'true');\n    mount.innerHTML = '';\n\n    var iframe = document.createElement('iframe');\n    iframe.title = 'Sirix quote form';\n    iframe.setAttribute('loading', 'eager');\n    iframe.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');\n    iframe.style.width = '100%';\n    iframe.style.maxWidth = '100%';\n    iframe.style.height = '420px';\n    iframe.style.minHeight = '0';\n    iframe.style.border = '0';\n    iframe.style.display = 'block';\n    iframe.style.background = 'transparent';\n    iframe.style.overflow = 'hidden';\n\n    iframe.srcdoc = `<!DOCTYPE html>\n<html lang=\"ur\">\n<head>

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script id="bv-lazyload-images" data-cfasync="false" bv-exclude="true">var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var bv_lazyload_event_listener="load",bv_lazyload_events=["mousemove","click","keydown","wheel","touchmove","touchend"],bv_use_srcset_attr=!1,BV_DEBUG_MODE=!1,bv_style_observer,img_observer,picture_lazy_observer,bvImageLazyloadObserverOptions={rootMargin:"200px 0px",threshold:.01};function bvDebugLog(...args){BV_DEBUG_MODE&&console.log(...args)}__name(bvDebugLog,"bvDebugLog"),bv_lazyload_event_listener=="load"?window.addEventListener("load",event=>{handle_lazyload_images()}):bv_lazyload_event_listener=="readystatechange"&&document.addEventListener("readystatechange",event=>{document.readyState==="interactive"&&handle_lazyload_images()});function add_lazyload_image_event_listeners(handle_lazyload_images2){bv_lazyload_events.forEach(function(event){document.addEventListener(event,handle_lazyload_images2,!0)})}__name(add_lazyload_image_event_listeners,"add_lazyload_image_event_listeners");function remove_lazyload_image_event_listeners(){bv_lazyload_events.forEach(function(event){document.removeEventListener(event,handle_lazyload_images,!0)})}__name(remove_lazyload_image_event_listeners,"remove_lazyload_image_event_listeners");function bv_replace_lazyloaded_image_url(element2){let src_value=element2.getAttribute("bv-data-src"),srcset_value=element2.getAttribute("bv-data-srcset"),currentSrc=element2.getAttribute("src");currentSrc&&currentSrc.startsWith("data:image/svg+xml")&&(bv_use_srcset_attr&&srcset_value&&element2.setAttribute("srcset",srcset_value),src_value&&element2.setAttribute("src",src_value))}__name(bv_replace_lazyloaded_image_url,"bv_replace_lazyloaded_image_url");function bv_replace_inline_style_image_url(element2){let bv_style_attr=element2.getAttribute("bv-data-style");if(bvDebugLog(bv_style_attr),bv_style_attr){let currentStyles=element2.getAttribute("style")||"",newStyle=currentStyles+(currentStyles?";":"")+bv_style_attr;element2.setAttribute("style",newStyle)}else bvDebugLog("BV_STYLE_ATTRIBUTE_NOT_FOUND : "+entry)}__name(bv_replace_inline_style_image_url,"bv_replace_inline_style_image_url");function handleLazyloadImages(entries){entries.map(entry2=>{entry2.isIntersecting&&(bv_replace_lazyloaded_image_url(entry2.target),img_observer.unobserve(entry2.target))})}__name(handleLazyloadImages,"handleLazyloadImages");function handleOnscreenInlineStyleImages(entries){entries.map(entry2=>{entry2.isIntersecting&&(bv_replace_inline_style_image_url(entry2.target),bv_style_observer.unobserve(entry2.target))})}__name(handleOnscreenInlineStyleImages,"handleOnscreenInlineStyleImages");function handlePictureTags(entries){entries.map(entry2=>{entry2.isIntersecting&&(bv_replace_picture_tag_url(entry2.target),picture_lazy_observer.unobserve(entry2.target))})}__name(handlePictureTags,"handlePictureTags");function bv_replace_picture_tag_url(element2){const child_elements=element2.children;for(let i=0;i<child_elements.length;i++){let child_elem=child_elements[i],_srcset=child_elem.getAttribute("bv-data-srcset"),_src=child_elem.getAttribute("bv-data-src");_srcset&&child_elem.setAttribute("srcset",_srcset),_src&&child_elem.setAttribute("src",_src),bv_replace_picture_tag_url(child_elem)}}__name(bv_replace_picture_tag_url,"bv_replace_picture_tag_url"),"IntersectionObserver"in window&&(bv_style_observer=new IntersectionObserver(handleOnscreenInlineStyleImages,bvImageLazyloadObserverOptions),img_observer=new IntersectionObserver(handleLazyloadImages,bvImageLazyloadObserverOptions),picture_lazy_observer=new IntersectionObserver(handlePictureTags,bvImageLazyloadObserverOptions));function handle_lazyload_images(){"IntersectionObserver"in window?(document.querySelectorAll(".bv-lazyload-bg-style").forEach(target_element=>{bv_style_observer.observe(target_element)}),document.querySelectorAll(".bv-lazyload-tag-img").forEach(img_element=>{img_observer.observe(img_element)}),document.querySelectorAll(".bv-lazyload-picture").forEach(picture_element=>{picture_lazy_observer.observe(picture_element)})):(document.querySelectorAll(".bv-lazyload-bg-style").forEach(target_element=>{bv_replace_inline_style_image_url(target_element)}),document.querySelectorAll(".bv-lazyload-tag-img").forEach(target_element=>{bv_replace_lazyloaded_image_url(target_element)}),document.querySelectorAll(".bv-lazyload-picture").forEach(picture_element=>{bv_replace_picture_tag_url(element)}))}__name(handle_lazyload_images,"handle_lazyload_images");
</script>

<script id="bv-viewport-image-hydration" data-cfasync="false" bv-exclude="true">var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});const BV_VIEWPORT_IMAGE_CLASS="bv-viewport-img",BV_VIEWPORT_IMAGE_SWAP_MODE="src";function getViewportImageDeviceName(){let device_width=window.outerWidth;return device_width<=480?"mobile":device_width<=820?"ipad":device_width<=1536?"desktop":"large"}__name(getViewportImageDeviceName,"getViewportImageDeviceName");function getViewportHydrationAttr(node_element,attr_suffix,device_name){let attr_names=["bv-data-"+device_name+"-"+attr_suffix,"bv-data-large-"+attr_suffix];for(let index=0;index<attr_names.length;index+=1){let attr_value=node_element.getAttribute(attr_names[index]);if(attr_value)return attr_value}return""}__name(getViewportHydrationAttr,"getViewportHydrationAttr");function hydrateViewportImage(node_element){if(!node_element||node_element.getAttribute("bv-viewport-hydrated")==="1")return;let hydrated=!1,device_name=getViewportImageDeviceName(),src_attr=getViewportHydrationAttr(node_element,"src",device_name),srcset_attr=getViewportHydrationAttr(node_element,"srcset",device_name);BV_VIEWPORT_IMAGE_SWAP_MODE==="srcset"&&srcset_attr&&(node_element.setAttribute("srcset",srcset_attr),hydrated=!0),src_attr&&(node_element.setAttribute("src",src_attr),hydrated=!0),hydrated&&node_element.setAttribute("bv-viewport-hydrated","1")}__name(hydrateViewportImage,"hydrateViewportImage");function hydrateViewportImages(){let img_tags=document.querySelectorAll("."+BV_VIEWPORT_IMAGE_CLASS);setTimeout(()=>{img_tags.forEach(img_tag=>{hydrateViewportImage(img_tag)})},0)}__name(hydrateViewportImages,"hydrateViewportImages"),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",hydrateViewportImages):hydrateViewportImages();
</script>

<script id="bv-dl-scripts-list" data-cfasync="false" bv-exclude="true">
var scriptAttrs = [{"attrs":{"defer":true,"data-cfasync":false,"async":false,"bv_inline_delayed":true},"bv_unique_id":"txsY3eDDClyuHyfu78M5","reference":0},{"attrs":{"src":"data:text\/javascript;base64, ZnVuY3Rpb24gYnZfdHJpZ2dlcl9haXJsaWZ0X2V2ZW50KHRhcmdldCwgZXZlbnRfdHlwZSkgewoKICBpZiAoZXZlbnRfdHlwZSA9PT0gInJlYWR5c3RhdGVjaGFuZ2UiKSB7CiAgICBpZiAoYnZfc3RhdGVfY291bnRlciA9PT0gMCkgewogICAgICBidl9zdGF0ZV9jb3VudGVyICs9IDEKICAgICAgYnZfY3VzdG9tX3JlYWR5X3N0YXRlX3ZhbHVlID0gImludGVyYWN0aXZlIgogICAgfSBlbHNlIGlmKGJ2X3N0YXRlX2NvdW50ZXIgPT09IDEpIHsKICAgICAgYnZfc3RhdGVfY291bnRlciArPSAxCiAgICAgIGJ2X2N1c3RvbV9yZWFkeV9zdGF0ZV92YWx1ZSA9ICJjb21wbGV0ZSIKICAgIH0KICB9CgogIGxldCBldmVudF9uYW1lID0gIkFpcmxpZnQiICsgZXZlbnRfdHlwZTsKICBsZXQgc3ludGhldGljRXZlbnQgPSBuZXcgRXZlbnQoZXZlbnRfbmFtZSwgeyBidWJibGVzOiB0cnVlIH0pOwoKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ludGhldGljRXZlbnQsICJ0eXBlIiwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV2ZW50X3R5cGU7IH0sIHNldDogZnVuY3Rpb24gKCkgeyB9IH0pOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzeW50aGV0aWNFdmVudCwgInRhcmdldCIsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0YXJnZXQ7IH0sIHNldDogZnVuY3Rpb24gKCkgeyB9IH0pOwoKICB0YXJnZXQuZGlzcGF0Y2hFdmVudChzeW50aGV0aWNFdmVudCk7Cn0KCmZ1bmN0aW9uIGJ2X2Rpc3BhdGNoRGVsYXllZEV2ZW50cygpIHsKICAgIGJ2X3RyaWdnZXJfYWlybGlmdF9ldmVudChkb2N1bWVudCwgInJlYWR5c3RhdGVjaGFuZ2UiKTsKICAgIGJ2X3RyaWdnZXJfYWlybGlmdF9ldmVudChkb2N1bWVudCwgIkRPTUNvbnRlbnRMb2FkZWQiKTsKCiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBidl90cmlnZ2VyX2FpcmxpZnRfZXZlbnQoZG9jdW1lbnQsICJyZWFkeXN0YXRlY2hhbmdlIik7CgogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBidl90cmlnZ2VyX2FpcmxpZnRfZXZlbnQod2luZG93LCAibG9hZCIpOwogICAgICAgICAgICBidl90cmlnZ2VyX2FpcmxpZnRfZXZlbnQod2luZG93LCAicGFnZXNob3ciKTsKICAgICAgICB9LCAwKTsKICAgIH0sIDApOwp9Cgp2YXIgYnZfc3RhdGVfY291bnRlciA9IDAKCmJ2X2Rpc3BhdGNoRGVsYXllZEV2ZW50cygpOwoK","id":"bv-trigger-listener","type":"text\/javascript","defer":true,"async":false},"bv_unique_id":"d6fe9c24159ed4a27d224d91c70f8fdc","reference":100000000}];
</script>
<script id="bv-web-worker" type="javascript/worker" data-cfasync="false" bv-exclude="true">var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var BV_DEBUG_MODE=!1;function bvDebugLog(...args){BV_DEBUG_MODE&&console.log(...args)}__name(bvDebugLog,"bvDebugLog"),self.onmessage=function(e){var counter=e.data.fetch_urls.length;e.data.fetch_urls.forEach(function(fetch_url){loadUrl(fetch_url,function(){bvDebugLog("DONE: "+fetch_url),counter=counter-1,counter===0&&self.postMessage({status:"SUCCESS"})})})};async function loadUrl(fetch_url,callback){try{var request=new Request(fetch_url,{mode:"no-cors",redirect:"follow"});await fetch(request),callback()}catch(fetchError){bvDebugLog("Fetch Error loading URL:",fetchError);try{var xhr=new XMLHttpRequest;xhr.onerror=callback,xhr.onload=callback,xhr.responseType="blob",xhr.open("GET",fetch_url,!0),xhr.send()}catch(xhrError){bvDebugLog("XHR Error loading URL:",xhrError),callback()}}}__name(loadUrl,"loadUrl");
</script>
<script id="bv-web-worker-handler" data-cfasync="false" bv-exclude="true">var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});if(typeof scriptAttrs<"u"&&Array.isArray(scriptAttrs)&&scriptAttrs.length>0){const lastElement=scriptAttrs[scriptAttrs.length-1];if(lastElement.attrs&&lastElement.attrs.id==="bv-trigger-listener"){var bv_custom_ready_state_value="loading";Object.defineProperty(document,"readyState",{get:__name(function(){return bv_custom_ready_state_value},"get"),set:__name(function(){},"set")})}}if(typeof scriptAttrs>"u"||!Array.isArray(scriptAttrs))var scriptAttrs=[];if(typeof linkStyleAttrs>"u"||!Array.isArray(linkStyleAttrs))var linkStyleAttrs=[];var BV_DEBUG_MODE=!1;function bvDebugLog(...args){BV_DEBUG_MODE&&console.log(...args)}__name(bvDebugLog,"bvDebugLog");function isMobileDevice(){return window.innerWidth<=500}__name(isMobileDevice,"isMobileDevice");var js_dom_loaded=!1;document.addEventListener("DOMContentLoaded",()=>{js_dom_loaded=!0});const EVENTS=["mousemove","click","keydown","wheel","touchmove","touchend"];var scriptUrls=[],styleUrls=[],bvEventCalled=!1,workerFinished=!1,functionExec=!1,scriptsInjected=!1,stylesInjected=!1,bv_load_event_fired=!1,autoInjectTimerStarted=!1;const BV_AUTO_INJECT_ENABLED=!0,BV_DESKTOP_AUTO_INJECT_DELAY=4e3,BV_MOBILE_AUTO_INJECT_DELAY=1e4,BV_WORKER_TIMEOUT_DURATION=3e3;scriptAttrs.forEach((scriptAttr,index)=>{scriptAttr.attrs.src&&!scriptAttr.attrs.src.includes("data:text/javascript")&&(scriptUrls[index]=scriptAttr.attrs.src)}),linkStyleAttrs.forEach((linkAttr,index)=>{styleUrls[index]=linkAttr.attrs.href});var fetchUrls=scriptUrls.concat(styleUrls);function addEventListeners(bvEventHandler2){EVENTS.forEach(function(event){document.addEventListener(event,bvEventFired,!0),document.addEventListener(event,bvEventHandler2,!0)})}__name(addEventListeners,"addEventListeners");function removeEventListeners(){EVENTS.forEach(function(event){document.removeEventListener(event,bvEventHandler,!0)})}__name(removeEventListeners,"removeEventListeners");function bvEventFired(){bvEventCalled||(bvEventCalled=!0,workerFinished=!0)}__name(bvEventFired,"bvEventFired");function bvGetElement(attributes,element){Object.keys(attributes).forEach(function(attr){attr==="async"?element.async=attributes[attr]:attr==="innerHTML"?element.innerHTML=atob(attributes[attr]):element.setAttribute(attr,attributes[attr])})}__name(bvGetElement,"bvGetElement");function bvAddElement(attr,element){var attributes=attr.attrs;if(attributes.bv_inline_delayed){let bvScriptId=attr.bv_unique_id,bvScriptElement=document.querySelector("[bv_unique_id='"+bvScriptId+"']");bvScriptElement?(!attributes.innerHTML&&!attributes.src&&bvScriptElement.textContent.trim()!==""&&(attributes.src="data:text/javascript;base64, "+btoa(unescape(encodeURIComponent(bvScriptElement.textContent)))),bvGetElement(attributes,element),bvScriptElement.after(element)):bvDebugLog(`Script not found for ${bvScriptId}`)}else{bvGetElement(attributes,element);var templateId=attr.bv_unique_id,targetElement=document.querySelector("[id='"+templateId+"']");targetElement&&targetElement.after(element)}}__name(bvAddElement,"bvAddElement");function injectStyles(){if(stylesInjected){bvDebugLog("Styles already injected, skipping");return}stylesInjected=!0,document.querySelectorAll('style[type="bv_inline_delayed_css"], template[id]').forEach(element=>{if(element.tagName.toLowerCase()==="style"){var new_style=document.createElement("style");new_style.type="text/css",new_style.textContent=element.textContent,element.after(new_style),new_style.parentNode?element.remove():bvDebugLog("PARENT NODE NOT FOUND")}else if(element.tagName.toLowerCase()==="template"){var templateId=element.id,linkStyleAttr=linkStyleAttrs.find(attr=>attr.bv_unique_id===templateId);if(linkStyleAttr){var link=document.createElement("link");bvAddElement(linkStyleAttr,link),element.parentNode&&element.parentNode.replaceChild(link,element),bvDebugLog("EXTERNAL STYLE ADDED")}else bvDebugLog(`No linkStyleAttr found for template ID ${templateId}`)}}),linkStyleAttrs.forEach((linkStyleAttr,index)=>{bvDebugLog("STYLE ADDED");var element=document.createElement("link");bvAddElement(linkStyleAttr,element)})}__name(injectStyles,"injectStyles");function injectScripts(){if(scriptsInjected){bvDebugLog("Scripts already injected, skipping");return}scriptsInjected=!0;let last_script_element;scriptAttrs.forEach((scriptAttr,index)=>{if(bv_custom_ready_state_value==="loading"&&scriptAttr.attrs&&scriptAttr.attrs.is_first_defer_element===!0)if(last_script_element){const readyStateScript=document.createElement("script");readyStateScript.src="data:text/javascript;base64, "+btoa(unescape(encodeURIComponent("bv_custom_ready_state_value = 'interactive';"))),readyStateScript.async=!1,last_script_element.after(readyStateScript)}else bv_custom_ready_state_value="interactive",bvDebugLog('Ready state manually set to "interactive"');bvDebugLog("JS ADDED");var element=document.createElement("script");last_script_element=element,bvAddElement(scriptAttr,element)})}__name(injectScripts,"injectScripts");function bvEventHandler(){bvDebugLog("EVENT FIRED"),js_dom_loaded&&bvEventCalled&&workerFinished&&!functionExec&&(functionExec=!0,injectStyles(),injectScripts(),removeEventListeners())}__name(bvEventHandler,"bvEventHandler");function autoInjectScriptsAfterLoad(){js_dom_loaded&&workerFinished&&!scriptsInjected&&!stylesInjected&&(bvDebugLog("Auto-injecting styles and scripts after timer"),injectStyles(),injectScripts())}__name(autoInjectScriptsAfterLoad,"autoInjectScriptsAfterLoad");function startAutoInjectTimer(){if(BV_AUTO_INJECT_ENABLED&&!autoInjectTimerStarted&&bv_load_event_fired&&!bvEventCalled){autoInjectTimerStarted=!0;var delay=isMobileDevice()?BV_MOBILE_AUTO_INJECT_DELAY:BV_DESKTOP_AUTO_INJECT_DELAY;bvDebugLog("Starting auto-inject timer with delay: "+delay+"ms"),setTimeout(function(){autoInjectScriptsAfterLoad()},delay)}}__name(startAutoInjectTimer,"startAutoInjectTimer"),addEventListeners(bvEventHandler);var requestObject=window.URL||window.webkitURL,bvWorker=new Worker(requestObject.createObjectURL(new Blob([document.getElementById("bv-web-worker").textContent],{type:"text/javascript"})));bvWorker.onmessage=function(e){e.data.status==="SUCCESS"&&(bvDebugLog("WORKER_FINISHED"),workerFinished=!0,bvEventHandler(),startAutoInjectTimer())},addEventListener("load",()=>{bvEventHandler(),bv_call_fetch_urls(),bv_load_event_fired=!0});function bv_call_fetch_urls(){!bv_load_event_fired&&!workerFinished&&(bvWorker.postMessage({fetch_urls:fetchUrls}),bv_initiate_worker_timer())}__name(bv_call_fetch_urls,"bv_call_fetch_urls"),setTimeout(function(){bv_call_fetch_urls()},5e3);function bv_initiate_worker_timer(){setTimeout(function(){workerFinished||(bvDebugLog("WORKER_TIMEDOUT"),workerFinished=!0,bvWorker.terminate()),bvEventHandler(),startAutoInjectTimer()},BV_WORKER_TIMEOUT_DURATION)}__name(bv_initiate_worker_timer,"bv_initiate_worker_timer");
</script>
\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Contact Form<\/title>\n<style>\n  @import url(\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800&display=swap\");\n\n  :root{\n    --border: #dcdde1;\n    --border-focus: #14b8a6;\n    --text-dark: #1f2937;\n    --text-placeholder: #9aa0a6;\n    --required: #e11d2a;\n    --radius: 10px;\n  }\n\n  * { box-sizing: border-box; }\n\n  html{\n    margin:0;\n    padding:0;\n    background:transparent;\n    overflow:hidden;\n  }\n\n  body{\n    font-family: \"Montserrat\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    background:transparent;\n    margin:0;\n    padding: 0;\n    min-height:0 !important;\n  }\n\n  \/* ===== Freshworks font lock: force Montserrat inside iframe form ===== *\/\n  html,\n  body,\n  body *,\n  .fs-webform-container,\n  .fs-webform-container *,\n  .fserv-container,\n  .fserv-container *,\n  .fserv-form,\n  .fserv-form *,\n  input,\n  select,\n  textarea,\n  button{\n    font-family: \"Montserrat\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif !important;\n  }\n\n\n  .fs-webform-container,\n  .fserv-container,\n  .fserv-form{\n    min-height:0 !important;\n  }\n\n  .fs-webform-container .fserv-container button {line-height:0 !important;}\n\n  \/* ===== Outer container ===== *\/\n  .fserv-container{\n    width: 100% !important;\n    max-width: 100% !important;\n    margin: 0 !important;\n    padding: 32px;\n    border-radius: 16px !important;\n    box-shadow: none !important;\n    box-sizing: border-box;\n  }\n\n  .fs-webform-container .fserv-container{\n    border-radius: 16px !important;\n    box-shadow: none !important;\n  }\n\n  \/* ===== Grid: turn the stacked fields into 2 columns ===== *\/\n  .fserv-form{\n    display: grid !important;\n    grid-template-columns: 1fr 1fr;\n    gap: 20px 24px;\n    align-items: start;\n    width: 100% !important;\n  }\n\n  \/* Freshworks gives each field wrapper its own fixed width + margin\n     (that's what was causing the huge gaps and the columns not lining\n     up with the grid). Force every field to fill its grid cell instead. *\/\n  .fserv-form .fserv-field,\n  .fserv-form .formserv-text-field,\n  .fserv-form .formserv-email-field,\n  .fserv-form .formserv-tel-field,\n  .fserv-form .formserv-select-field,\n  .fserv-form .formserv-textarea-field,\n  .fserv-form > div{\n    width: 100% !important;\n    max-width: 100% !important;\n    margin: 0 !important;\n    box-sizing: border-box;\n  }\n\n  \/* Fields that should take the full row *\/\n  .fserv-form .formserv-select-field,\n  .fserv-form .formserv-textarea-field,\n  .fserv-form > div:last-child{\n    grid-column: 1 \/ -1;\n  }\n\n  \/* ===== Labels ===== *\/\n  .fserv-label{\n    display:block;\n    font-weight: 600;\n    font-size: 14px;\n    color: var(--text-dark);\n    margin-bottom: 8px;\n  }\n\n  \/* Force Freshworks labels to 600 weight *\/\n  .fs-webform-container .fserv-label{\n    font-weight: 600 !important;\n  }\n\n\n  \/* Freshworks appends the red asterisk automatically for .fserv-required fields.\n     This targets that generated marker. *\/\n  .fserv-required .fserv-label::after{\n    content: \" *\";\n    color: var(--required);\n  }\n\n  \/* ===== Text \/ email inputs ===== *\/\n  .fserv-input-text{\n    width: 100% !important;\n    padding: 13px 16px !important;\n    border: 1px solid var(--border) !important;\n    border-radius: var(--radius) !important;\n    font-size: 15px !important;\n    color: var(--text-dark) !important;\n    background: #fff !important;\n    outline: none !important;\n    transition: border-color .15s ease, box-shadow .15s ease;\n  }\n\n  .fserv-input-text::placeholder{\n    color: var(--text-placeholder) !important;\n    font-weight: 400;\n  }\n\n  .fserv-input-text:focus{\n    border-color: var(--border-focus) !important;\n    box-shadow: 0 0 0 3px rgba(20,184,166,0.15) !important;\n  }\n\n  \/* ===== Auto-filled estimate summary textarea ===== *\/\n  .formserv-textarea-field textarea.fserv-textarea,\n  .fserv-textarea{\n    width: 100% !important;\n    min-height: 150px !important;\n    padding: 13px 16px !important;\n    border: 1px solid var(--border) !important;\n    border-radius: var(--radius) !important;\n    font-size: 15px !important;\n    line-height: 1.5 !important;\n    color: var(--text-dark) !important;\n    background: #fff !important;\n    outline: none !important;\n    resize: vertical !important;\n    font-family: inherit !important;\n    transition: border-color .15s ease, box-shadow .15s ease;\n  }\n\n  .formserv-textarea-field textarea.fserv-textarea:focus,\n  .fserv-textarea:focus{\n    border-color: var(--border-focus) !important;\n    box-shadow: 0 0 0 3px rgba(20,184,166,0.15) !important;\n  }\n\n\n  \/* ===== Hide auto-filled Customer information field from users, but keep it active for backend submission ===== *\/\n  .fs-webform-container .formserv-textarea-field{\n    position: absolute !important;\n    left: -99999px !important;\n    top: auto !important;\n    width: 1px !important;\n    height: 1px !important;\n    min-height: 1px !important;\n    max-height: 1px !important;\n    opacity: 0 !important;\n    overflow: hidden !important;\n    pointer-events: none !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    border: 0 !important;\n  }\n\n  .fs-webform-container .formserv-textarea-field textarea.fserv-textarea{\n    width: 1px !important;\n    height: 1px !important;\n    min-height: 1px !important;\n    max-height: 1px !important;\n    padding: 0 !important;\n    border: 0 !important;\n    resize: none !important;\n  }\n\n  \/* ===== Select2 dropdown (\"Best time to reach you\") ===== *\/\n  .select2-container{\n    width: 100% !important;\n    max-width: 100% !important;\n  }\n\n  .select2-selection--single{\n    height: auto !important;\n    padding: 13px 16px !important;\n    border: 1px solid var(--border) !important;\n    border-radius: var(--radius) !important;\n    display: flex !important;\n    align-items: center;\n  }\n\n  .select2-selection__rendered{\n    padding: 0 !important;\n    font-size: 15px;\n    color: var(--text-dark);\n    line-height: normal !important;\n  }\n\n  .select2-selection__arrow{\n    height: 100% !important;\n    right: 14px !important;\n  }\n\n  .select2-container--default.select2-container--focus .select2-selection--single,\n  .select2-container--open .select2-selection--single{\n    border-color: var(--border-focus) !important;\n    box-shadow: 0 0 0 3px rgba(20,184,166,0.15) !important;\n  }\n\n  \/* ===== Phone field wrapper ===== *\/\n  \/* NOTE: the flag\/country-code dropdown lives inside a Web Component's\n     shadow DOM (<fsa-country-phone>), so outer CSS like border-radius,\n     background, and padding CANNOT reach inside it. Only the visible number\n     input next to it (.fserv-input-text) can be styled from here. *\/\n  fsa-country-phone{\n    display: block;\n  }\n\n  \/* ===== Submit button ===== *\/\n  .fserv-form > div:last-child{\n    display: flex !important;\n    justify-content: center !important;\n    width: 100% !important;\n  }\n\n  .fserv-button-submit{\n    width: auto !important;\n    max-width: 100%;\n    box-sizing: border-box;\n    background: var(--border-focus) !important;\n    color: #fff !important;\n    border: none !important;\n    padding: 16px 40px !important;\n    border-radius: var(--radius) !important;\n    font-size: 15px !important;\n    font-weight: 600 !important;\n    cursor: pointer !important;\n    white-space: nowrap;\n    text-align: center;\n    transition: background .15s ease;\n  }\n  .fserv-button-submit:hover{\n    background:#0d9488 !important;\n  }\n\n  @media (max-width: 640px){\n    .fserv-button-submit{\n      width: 100% !important;\n    }\n  }\n\n  \/* ===== Notifier \/ error banner ===== *\/\n  .fs-notifier{\n    grid-column: 1 \/ -1;\n  }\n\n  \/* ===== \"Powered by Freshworks\" footer ===== *\/\n  .powered-by{\n    grid-column: 1 \/ -1;\n    text-align: center;\n    font-size: 12px;\n    color: #9aa0a6;\n    margin-top: 8px;\n  }\n  .powered-by a{\n    color: #6b7280;\n  }\n\n  \/* ===== Responsive: mobile ===== *\/\n  @media (max-width: 640px){\n    .fserv-form{\n      grid-template-columns: 1fr !important;\n    }\n    .fserv-container{\n      padding: 20px;\n    }\n  }\n<\/style>\n<\/head>\n<body>\n\n<script>\n(function(){\n  var fsScript = document.createElement('script');\n  fsScript.src = 'https:\/\/sirixmonitoring.myfreshworks.com\/crm\/sales\/web_forms\/33c55e0a721e7d475fda78a6c4fba5455718a58d2e6b5e25c4eb5b9298a28f36\/form.js?cb=' + Date.now();\n  fsScript.setAttribute('crossorigin', 'anonymous');\n  fsScript.id = 'fs_33c55e0a721e7d475fda78a6c4fba5455718a58d2e6b5e25c4eb5b9298a28f36';\n  document.body.appendChild(fsScript);\n})();\n<\\\/script>\n\n<\/body>\n<\/html>`;\n\n    iframe.addEventListener('load', function(){\n      try{\n        var doc = iframe.contentDocument || iframe.contentWindow.document;\n        var resize = function(){\n          try{\n            var bodyH = doc.body ? doc.body.scrollHeight : 0;\n            var docH = doc.documentElement ? doc.documentElement.scrollHeight : 0;\n            var form = doc.querySelector('.fs-webform-container, .fserv-container, .fserv-form');\n            var formH = form ? form.getBoundingClientRect().bottom : 0;\n            var h = Math.ceil(Math.max(bodyH, docH, formH, 260));\n            iframe.style.height = (h + 10) + 'px';\n          }catch(e){}\n        };\n\n        var attempts = 0;\n        var maxAttempts = 12;\n        var submitWireAttempts = 0;\n        var maxSubmitWireAttempts = 12;\n\n        var tryAutofill = function(){\n          attempts++;\n          var filled = autofillFreshworksTextarea(doc);\n          resize();\n\n          if(!filled && attempts < maxAttempts){\n            setTimeout(tryAutofill, 700);\n          }\n        };\n\n        var tryWireSubmit = function(){\n          submitWireAttempts++;\n          var wired = wireFreshworksSubmitSuccess(doc);\n          if(!wired && submitWireAttempts < maxSubmitWireAttempts){\n            setTimeout(tryWireSubmit, 700);\n          }\n        };\n\n        resize();\n        setTimeout(tryAutofill, 700);\n        setTimeout(tryWireSubmit, 700);\n        setTimeout(resize, 1600);\n        setTimeout(resize, 3200);\n        setTimeout(resize, 5200);\n      }catch(e){}\n    });\n\n    mount.appendChild(iframe);\n  }\n\n\n  function stepSuccess(){\n    var firstName = (state.name || '').trim().split(\/\\s+\/)[0];\n    var thanks = firstName ? ('Thanks, '+esc(firstName)+'.') : 'Thanks.';\n    return '<div class=\"success\">'+\n      '<div class=\"tick\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 12.5l4.5 4.5L19.5 7\"\/><\/svg><\/div>'+\n      '<h2>Your quote is on its way<\/h2>'+\n      '<p>'+thanks+' A Sirix specialist will prepare your detailed quote and reach out during your preferred time. Most quotes land within one business day.<\/p>'+\n      '<\/div>';\n  }\n\n  var RENDER = [stepProperty, stepServices, stepDetails, stepEstimate, stepContact];\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 VALIDATION \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  function stepValid(){\n    if(state.step===0) return !!state.property;\n    if(state.step===1) return state.services.length>0;\n    if(state.step===2) return true;\n    if(state.step===3) return true;\n    if(state.step===4) return true;\n    return true;\n  }\n  function validContact(){\n    var okEmail = \/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$\/.test(state.email.trim());\n    var okPhone = state.phone.replace(\/\\D\/g,'').length>=7;\n    return state.name.trim().length>1 && okEmail && okPhone;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 NAV \/ PAINT \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  var done = false;\n  function paint(){\n    if(done){\n      body.innerHTML = stepSuccess();\n      var estTopDone = $('.est-top');\n      if(estTopDone) estTopDone.style.display = 'none';\n      $('.est-foot').style.display = 'none';\n      return;\n    }\n    var estTopActive = $('.est-top');\n    if(estTopActive) estTopActive.style.display = '';\n    $('.est-foot').style.display = '';\n    body.innerHTML = RENDER[state.step]();\n    var pct = Math.round(((state.step+1)\/TOTAL)*100);\n    $('#progStep').textContent = 'Step '+(state.step+1)+' of '+TOTAL+' \u00b7 '+STEP_NAMES[state.step];\n    $('#progPct').textContent = pct+'%';\n    $('#progFill').style.width = pct+'%';\n    btnBack.classList.toggle('hidden', state.step===0);\n    $('.est-foot').classList.toggle('contact-mode', state.step===4);\n    btnNext.style.display = state.step===4 ? 'none' : '';\n    btnNext.innerHTML = state.step===3\n      ? 'Looks good, continue<svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"\/><\/svg>'\n      : 'Continue<svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"\/><\/svg>';\n    btnNext.disabled = !stepValid();\n    wire();\n    if(state.step===4) loadFreshworksForm();\n  }\n\n  function wire(){\n    \/\/ property\n    body.querySelectorAll('[data-prop]').forEach(function(el){\n      el.addEventListener('click', function(){ state.property = el.getAttribute('data-prop'); paint(); });\n    });\n    \/\/ services: all options toggle only. No service should auto-advance.\n    body.querySelectorAll('[data-svc]').forEach(function(el){\n      el.addEventListener('click', function(){\n        var id = el.getAttribute('data-svc');\n        var i = state.services.indexOf(id);\n\n        if(i > -1){\n          state.services.splice(i, 1);\n        }else{\n          state.services.push(id);\n        }\n\n        el.classList.toggle('sel', state.services.indexOf(id) > -1);\n        btnNext.disabled = !stepValid();\n      });\n    });\n    \/\/ details\n    \/\/ setup step: site count stepper + per-site name & camera sliders\n    var sMinus = $('#siteMinus'), sPlus = $('#sitePlus');\n    if(sMinus){\n      sMinus.disabled = state.sites<=1;\n      sMinus.addEventListener('click', function(){ if(state.sites>1){ syncSites(state.sites-1); paint(); } });\n      sPlus.addEventListener('click', function(){ if(state.sites<10){ syncSites(state.sites+1); paint(); } });\n    }\n    body.querySelectorAll('.siteName').forEach(function(el){\n      el.addEventListener('input', function(){ state.siteData[+el.getAttribute('data-i')].name = el.value; });\n    });\n    body.querySelectorAll('.siteCam').forEach(function(el){\n      el.addEventListener('input', function(){\n        var i = +el.getAttribute('data-i'), v = +el.value;\n        state.siteData[i].cameras = v;\n        var lbl = body.querySelector('.siteCamVal[data-i=\"'+i+'\"]');\n        if(lbl) lbl.innerHTML = v + (v>=100?'+':'') + ' <small>cameras<\/small>';\n      });\n    });\n    \/\/ tier options (intercom \/ gate)\n    body.querySelectorAll('.tier-opt').forEach(function(el){\n      el.addEventListener('click', function(){\n        var g = el.getAttribute('data-tiergroup');\n        state[g+'Tier'] = el.getAttribute('data-tierid');\n        body.querySelectorAll('.tier-opt[data-tiergroup=\"'+g+'\"]').forEach(function(x){ x.classList.toggle('sel', x===el); });\n      });\n    });\n    \/\/ lone worker users stepper\n    var uMinus = $('#userMinus'), uPlus = $('#userPlus');\n    if(uMinus){\n      var uupd = function(){ $('#userNum').textContent = state.loneUsers; uMinus.disabled = state.loneUsers<=1; };\n      uMinus.addEventListener('click', function(){ if(state.loneUsers>1){ state.loneUsers--; uupd(); } });\n      uPlus.addEventListener('click', function(){ if(state.loneUsers<200){ state.loneUsers++; uupd(); } });\n      uupd();\n    }\n    body.querySelectorAll('[data-sched]').forEach(function(el){\n      el.addEventListener('click', function(){\n        state.schedule = el.getAttribute('data-sched');\n        body.querySelectorAll('[data-sched]').forEach(function(x){ x.classList.toggle('sel', x===el); });\n      });\n    });\n    var loc = $('#locInput');\n    if(loc) loc.addEventListener('input', function(){ state.locationText = loc.value; });\n    \/\/ Freshworks owns the contact form on the final step.\n  }\n\n  btnNext.addEventListener('click', function(){\n    if(!stepValid()) return;\n    if(state.step===4){ return; }\n    state.step++; paint();\n  });\n  btnBack.addEventListener('click', function(){ if(state.step>0){ state.step--; paint(); } });\n\n  paint();\n})();\n\n<\/script>\t\t\t\t<\/div>\n\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":"<p>Instant estimate Step 1 of 5 \u00b7 Property 20% Back Continue<\/p>","protected":false},"author":29,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-103276","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"\n<title>Cost calculator - Sirix Monitoring<\/title>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cost calculator\" \/>\n<meta property=\"og:description\" content=\"Instant estimate Step 1 of 5 \u00b7 Property 20% Back Continue\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sirixmonitoring.com\/fr-ca\/cost-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Sirix Monitoring\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/sirixmonitoring\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-09T16:19:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2026\/01\/Sirix-logo-for-home-page-table.svg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimation du temps de lecture\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n","yoast_head_json":{"title":"Cost calculator - Sirix Monitoring","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"fr_CA","og_type":"article","og_title":"Cost calculator","og_description":"Instant estimate Step 1 of 5 \u00b7 Property 20% Back Continue","og_url":"https:\/\/sirixmonitoring.com\/fr-ca\/cost-calculator\/","og_site_name":"Sirix Monitoring","article_publisher":"https:\/\/www.facebook.com\/sirixmonitoring","article_modified_time":"2026-07-09T16:19:19+00:00","og_image":[{"url":"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2026\/01\/Sirix-logo-for-home-page-table.svg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Estimation du temps de lecture":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/","url":"https:\/\/sirixmonitoring.com\/cost-calculator\/","name":"Cost calculator - Sirix Monitoring","isPartOf":{"@id":"https:\/\/sirixmonitoring.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#primaryimage"},"image":{"@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2026\/01\/Sirix-logo-for-home-page-table.svg","datePublished":"2026-07-09T10:31:29+00:00","dateModified":"2026-07-09T16:19:19+00:00","breadcrumb":{"@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sirixmonitoring.com\/cost-calculator\/"]}]},{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#primaryimage","url":"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2026\/01\/Sirix-logo-for-home-page-table.svg","contentUrl":"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2026\/01\/Sirix-logo-for-home-page-table.svg"},{"@type":"BreadcrumbList","@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sirixmonitoring.com\/"},{"@type":"ListItem","position":2,"name":"Cost calculator"}]},{"@type":"WebSite","@id":"https:\/\/sirixmonitoring.com\/#website","url":"https:\/\/sirixmonitoring.com\/","name":"Sirix","description":"Services et solutions de s\u00e9curit\u00e9 pour les entreprises","publisher":{"@id":"https:\/\/sirixmonitoring.com\/#organization"},"alternateName":"Sirix Monitoring","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sirixmonitoring.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-CA"},{"@type":["Organization","Place"],"@id":"https:\/\/sirixmonitoring.com\/#organization","name":"Sirix","alternateName":"Sirix Monitoring","url":"https:\/\/sirixmonitoring.com\/","logo":{"@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#local-main-organization-logo"},"image":{"@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/sirixmonitoring","https:\/\/mastodon.social\/@sirixmonitoringofficial","https:\/\/www.linkedin.com\/company\/sirix\/","https:\/\/www.youtube.com\/@sirix_monitoring\/videos"],"description":"Sirix is a state-of-the-art security operation center that provides security dealers with expert services and cutting-edge remote live monitoring solutions to manage and protect their clients' organizations across North America. Video surveillance, remote concierge, remote gate control, alarm video verification, virtual guard tour, voice talk-down, and infrastructure monitoring are among the services we offer.","legalName":"Sirix Monitoring","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"501","maxValue":"1000"},"telephone":[],"openingHoursSpecification":{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],"opens":"00:00","closes":"23:59"}},{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/sirixmonitoring.com\/cost-calculator\/#local-main-organization-logo","url":"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2023\/05\/sirix-logo-1.png","contentUrl":"https:\/\/sirixmonitoring.com\/wp-content\/uploads\/2023\/05\/sirix-logo-1.png","width":711,"height":277,"caption":"Sirix"}]}},"_links":{"self":[{"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/pages\/103276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/comments?post=103276"}],"version-history":[{"count":7,"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/pages\/103276\/revisions"}],"predecessor-version":[{"id":103354,"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/pages\/103276\/revisions\/103354"}],"wp:attachment":[{"href":"https:\/\/sirixmonitoring.com\/fr-ca\/wp-json\/wp\/v2\/media?parent=103276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- This website is optimized by Airlift. Learn more: https://airlift.net. Template:. Learn more: https://airlift.net. Template: 6a513510db888a0713b68f01. Config Timestamp: 2026-07-10 18:08:15 UTC, Cached Timestamp: 2026-07-11 21:23:21 UTC -->