{"id":1702,"date":"2026-10-12T07:19:37","date_gmt":"2026-10-12T07:19:37","guid":{"rendered":"https:\/\/web.annulartechnologies.com\/staging\/testing\/"},"modified":"2026-10-20T12:31:11","modified_gmt":"2026-10-20T12:31:11","slug":"testing","status":"publish","type":"page","link":"https:\/\/web.annulartechnologies.com\/staging\/testing\/","title":{"rendered":"Testing"},"content":{"rendered":"\n<div id=\"annular-project-estimator\">\n<div id=\"ape_toast_notification\" style=\"position:fixed !important; top:24px !important; left:50% !important; transform:translateX(-50%) translateY(-120px) !important; background:#0f172a !important; color:#ffffff !important; padding:12px 24px !important; border-radius:999px !important; font-size:13.5px !important; font-weight:700 !important; display:flex !important; align-items:center !important; gap:10px !important; box-shadow:0 14px 35px rgba(0,0,0,0.25) !important; z-index:2147483647 !important; transition:transform 0.4s cubic-bezier(0.16,1,0.3,1) !important; pointer-events:none !important; border:1px solid rgba(255,255,255,0.15) !important;\"><span style=\"display:inline-flex !important; align-items:center !important; justify-content:center !important; width:22px !important; height:22px !important; border-radius:50% !important; background:#10b981 !important; color:#ffffff !important; flex-shrink:0 !important;\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"><polyline points=\"20 6 9 17 4 12\"><\/polyline><\/svg><\/span><span>Estimate submitted to Annular enquiry team!<\/span><\/div>\n<style>@import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800;900&display=swap'); #annular-project-estimator {\n  font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;\n  color: #0f172a !important;\n  width: 100% !important;\n  max-width: 1180px !important;\n  margin: 20px auto 40px auto !important;\n  padding: 50px 20px 80px 20px !important;\n  background-color: #f8fafc !important;\n  background-image: \n    radial-gradient(ellipse 65% 50% at 50% 32%, rgba(37, 99, 235, 0.10) 0%, rgba(99, 102, 241, 0.04) 60%, transparent 85%),\n    radial-gradient(circle at 10% 18%, rgba(14, 165, 233, 0.08) 0%, transparent 45%),\n    radial-gradient(circle at 90% 22%, rgba(99, 102, 241, 0.08) 0%, transparent 45%),\n    linear-gradient(180deg, #f8fafc 0%, #edf5fe 42%, #f1f5f9 100%) !important;\n  border: 1px solid #e2e8f0 !important;\n  border-radius: 28px !important;\n  box-shadow: 0 12px 35px -12px rgba(15, 23, 42, 0.05), 0 1px 3px rgba(15, 23, 42, 0.02) !important;\n  box-sizing: border-box !important;\n  line-height: 1.5 !important;\n  position: relative !important;\n  min-height: 70vh !important;\n} #annular-project-estimator * { box-sizing: border-box !important; font-family: inherit !important; } #annular-project-estimator p:empty, #annular-project-estimator br { display: none !important; } #annular-project-estimator p, #annular-project-estimator label, #annular-project-estimator h1, #annular-project-estimator h2, #annular-project-estimator h3 { margin: 0; padding: 0; } .ape-step-pane { animation: apeFadeIn 0.3s ease forwards; } @keyframes apeFadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } .ape-hero-card { background: #ffffff !important; border: 1px solid #e2e8f0 !important; border-radius: 20px !important; padding: 38px 36px 30px 36px !important; max-width: 500px !important; width: 100% !important; margin: 25px auto 40px auto !important; text-align: center !important; box-shadow: 0 16px 36px -10px rgba(15, 23, 42, 0.08), 0 1px 3px rgba(15, 23, 42, 0.04) !important; position: relative !important; } .ape-badge-pill { display: inline-flex !important; align-items: center !important; justify-content: center !important; gap: 7px !important; padding: 0 16px !important; height: 30px !important; background: #eff6ff !important; border: 1px solid #bfdbfe !important; border-radius: 999px !important; color: #1d4ed8 !important; font-size: 12px !important; font-weight: 700 !important; margin: 0 auto 16px auto !important; } .ape-badge-pill span { line-height: 30px !important; } .ape-badge-pill svg { display: block !important; flex-shrink: 0 !important; } #annular-project-estimator .ape-hero-title, .ape-hero-title { font-size: 26px !important; font-weight: 800 !important; color: #0f172a !important; letter-spacing: -0.02em !important; margin: 0 0 10px 0 !important; line-height: 1.25 !important; text-align: center !important; } .ape-hero-desc { font-size: 14px !important; color: #64748b !important; line-height: 1.55 !important; margin: 0 auto 24px auto !important; max-width: 420px !important; text-align: center !important; } .ape-input-group { text-align: left !important; margin: 0 0 20px 0 !important; } .ape-input-label { display: block !important; font-size: 13.5px !important; font-weight: 700 !important; color: #0f172a !important; margin: 0 0 8px 0 !important; line-height: 1.3 !important; } #annular-project-estimator .ape-input-field-group { display: flex !important; align-items: center !important; width: 100% !important; height: 50px !important; background: #ffffff !important; border: 1.5px solid #cbd5e1 !important; border-radius: 12px !important; overflow: hidden !important; box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04) !important; transition: border-color 0.2s ease, box-shadow 0.2s ease !important; margin: 0 !important; padding: 0 !important; } #annular-project-estimator .ape-input-field-group:hover { border-color: #94a3b8 !important; } #annular-project-estimator .ape-input-field-group:focus-within { border-color: #1765ff !important; box-shadow: 0 0 0 4px rgba(23, 101, 255, 0.14) !important; } #annular-project-estimator .ape-input-icon-cell { display: flex !important; align-items: center !important; justify-content: center !important; width: 44px !important; min-width: 44px !important; height: 50px !important; color: #64748b !important; flex-shrink: 0 !important; background: transparent !important; margin: 0 !important; padding: 0 !important; } #annular-project-estimator .ape-input-icon-cell svg { display: block !important; margin: auto !important; } #annular-project-estimator .ape-input-field-group p { flex: 1 1 0% !important; width: 100% !important; min-width: 0 !important; max-width: 100% !important; height: 50px !important; line-height: 50px !important; margin: 0 !important; padding: 0 !important; display: flex !important; align-items: center !important; } #annular-project-estimator .ape-input-field-group p input, #annular-project-estimator .ape-input-field-group input, #annular-project-estimator input.ape-input-element, #annular-project-estimator input[type=\"email\"].ape-input-element { flex: 1 1 0% !important; width: 100% !important; min-width: 0 !important; max-width: 100% !important; display: block !important; height: 50px !important; line-height: 50px !important; border: none !important; outline: none !important; box-shadow: none !important; background: transparent !important; padding: 0 16px 0 0 !important; margin: 0 !important; font-size: 15px !important; color: #0f172a !important; font-weight: 500 !important; vertical-align: middle !important; } #annular-project-estimator input.ape-input-element::placeholder { color: #94a3b8 !important; opacity: 1 !important; line-height: normal !important; } #annular-project-estimator input:-webkit-autofill, #annular-project-estimator input:-webkit-autofill:hover, #annular-project-estimator input:-webkit-autofill:focus, #annular-project-estimator input:-webkit-autofill:active { -webkit-box-shadow: 0 0 0 50px #ffffff inset !important; -webkit-text-fill-color: #0f172a !important; transition: background-color 5000s ease-in-out 0s !important; } #annular-project-estimator input.ape-input-standard { width: 100% !important; min-width: 0 !important; max-width: 100% !important; display: block !important; height: 48px !important; border: 1.5px solid #cbd5e1 !important; border-radius: 10px !important; padding: 0 16px !important; font-size: 14.5px !important; color: #0f172a !important; background: #ffffff !important; outline: none !important; box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04) !important; transition: all 0.2s ease !important; margin: 0 !important; } #annular-project-estimator input.ape-input-standard:focus { border-color: #1765ff !important; box-shadow: 0 0 0 4px rgba(23, 101, 255, 0.12) !important; } .ape-input-hint { font-size: 12px !important; color: #64748b !important; margin: 8px 0 0 0 !important; padding: 0 !important; line-height: 1.4 !important; text-align: left !important; } .ape-btn-primary { height: 44px; padding: 0 20px; background: #1765ff !important; color: #ffffff !important; border: none !important; border-radius: 10px !important; font-size: 13.5px !important; font-weight: 700 !important; cursor: pointer !important; display: inline-flex !important; align-items: center !important; justify-content: center !important; gap: 8px !important; transition: all 0.2s ease !important; box-shadow: 0 4px 14px rgba(23, 101, 255, 0.25) !important; vertical-align: middle !important; } .ape-btn-primary:hover { background: #0f52d6 !important; transform: translateY(-1px) !important; box-shadow: 0 6px 18px rgba(23, 101, 255, 0.35) !important; } .ape-btn-secondary { height: 44px; padding: 0 18px; background: #ffffff !important; color: #334155 !important; border: 1.5px solid #cbd5e1 !important; border-radius: 10px !important; font-size: 13.5px !important; font-weight: 700 !important; cursor: pointer !important; display: inline-flex !important; align-items: center !important; justify-content: center !important; gap: 8px !important; transition: all 0.2s ease !important; vertical-align: middle !important; } .ape-btn-secondary:hover { background: #f8fafc !important; border-color: #94a3b8 !important; color: #0f172a !important; transform: translateY(-1px) !important; } .ape-btn-hero-primary { width: 100% !important; height: 50px !important; font-size: 15px !important; font-weight: 700 !important; border-radius: 12px !important; background: #1765ff !important; color: #ffffff !important; border: none !important; cursor: pointer !important; display: flex !important; align-items: center !important; justify-content: center !important; gap: 8px !important; margin: 0 !important; padding: 0 20px !important; box-shadow: 0 4px 14px rgba(23, 101, 255, 0.3) !important; transition: all 0.2s ease !important; } .ape-btn-hero-primary:hover { background: #0f52d6 !important; transform: translateY(-1px) !important; box-shadow: 0 6px 18px rgba(23, 101, 255, 0.4) !important; } .ape-btn-hero-primary span { line-height: 1 !important; } .ape-btn-hero-primary svg { display: block !important; } .ape-hero-trust-row { display: flex !important; align-items: center !important; justify-content: center !important; gap: 14px !important; margin: 22px 0 0 0 !important; padding: 18px 0 0 0 !important; border-top: 1px solid #f1f5f9 !important; width: 100% !important; } .ape-trust-item { display: inline-flex !important; align-items: center !important; gap: 6px !important; font-size: 12px !important; font-weight: 600 !important; color: #64748b !important; line-height: 1 !important; margin: 0 !important; } .ape-trust-item svg { display: block !important; } .ape-trust-sep { color: #cbd5e1 !important; font-size: 12px !important; line-height: 1 !important; margin: 0 !important; } .ape-error-text { color: #ef4444; font-size: 13px; font-weight: 600; margin-top: 6px; display: none; } .ape-section-header { text-align: center !important; margin-bottom: 20px; } .ape-step-pill { display: none !important; } #annular-project-estimator .ape-section-title, .ape-section-title { font-size: 20px !important; font-weight: 800; color: #0f172a; margin-bottom: 8px; text-align: center !important; line-height: 1.3; } #annular-project-estimator .ape-section-subtitle, .ape-section-subtitle { font-size: 13.5px !important; color: #64748b; max-width: 560px; margin: 0 auto 18px auto !important; text-align: center !important; display: block !important; line-height: 1.5; } .ape-top-nav-bar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; gap: 12px; flex-wrap: wrap; } .ape-sector-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px; margin-bottom: 32px; } .ape-sector-card { background: #ffffff; border: 1.5px solid #e2e8f0; border-radius: 14px; padding: 16px 18px; cursor: pointer; position: relative; display: flex; flex-direction: column; transition: all 0.2s ease; } .ape-sector-card:hover { border-color: #93c5fd; transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.06); } .ape-sector-card.selected { border-color: #1765ff !important; background: #eff6ff !important; box-shadow: 0 0 0 2px #1765ff, 0 10px 24px -6px rgba(23, 101, 255, 0.16) !important; } .ape-sector-card-icon { font-size: 24px; margin-bottom: 8px; } .ape-sector-card-title { font-size: 15px; font-weight: 700; color: #0f172a; margin-bottom: 4px; padding-right: 26px; } .ape-sector-card-desc { font-size: 12px; color: #64748b; line-height: 1.45; margin-bottom: 0; } .ape-sector-card-pill { display: inline-block; background: #f1f5f9; color: #1765ff; font-size: 11px; font-weight: 700; padding: 4px 10px; border-radius: 999px; align-self: flex-start; } .ape-sector-card.selected .ape-sector-card-pill { background: #1765ff !important; color: #ffffff !important; } .ape-sector-card-check { position: absolute; top: 16px; right: 16px; width: 24px; height: 24px; border-radius: 50%; border: 1.5px solid #cbd5e1; display: flex; align-items: center; justify-content: center; background: #ffffff; transition: all 0.2s ease; } .ape-sector-card-check svg { width: 14px; height: 14px; stroke: #ffffff; stroke-width: 3; fill: none; opacity: 0; } .ape-sector-card.selected .ape-sector-card-check { background: #1765ff !important; border-color: #1765ff !important; } .ape-sector-card.selected .ape-sector-card-check svg { opacity: 1; } .ape-modules-banner { background: #f8fafc; border: 1.5px solid #e2e8f0; border-radius: 16px; padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; flex-wrap: wrap; gap: 12px; } .ape-modules-banner-left { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .ape-active-preset-badge { background: #1765ff !important; color: #ffffff !important; padding: 6px 14px; border-radius: 999px; font-size: 12px; font-weight: 700; } .ape-active-preset-text { font-size: 13px; color: #475569; font-weight: 600; } .ape-bulk-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .ape-btn-tiny { background: #ffffff; border: 1px solid #cbd5e1; padding: 6px 12px; border-radius: 8px; font-size: 12px; font-weight: 700; color: #475569; cursor: pointer; transition: all 0.15s ease; height: 34px; } .ape-btn-tiny:hover { background: #f1f5f9; color: #0f172a; } .ape-cat-block { margin-bottom: 24px; } .ape-cat-heading { font-size: 14px; font-weight: 800; color: #334155; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 12px; display: flex; align-items: center; } .ape-mod-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; } .ape-mod-card { background: #ffffff; border: 1.5px solid #e2e8f0; border-radius: 12px; padding: 12px 14px; cursor: pointer; display: flex; align-items: center; gap: 12px; transition: all 0.15s ease; user-select: none; } .ape-mod-card:hover { border-color: #93c5fd; background: #fafafa; } .ape-mod-card.selected { border-color: #1765ff !important; background: #eff6ff !important; } .ape-mod-check { width: 20px; height: 20px; border-radius: 6px; border: 1.5px solid #cbd5e1; display: flex; align-items: center; justify-content: center; flex-shrink: 0; background: #ffffff; transition: all 0.15s ease; } .ape-mod-check svg { width: 12px; height: 12px; stroke: #ffffff; stroke-width: 3; fill: none; opacity: 0; } .ape-mod-card.selected .ape-mod-check { background: #1765ff !important; border-color: #1765ff !important; } .ape-mod-card.selected .ape-mod-check svg { opacity: 1; } .ape-mod-name { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } .ape-nav-bar { display: flex; align-items: center; justify-content: space-between; margin-top: 32px; padding-top: 20px; border-top: 1px solid #e2e8f0; gap: 16px; } .ape-contact-card { background: #ffffff !important; border: 1px solid #e2e8f0 !important; border-radius: 20px !important; padding: 40px 36px !important; max-width: 550px !important; margin: 0 auto !important; box-shadow: 0 10px 30px -10px rgba(15, 23, 42, 0.08), 0 2px 6px rgba(15, 23, 42, 0.04) !important; } .ape-email-confirm-box { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 12px; padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; } .ape-email-confirm-box span { font-size: 13px; color: #475569; } .ape-email-confirm-box strong { color: #1765ff; font-size: 14px; } .ape-email-confirm-box a { font-size: 12px; font-weight: 700; color: #1765ff; text-decoration: underline; cursor: pointer; } .ape-modal-overlay { position: fixed !important; top: 0 !important; left: 0 !important; width: 100vw !important; height: 100vh !important; background: rgba(15, 23, 42, 0.6) !important; backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important; z-index: 2147483647 !important; display: none !important; align-items: center !important; justify-content: center !important; padding: 20px !important; box-sizing: border-box !important; } .ape-modal-overlay.active { display: flex !important; } .ape-modal-box { background: #ffffff !important; border: 1px solid rgba(226, 232, 240, 0.9) !important; border-radius: 24px !important; padding: 36px 30px 28px 30px !important; max-width: 440px !important; width: 100% !important; box-shadow: 0 30px 70px -15px rgba(15, 23, 42, 0.25), 0 0 0 1px rgba(15, 23, 42, 0.04) !important; text-align: center !important; position: relative !important; animation: apeModalPop 0.25s cubic-bezier(0.16, 1, 0.3, 1) forwards !important; box-sizing: border-box !important; margin: auto !important; } @keyframes apeModalPop { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } } .ape-modal-close-btn { position: absolute !important; top: 16px !important; right: 16px !important; width: 32px !important; height: 32px !important; border-radius: 50% !important; background: #f1f5f9 !important; border: none !important; display: flex !important; align-items: center !important; justify-content: center !important; color: #64748b !important; cursor: pointer !important; transition: all 0.15s ease !important; line-height: 1 !important; padding: 0 !important; } .ape-modal-close-btn:hover { background: #e2e8f0 !important; color: #0f172a !important; transform: scale(1.05) !important; } .ape-modal-icon-badge { width: 52px !important; height: 52px !important; border-radius: 50% !important; background: #f0fdf4 !important; border: 4px solid #dcfce7 !important; display: flex !important; align-items: center !important; justify-content: center !important; margin: 0 auto 14px auto !important; box-shadow: 0 4px 12px rgba(22, 163, 74, 0.15) !important; } .ape-modal-title { font-size: 22px !important; font-weight: 800 !important; color: #0f172a !important; margin: 0 0 6px 0 !important; letter-spacing: -0.01em !important; line-height: 1.25 !important; } .ape-modal-desc { font-size: 13px !important; color: #64748b !important; line-height: 1.45 !important; margin: 0 0 16px 0 !important; } .ape-modal-dest-card { background: #f8fafc !important; border: 1.5px solid #e2e8f0 !important; border-radius: 14px !important; padding: 12px 14px !important; text-align: left !important; margin: 0 0 14px 0 !important; display: flex !important; flex-direction: column !important; gap: 8px !important; } .ape-modal-dest-row { display: flex !important; align-items: center !important; gap: 10px !important; } .ape-dest-icon { width: 28px !important; height: 28px !important; border-radius: 8px !important; background: #ffffff !important; border: 1px solid #e2e8f0 !important; display: flex !important; align-items: center !important; justify-content: center !important; flex-shrink: 0 !important; } .ape-dest-info { display: flex !important; flex-direction: column !important; overflow: hidden !important; } .ape-dest-label { font-size: 10.5px !important; font-weight: 700 !important; color: #94a3b8 !important; text-transform: uppercase !important; letter-spacing: 0.04em !important; line-height: 1.1 !important; margin-bottom: 2px !important; } .ape-dest-val { font-size: 13px !important; font-weight: 700 !important; color: #0f172a !important; line-height: 1.2 !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; } .ape-modal-dest-divider { height: 1px !important; background: #edf2f7 !important; width: 100% !important; margin: 2px 0 !important; } .ape-sandbox-tag { display: inline-flex !important; align-items: center !important; justify-content: center !important; gap: 8px !important; background: #eff6ff !important; border: 1px dashed #93c5fd !important; border-radius: 10px !important; padding: 7px 14px !important; margin: 0 auto 16px auto !important; cursor: pointer !important; transition: all 0.15s ease !important; user-select: none !important; } .ape-sandbox-tag:hover { background: #dbeafe !important; border-color: #3b82f6 !important; transform: translateY(-1px) !important; } .ape-sandbox-label { font-size: 12px !important; font-weight: 600 !important; color: #1e40af !important; } .ape-sandbox-code { font-size: 13.5px !important; font-weight: 800 !important; color: #1d4ed8 !important; letter-spacing: 0.05em !important; background: #ffffff !important; padding: 2px 8px !important; border-radius: 6px !important; border: 1px solid #bfdbfe !important; } .ape-sandbox-autofill { font-size: 11px !important; font-weight: 700 !important; color: #2563eb !important; text-decoration: underline !important; } .ape-otp-inputs { display: flex !important; justify-content: center !important; gap: 12px !important; margin: 0 auto 18px auto !important; } .ape-otp-input { width: 56px !important; height: 60px !important; border: 2px solid #cbd5e1 !important; border-radius: 12px !important; font-size: 24px !important; font-weight: 800 !important; text-align: center !important; color: #0f172a !important; outline: none !important; transition: all 0.15s ease !important; background: #ffffff !important; padding: 0 !important; margin: 0 !important; } .ape-otp-input:focus { border-color: #1765ff !important; box-shadow: 0 0 0 4px rgba(23, 101, 255, 0.15) !important; } .ape-btn-link { background: transparent !important; border: none !important; color: #64748b !important; font-size: 13px !important; font-weight: 600 !important; cursor: pointer !important; text-decoration: underline !important; padding: 10px 0 0 0 !important; margin: 10px auto 0 auto !important; display: inline-block !important; transition: color 0.15s ease !important; } .ape-btn-link:hover { color: #0f172a !important; } .ape-proposal-card { background: #ffffff; border: 1.5px solid #e2e8f0; border-radius: 24px; padding: 44px 36px; max-width: 880px; margin: 0 auto; box-shadow: 0 20px 40px -15px rgba(15, 23, 42, 0.08); } .ape-proposal-hero { text-align: center; padding-bottom: 28px; border-bottom: 1px solid #e2e8f0; margin-bottom: 28px; } .ape-price-badge { font-size: 14px; font-weight: 700; color: #64748b; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 8px; } .ape-price-val { font-size: clamp(34px, 4vw, 44px); font-weight: 900; color: #1765ff !important; letter-spacing: -0.02em; } .ape-proposal-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 14px; padding: 16px 20px; margin-bottom: 28px; } .ape-proposal-grid-item span { display: block; font-size: 12px; color: #64748b; margin-bottom: 2px; } .ape-proposal-grid-item strong { font-size: 14px; color: #0f172a; } .ape-table { width: 100%; border-collapse: collapse; margin-bottom: 28px; } .ape-table th { background: #f1f5f9; font-size: 12px; font-weight: 700; text-transform: uppercase; color: #475569; padding: 12px 14px; text-align: left; border-bottom: 1.5px solid #cbd5e1; } .ape-table td { padding: 12px 14px; font-size: 13.5px; color: #334155; border-bottom: 1px solid #f1f5f9; } .ape-table tr:hover td { background: #f8fafc; } @media print { body * { visibility: hidden; } #annular-project-estimator, #annular-project-estimator * { visibility: visible; } #annular-project-estimator { position: absolute; left: 0; top: 0; width: 100% !important; padding: 0 !important; } .ape-nav-bar, .ape-top-nav-bar { display: none !important; } } @media (max-width: 640px) { .ape-hero-card, .ape-contact-card, .ape-proposal-card { padding: 28px 18px !important; } .ape-top-nav-bar { flex-direction: column; align-items: stretch; } } #annular-project-estimator select.ape-select-element { width: 100% !important; height: 50px !important; line-height: 50px !important; background: #ffffff !important; border: 1.5px solid #cbd5e1 !important; border-radius: 12px !important; padding: 0 40px 0 16px !important; font-size: 15px !important; color: #0f172a !important; font-weight: 600 !important; cursor: pointer !important; outline: none !important; box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04) !important; transition: all 0.2s ease !important; appearance: none !important; -webkit-appearance: none !important; -moz-appearance: none !important; background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'\/%3E%3C\/svg%3E\") !important; background-repeat: no-repeat !important; background-position: right 16px center !important; background-size: 16px !important; } #annular-project-estimator select.ape-select-element:hover { border-color: #94a3b8 !important; } #annular-project-estimator select.ape-select-element:focus { border-color: #1765ff !important; box-shadow: 0 0 0 4px rgba(23, 101, 255, 0.14) !important; } #annular-project-estimator select.ape-select-element option { font-size: 14.5px !important; color: #0f172a !important; padding: 10px !important; } <\/style>\n<div class=\"ape-step-pane active\" id=\"pane_step_1\" style=\"display:block;\">\n<div class=\"ape-hero-card\" style=\"margin:25px auto 40px auto; max-width:520px;\">\n<div class=\"ape-badge-pill\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"><\/polygon><\/svg><span>Interactive Project Estimator<\/span><\/div>\n<h1 class=\"ape-hero-title\">Select Your Project Sector<\/h1>\n<p class=\"ape-hero-desc\">Choose your project domain from the dropdown to automatically configure recommended architecture modules.<\/p>\n<div class=\"ape-input-group\" style=\"text-align:left; margin:0 0 22px 0;\"><label class=\"ape-input-label\" for=\"ape_sector_select\">Project Sector \/ Domain<\/label><select id=\"ape_sector_select\" class=\"ape-select-element\" onchange=\"apeSelectSector(this.value)\"><option value=\"\">\u2014 Choose Your Project Sector \u2014<\/option><option value=\"fintech_payments\">\ud83d\udcb3 Fintech and Payments<\/option><option value=\"healthcare_healthtech\">\ud83c\udfe5 Healthcare and Health-tech<\/option><option value=\"ecommerce_marketplaces\">\ud83d\uded2 E-Commerce and Marketplaces<\/option><option value=\"edtech\">\ud83c\udf93 EdTech and Learning Platforms<\/option><option value=\"logistics_mobility\">\ud83d\ude9a Logistics and Supply Chain<\/option><option value=\"govtech_civic\">\ud83c\udfdb\ufe0f GovTech and Public Sector<\/option><option value=\"real_estate_proptech\">\ud83c\udfe2 PropTech and Real Estate<\/option><option value=\"media_entertainment\">\ud83c\udfac Media, OTT and Entertainment<\/option><option value=\"hr_workforce_tech\">\ud83d\udc65 HR Tech and Workforce Management<\/option><option value=\"enterprise_saas_b2b\">\u2699\ufe0f Enterprise SaaS and ERP<\/option><option value=\"hospitality_travel\">\u2708\ufe0f Hospitality and Travel<\/option><option value=\"agritech\">\ud83c\udf3e AgriTech and Rural Supply<\/option><\/select><\/p>\n<div class=\"ape-error-text\" id=\"ape_sector_error\">Please select a project sector to proceed.<\/div>\n<div id=\"ape_sector_preview_box\" style=\"display:none; margin-top:14px; padding:12px 16px; background:#eff6ff; border:1.5px solid #bfdbfe; border-radius:12px; text-align:left;\">\n<div id=\"ape_sector_preview_title\" style=\"font-size:14px; font-weight:800; color:#1e40af; margin-bottom:4px;\"><\/div>\n<div id=\"ape_sector_preview_desc\" style=\"font-size:12.5px; color:#475569; line-height:1.45;\"><\/div>\n<\/div>\n<\/div>\n<p><button type=\"button\" class=\"ape-btn-hero-primary\" id=\"ape_btn_step1_next\" onclick=\"apeSubmitStep1()\"><span>Continue to Email Address<\/span> <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><polyline points=\"12 5 19 12 12 19\"><\/polyline><\/svg><\/button><\/p>\n<div class=\"ape-hero-trust-row\"><span class=\"ape-trust-item\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" stroke-width=\"2.5\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"><\/path><\/svg> 100% Confidential<\/span><span class=\"ape-trust-sep\">\u2022<\/span><span class=\"ape-trust-item\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.5\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"><\/polygon><\/svg> Instant Scope<\/span><span class=\"ape-trust-sep\">\u2022<\/span><span class=\"ape-trust-item\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#0284c7\" stroke-width=\"2.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><polyline points=\"12 6 12 12 16 14\"><\/polyline><\/svg> 2 Mins<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-step-pane\" id=\"pane_step_2\" style=\"display:none;\">\n<div class=\"ape-top-nav-bar\" style=\"max-width:500px; margin:0 auto 16px auto;\"><button type=\"button\" class=\"ape-btn-secondary\" onclick=\"apeGoToStep(1)\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M19 12H5M12 19l-7-7 7-7\"\/><\/svg> Back to Sectors<\/button><\/div>\n<div class=\"ape-hero-card\">\n<div class=\"ape-badge-pill\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"><\/polygon><\/svg><span>Interactive Project Estimator<\/span><\/div>\n<h1 class=\"ape-hero-title\">Project Estimate<\/h1>\n<p class=\"ape-hero-desc\">Enter your business email address to proceed to customizing your technical modules and get an instant investment breakdown.<\/p>\n<div class=\"ape-input-group\"><label class=\"ape-input-label\" for=\"ape_email_input\">Business \/ Work Email Address<\/label><\/p>\n<div class=\"ape-input-field-group\">\n<div class=\"ape-input-icon-cell\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#64748b\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"><\/rect><path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\"><\/path><\/svg><\/div>\n<p><input type=\"email\" id=\"ape_email_input\" class=\"ape-input-element\" placeholder=\"name@company.com\" autocomplete=\"email\" \/><\/div>\n<div class=\"ape-error-text\" id=\"ape_email_error\">Please enter a valid business email address.<\/div>\n<p class=\"ape-input-hint\">We will send your 4-digit verification OTP to this email.<\/p>\n<\/div>\n<p><button type=\"button\" class=\"ape-btn-hero-primary\" onclick=\"apeSubmitStep2()\"><span>Customize Architecture Modules<\/span> <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><polyline points=\"12 5 19 12 12 19\"><\/polyline><\/svg><\/button><\/p>\n<div class=\"ape-hero-trust-row\"><span class=\"ape-trust-item\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" stroke-width=\"2.5\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"><\/path><\/svg> 100% Confidential<\/span><span class=\"ape-trust-sep\">\u2022<\/span><span class=\"ape-trust-item\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.5\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"><\/polygon><\/svg> Instant Scope<\/span><span class=\"ape-trust-sep\">\u2022<\/span><span class=\"ape-trust-item\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#0284c7\" stroke-width=\"2.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><polyline points=\"12 6 12 12 16 14\"><\/polyline><\/svg> 2 Mins<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-step-pane\" id=\"pane_step_3\" style=\"display:none;\">\n<div class=\"ape-modules-banner\">\n<div class=\"ape-modules-banner-left\"><button type=\"button\" class=\"ape-btn-secondary\" onclick=\"apeGoToStep(2)\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M19 12H5M12 19l-7-7 7-7\"\/><\/svg> Back to Email<\/button><\/p>\n<div class=\"ape-active-preset-badge\" id=\"ape_active_sector_title\">Sector: Custom<\/div>\n<div class=\"ape-active-preset-text\"><span id=\"ape_mod_count_pill\">0<\/span> of 45 Modules Selected<\/div>\n<\/div>\n<div class=\"ape-bulk-actions\"><button type=\"button\" class=\"ape-btn-tiny\" onclick=\"apeSelectAllModules()\">Select All<\/button><button type=\"button\" class=\"ape-btn-tiny\" onclick=\"apeClearAllModules()\">Clear All<\/button><button type=\"button\" class=\"ape-btn-primary\" style=\"margin-left:6px;\" onclick=\"apeSubmitStep3()\">Proceed to Contact <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/button><\/div>\n<\/div>\n<div class=\"ape-section-header\" style=\"margin-bottom:18px;\">\n<h2 class=\"ape-section-title\" style=\"font-size:20px !important; text-align:center !important;\">Customize Architecture Modules<\/h2>\n<p class=\"ape-section-subtitle\" style=\"text-align:center !important; margin:0 auto 18px auto !important; display:block !important;\">Recommended modules have been pre-selected based on your sector. You can customize them freely.<\/p>\n<\/div>\n<div class=\"ape-modules-container\">\n<div class=\"ape-cat-block\">\n<div class=\"ape-cat-heading\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"vertical-align:middle;display:inline-block;margin-right:4px;\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"><\/rect><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"><\/path><\/svg> Identity, Access and Security<\/div>\n<div class=\"ape-mod-grid\">\n<div class=\"ape-mod-card\" id=\"mod_card_mod_1_login_signup\" onclick=\"apeToggleModule('mod_1_login_signup')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Login\/Signup<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_2_auth_and_rbac\" onclick=\"apeToggleModule('mod_2_auth_and_rbac')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Auth and RBAC<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_3_mfa\" onclick=\"apeToggleModule('mod_3_mfa')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">MFA<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_4_user_profile_management\" onclick=\"apeToggleModule('mod_4_user_profile_management')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">User Profile Management<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_5_onboarding_setup_wizard\" onclick=\"apeToggleModule('mod_5_onboarding_setup_wizard')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Onboarding\/Setup Wizard<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_6_data_privacy_consent_man\" onclick=\"apeToggleModule('mod_6_data_privacy_consent_man')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Data Privacy\/Consent Management<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_7_audit_logging\" onclick=\"apeToggleModule('mod_7_audit_logging')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Audit Logging<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_43_forgot_reset_password\" onclick=\"apeToggleModule('mod_43_forgot_reset_password')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Forgot\/Reset Password Flow<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-cat-block\">\n<div class=\"ape-cat-heading\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"vertical-align:middle;display:inline-block;margin-right:4px;\"><rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\"><\/rect><line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\"><\/line><\/svg> Transactions, Billing and Commerce<\/div>\n<div class=\"ape-mod-grid\">\n<div class=\"ape-mod-card\" id=\"mod_card_mod_8_payment_gateway_integrat\" onclick=\"apeToggleModule('mod_8_payment_gateway_integrat')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Payment Gateway Integration<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_9_invoicing_billing_engine\" onclick=\"apeToggleModule('mod_9_invoicing_billing_engine')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Invoicing\/Billing Engine<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_10_subscription_management\" onclick=\"apeToggleModule('mod_10_subscription_management')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Subscription Management<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_11_wallet_credits_system\" onclick=\"apeToggleModule('mod_11_wallet_credits_system')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Wallet\/Credits System<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_12_coupon_discount_engine\" onclick=\"apeToggleModule('mod_12_coupon_discount_engine')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Coupon\/Discount Engine<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_13_referral_affiliate_syste\" onclick=\"apeToggleModule('mod_13_referral_affiliate_syste')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Referral\/Affiliate System<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-cat-block\">\n<div class=\"ape-cat-heading\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"vertical-align:middle;display:inline-block;margin-right:4px;\"><polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"><\/polyline><\/svg> Workflows, Booking and Operations<\/div>\n<div class=\"ape-mod-grid\">\n<div class=\"ape-mod-card\" id=\"mod_card_mod_14_booking_scheduling_engin\" onclick=\"apeToggleModule('mod_14_booking_scheduling_engin')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Booking\/Scheduling Engine<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_15_order_workflow_state_mac\" onclick=\"apeToggleModule('mod_15_order_workflow_state_mac')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Order\/Workflow State Machine<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_16_search_and_filter\" onclick=\"apeToggleModule('mod_16_search_and_filter')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Search and Filter<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_17_geo_maps_integration\" onclick=\"apeToggleModule('mod_17_geo_maps_integration')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Geo\/Maps Integration<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_18_reviews_ratings\" onclick=\"apeToggleModule('mod_18_reviews_ratings')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Reviews\/Ratings<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_19_document_management\" onclick=\"apeToggleModule('mod_19_document_management')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Document Management<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_20_data_export_import\" onclick=\"apeToggleModule('mod_20_data_export_import')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Data Export\/Import<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_41_file_storage_upload\" onclick=\"apeToggleModule('mod_41_file_storage_upload')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">File Storage\/Upload<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-cat-block\">\n<div class=\"ape-cat-heading\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"vertical-align:middle;display:inline-block;margin-right:4px;\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"><\/path><\/svg> Engagement and Content<\/div>\n<div class=\"ape-mod-grid\">\n<div class=\"ape-mod-card\" id=\"mod_card_mod_21_notification_service\" onclick=\"apeToggleModule('mod_21_notification_service')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Notification Service<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_22_push_notification_infras\" onclick=\"apeToggleModule('mod_22_push_notification_infras')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Push Notification Infrastructure<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_23_messaging_chat\" onclick=\"apeToggleModule('mod_23_messaging_chat')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Messaging\/Chat<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_24_support_ticketing\" onclick=\"apeToggleModule('mod_24_support_ticketing')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Support\/Ticketing<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_25_content_management_syste\" onclick=\"apeToggleModule('mod_25_content_management_syste')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Content Management System (CMS)<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_26_content_moderation\" onclick=\"apeToggleModule('mod_26_content_moderation')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Content Moderation<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_42_email_sms_automation\" onclick=\"apeToggleModule('mod_42_email_sms_automation')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Email\/SMS Automation<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-cat-block\">\n<div class=\"ape-cat-heading\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"vertical-align:middle;display:inline-block;margin-right:4px;\"><line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\"><\/line><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"><\/line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\"><\/line><\/svg> Analytics, Administration and Infrastructure<\/div>\n<div class=\"ape-mod-grid\">\n<div class=\"ape-mod-card\" id=\"mod_card_mod_27_reporting_bi_dashboard\" onclick=\"apeToggleModule('mod_27_reporting_bi_dashboard')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Reporting\/BI Dashboard<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_28_admin_panel_dashboard\" onclick=\"apeToggleModule('mod_28_admin_panel_dashboard')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Admin Panel\/Dashboard<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_29_compliance_regulatory_tr\" onclick=\"apeToggleModule('mod_29_compliance_regulatory_tr')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Compliance\/Regulatory Tracking<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_30_multi_tenancy_organizati\" onclick=\"apeToggleModule('mod_30_multi_tenancy_organizati')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Multi-Tenancy\/Organization Management<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_31_settings_preferences_mod\" onclick=\"apeToggleModule('mod_31_settings_preferences_mod')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Settings\/Preferences Module<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_32_third_party_api_integrat\" onclick=\"apeToggleModule('mod_32_third_party_api_integrat')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Third-Party API Integration Layer<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_33_webhook_management\" onclick=\"apeToggleModule('mod_33_webhook_management')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Webhook Management<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_34_api_rate_limiting_thrott\" onclick=\"apeToggleModule('mod_34_api_rate_limiting_thrott')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">API Rate Limiting\/Throttling<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_35_caching_layer\" onclick=\"apeToggleModule('mod_35_caching_layer')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Caching Layer<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_36_localization_i18n\" onclick=\"apeToggleModule('mod_36_localization_i18n')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Localization\/i18n<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_37_backup_and_disaster_reco\" onclick=\"apeToggleModule('mod_37_backup_and_disaster_reco')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Backup and Disaster Recovery Setup<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_38_logging_monitoring_alert\" onclick=\"apeToggleModule('mod_38_logging_monitoring_alert')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Logging\/Monitoring\/Alerting (Ops)<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_39_ci_cd_pipeline_setup\" onclick=\"apeToggleModule('mod_39_ci_cd_pipeline_setup')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">CI\/CD Pipeline Setup<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_40_feature_flag_management\" onclick=\"apeToggleModule('mod_40_feature_flag_management')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Feature Flag Management<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_44_dashboard_analytics_user\" onclick=\"apeToggleModule('mod_44_dashboard_analytics_user')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Dashboard\/Analytics (User-facing)<\/span><\/div>\n<div class=\"ape-mod-card\" id=\"mod_card_mod_45_version_changelog_mgmt\" onclick=\"apeToggleModule('mod_45_version_changelog_mgmt')\">\n<div class=\"ape-mod-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div>\n<p><span class=\"ape-mod-name\">Version\/Changelog Management<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"ape-nav-bar\"><button type=\"button\" class=\"ape-btn-secondary\" onclick=\"apeGoToStep(2)\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M19 12H5M12 19l-7-7 7-7\"\/><\/svg> Back to Email<\/button><button type=\"button\" class=\"ape-btn-primary\" onclick=\"apeSubmitStep3()\">Proceed to Contact <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/button><\/div>\n<\/div>\n<div class=\"ape-step-pane\" id=\"pane_step_4\" style=\"display:none;\">\n<div class=\"ape-top-nav-bar\" style=\"max-width:550px; margin:0 auto 16px auto;\"><button type=\"button\" class=\"ape-btn-secondary\" onclick=\"apeGoToStep(3)\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M19 12H5M12 19l-7-7 7-7\"\/><\/svg> Back to Modules<\/button><\/div>\n<div class=\"ape-contact-card\">\n<div class=\"ape-section-header\">\n<h2 class=\"ape-section-title\" style=\"font-size:20px !important; text-align:center !important;\">Enter Your Contact Details<\/h2>\n<p class=\"ape-section-subtitle\" style=\"text-align:center !important; margin:0 auto 18px auto !important; display:block !important;\">Enter your contact details to review the complete itemized investment and timeline breakdown.<\/p>\n<\/div>\n<div class=\"ape-email-confirm-box\">\n<div><span>Email Address:<\/span><br \/><strong id=\"ape_step4_email_disp\">user@company.com<\/strong><\/div>\n<p><a href=\"javascript:void(0)\" onclick=\"apeGoToStep(2)\">Change Email<\/a><\/div>\n<div class=\"ape-input-group\"><label class=\"ape-input-label\" for=\"ape_name_input\">Full Name<\/label><input type=\"text\" id=\"ape_name_input\" class=\"ape-input-standard\" placeholder=\"e.g. John Doe\" \/><\/div>\n<div class=\"ape-input-group\"><label class=\"ape-input-label\" for=\"ape_phone_input\">Mobile Number<\/label><input type=\"tel\" id=\"ape_phone_input\" class=\"ape-input-standard\" placeholder=\"e.g. 9876543210\" maxlength=\"10\" \/><\/div>\n<div class=\"ape-input-group\"><label class=\"ape-input-label\" for=\"ape_company_input\">Company Name<\/label><input type=\"text\" id=\"ape_company_input\" class=\"ape-input-standard\" placeholder=\"e.g. Acme Technologies\" \/><\/div>\n<div class=\"ape-error-text\" id=\"ape_contact_error\">Please enter your Full Name and a valid 10-digit Mobile Number.<\/div>\n<div class=\"ape-nav-bar\" style=\"border-top:none; padding-top:10px;\"><button type=\"button\" class=\"ape-btn-secondary\" onclick=\"apeGoToStep(3)\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M19 12H5M12 19l-7-7 7-7\"\/><\/svg> Back to Modules<\/button><button type=\"button\" class=\"ape-btn-primary\" onclick=\"apeSubmitStep4()\">Get Instant Estimate <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/button><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-modal-overlay\" id=\"ape_otp_modal\" style=\"display:none;\" onclick=\"if(event.target===this) apeCloseOtpModal();\">\n<div class=\"ape-modal-box\"><button type=\"button\" class=\"ape-modal-close-btn\" onclick=\"apeCloseOtpModal()\" aria-label=\"Close\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"><\/line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line><\/svg><\/button><\/p>\n<div class=\"ape-modal-icon-badge\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"><\/path><polyline points=\"9 12 11 14 15 10\"><\/polyline><\/svg><\/div>\n<h3 class=\"ape-modal-title\">Verify Your Email Address<\/h3>\n<p class=\"ape-modal-desc\">We have sent a 4-digit verification code to <strong id=\"ape_otp_email_sent_to\" style=\"color:#0f172a; text-decoration:underline;\">your email<\/strong>. Please enter the code below to view your customized project estimate.<\/p>\n<div class=\"ape-modal-dest-card\">\n<div class=\"ape-modal-dest-row\">\n<div class=\"ape-dest-icon\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1765ff\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"><\/rect><path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\"><\/path><\/svg><\/div>\n<div class=\"ape-dest-info\"><span class=\"ape-dest-label\">Email Address<\/span><span class=\"ape-dest-val\" id=\"ape_modal_email\">\u2013<\/span><\/div>\n<\/div>\n<div class=\"ape-modal-dest-divider\"><\/div>\n<div class=\"ape-modal-dest-row\">\n<div class=\"ape-dest-icon\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"><\/path><\/svg><\/div>\n<div class=\"ape-dest-info\"><span class=\"ape-dest-label\">Mobile Number<\/span><span class=\"ape-dest-val\" id=\"ape_modal_phone\">\u2013<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ape-otp-inputs\"><input type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" class=\"ape-otp-input\" id=\"ape_otp_1\" maxlength=\"1\" oninput=\"apeOtpInput(1)\" onkeydown=\"apeOtpKeyDown(event, 1)\" onpaste=\"apeOtpPaste(event)\" autocomplete=\"off\" \/><input type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" class=\"ape-otp-input\" id=\"ape_otp_2\" maxlength=\"1\" oninput=\"apeOtpInput(2)\" onkeydown=\"apeOtpKeyDown(event, 2)\" onpaste=\"apeOtpPaste(event)\" autocomplete=\"off\" \/><input type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" class=\"ape-otp-input\" id=\"ape_otp_3\" maxlength=\"1\" oninput=\"apeOtpInput(3)\" onkeydown=\"apeOtpKeyDown(event, 3)\" onpaste=\"apeOtpPaste(event)\" autocomplete=\"off\" \/><input type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" class=\"ape-otp-input\" id=\"ape_otp_4\" maxlength=\"1\" oninput=\"apeOtpInput(4)\" onkeydown=\"apeOtpKeyDown(event, 4)\" onpaste=\"apeOtpPaste(event)\" autocomplete=\"off\" \/><\/div>\n<div class=\"ape-error-text\" id=\"ape_otp_error\" style=\"margin:0 0 14px 0; text-align:center;\">Invalid verification code. Please check your email and try again.<\/div>\n<p><button type=\"button\" class=\"ape-btn-hero-primary\" id=\"ape_btn_confirm_estimate\" onclick=\"apeVerifyOtp()\" style=\"margin:0 !important; width:100% !important;\"><span>Confirm & View Estimate<\/span> <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><polyline points=\"12 5 19 12 12 19\"><\/polyline><\/svg><\/button><\/p>\n<div style=\"margin:12px 0 0 0 !important; text-align:center !important;\"><button type=\"button\" class=\"ape-btn-link\" id=\"ape_btn_resend_otp\" onclick=\"apeResendOtp()\" style=\"margin:0 !important; text-decoration:none !important; color:#1765ff !important; font-weight:700 !important; font-size:13px !important; cursor:pointer !important;\">Didn\u2019t receive code? Resend OTP<\/button><\/div>\n<p><button type=\"button\" class=\"ape-btn-link\" onclick=\"apeCloseOtpModal()\">\u2190 Edit Contact Details<\/button><\/div>\n<\/div>\n<div class=\"ape-step-pane\" id=\"pane_step_6\" style=\"display:none;\">\n<div class=\"ape-proposal-card\">\n<div class=\"ape-success-dispatch-alert\" style=\"background:#f0fdf4 !important; border:1.5px solid #86efac !important; border-radius:16px !important; padding:18px 22px !important; margin-bottom:24px !important; display:flex !important; align-items:center !important; gap:14px !important; box-shadow:0 4px 14px rgba(22,163,74,0.06) !important;\">\n<div style=\"width:42px !important; height:42px !important; border-radius:50% !important; background:#dcfce7 !important; color:#16a34a !important; display:flex !important; align-items:center !important; justify-content:center !important; flex-shrink:0 !important;\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"><\/path><polyline points=\"22 4 12 14.01 9 11.01\"><\/polyline><\/svg><\/div>\n<div style=\"text-align:left !important;\">\n<h4 style=\"font-size:15.5px !important; font-weight:800 !important; color:#14532d !important; margin:0 0 4px 0 !important; line-height:1.3 !important;\">Scope Dispatched to Solutions Team!<\/h4>\n<p style=\"font-size:13px !important; color:#166534 !important; margin:0 !important; line-height:1.45 !important;\">Your project scope has been securely dispatched to our solutions team at <strong style=\"color:#0f172a;\">enquiry@annulartechnologies.com<\/strong>. Our engineering leads will review your architecture and connect with you shortly.<\/p>\n<\/div>\n<\/div>\n<div class=\"ape-proposal-hero\">\n<div style=\"text-align:center !important; margin:0 0 14px 0 !important;\"><span style=\"display:inline-flex !important; align-items:center !important; justify-content:center !important; gap:7px !important; padding:0 16px !important; height:30px !important; background:#ecfdf5 !important; border:1px solid #a7f3d0 !important; border-radius:999px !important; color:#065f46 !important; font-size:12px !important; font-weight:700 !important; margin:0 auto !important;\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display:block !important;\"><polyline points=\"20 6 9 17 4 12\"><\/polyline><\/svg><span style=\"line-height:30px !important;\">Project Estimate Ready<\/span><\/span><\/div>\n<h2 class=\"ape-section-title\" style=\"font-size:20px !important; margin-top:12px; text-align:center !important;\">Commercial Architecture Estimation<\/h2>\n<div class=\"ape-price-badge\">Total Estimated Investment<\/div>\n<div class=\"ape-price-val\" id=\"ape_final_price\">\u20b90<\/div>\n<\/div>\n<div class=\"ape-proposal-grid\">\n<div class=\"ape-proposal-grid-item\"><span>Prepared For:<\/span><strong id=\"ape_final_client_name\">\u2013<\/strong><\/div>\n<div class=\"ape-proposal-grid-item\"><span>Work Email:<\/span><strong id=\"ape_final_client_email\">\u2013<\/strong><\/div>\n<div class=\"ape-proposal-grid-item\"><span>Mobile Number:<\/span><strong id=\"ape_final_client_phone\">\u2013<\/strong><\/div>\n<div class=\"ape-proposal-grid-item\"><span>Project Sector:<\/span><strong id=\"ape_final_client_sector\">\u2013<\/strong><\/div>\n<\/div>\n<h3 style=\"font-size:16px; font-weight:800; color:#0f172a; margin-bottom:14px;\">Itemized Architecture Deliverables<\/h3>\n<table class=\"ape-table\">\n<thead>\n<tr>\n<th>Module Name<\/th>\n<th>Category<\/th>\n<th style=\"text-align:right;\">Investment<\/th>\n<\/tr>\n<\/thead>\n<tbody id=\"ape_breakdown_tbody\"><\/tbody>\n<\/table>\n<div style=\"background:#f0fdf4; border:1px solid #bbf7d0; border-radius:12px; padding:16px; margin-bottom:28px; text-align:center;\">\n<p style=\"font-size:13.5px; color:#166534; font-weight:600; margin:0;\">A copy of this proposal has been logged for your project architect. We will reach out via WhatsApp within 24 business hours.<\/p>\n<\/div>\n<div class=\"ape-nav-bar\" style=\"margin-top:0;\"><button type=\"button\" class=\"ape-btn-secondary\" onclick=\"apeResetAll()\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"\/><path d=\"M3 3v5h5\"\/><\/svg> Configure Another Project<\/button><button type=\"button\" class=\"ape-btn-primary\" onclick=\"window.print()\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"6 9 6 2 18 2 18 9\"\/><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"\/><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"\/><\/svg> Print \/ Save PDF Proposal<\/button><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><script>(function(){var masterModules = [{\"id\":\"mod_1_login_signup\",\"name\":\"Login\/Signup\",\"category\":\"Identity, Access and Security\",\"price\":3000},{\"id\":\"mod_2_auth_and_rbac\",\"name\":\"Auth and RBAC\",\"category\":\"Identity, Access and Security\",\"price\":5000},{\"id\":\"mod_3_mfa\",\"name\":\"MFA\",\"category\":\"Identity, Access and Security\",\"price\":3000},{\"id\":\"mod_4_user_profile_management\",\"name\":\"User Profile Management\",\"category\":\"Identity, Access and Security\",\"price\":2000},{\"id\":\"mod_5_onboarding_setup_wizard\",\"name\":\"Onboarding\/Setup Wizard\",\"category\":\"Identity, Access and Security\",\"price\":4000},{\"id\":\"mod_6_data_privacy_consent_man\",\"name\":\"Data Privacy\/Consent Management\",\"category\":\"Identity, Access and Security\",\"price\":4000},{\"id\":\"mod_7_audit_logging\",\"name\":\"Audit Logging\",\"category\":\"Identity, Access and Security\",\"price\":2000},{\"id\":\"mod_43_forgot_reset_password\",\"name\":\"Forgot\/Reset Password Flow\",\"category\":\"Identity, Access and Security\",\"price\":1000},{\"id\":\"mod_8_payment_gateway_integrat\",\"name\":\"Payment Gateway Integration\",\"category\":\"Transactions, Billing and Commerce\",\"price\":6000},{\"id\":\"mod_9_invoicing_billing_engine\",\"name\":\"Invoicing\/Billing Engine\",\"category\":\"Transactions, Billing and Commerce\",\"price\":5000},{\"id\":\"mod_10_subscription_management\",\"name\":\"Subscription Management\",\"category\":\"Transactions, Billing and Commerce\",\"price\":6000},{\"id\":\"mod_11_wallet_credits_system\",\"name\":\"Wallet\/Credits System\",\"category\":\"Transactions, Billing and Commerce\",\"price\":4000},{\"id\":\"mod_12_coupon_discount_engine\",\"name\":\"Coupon\/Discount Engine\",\"category\":\"Transactions, Billing and Commerce\",\"price\":4000},{\"id\":\"mod_13_referral_affiliate_syste\",\"name\":\"Referral\/Affiliate System\",\"category\":\"Transactions, Billing and Commerce\",\"price\":4000},{\"id\":\"mod_14_booking_scheduling_engin\",\"name\":\"Booking\/Scheduling Engine\",\"category\":\"Workflows, Booking and Operations\",\"price\":6000},{\"id\":\"mod_15_order_workflow_state_mac\",\"name\":\"Order\/Workflow State Machine\",\"category\":\"Workflows, Booking and Operations\",\"price\":5000},{\"id\":\"mod_16_search_and_filter\",\"name\":\"Search and Filter\",\"category\":\"Workflows, Booking and Operations\",\"price\":3000},{\"id\":\"mod_17_geo_maps_integration\",\"name\":\"Geo\/Maps Integration\",\"category\":\"Workflows, Booking and Operations\",\"price\":5000},{\"id\":\"mod_18_reviews_ratings\",\"name\":\"Reviews\/Ratings\",\"category\":\"Workflows, Booking and Operations\",\"price\":3000},{\"id\":\"mod_19_document_management\",\"name\":\"Document Management\",\"category\":\"Workflows, Booking and Operations\",\"price\":4000},{\"id\":\"mod_20_data_export_import\",\"name\":\"Data Export\/Import\",\"category\":\"Workflows, Booking and Operations\",\"price\":3000},{\"id\":\"mod_41_file_storage_upload\",\"name\":\"File Storage\/Upload\",\"category\":\"Workflows, Booking and Operations\",\"price\":3000},{\"id\":\"mod_21_notification_service\",\"name\":\"Notification Service\",\"category\":\"Engagement and Content\",\"price\":4000},{\"id\":\"mod_22_push_notification_infras\",\"name\":\"Push Notification Infrastructure\",\"category\":\"Engagement and Content\",\"price\":4000},{\"id\":\"mod_23_messaging_chat\",\"name\":\"Messaging\/Chat\",\"category\":\"Engagement and Content\",\"price\":6000},{\"id\":\"mod_24_support_ticketing\",\"name\":\"Support\/Ticketing\",\"category\":\"Engagement and Content\",\"price\":3000},{\"id\":\"mod_25_content_management_syste\",\"name\":\"Content Management System (CMS)\",\"category\":\"Engagement and Content\",\"price\":6000},{\"id\":\"mod_26_content_moderation\",\"name\":\"Content Moderation\",\"category\":\"Engagement and Content\",\"price\":4000},{\"id\":\"mod_42_email_sms_automation\",\"name\":\"Email\/SMS Automation\",\"category\":\"Engagement and Content\",\"price\":4000},{\"id\":\"mod_27_reporting_bi_dashboard\",\"name\":\"Reporting\/BI Dashboard\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":6000},{\"id\":\"mod_28_admin_panel_dashboard\",\"name\":\"Admin Panel\/Dashboard\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":5000},{\"id\":\"mod_29_compliance_regulatory_tr\",\"name\":\"Compliance\/Regulatory Tracking\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":4000},{\"id\":\"mod_30_multi_tenancy_organizati\",\"name\":\"Multi-Tenancy\/Organization Management\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":6000},{\"id\":\"mod_31_settings_preferences_mod\",\"name\":\"Settings\/Preferences Module\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":2000},{\"id\":\"mod_32_third_party_api_integrat\",\"name\":\"Third-Party API Integration Layer\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":4000},{\"id\":\"mod_33_webhook_management\",\"name\":\"Webhook Management\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":3000},{\"id\":\"mod_34_api_rate_limiting_thrott\",\"name\":\"API Rate Limiting\/Throttling\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":2000},{\"id\":\"mod_35_caching_layer\",\"name\":\"Caching Layer\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":3000},{\"id\":\"mod_36_localization_i18n\",\"name\":\"Localization\/i18n\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":4000},{\"id\":\"mod_37_backup_and_disaster_reco\",\"name\":\"Backup and Disaster Recovery Setup\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":4000},{\"id\":\"mod_38_logging_monitoring_alert\",\"name\":\"Logging\/Monitoring\/Alerting (Ops)\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":4000},{\"id\":\"mod_39_ci_cd_pipeline_setup\",\"name\":\"CI\/CD Pipeline Setup\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":4000},{\"id\":\"mod_40_feature_flag_management\",\"name\":\"Feature Flag Management\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":3000},{\"id\":\"mod_44_dashboard_analytics_user\",\"name\":\"Dashboard\/Analytics (User-facing)\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":5000},{\"id\":\"mod_45_version_changelog_mgmt\",\"name\":\"Version\/Changelog Management\",\"category\":\"Analytics, Administration and Infrastructure\",\"price\":2000}];var sectorPresets = {\"fintech_payments\":{\"title\":\"Fintech and Payments\",\"icon\":\"\ud83d\udcb3\",\"desc\":\"Digital wallets, payments, KYC\/AML compliance, invoicing and ledger security.\",\"modules\":[\"Login\/Signup\",\"Auth and RBAC\",\"Payment Gateway Integration\",\"Wallet\/Credits System\",\"Invoicing\/Billing Engine\",\"Subscription Management\",\"Audit Logging\",\"MFA\",\"Data Privacy\/Consent Management\",\"Coupon\/Discount Engine\",\"Reporting\/BI Dashboard\",\"Third-Party API Integration Layer\",\"Compliance\/Regulatory Tracking\"]},\"healthcare_healthtech\":{\"title\":\"Healthcare and Health-tech\",\"icon\":\"\ud83c\udfe5\",\"desc\":\"HIPAA\/EHR compliance, tele-health booking, patient records and doctor consultations.\",\"modules\":[\"Login\/Signup\",\"Auth and RBAC\",\"Booking\/Scheduling Engine\",\"Document Management\",\"Audit Logging\",\"Compliance\/Regulatory Tracking\",\"Notification Service\",\"MFA\",\"Payment Gateway Integration\",\"Messaging\/Chat\",\"Data Export\/Import\",\"Reporting\/BI Dashboard\"]},\"ecommerce_marketplaces\":{\"title\":\"E-Commerce and Marketplaces\",\"icon\":\"\ud83d\uded2\",\"desc\":\"Multi-vendor catalogs, checkout, discount engines, inventory and delivery tracking.\",\"modules\":[\"Login\/Signup\",\"Payment Gateway Integration\",\"Order\/Workflow State Machine\",\"Search and Filter\",\"Coupon\/Discount Engine\",\"Reviews\/Ratings\",\"Notification Service\",\"Push Notification Infrastructure\",\"Wallet\/Credits System\",\"Referral\/Affiliate System\",\"Geo\/Maps Integration\",\"Support\/Ticketing\"]},\"edtech\":{\"title\":\"EdTech and Learning Platforms\",\"icon\":\"\ud83c\udf93\",\"desc\":\"LMS courses, student progress, live classrooms, quizzes and certificates.\",\"modules\":[\"Login\/Signup\",\"Auth and RBAC\",\"Content Management System (CMS)\",\"Onboarding\/Setup Wizard\",\"Multi-Tenancy\/Organization Management\",\"Reporting\/BI Dashboard\",\"User Profile Management\",\"Payment Gateway Integration\",\"Messaging\/Chat\",\"Document Management\",\"Localization\/i18n\"]},\"logistics_mobility\":{\"title\":\"Logistics and Supply Chain\",\"icon\":\"\ud83d\ude9a\",\"desc\":\"Fleet routing, live GPS tracking, consignment dispatch and warehouse workflows.\",\"modules\":[\"Login\/Signup\",\"Booking\/Scheduling Engine\",\"Geo\/Maps Integration\",\"Push Notification Infrastructure\",\"Order\/Workflow State Machine\",\"Notification Service\",\"Payment Gateway Integration\",\"Support\/Ticketing\",\"Webhook Management\",\"Caching Layer\"]},\"govtech_civic\":{\"title\":\"GovTech and Public Sector\",\"icon\":\"\ud83c\udfdb\ufe0f\",\"desc\":\"Citizen portals, grievance tracking, document verification and encrypted audit logs.\",\"modules\":[\"Login\/Signup\",\"Auth and RBAC\",\"Compliance\/Regulatory Tracking\",\"Audit Logging\",\"Multi-Tenancy\/Organization Management\",\"Document Management\",\"Data Privacy\/Consent Management\",\"Reporting\/BI Dashboard\",\"Geo\/Maps Integration\",\"Backup and Disaster Recovery Setup\"]},\"real_estate_proptech\":{\"title\":\"PropTech and Real Estate\",\"icon\":\"\ud83c\udfe2\",\"desc\":\"Property listings, virtual tours, map boundaries, escrow and lease documents.\",\"modules\":[\"Login\/Signup\",\"Document Management\",\"Third-Party API Integration Layer\",\"Geo\/Maps Integration\",\"Search and Filter\",\"Data Export\/Import\",\"Payment Gateway Integration\",\"Compliance\/Regulatory Tracking\",\"Support\/Ticketing\",\"Reporting\/BI Dashboard\"]},\"media_entertainment\":{\"title\":\"Media, OTT and Entertainment\",\"icon\":\"\ud83c\udfac\",\"desc\":\"Streaming feeds, community chat, content moderation and subscriber billing.\",\"modules\":[\"Login\/Signup\",\"Content Management System (CMS)\",\"Messaging\/Chat\",\"Content Moderation\",\"Search and Filter\",\"Push Notification Infrastructure\",\"Payment Gateway Integration\",\"Subscription Management\",\"Reviews\/Ratings\",\"Localization\/i18n\"]},\"hr_workforce_tech\":{\"title\":\"HR Tech and Workforce Management\",\"icon\":\"\ud83d\udc65\",\"desc\":\"Staff onboarding, attendance, payroll disbursement and appraisal reporting.\",\"modules\":[\"Login\/Signup\",\"Auth and RBAC\",\"Onboarding\/Setup Wizard\",\"Document Management\",\"User Profile Management\",\"Reporting\/BI Dashboard\",\"Notification Service\",\"Messaging\/Chat\",\"Multi-Tenancy\/Organization Management\",\"Data Export\/Import\",\"Support\/Ticketing\"]},\"enterprise_saas_b2b\":{\"title\":\"Enterprise SaaS and ERP\",\"icon\":\"\u2699\ufe0f\",\"desc\":\"Multi-tenant workspaces, granular RBAC, webhooks, rate limiting and CI\/CD operations.\",\"modules\":[\"Login\/Signup\",\"Auth and RBAC\",\"Admin Panel\/Dashboard\",\"Audit Logging\",\"API Rate Limiting\/Throttling\",\"Multi-Tenancy\/Organization Management\",\"Settings\/Preferences Module\",\"Feature Flag Management\",\"Webhook Management\",\"Third-Party API Integration Layer\",\"CI\/CD Pipeline Setup\",\"Logging\/Monitoring\/Alerting (Ops)\"]},\"hospitality_travel\":{\"title\":\"Hospitality and Travel\",\"icon\":\"\u2708\ufe0f\",\"desc\":\"Room bookings, itinerary engine, seasonal coupons and guest review workflows.\",\"modules\":[\"Login\/Signup\",\"Booking\/Scheduling Engine\",\"Payment Gateway Integration\",\"Reviews\/Ratings\",\"Notification Service\",\"Search and Filter\",\"Support\/Ticketing\",\"Geo\/Maps Integration\",\"Coupon\/Discount Engine\",\"Multi-Tenancy\/Organization Management\"]},\"agritech\":{\"title\":\"AgriTech and Rural Supply\",\"icon\":\"\ud83c\udf3e\",\"desc\":\"Crop advisory, mandi logistics, farm procurement and field IoT telemetry.\",\"modules\":[\"Login\/Signup\",\"Order\/Workflow State Machine\",\"Search and Filter\",\"Data Export\/Import\",\"Notification Service\",\"Geo\/Maps Integration\",\"Payment Gateway Integration\",\"Third-Party API Integration Layer\",\"Reporting\/BI Dashboard\",\"Compliance\/Regulatory Tracking\"]}};var state = { step: 1, email: \"\", sectorKey: \"\", selectedModules: {}, name: \"\", phone: \"\", company: \"\" };function unwrapWpParagraphs() {  var groupPs = document.querySelectorAll(\"#annular-project-estimator .ape-input-field-group p\");  groupPs.forEach(function(p) {    while (p.firstChild) { p.parentNode.insertBefore(p.firstChild, p); }    p.parentNode.removeChild(p);  });}unwrapWpParagraphs();window.apeGoToStep = function(step) {  state.step = step;  var modal = document.getElementById(\"ape_otp_modal\"); if (modal) { modal.classList.remove(\"active\"); modal.style.display = \"none\"; } var panes = [\"pane_step_1\", \"pane_step_2\", \"pane_step_3\", \"pane_step_4\", \"pane_step_6\"];  panes.forEach(function(pid) {    var el = document.getElementById(pid);    if (el) { el.style.display = \"none\"; el.classList.remove(\"active\"); }  });  var targetPane = document.getElementById(\"pane_step_\" + step);  if (targetPane) { targetPane.style.display = \"block\"; targetPane.classList.add(\"active\"); }  unwrapWpParagraphs();  var root = document.getElementById(\"annular-project-estimator\");  if (root) { root.scrollIntoView({ behavior: \"smooth\", block: \"start\" }); }};window.apeSubmitStep1 = function() { var sel = document.getElementById(\"ape_sector_select\"); var val = sel ? sel.value : state.sectorKey; if (!val) { var err = document.getElementById(\"ape_sector_error\"); if (err) err.style.display = \"block\"; if (sel) sel.focus(); return; } state.sectorKey = val; var preset = sectorPresets[state.sectorKey]; var badge = document.getElementById(\"ape_active_sector_title\"); if (badge && preset) { badge.innerText = \"Sector: \" + preset.title; } window.apeGoToStep(2); };window.apeSubmitStep2 = function() {  var emailInput = document.getElementById(\"ape_email_input\");  var err = document.getElementById(\"ape_email_error\");  var email = emailInput ? emailInput.value.trim() : \"\";  var re = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;  if (!re.test(email)) {    if (err) err.style.display = \"block\";    if (emailInput) emailInput.focus();    return;  }  if (err) err.style.display = \"none\";  state.email = email;  var disp = document.getElementById(\"ape_step4_email_disp\");  if (disp) disp.innerText = email;  window.apeGoToStep(3);};window.apeFilterSectors = function() {  var q = document.getElementById(\"ape_sector_search\");  var val = q ? q.value.trim().toLowerCase() : \"\";  var cards = document.querySelectorAll(\".ape-sector-card\");  cards.forEach(function(c) {    var kw = c.getAttribute(\"data-keywords\") || \"\";    if (!val ? true : (kw.indexOf(val) !== -1)) { c.style.display = \"flex\"; }    else { c.style.display = \"none\"; }  });};window.apeSelectSector = function(key) { state.sectorKey = key; var sel = document.getElementById(\"ape_sector_select\"); if (sel && sel.value !== key) { sel.value = key; } var err = document.getElementById(\"ape_sector_error\"); if (err) err.style.display = \"none\"; var prevBox = document.getElementById(\"ape_sector_preview_box\"); var prevTitle = document.getElementById(\"ape_sector_preview_title\"); var prevDesc = document.getElementById(\"ape_sector_preview_desc\"); if (!key) { if (prevBox) prevBox.style.display = \"none\"; state.selectedModules = {}; syncModuleCardsUI(); return; } var preset = sectorPresets[key]; if (!preset) return; if (prevBox) { prevBox.style.display = \"block\"; if (prevTitle) prevTitle.innerHTML = preset.icon + \" \" + preset.title; if (prevDesc) prevDesc.innerText = preset.desc; } state.selectedModules = {}; masterModules.forEach(function(m) { var match = preset.modules.indexOf(m.name) !== -1; if (match) { state.selectedModules[m.id] = true; } }); syncModuleCardsUI(); };function syncModuleCardsUI() {  var count = 0;  masterModules.forEach(function(m) {    var card = document.getElementById(\"mod_card_\" + m.id);    if (card) {      if (state.selectedModules[m.id]) { card.classList.add(\"selected\"); count++; }      else { card.classList.remove(\"selected\"); }    }  });  var pill = document.getElementById(\"ape_mod_count_pill\");  if (pill) pill.innerText = count;}window.apeToggleModule = function(id) {  if (state.selectedModules[id]) { delete state.selectedModules[id]; }  else { state.selectedModules[id] = true; }  syncModuleCardsUI();};window.apeSelectAllModules = function() {  masterModules.forEach(function(m) { state.selectedModules[m.id] = true; });  syncModuleCardsUI();};window.apeClearAllModules = function() {  state.selectedModules = {};  syncModuleCardsUI();};window.apeSubmitStep3 = function() {  var count = Object.keys(state.selectedModules).length;  if (count === 0) { alert(\"Please select at least 1 module to continue.\"); return; }  window.apeGoToStep(4);};function dispatchOtpEmail(otpCode) { try { var payload = { \"_subject\": \"\ud83d\udd10 Your Annular Verification Code: \" + otpCode, \"Recipient Email\": state.email, \"Client Name\": state.name, \"Verification Code\": otpCode, \"Instructions\": \"Enter this 4-digit code to view and unlock your customized commercial scope and investment estimate.\", \"Validity\": \"10 Minutes\", \"_template\": \"table\", \"_captcha\": \"false\" }; fetch(\"https:\/\/formsubmit.co\/ajax\/\" + encodeURIComponent(state.email), { method: \"POST\", headers: { \"Content-Type\": \"application\/json\", \"Accept\": \"application\/json\" }, body: JSON.stringify(payload) }).catch(function(e) {}); } catch(err) {} } window.apeResendOtp = function() { var btn = document.getElementById(\"ape_btn_resend_otp\"); var newOtp = Math.floor(1000 + Math.random() * 9000).toString(); state.currentOtp = newOtp; dispatchOtpEmail(newOtp); if (btn) { btn.innerText = \"\u2713 New code sent to your email!\"; setTimeout(function() { btn.innerText = \"Didn't receive code? Resend OTP\"; }, 3500); } }; window.apeSubmitStep4 = function() { var nameInp = document.getElementById(\"ape_name_input\"); var phoneInp = document.getElementById(\"ape_phone_input\"); var compInp = document.getElementById(\"ape_company_input\"); var err = document.getElementById(\"ape_contact_error\"); var name = nameInp ? nameInp.value.trim() : \"\"; var phone = phoneInp ? phoneInp.value.trim().replace(\/[^0-9]\/g, \"\") : \"\"; var isInvalid = (!name) ? true : (phone.length !== 10); if (isInvalid) { if (err) err.style.display = \"block\"; return; } if (err) err.style.display = \"none\"; state.name = name; state.phone = phone; state.company = compInp ? compInp.value.trim() : \"\"; var generatedOtp = Math.floor(1000 + Math.random() * 9000).toString(); state.currentOtp = generatedOtp; console.log(\"[Annular Estimator] Generated OTP for \" + state.email + \":\", generatedOtp); dispatchOtpEmail(generatedOtp); var modal = document.getElementById(\"ape_otp_modal\"); if (modal && modal.parentNode !== document.body) { document.body.appendChild(modal); } var modalEmail = document.getElementById(\"ape_modal_email\"); var modalPhone = document.getElementById(\"ape_modal_phone\"); var sentTo = document.getElementById(\"ape_otp_email_sent_to\"); if (modalEmail) modalEmail.innerText = state.email; if (modalPhone) modalPhone.innerText = \"+91 \" + state.phone; if (sentTo) sentTo.innerText = state.email; [1, 2, 3, 4].forEach(function(i) { var box = document.getElementById(\"ape_otp_\" + i); if (box) box.value = \"\"; }); var otpErr = document.getElementById(\"ape_otp_error\"); if (otpErr) otpErr.style.display = \"none\"; if (modal) { modal.style.display = \"flex\"; modal.classList.add(\"active\"); } var firstBox = document.getElementById(\"ape_otp_1\"); if (firstBox) firstBox.focus(); }; window.apeCloseOtpModal = function() { var modal = document.getElementById(\"ape_otp_modal\"); if (modal) { modal.style.display = \"none\"; modal.classList.remove(\"active\"); } }; window.apeOtpInput = function(idx) { var cur = document.getElementById(\"ape_otp_\" + idx); var hasChar = cur ? (cur.value.length === 1) : false; if (hasChar ? (idx !== 4) : false) { var nxt = document.getElementById(\"ape_otp_\" + (idx + 1)); if (nxt) nxt.focus(); } }; window.apeOtpKeyDown = function(e, idx) { if (e.key === \"Backspace\") { var cur = document.getElementById(\"ape_otp_\" + idx); if (cur && !cur.value && idx > 1) { var prev = document.getElementById(\"ape_otp_\" + (idx - 1)); if (prev) { prev.focus(); prev.value = \"\"; } } } else if (e.key === \"Enter\") { apeVerifyOtp(); } }; window.apeOtpPaste = function(e) { e.preventDefault(); var pasteData = (e.clipboardData || window.clipboardData).getData(\"text\").trim(); if (pasteData && pasteData.length >= 4) { for (var i = 1; i <= 4; i++) { var b = document.getElementById(\"ape_otp_\" + i); if (b) b.value = pasteData[i - 1]; } var b4 = document.getElementById(\"ape_otp_4\"); if (b4) b4.focus(); } }; function apeShowToast() { var t = document.getElementById(\"ape_toast_notification\"); if (t) { t.style.transform = \"translateX(-50%) translateY(0)\"; setTimeout(function() { t.style.transform = \"translateX(-50%) translateY(-120px)\"; }, 5000); } } window.apeVerifyOtp = function() { var code = \"\"; [1, 2, 3, 4].forEach(function(i) { var box = document.getElementById(\"ape_otp_\" + i); if (box) code += box.value.trim(); }); var err = document.getElementById(\"ape_otp_error\"); if (!code || code !== state.currentOtp) { if (err) { err.style.display = \"block\"; err.innerText = \"Invalid verification code. Please check your email and try again.\"; } return; } if (err) err.style.display = \"none\"; var btn = document.getElementById(\"ape_btn_confirm_estimate\"); if (btn) { btn.disabled = true; btn.innerHTML = '<span>Verifying & Dispatching...<\/span>'; } dispatchLead(); setTimeout(function() { window.apeCloseOtpModal(); renderProposal(); window.apeGoToStep(6); apeShowToast(); if (btn) { btn.disabled = false; btn.innerHTML = '<span>Confirm & View Estimate<\/span> <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><polyline points=\"12 5 19 12 12 19\"><\/polyline><\/svg>'; } }, 450); };function renderProposal() {  var total = 0;  var tbody = document.getElementById(\"ape_breakdown_tbody\");  if (tbody) tbody.innerHTML = \"\";  masterModules.forEach(function(m) {    if (state.selectedModules[m.id]) {      total += m.price;      if (tbody) {        var tr = document.createElement(\"tr\");        var td1 = document.createElement(\"td\"); td1.textContent = m.name; td1.style.fontWeight = \"700\";        var td2 = document.createElement(\"td\"); td2.textContent = m.category;        var td3 = document.createElement(\"td\"); td3.style.textAlign = \"right\"; td3.style.fontWeight = \"700\"; td3.textContent = \"\u20b9\" + m.price.toLocaleString(\"en-IN\");        tr.appendChild(td1); tr.appendChild(td2); tr.appendChild(td3);        tbody.appendChild(tr);      }    }  });  var priceEl = document.getElementById(\"ape_final_price\");  if (priceEl) priceEl.innerText = \"\u20b9\" + total.toLocaleString(\"en-IN\");  var cName = document.getElementById(\"ape_final_client_name\");  var cEmail = document.getElementById(\"ape_final_client_email\");  var cPhone = document.getElementById(\"ape_final_client_phone\");  var cSector = document.getElementById(\"ape_final_client_sector\");  if (cName) cName.innerText = state.name + (state.company ? (\" (\" + state.company + \")\") : \"\");  if (cEmail) cEmail.innerText = state.email; var sEmail = document.getElementById(\"ape_success_email_disp\"); if (sEmail) sEmail.innerText = state.email;  if (cPhone) cPhone.innerText = \"+91 \" + state.phone;  if (cSector) {    var p = sectorPresets[state.sectorKey];    cSector.innerText = p ? p.title : \"Custom\";  }}function dispatchLead() { try { var selectedList = []; var totalPrice = 0; masterModules.forEach(function(m) { if (state.selectedModules[m.id]) { selectedList.push(m.name + \" (\u20b9\" + m.price.toLocaleString(\"en-IN\") + \")\"); totalPrice += m.price; } }); var sectorTitle = sectorPresets[state.sectorKey] ? sectorPresets[state.sectorKey].title : \"Custom\"; var payload = { \"_subject\": \"\ud83d\ude80 New Project Scope Estimate: \" + state.name + \" (\" + sectorTitle + \")\", \"Client Name\": state.name, \"Work Email\": state.email, \"Mobile Number\": \"+91 \" + state.phone, \"Company Name\": state.company || \"Not Specified\", \"Project Sector\": sectorTitle, \"Total Estimated Investment\": \"\u20b9\" + totalPrice.toLocaleString(\"en-IN\"), \"Total Modules Selected\": selectedList.length + \" Modules\", \"Selected Architecture Modules\": selectedList.join(\", \"), \"_template\": \"table\", \"_captcha\": \"false\" }; fetch(\"https:\/\/formsubmit.co\/ajax\/enquiry@annulartechnologies.com\", { method: \"POST\", headers: { \"Content-Type\": \"application\/json\", \"Accept\": \"application\/json\" }, body: JSON.stringify(payload) }).catch(function(e) {}); } catch(err) {} };window.apeResetAll = function() {  state.step = 1; state.email = \"\"; state.sectorKey = \"\"; state.selectedModules = {}; state.name = \"\"; state.phone = \"\"; state.company = \"\"; var sel = document.getElementById(\"ape_sector_select\"); if (sel) sel.value = \"\"; var prevBox = document.getElementById(\"ape_sector_preview_box\"); if (prevBox) prevBox.style.display = \"none\"; var sErr = document.getElementById(\"ape_sector_error\"); if (sErr) sErr.style.display = \"none\";  var emailInp = document.getElementById(\"ape_email_input\"); if (emailInp) emailInp.value = \"\";  var nameInp = document.getElementById(\"ape_name_input\"); if (nameInp) nameInp.value = \"\";  var phoneInp = document.getElementById(\"ape_phone_input\"); if (phoneInp) phoneInp.value = \"\";  var compInp = document.getElementById(\"ape_company_input\"); if (compInp) compInp.value = \"\";  var scards = document.querySelectorAll(\".ape-sector-card\"); scards.forEach(function(c) { c.classList.remove(\"selected\"); });  syncModuleCardsUI();  if (typeof window.apeCloseOtpModal === \"function\") { window.apeCloseOtpModal(); }  window.apeGoToStep(1);};})();<\/script><br \/>\n<br \/>\n<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container hundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-margin-top:0px;--awb-margin-bottom:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><!-- =====================================================\n ANNULAR TECHNOLOGIES | TWO-STEP CONSULTATION POPUP\n WordPress \/ Avada + EmailJS + Email OTP\n Responsive Form + PODS \/ Annular Domain Detection\n===================================================== -->\n\n<style>\n#annular-open {\n  display:inline-flex;align-items:center;justify-content:center;\n  min-height:48px;padding:13px 25px;border:0;border-radius:30px;\n  max-width: 40%;\n  background:#175cff;color:#fff;font-family:inherit;font-size:14px;\n  font-weight:600;cursor:pointer;transition:.2s;\n}\n#annular-open:hover {background:#1048d8;transform:translateY(-1px)}\n\nhtml.annular-popup-open,body.annular-popup-open {\n  overflow:hidden!important;\n}\n\n#annular-modal,#annular-thankyou-modal {\n  display:none;position:fixed!important;inset:0!important;\n  z-index:2147483647!important;width:100%!important;height:100vh!important;\n  height:100dvh!important;box-sizing:border-box!important;padding:16px!important;\n  align-items:center!important;justify-content:center!important;\n  overflow-y:auto!important;background:rgba(15,23,42,.68);\n}\n#annular-modal.is-open,#annular-thankyou-modal.is-open {\n  display:flex!important;\n}\n\n#annular-modal .annular-card {\n  position:relative;width:100%;max-width:480px;\n  max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);\n  box-sizing:border-box;margin:auto;padding:27px;\n  overflow-y:auto;overscroll-behavior:contain;\n  border:1px solid #eaecf0;border-radius:20px;\n  background:#fff;color:#171717;box-shadow:0 20px 70px #0003;\n}\n\n#annular-modal h3 {\n  margin:0 42px 8px 0;color:#171717;font-size:25px;\n  font-weight:700;line-height:1.3;\n}\n#annular-modal .annular-description {\n  margin:0 0 20px;color:#667085;font-size:13px;line-height:1.7;\n}\n\n#annular-close,#annular-thankyou-close {\n  position:absolute;top:12px;right:12px;display:flex;\n  align-items:center;justify-content:center;width:34px;height:34px;\n  padding:0;border:0;border-radius:50%;background:#f3f4f6;\n  color:#4b5563;font-size:24px;cursor:pointer;\n}\n#annular-close:hover,#annular-thankyou-close:hover {\n  background:#e5e7eb;\n}\n\n#annular-modal .annular-progress {\n  display:flex;align-items:center;gap:10px;margin:0 0 20px;\n}\n#annular-modal .annular-progress-line {\n  flex:1;height:3px;border-radius:5px;background:#e5e7eb;\n}\n#annular-modal .annular-progress-line.active {\n  background:#175cff;\n}\n#annular-modal .annular-step-label {\n  margin-bottom:8px;color:#175cff;font-size:11px;font-weight:700;\n  letter-spacing:1px;text-transform:uppercase;\n}\n#annular-modal #annular-form {\n  width:100%;margin:0;\n}\n#annular-modal .annular-screen[hidden],\n#annular-modal #annular-otp-area[hidden] {\n  display:none!important;\n}\n#annular-modal .annular-field {\n  width:100%;min-width:0;margin:0 0 16px;\n}\n#annular-modal label {\n  display:block;margin-bottom:7px;color:#344054;font-size:13px;\n  font-weight:600;line-height:1.4;\n}\n#annular-modal input,#annular-modal textarea {\n  display:block;width:100%;min-width:0;min-height:46px;\n  box-sizing:border-box;margin:0;padding:12px 14px;\n  border:1px solid #d0d5dd;border-radius:11px;background:#fff;\n  color:#171717;font-family:inherit;font-size:14px;line-height:1.5;\n  box-shadow:none;transition:border-color .2s,box-shadow .2s;\n}\n#annular-modal textarea {\n  min-height:105px;resize:vertical;\n}\n#annular-modal input::placeholder,\n#annular-modal textarea::placeholder {\n  color:#98a2b3;\n}\n#annular-modal input:focus,#annular-modal textarea:focus {\n  border-color:#175cff;outline:none;box-shadow:0 0 0 3px #175cff1f;\n}\n#annular-modal button,#annular-thankyou-modal button {\n  font-family:inherit;\n}\n\n#annular-modal .annular-inline-row {\n  display:flex;align-items:stretch;gap:8px;width:100%;\n}\n#annular-modal .annular-inline-row input {\n  flex:1 1 auto;width:100%;\n}\n#annular-send-otp,#annular-verify {\n  display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;\n  min-height:46px;padding:10px 14px;border:0;border-radius:25px;\n  background:#eaf0ff;color:#175cff;font-size:12px;font-weight:700;\n  white-space:nowrap;cursor:pointer;\n}\n#annular-send-otp:hover:not(:disabled),\n#annular-verify:hover:not(:disabled) {\n  background:#d9e5ff;\n}\n#annular-send-otp:disabled,#annular-verify:disabled {\n  opacity:.5;cursor:not-allowed;\n}\n#annular-otp-area {\n  margin:0 0 16px;padding:15px;border:1px solid #e4e9f2;\n  border-radius:14px;background:#f8faff;\n}\n#annular-modal #annular-otp {\n  letter-spacing:5px;font-size:17px;font-weight:700;\n}\n\n#annular-next,#annular-submit,#annular-back {\n  display:inline-flex;align-items:center;justify-content:center;\n  min-height:47px;box-sizing:border-box;padding:12px 18px;\n  border:0;border-radius:28px;font-size:14px;font-weight:700;\n  cursor:pointer;transition:background .2s,opacity .2s;\n}\n#annular-next,#annular-submit {\n  width:100%;background:#175cff;color:#fff;\n}\n#annular-next:hover:not(:disabled),\n#annular-submit:hover:not(:disabled) {\n  background:#1048d8;\n}\n#annular-next:disabled,#annular-submit:disabled {\n  opacity:.5;cursor:not-allowed;\n}\n#annular-back {\n  flex:0 0 auto;background:#f2f4f7;color:#344054;\n}\n#annular-back:hover {\n  background:#e4e7ec;\n}\n#annular-step2-actions {\n  display:flex;gap:10px;margin-top:8px;\n}\n#annular-step2-actions #annular-submit {\n  flex:1;\n}\n#annular-status {\n  margin-top:12px;color:#475569;font-size:12px;line-height:1.6;\n  overflow-wrap:anywhere;\n}\n#annular-status:empty {\n  display:none;\n}\n#annular-status.success {\n  color:#087443;\n}\n#annular-status.error {\n  color:#b42318;\n}\n\n#annular-thankyou-modal .annular-thankyou-card {\n  position:relative;width:100%;max-width:420px;box-sizing:border-box;\n  margin:auto;padding:40px 30px 30px;border:1px solid #eaecf0;\n  border-radius:22px;background:#fff;color:#171717;text-align:center;\n  box-shadow:0 24px 80px #0005;animation:annular-thankyou-in .25s ease-out;\n}\n#annular-thankyou-modal .annular-success-icon {\n  display:flex;align-items:center;justify-content:center;width:66px;height:66px;\n  margin:0 auto 20px;border:1px solid #b7ebcf;border-radius:50%;\n  background:#ecfdf3;color:#087443;font-size:34px;font-weight:700;\n}\n#annular-thankyou-modal h3 {\n  margin:0 0 12px;font-size:25px;font-weight:700;\n}\n#annular-thankyou-modal .annular-thankyou-message {\n  margin:0 auto 24px;max-width:320px;color:#667085;font-size:14px;line-height:1.8;\n}\n#annular-thankyou-modal .annular-thankyou-button {\n  width:100%;min-height:46px;padding:12px 20px;border:0;border-radius:28px;\n  background:#175cff;color:#fff;font-size:14px;font-weight:700;cursor:pointer;\n}\n#annular-thankyou-modal .annular-thankyou-button:hover {\n  background:#1048d8;\n}\n@keyframes annular-thankyou-in {\n  from {opacity:0;transform:translateY(12px) scale(.98)}\n  to {opacity:1;transform:translateY(0) scale(1)}\n}\n\n@media(max-width:600px) {\n  #annular-modal {padding:10px!important}\n  #annular-modal .annular-card {\n    max-height:calc(100vh - 20px);max-height:calc(100dvh - 20px);\n    padding:22px 17px;border-radius:17px;\n  }\n  #annular-modal h3 {font-size:22px}\n  #annular-modal .annular-description {margin-bottom:16px}\n  #annular-modal input,#annular-modal textarea {font-size:16px}\n  #annular-modal .annular-inline-row {gap:6px}\n  #annular-send-otp,#annular-verify {padding:9px 10px;font-size:11px}\n  #annular-thankyou-modal .annular-thankyou-card {padding:36px 22px 24px}\n}\n@media(max-height:650px) {\n  #annular-modal {align-items:flex-start!important;padding:10px!important}\n  #annular-modal .annular-card {\n    max-height:calc(100vh - 20px);max-height:calc(100dvh - 20px);\n    margin:0 auto;padding-top:18px;padding-bottom:18px;\n  }\n  #annular-modal .annular-field {margin-bottom:12px}\n}\n<\/style>\n\n<!-- OPEN BUTTON -->\n\n\n<!-- CONSULTATION POPUP -->\n<div id=\"annular-modal\" role=\"dialog\" aria-modal=\"true\"\n     aria-labelledby=\"annular-title\" aria-hidden=\"true\">\n  <div class=\"annular-card\">\n    <button id=\"annular-close\" type=\"button\" aria-label=\"Close form\">\u00d7<\/button>\n\n    <h3 id=\"annular-title\">Improve Your Testing Process<\/h3>\n    <p class=\"annular-description\">\n      Share your requirements and our team will get in touch.\n    <\/p>\n\n    <div class=\"annular-progress\" aria-label=\"Form progress\">\n      <div id=\"annular-progress-1\" class=\"annular-progress-line active\"><\/div>\n      <div id=\"annular-progress-2\" class=\"annular-progress-line\"><\/div>\n    <\/div>\n\n    <form id=\"annular-form\">\n      <!-- STEP 1 -->\n      <section id=\"annular-screen-1\" class=\"annular-screen\">\n        <div class=\"annular-step-label\">Step 1 of 2<\/div>\n\n        <div class=\"annular-field\">\n          <label for=\"annular-name\">Full Name *<\/label>\n          <input id=\"annular-name\" name=\"user_name\" type=\"text\"\n                 placeholder=\"Enter your full name\" autocomplete=\"name\"\n                 maxlength=\"120\" required>\n        <\/div>\n\n        <div class=\"annular-field\">\n          <label for=\"annular-email\">Email *<\/label>\n          <div class=\"annular-inline-row\">\n            <input id=\"annular-email\" name=\"user_email\" type=\"email\"\n                   placeholder=\"Enter your email address\" autocomplete=\"email\"\n                   maxlength=\"254\" required>\n            <button id=\"annular-send-otp\" type=\"button\" disabled>Send OTP<\/button>\n          <\/div>\n        <\/div>\n\n        <div id=\"annular-otp-area\" hidden>\n          <div class=\"annular-field\">\n            <label for=\"annular-otp\">Enter Email OTP *<\/label>\n            <div class=\"annular-inline-row\">\n              <input id=\"annular-otp\" name=\"otp\" type=\"text\"\n                     inputmode=\"numeric\" autocomplete=\"one-time-code\"\n                     maxlength=\"6\" pattern=\"[0-9]{6}\" placeholder=\"6-digit OTP\">\n              <button id=\"annular-verify\" type=\"button\">Verify<\/button>\n            <\/div>\n          <\/div>\n          <p style=\"margin:0;color:#667085;font-size:12px;line-height:1.6\">\n            Check your inbox and spam folder for the verification code.\n          <\/p>\n        <\/div>\n\n        <button id=\"annular-next\" type=\"button\" disabled style=\"margin-top:8px\">\n          Continue \u2192\n        <\/button>\n      <\/section>\n\n      <!-- STEP 2 -->\n      <section id=\"annular-screen-2\" class=\"annular-screen\" hidden>\n        <div class=\"annular-step-label\">Step 2 of 2<\/div>\n        <p style=\"margin:0 0 17px;color:#667085;font-size:13px;line-height:1.6\">\n          Your email is verified. Tell us a little more about your requirements.\n        <\/p>\n\n        <div class=\"annular-field\">\n          <label for=\"annular-mobile\">Mobile Number *<\/label>\n          <input id=\"annular-mobile\" name=\"user_mobile\" type=\"tel\"\n                 placeholder=\"Enter your mobile number\" autocomplete=\"tel\"\n                 maxlength=\"20\" pattern=\"[+]?[0-9 ()-]{7,20}\"\n                 title=\"Enter a valid mobile number.\" required>\n        <\/div>\n\n        <div class=\"annular-field\">\n          <label for=\"annular-help\">How Can We Help? *<\/label>\n          <textarea id=\"annular-help\" name=\"message\"\n                    placeholder=\"Tell us about your project or requirements\"\n                    maxlength=\"4000\" required><\/textarea>\n        <\/div>\n\n        <div id=\"annular-step2-actions\">\n          <button id=\"annular-back\" type=\"button\">\u2190 Back<\/button>\n          <button id=\"annular-submit\" type=\"submit\" disabled>Submit Enquiry<\/button>\n        <\/div>\n      <\/section>\n\n      <div id=\"annular-status\" role=\"status\" aria-live=\"polite\"><\/div>\n    <\/form>\n  <\/div>\n<\/div>\n\n<!-- THANK-YOU POPUP -->\n<div id=\"annular-thankyou-modal\" role=\"dialog\" aria-modal=\"true\"\n     aria-labelledby=\"annular-thankyou-title\"\n     aria-describedby=\"annular-thankyou-description\" aria-hidden=\"true\">\n  <div class=\"annular-thankyou-card\">\n    <button id=\"annular-thankyou-close\" type=\"button\"\n            aria-label=\"Close thank-you message\">\u00d7<\/button>\n\n    <div class=\"annular-success-icon\" aria-hidden=\"true\">\u2713<\/div>\n    <h3 id=\"annular-thankyou-title\">Thank You!<\/h3>\n    <p id=\"annular-thankyou-description\" class=\"annular-thankyou-message\">\n      Your consultation request has been submitted successfully.\n      Our team will review your requirements and get in touch with you soon.\n    <\/p>\n    <button id=\"annular-thankyou-done\" type=\"button\"\n            class=\"annular-thankyou-button\">Done<\/button>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@emailjs\/browser@4\/dist\/email.min.js\"><\/script>\n\n<script>\n(() => {\n  \"use strict\";\n\n  \/* EMAILJS SETTINGS *\/\n  const SERVICE_ID = \"service_56m8mns\";\n  const PUBLIC_KEY = \"7krsXzZ1B4qnPrCGC\";\n  const OTP_TEMPLATE_ID = \"template_6r4w7s6\";\n  const ENQUIRY_TEMPLATE_ID = \"template_ol5pw49\";\n\n  \/* WEBSITE DETECTION *\/\n  const hostname = window.location.hostname.toLowerCase().replace(\/\\.$\/, \"\");\n\n  const isPods = [\n    \"pods.annulartechnologies.com\",\n    \"www.pods.annulartechnologies.com\"\n  ].includes(hostname);\n\n  const isAnnular = [\n    \"annulartechnologies.com\",\n    \"www.annulartechnologies.com\",\n    \"web.annulartechnologies.com\"\n  ].includes(hostname);\n\n  const $ = id => document.getElementById(id);\n\n  const openButton = $(\"annular-open\") || { addEventListener: () => {}, focus: () => {} };\n  let currentServiceContext = \"Quality Assurance\";\n  let currentTitleContext = \"Improve Your Testing Process\";\n  const modal = $(\"annular-modal\");\n  const thankyouModal = $(\"annular-thankyou-modal\");\n  const form = $(\"annular-form\");\n\n  const nameInput = $(\"annular-name\");\n  const emailInput = $(\"annular-email\");\n  const mobileInput = $(\"annular-mobile\");\n  const helpInput = $(\"annular-help\");\n  const otpArea = $(\"annular-otp-area\");\n  const otpInput = $(\"annular-otp\");\n\n  const sendButton = $(\"annular-send-otp\");\n  const verifyButton = $(\"annular-verify\");\n  const nextButton = $(\"annular-next\");\n  const backButton = $(\"annular-back\");\n  const submitButton = $(\"annular-submit\");\n  const status = $(\"annular-status\");\n\n  let currentOTP = \"\";\n  let verifiedEmail = \"\";\n  let otpExpiresAt = 0;\n  let otpAttempts = 0;\n  let resendAvailableAt = 0;\n  let resendTimer = null;\n  let sendingOTP = false;\n  let sendingEnquiry = false;\n  let requestVersion = 0;\n  let previousFocus = null;\n  let previousBodyOverflow = \"\";\n  let previousHtmlOverflow = \"\";\n\n  \/* Move popups outside Avada containers *\/\n  document.body.appendChild(modal);\n  document.body.appendChild(thankyouModal);\n\n  function setStatus(message, type = \"\") {\n    status.textContent = message;\n    status.className = type;\n  }\n\n  function getEmail() {\n    return emailInput.value.trim().toLowerCase();\n  }\n\n  function emailJSReady() {\n    return Boolean(window.emailjs &&\n      typeof window.emailjs.send === \"function\");\n  }\n\n  if (emailJSReady()) {\n    window.emailjs.init({ publicKey: PUBLIC_KEY });\n  } else {\n    setStatus(\"Email service failed to load. Refresh the page and try again.\", \"error\");\n  }\n\n  \/* Enable OTP only when the email is valid *\/\n  function updateSendButton() {\n    const validEmail =\n      emailInput.value.trim() !== \"\" && emailInput.checkValidity();\n\n    const coolingDown = Date.now() < resendAvailableAt;\n\n    sendButton.disabled =\n      !validEmail || sendingOTP || sendingEnquiry || coolingDown;\n  }\n\n  \/* Enable Continue only when name and verified email are valid *\/\n  function updateContinueButton() {\n    const nameValid = nameInput.value.trim().length > 0;\n\n    const verificationValid =\n      verifiedEmail !== \"\" &&\n      verifiedEmail === getEmail() &&\n      Date.now() < otpExpiresAt;\n\n    nextButton.disabled = !(\n      nameValid && verificationValid && !sendingEnquiry\n    );\n  }\n\n  \/*\n   * IMPORTANT FIX:\n   * Submit is enabled only when:\n   * 1. Email has been verified and OTP is not expired.\n   * 2. Mobile number is valid.\n   * 3. Message is not empty.\n   * 4. No enquiry is currently being submitted.\n   *\/\n  function updateSubmitButton() {\n    const verificationValid =\n      verifiedEmail !== \"\" &&\n      verifiedEmail === getEmail() &&\n      currentOTP !== \"\" &&\n      Date.now() < otpExpiresAt;\n\n    const mobileValid =\n      mobileInput.value.trim() !== \"\" &&\n      mobileInput.checkValidity();\n\n    const messageValid =\n      helpInput.value.trim().length > 0;\n\n    submitButton.disabled = !(\n      verificationValid &&\n      mobileValid &&\n      messageValid &&\n      !sendingEnquiry\n    );\n  }\n\n  function lockPageScroll() {\n    previousBodyOverflow = document.body.style.overflow;\n    previousHtmlOverflow = document.documentElement.style.overflow;\n\n    document.documentElement.classList.add(\"annular-popup-open\");\n    document.body.classList.add(\"annular-popup-open\");\n\n    document.documentElement.style.overflow = \"hidden\";\n    document.body.style.overflow = \"hidden\";\n  }\n\n  function unlockPageScroll() {\n    document.documentElement.classList.remove(\"annular-popup-open\");\n    document.body.classList.remove(\"annular-popup-open\");\n\n    document.documentElement.style.overflow = previousHtmlOverflow;\n    document.body.style.overflow = previousBodyOverflow;\n  }\n\n  function openModal() {\n    previousFocus = document.activeElement;\n    lockPageScroll();\n\n    modal.classList.add(\"is-open\");\n    modal.setAttribute(\"aria-hidden\", \"false\");\n\n    requestAnimationFrame(() =>\n      nameInput.focus({ preventScroll: true })\n    );\n  }\n\n  function closeModal() {\n    modal.classList.remove(\"is-open\");\n    modal.setAttribute(\"aria-hidden\", \"true\");\n\n    if (!thankyouModal.classList.contains(\"is-open\")) {\n      unlockPageScroll();\n    }\n\n    if (previousFocus && typeof previousFocus.focus === \"function\") {\n      previousFocus.focus({ preventScroll: true });\n    }\n  }\n\n  \n  function openModalWithConfig(title, service) {\n    if (title) {\n      currentTitleContext = title;\n      const titleEl = $(\"annular-title\");\n      if (titleEl) titleEl.textContent = title;\n    }\n    if (service) {\n      currentServiceContext = service;\n    }\n    openModal();\n  }\n\n  \/\/ Attach global click listener for trigger buttons\n  const triggerList = [\".qe-btn-primary\",\"a[href=\\\"#lets-talk\\\"]\",\".qe-btn-secondary\",\".annular-btn-primary\",\"a[href*=\\\"\/contact\/\\\"]\"];\n  document.addEventListener(\"click\", function(event) {\n    const selectorStr = triggerList.join(\", \");\n    if (!selectorStr) return;\n    const trigger = event.target.closest(selectorStr);\n    if (trigger) {\n      event.preventDefault();\n      \/\/ Extract clean text from clicked button (stripping arrow icons like \u2192, \u2197)\n      const rawText = (trigger.innerText || \"\").replace(\/[\\u2190-\\u21FF\\u27F0-\\u27FF\\u2900-\\u297F\u2192\u2197\u2190\u25ba]\/g, \"\").trim();\n      const customTitle = trigger.getAttribute(\"data-modal-title\") || \n                          (rawText.length >= 3 && rawText.length <= 60 ? rawText : \"Improve Your Testing Process\");\n      const customService = trigger.getAttribute(\"data-service\") || \"Quality Assurance\";\n      openModalWithConfig(customTitle, customService);\n    }\n  });\n\n  openButton.addEventListener(\"click\", openModal);\n  $(\"annular-close\").addEventListener(\"click\", closeModal);\n\n  modal.addEventListener(\"click\", event => {\n    if (event.target === modal) closeModal();\n  });\n\n  function showThankYou() {\n    modal.classList.remove(\"is-open\");\n    modal.setAttribute(\"aria-hidden\", \"true\");\n\n    thankyouModal.classList.add(\"is-open\");\n    thankyouModal.setAttribute(\"aria-hidden\", \"false\");\n\n    requestAnimationFrame(() =>\n      $(\"annular-thankyou-done\").focus({ preventScroll: true })\n    );\n  }\n\n  function closeThankYou() {\n    thankyouModal.classList.remove(\"is-open\");\n    thankyouModal.setAttribute(\"aria-hidden\", \"true\");\n\n    unlockPageScroll();\n    openButton.focus({ preventScroll: true });\n  }\n\n  $(\"annular-thankyou-close\").addEventListener(\"click\", closeThankYou);\n  $(\"annular-thankyou-done\").addEventListener(\"click\", closeThankYou);\n\n  thankyouModal.addEventListener(\"click\", event => {\n    if (event.target === thankyouModal) closeThankYou();\n  });\n\n  document.addEventListener(\"keydown\", event => {\n    if (event.key !== \"Escape\") return;\n\n    if (thankyouModal.classList.contains(\"is-open\")) {\n      closeThankYou();\n    } else if (modal.classList.contains(\"is-open\")) {\n      closeModal();\n    }\n  });\n\n  function clearResendTimer() {\n    if (resendTimer) {\n      clearInterval(resendTimer);\n      resendTimer = null;\n    }\n  }\n\n  function resetVerification(message = \"\", type = \"\") {\n    requestVersion++;\n\n    currentOTP = \"\";\n    verifiedEmail = \"\";\n    otpExpiresAt = 0;\n    otpAttempts = 0;\n\n    otpArea.hidden = true;\n    otpInput.value = \"\";\n\n    verifyButton.disabled = false;\n\n    clearResendTimer();\n\n    updateSendButton();\n    updateContinueButton();\n    updateSubmitButton();\n\n    setStatus(message, type);\n  }\n\n  \/* Email edits invalidate the previous verification *\/\n  emailInput.addEventListener(\"input\", () => {\n    if (currentOTP || verifiedEmail || !otpArea.hidden) {\n      resetVerification(\n        \"Email changed. Please request a new OTP.\",\n        \"error\"\n      );\n    } else {\n      updateSendButton();\n      updateContinueButton();\n      updateSubmitButton();\n    }\n  });\n\n  nameInput.addEventListener(\"input\", updateContinueButton);\n\n  \/* CRITICAL FIX: update Submit whenever these fields change *\/\n  mobileInput.addEventListener(\"input\", updateSubmitButton);\n  mobileInput.addEventListener(\"change\", updateSubmitButton);\n  helpInput.addEventListener(\"input\", updateSubmitButton);\n  helpInput.addEventListener(\"change\", updateSubmitButton);\n\n  function generateOTP() {\n    if (!window.crypto || !window.crypto.getRandomValues) {\n      throw new Error(\"Secure random number generation is unavailable.\");\n    }\n\n    const values = new Uint32Array(1);\n    window.crypto.getRandomValues(values);\n\n    return String(values[0] % 1000000).padStart(6, \"0\");\n  }\n\n  \/* SEND OTP *\/\n  sendButton.addEventListener(\"click\", async () => {\n    if (!emailJSReady()) {\n      setStatus(\"Email service is unavailable. Please refresh and try again.\", \"error\");\n      return;\n    }\n\n    if (!emailInput.checkValidity()) {\n      emailInput.reportValidity();\n      updateSendButton();\n      return;\n    }\n\n    if (sendingOTP || sendingEnquiry) return;\n\n    if (Date.now() < resendAvailableAt) {\n      setStatus(\n        \"Please wait \" +\n        Math.ceil((resendAvailableAt - Date.now()) \/ 1000) +\n        \" seconds before requesting another OTP.\",\n        \"error\"\n      );\n\n      updateSendButton();\n      return;\n    }\n\n    const email = getEmail();\n    const version = ++requestVersion;\n\n    sendingOTP = true;\n    updateSendButton();\n\n    currentOTP = \"\";\n    verifiedEmail = \"\";\n    otpExpiresAt = 0;\n    otpAttempts = 0;\n\n    otpArea.hidden = true;\n    otpInput.value = \"\";\n\n    updateContinueButton();\n    updateSubmitButton();\n\n    setStatus(\"Sending OTP...\");\n\n    try {\n      const otp = generateOTP();\n\n      await window.emailjs.send(\n        SERVICE_ID,\n        OTP_TEMPLATE_ID,\n        {\n          email: email,\n          passcode: otp,\n          time: new Date(Date.now() + 5 * 60 * 1000)\n            .toLocaleTimeString()\n        }\n      );\n\n      if (version !== requestVersion) return;\n\n      if (getEmail() !== email) {\n        setStatus(\"Email changed. Please request a new OTP.\", \"error\");\n        return;\n      }\n\n      currentOTP = otp;\n      otpExpiresAt = Date.now() + 5 * 60 * 1000;\n      resendAvailableAt = Date.now() + 60000;\n\n      otpArea.hidden = false;\n\n      otpInput.focus({ preventScroll: true });\n\n      setStatus(\"OTP sent. Please check your email.\", \"success\");\n\n      clearResendTimer();\n\n      \/*\n       * Also refresh validation periodically so an expired OTP\n       * cannot leave the Submit button enabled.\n       *\/\n      resendTimer = setInterval(() => {\n        updateSendButton();\n        updateContinueButton();\n        updateSubmitButton();\n\n        if (Date.now() >= resendAvailableAt) {\n          resendAvailableAt = 0;\n          updateSendButton();\n        }\n\n        if (Date.now() >= otpExpiresAt) {\n          clearResendTimer();\n\n          if (verifiedEmail) {\n            verifiedEmail = \"\";\n            updateContinueButton();\n            updateSubmitButton();\n\n            setStatus(\n              \"OTP expired. Please request a new OTP to continue.\",\n              \"error\"\n            );\n          } else {\n            updateSubmitButton();\n          }\n        }\n      }, 1000);\n\n    } catch (error) {\n      console.error(\"OTP EmailJS error:\", error);\n\n      setStatus(\n        \"Unable to send OTP. Check your EmailJS service and OTP template.\",\n        \"error\"\n      );\n\n    } finally {\n      sendingOTP = false;\n      updateSendButton();\n      updateContinueButton();\n      updateSubmitButton();\n    }\n  });\n\n  \/* VERIFY OTP *\/\n  verifyButton.addEventListener(\"click\", () => {\n    const email = getEmail();\n    const enteredOTP = otpInput.value.trim();\n\n    if (!currentOTP || Date.now() >= otpExpiresAt) {\n      resetVerification(\"OTP expired. Please request a new OTP.\", \"error\");\n      return;\n    }\n\n    if (otpAttempts >= 5) {\n      resetVerification(\"Too many attempts. Please request a new OTP.\", \"error\");\n      return;\n    }\n\n    otpAttempts++;\n\n    if (!\/^\\d{6}$\/.test(enteredOTP) || enteredOTP !== currentOTP) {\n      verifiedEmail = \"\";\n\n      updateContinueButton();\n      updateSubmitButton();\n\n      if (otpAttempts >= 5) {\n        resetVerification(\n          \"Too many attempts. Please request a new OTP.\",\n          \"error\"\n        );\n      } else {\n        setStatus(\"Incorrect OTP. Please try again.\", \"error\");\n      }\n\n      return;\n    }\n\n    verifiedEmail = email;\n    verifyButton.disabled = true;\n\n    updateContinueButton();\n    updateSubmitButton();\n\n    setStatus(\"Email verified successfully.\", \"success\");\n  });\n\n  \/* STEP NAVIGATION *\/\n  nextButton.addEventListener(\"click\", () => {\n    if (!nameInput.checkValidity()) {\n      nameInput.reportValidity();\n      return;\n    }\n\n    if (!verifiedEmail || verifiedEmail !== getEmail()) {\n      setStatus(\"Please verify your email before continuing.\", \"error\");\n      return;\n    }\n\n    if (Date.now() >= otpExpiresAt) {\n      resetVerification(\"OTP expired. Please request a new OTP.\", \"error\");\n      return;\n    }\n\n    $(\"annular-screen-1\").hidden = true;\n    $(\"annular-screen-2\").hidden = false;\n\n    $(\"annular-progress-2\").classList.add(\"active\");\n\n    setStatus(\"\");\n\n    updateSubmitButton();\n\n    mobileInput.focus({ preventScroll: true });\n  });\n\n  backButton.addEventListener(\"click\", () => {\n    $(\"annular-screen-2\").hidden = true;\n    $(\"annular-screen-1\").hidden = false;\n\n    $(\"annular-progress-2\").classList.remove(\"active\");\n\n    setStatus(\"\");\n\n    updateContinueButton();\n    updateSubmitButton();\n  });\n\n  \/* SUBMIT ENQUIRY *\/\n  form.addEventListener(\"submit\", async event => {\n    event.preventDefault();\n\n    if (sendingEnquiry) return;\n\n    \/*\n     * Revalidate at submission time instead of trusting\n     * the button's disabled state alone.\n     *\/\n    updateSubmitButton();\n\n    if (!form.checkValidity()) {\n      form.reportValidity();\n      return;\n    }\n\n    const name = nameInput.value.trim();\n    const email = getEmail();\n    const mobile = mobileInput.value.trim();\n    const message = helpInput.value.trim();\n\n    if (!name || !email || !mobile || !message) {\n      setStatus(\n        \"Name, email, mobile number, and message are required.\",\n        \"error\"\n      );\n      return;\n    }\n\n    if (\n      !verifiedEmail ||\n      verifiedEmail !== email ||\n      !currentOTP ||\n      Date.now() >= otpExpiresAt\n    ) {\n      resetVerification(\n        \"Please verify your email before submitting.\",\n        \"error\"\n      );\n\n      $(\"annular-screen-2\").hidden = true;\n      $(\"annular-screen-1\").hidden = false;\n      $(\"annular-progress-2\").classList.remove(\"active\");\n\n      return;\n    }\n\n    if (!mobileInput.checkValidity()) {\n      mobileInput.reportValidity();\n      return;\n    }\n\n    if (!emailJSReady()) {\n      setStatus(\"Email service is unavailable. Please try again.\", \"error\");\n      return;\n    }\n\n    sendingEnquiry = true;\n\n    updateSubmitButton();\n    updateSendButton();\n\n    setStatus(\"Submitting your enquiry...\");\n\n    try {\n      await window.emailjs.send(\n        SERVICE_ID,\n        ENQUIRY_TEMPLATE_ID,\n        {\n          \/*\n           * Annular domain: company fields are populated.\n           * PODS domain: company fields are blank.\n           *\/\n          website_name: isAnnular ? \"Annular Technologies\" : \"\",\n          company_name: isAnnular ? \"Annular Technologies\" : \"\",\n\n          user_name: name,\n          user_email: email,\n          user_mobile: mobile,\n          service_name: currentServiceContext,\n          service_title: currentTitleContext,\n          message: \"[Service: \" + currentServiceContext + \" | \" + currentTitleContext + \"]\\n\" + message\n        }\n      );\n\n      form.reset();\n\n      clearResendTimer();\n\n      currentOTP = \"\";\n      verifiedEmail = \"\";\n      otpExpiresAt = 0;\n      otpAttempts = 0;\n      resendAvailableAt = 0;\n\n      $(\"annular-screen-1\").hidden = false;\n      $(\"annular-screen-2\").hidden = true;\n\n      $(\"annular-progress-1\").classList.add(\"active\");\n      $(\"annular-progress-2\").classList.remove(\"active\");\n\n      otpArea.hidden = true;\n      verifyButton.disabled = false;\n\n      updateSendButton();\n      updateContinueButton();\n      updateSubmitButton();\n\n      setStatus(\"\");\n\n      showThankYou();\n\n    } catch (error) {\n      console.error(\"Consultation EmailJS error:\", error);\n\n      setStatus(\n        \"Unable to submit your enquiry. Check your EmailJS template settings and try again.\",\n        \"error\"\n      );\n\n    } finally {\n      sendingEnquiry = false;\n\n      updateSendButton();\n      updateContinueButton();\n      updateSubmitButton();\n    }\n  });\n\n  \/* INITIAL STATE *\/\n  updateSendButton();\n  updateContinueButton();\n  updateSubmitButton();\n\n})();\n<\/script>\n<\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"footnotes":""},"class_list":["post-1702","page","type-page","status-publish","hentry"],"acf":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/pages\/1702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/comments?post=1702"}],"version-history":[{"count":108,"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/pages\/1702\/revisions"}],"predecessor-version":[{"id":2605,"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/pages\/1702\/revisions\/2605"}],"wp:attachment":[{"href":"https:\/\/web.annulartechnologies.com\/staging\/wp-json\/wp\/v2\/media?parent=1702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}