[{"data":1,"prerenderedAt":384},["ShallowReactive",2],{"application-flags":3,"navbar":7,"always-visible-banner":36,"navbar-about-highlight":108,"navbar-resource-highlight":182,"webinar-/webinar/state-of-browser-security":226},[4],{"name":5,"enabled":6},"maintenanceMode",false,[8],{"createdDate":9,"id":10,"name":11,"modelId":12,"published":13,"query":14,"data":15,"variations":20,"lastUpdated":21,"firstPublished":22,"testRatio":23,"createdBy":24,"lastUpdatedBy":25,"folders":26,"meta":27,"rev":35},1742208588866,"1c7a4e423bf54ac1a328bb4063459ef2","Banner","1c6207a5f24948ab82d4a0b17f251193","published",[],{"type":16,"url":17,"text":18,"link":19},"web-banner","https://pushsecurity.com/resources/browser-attacks-report","Get our latest report analyzing browser attack techniques in 2026",{},{},1774258294825,1742208637545,1,"CydmZnOWU1XuAaLhEDCoYNM4Z8W2","jKjF9r5jcvXU8tzZEfFQm31Iyvr2",[],{"kind":28,"lastPreviewUrl":29,"breakpoints":30,"hasAutosaves":34},"data","",{"xsmall":31,"small":32,"medium":33},320,640,768,true,"ga0kpxjhh76",{"createdDate":37,"id":38,"name":39,"modelId":40,"published":13,"stageModifiedSincePublish":6,"query":41,"data":42,"variations":97,"lastUpdated":98,"firstPublished":99,"testRatio":23,"createdBy":100,"lastUpdatedBy":101,"folders":102,"meta":103,"rev":107},1774965361051,"fd266d0172cc47429be7ad10f48c99ad","always visible banner","0678d178ec8b41efb8a23c09dba7874d",[],{"ctaText":43,"text":44,"url":29,"blocks":45,"state":93},"ewrererw","testrfesssssssssss",[46,73,81],{"@type":47,"@version":48,"id":49,"component":50,"responsiveStyles":63},"@builder.io/sdk:Element",2,"builder-ca12c06a52de41d7b8743da53118cd38",{"name":51,"tag":51,"options":52,"isRSC":62},"TopBannerContent",{"text":53,"ctaText":54,"url":55,"mainText":56,"cta":59},"New Webinar Series: Join John Hammond, Troy Hunt, and Matt Johansen for the State of Browser Attacks","Save Your Spot","https://pushsecurity.com/webinar/state-of-browser-security",{"content":57,"fontSize":58},"\u003Cp>Meet Push's browser security experts at BlackHat 2026.\u003C/p>","text-base",{"content":60,"fontSize":58,"url":61},"\u003Cp>Book a meeting →\u003C/p>","https://pushsecurity.com/events/blackhat-2026-meeting",null,{"large":64},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"marginTop":70,"marginBottom":70,"fontSize":71,"fontWeight":72},"flex","column","relative","0","border-box",".56rem","1.125rem","700",{"@type":47,"@version":48,"id":74,"component":75,"responsiveStyles":79},"builder-a2e1f4b9f30b464bb814d7f5de5b0aa7",{"name":76,"options":77,"isRSC":62},"Custom Code",{"code":78,"scriptsClientOnly":6},"\u003Cstyle>\n  .top-banner.bg-web-orange{background:rgb(114, 79, 255);}\n\u003C/style>\n",{"large":80},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"id":82,"@type":47,"tagName":83,"properties":84,"responsiveStyles":88},"builder-pixel-o503s4fpvk","img",{"src":85,"aria-hidden":86,"alt":29,"role":87,"width":68,"height":68},"https://cdn.builder.io/api/v1/pixel?apiKey=f3a1111ff5be48cdbb123cd9f5795a05","true","presentation",{"large":89},{"height":68,"width":68,"display":90,"opacity":68,"overflow":91,"pointerEvents":92},"block","hidden","none",{"deviceSize":94,"location":95},"large",{"path":29,"query":96},{},{},1783541846936,1774968080803,"ST0tXQM8slWpFrmioqKHmENB2qe2","kYgMv6WsbvfmlOUYqR2SFwGzw6e2",[],{"kind":104,"lastPreviewUrl":105,"hasLinks":6,"breakpoints":106,"hasErrors":6,"hasAutosaves":6},"component","https://pushsecurity.com/?builder.space=f3a1111ff5be48cdbb123cd9f5795a05&builder.user.permissions=read%2Ccreate%2Cpublish%2CeditDesigns%2CeditLayouts%2CeditLayers%2CeditContentPriority%2CeditFolders%2CcreateProjects%2CsendPullRequests&builder.user.role.name=Designer&builder.user.role.id=creator&builder.cachebust=true&builder.preview=always-visible-banner&builder.noCache=true&builder.allowTextEdit=true&__builder_editing__=true&builder.overrides.always-visible-banner=fd266d0172cc47429be7ad10f48c99ad&builder.overrides.fd266d0172cc47429be7ad10f48c99ad=fd266d0172cc47429be7ad10f48c99ad&builder.options.locale=Default",{"xsmall":31,"small":32,"medium":33},"kyujw1aptq",[109,145],{"createdDate":110,"id":111,"name":112,"modelId":113,"published":13,"stageModifiedSincePublish":6,"query":114,"data":115,"variations":138,"lastUpdated":139,"firstPublished":140,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":141,"meta":142,"rev":144},1776247359804,"9136a8f18b3b4a6ba29b8653a99372b1","testimonial-inductive-automation","20d9eaa352304613b3d1a794b400703d",[],{"link":116,"type":117,"testimonialLink":118,"testimonial":119},{},"testimonial","/customer-stories/inductive-automation",{"@type":120,"id":121,"model":117,"value":122},"@builder.io/core:Reference","f028f2b685bb47cd8bf9e82a26dd5a79",{"query":123,"folders":124,"createdDate":125,"id":121,"name":126,"modelId":127,"published":13,"data":128,"variations":132,"lastUpdated":133,"firstPublished":134,"testRatio":23,"createdBy":100,"lastUpdatedBy":100,"meta":135,"rev":137},[],[],1735823466309,"We found Push to be more accurate when compared to competitors and the browser agent offered features that others couldn’t match.","42035571a56940ac98bff4544aa79aa5",{"author":129,"jobTitle":130,"quote":126,"image":131},"Jason Waits","\u003Cp>CISO at Inductive Automation\u003C/p>","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2Ff04c0c0689ce4a89ac0f0708d78c0a07",{},1735910703862,1735823501152,{"kind":28,"lastPreviewUrl":29,"breakpoints":136,"hasAutosaves":34},{"small":32,"medium":33},"e8bsg4qrgtu",{},1776247404986,1776247404973,[],{"breakpoints":143,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},"g9lqcuxphw7",{"createdDate":146,"id":147,"name":148,"modelId":113,"published":13,"meta":149,"stageModifiedSincePublish":6,"query":151,"data":152,"variations":178,"lastUpdated":179,"firstPublished":180,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":181,"rev":144},1776255761419,"05a9322735fc427db12e2740e4302300","Report: 2026 Browser Attack Techniques",{"breakpoints":150,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},[],{"testimonial":153,"link":172,"type":175,"title":148,"description":176,"image":177},{"@type":120,"id":154,"model":117,"value":155},"192acbb1f9ca4cac918c0ec435a8bae3",{"query":156,"folders":157,"createdDate":158,"id":154,"name":159,"modelId":127,"published":13,"data":160,"variations":166,"lastUpdated":167,"firstPublished":168,"testRatio":23,"createdBy":100,"lastUpdatedBy":24,"meta":169,"rev":171},[],[],1728981467463,"Push does for identity what CrowdStrike did for the endpoint",{"video":161,"jobTitle":162,"author":163,"qoute":29,"quote":164,"image":165},"https://cdn.builder.io/o/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F8b30e8ca50064058bbaef0f3c6164575%2Fcompressed?apiKey=f3a1111ff5be48cdbb123cd9f5795a05&token=8b30e8ca50064058bbaef0f3c6164575&alt=media&optimized=true","\u003Cp>Deputy CISO at Microsoft\u003C/p>\u003Cp>Former LinkedIn, Slack, Palantir\u003C/p>","Geoff Belknap","Push does for identity what CrowdStrike did for the endpoint.","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F748f0ad0a5064a00a13f4721fcc8dea1",{},1742902158597,1728981782923,{"kind":28,"lastPreviewUrl":29,"breakpoints":170,"hasAutosaves":34},{"small":32,"medium":33},"ulhc0im1hfo",{"text":173,"url":174},"Download now","/resources/browser-attacks-report","resource","Learn about the latest techniques being used in the wild.","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F7b4a5ebf81d64e8c9d7fc35f6c96c4a9",{},1776255810913,1776255810900,[],[183,205],{"createdDate":184,"id":185,"name":148,"modelId":186,"published":13,"meta":187,"stageModifiedSincePublish":6,"query":189,"data":190,"variations":200,"lastUpdated":201,"firstPublished":202,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":203,"rev":204},1776256900280,"1f429607996e4e5fae8fe3f9b9610e55","4829faa81e7c4ee8bd2d000e160e8d3c",{"breakpoints":188,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},[],{"testimonial":191,"link":199,"type":175,"title":148,"description":176,"image":177},{"@type":120,"id":154,"model":117,"value":192},{"query":193,"folders":194,"createdDate":158,"id":154,"name":159,"modelId":127,"published":13,"data":195,"variations":196,"lastUpdated":167,"firstPublished":168,"testRatio":23,"createdBy":100,"lastUpdatedBy":24,"meta":197,"rev":171},[],[],{"video":161,"jobTitle":162,"author":163,"qoute":29,"quote":164,"image":165},{},{"kind":28,"lastPreviewUrl":29,"breakpoints":198,"hasAutosaves":34},{"small":32,"medium":33},{"text":173,"url":174},{},1776256937553,1776256937540,[],"xggsv10v1q9",{"createdDate":206,"id":207,"name":208,"modelId":186,"published":13,"stageModifiedSincePublish":6,"query":209,"data":210,"variations":220,"lastUpdated":221,"firstPublished":222,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":223,"meta":224,"rev":204},1776256949234,"ce043785b71b4ece98eac811ecf4ba10","inductive-automation",[],{"link":211,"type":117,"testimonial":212,"testimonialLink":118},{},{"@type":120,"id":121,"model":117,"value":213},{"query":214,"folders":215,"createdDate":125,"id":121,"name":126,"modelId":127,"published":13,"data":216,"variations":217,"lastUpdated":133,"firstPublished":134,"testRatio":23,"createdBy":100,"lastUpdatedBy":100,"meta":218,"rev":137},[],[],{"author":129,"jobTitle":130,"quote":126,"image":131},{},{"kind":28,"lastPreviewUrl":29,"breakpoints":219,"hasAutosaves":34},{"small":32,"medium":33},{},1776256974140,1776256974130,[],{"breakpoints":225,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},{"createdDate":227,"id":228,"name":229,"modelId":230,"published":13,"stageModifiedSincePublish":6,"query":231,"data":237,"variations":372,"lastUpdated":373,"firstPublished":374,"testRatio":23,"screenshot":375,"createdBy":100,"lastUpdatedBy":376,"folders":377,"meta":378,"rev":383},1772556362844,"e47acff652be4ef9aa938399f0889d5f","State of Browser Security","6d76dff70cb7466ca1f45901fc1f0c93",[232],{"@type":233,"property":234,"operator":235,"value":236},"@builder.io/core:Query","urlPath","is","/webinar/state-of-browser-security",{"titlePage":238,"date":239,"title":243,"ogImage":244,"seoDescription":245,"themeId":6,"image":246,"inputs":247,"textButton":248,"seoTitle":243,"blocks":249,"url":236,"state":366},"It's 2025 — Why Haven't We Solved Phishing Yet?!",{"startEventDate":240,"time":241,"endEventDate":242},1776351600000,"Multiple Timezones",1778605200000,"State of Browser Attacks Series","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F95040623db42401a8f1645d0775cf1ed","Join the industry's top security minds as they break down the browser attack landscape — from credential theft to AiTM phishing and beyond.","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F69681cb08a3342739238129de4b40f3b",[],"Register",[250,259,271,282,297,305,314,322,329,339,352,361],{"@type":47,"@version":48,"id":251,"component":252,"responsiveStyles":255},"builder-e4218ca0cfaf42449ca28df6017ddcbf",{"name":76,"options":253,"isRSC":62},{"code":254,"scriptsClientOnly":6},"\u003Cscript>\n  (function() {\n    if (window.__LIVESTORM_INTERCEPTOR_ACTIVE__) return;\n    window.__LIVESTORM_INTERCEPTOR_ACTIVE__ = true;\n\n    console.log('[Livestorm] 🛰️ Interceptor Active.');\n\n    // Function to handle the session data\n    function processSessions(sessions) {\n      if (!sessions || window.__LIVESTORM_DATA_PROCESSED__) return;\n\n      const mapped = sessions.map(s => ({\n        id: s.id,\n        name: s.attributes?.name ? `${s.attributes.name}: ${formatDate(s.attributes.estimated_started_at)}` : s.name\n      }));\n\n      window.__LIVESTORM_SESSIONS__ = mapped;\n      // Sticky cache\n      sessionStorage.setItem('cached_livestorm_sessions', JSON.stringify(mapped));\n      window.__LIVESTORM_DATA_PROCESSED__ = true;\n\n      console.log('[Livestorm] 📦 Sessions ready and cached.');\n      window.dispatchEvent(new CustomEvent('livestorm-sessions-loaded', { detail: mapped }));\n    }\n\n    // Check cache immediately in case of re-render\n    const cached = sessionStorage.getItem('cached_livestorm_sessions');\n    if (cached) {\n      console.log('[Livestorm] 💾 Loading from cache...');\n      processSessions(JSON.parse(cached));\n    }\n\n    const originalFetch = window.fetch;\n    window.fetch = function(...args) {\n      const url = typeof args[0] === 'string' ? args[0] : args[0].url;\n      return originalFetch.apply(this, args).then(response => {\n        if (url.includes('graphql') || url.includes('/api/')) {\n          const cloned = response.clone();\n          cloned.json().then(data => {\n            const s = data?.data?.listEventSessions?.sessions || data?.sessions;\n            if (s) processSessions(s);\n          }).catch(() => {});\n        }\n        return response;\n      });\n    };\n\n    function formatDate(ts) {\n      if (!ts) return '';\n      const date = new Date(ts * 1000);\n      return date.toLocaleString('en-US', {\n        month: 'long', day: 'numeric', year: 'numeric',\n        hour: 'numeric', minute: '2-digit', hour12: true,\n        timeZone: 'America/New_York'\n      }) + ' ET';\n    }\n  })();\n\u003C/script>\n\u003C!--\u003Cscript>\n  (function() {\n    // LOCK 1: Prevents double-patching the fetch function\n    if (window.__LIVESTORM_INTERCEPTOR_ACTIVE__) return;\n    window.__LIVESTORM_INTERCEPTOR_ACTIVE__ = true;\n\n    console.log('[Intercept] Initializing fetch interceptor...');\n\n    const originalFetch = window.fetch;\n\n    window.fetch = function(...args) {\n      const [url] = args;\n\n      return originalFetch.apply(this, args).then(response => {\n        const clonedResponse = response.clone();\n\n        if (url.includes('graphql') || url.includes('/api/')) {\n          clonedResponse.json().then(data => {\n            const sessions = data?.data?.listEventSessions?.sessions;\n\n            if (sessions) {\n              // LOCK 2: Ensure we only process the data ONCE per page life-cycle\n              if (window.__LIVESTORM_DATA_PROCESSED__) return;\n              window.__LIVESTORM_DATA_PROCESSED__ = true;\n\n              console.log('[Intercepted] Session data captured (First Instance)!');\n\n              window.__LIVESTORM_SESSIONS__ = sessions.map(session => ({\n                id: session.id,\n                name: `${session.attributes.name}: ${formatSessionDate(session.attributes.estimated_started_at)}`,\n                estimated_started_at: session.attributes.estimated_started_at\n              }));\n\n              window.dispatchEvent(new CustomEvent('livestorm-sessions-loaded', {\n                detail: window.__LIVESTORM_SESSIONS__\n              }));\n            }\n          }).catch(() => {});\n        }\n        return response;\n      });\n    };\n\n    function formatSessionDate(timestamp) {\n      const date = new Date(timestamp * 1000);\n      return date.toLocaleString('en-US', {\n        month: 'long', day: 'numeric', year: 'numeric',\n        hour: 'numeric', minute: '2-digit', hour12: true,\n        timeZone: 'America/New_York'\n      });\n    }\n  })();\n\u003C/script>\n-->\n",{"large":256,"medium":257,"small":258},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"display":65},{"display":65},{"@type":47,"@version":48,"id":260,"component":261,"responsiveStyles":265},"builder-951dd4e800b64902a7107e40a4f786a5",{"name":262,"tag":262,"options":263,"isRSC":62},"LivestormForm",{"eventId":264,"workEmailOnly":34,"formTitle":29},"e8951d02-9ff3-4013-8908-f478a10c684e",{"large":266,"medium":269,"small":270},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"maxWidth":267,"marginLeft":268,"marginRight":268},"819px","auto",{"display":65},{"display":65},{"@type":47,"@version":48,"id":272,"meta":273,"component":275,"responsiveStyles":278},"builder-f54594a3ed5b4d6783b9a0d90e256435",{"previousId":274},"builder-733ceda2a64c42aa8e2814f5a2fe285c",{"name":76,"options":276,"isRSC":62},{"code":277,"scriptsClientOnly":6},"\u003C!-- STYLES — Modal + Form -->\n\u003Cstyle>\n\n  /* Flicker suppression */\n  [builder-id=\"builder-951dd4e800b64902a7107e40a4f786a5\"] {\n    visibility: hidden;\n    position: fixed;\n    pointer-events: none;\n    top: -9999px;\n    left: -9999px;\n  }\n  #register-modal-form-slot [builder-id=\"builder-951dd4e800b64902a7107e40a4f786a5\"] {\n    visibility: visible;\n    position: static;\n    pointer-events: auto;\n    top: auto;\n    left: auto;\n  }\n\n  .mb-6.text-white.text-\\[26px\\].font-medium.leading-\\[33\\.8px\\] { display: none; }\n\n  #register-modal {\n    display: none;\n    position: fixed;\n    inset: 0;\n    z-index: 9999;\n    background: rgba(0, 0, 0, 0.75);\n    overflow-y: auto;\n    align-items: flex-start;\n    justify-content: center;\n    padding: 40px 16px;\n  }\n  #register-modal.open { display: flex; }\n\n  #register-modal-dialog {\n    position: relative;\n    background: #0d1318;\n    border: 1px solid #ff4824;\n    border-radius: 0.75rem;\n    width: 100%;\n    max-width: 560px;\n    padding: 36px 32px 32px;\n    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.7);\n    outline: none;\n  }\n\n  .register-modal-header {\n    display: flex; align-items: center;\n    justify-content: space-between; margin-bottom: 0px;\n  }\n  .register-modal-title { color: #fff; font-size: 24px; font-weight: 700; margin: 0; }\n\n  #register-modal-close {\n    background: transparent; border: none; color: #fff;\n    cursor: pointer; padding: 4px; line-height: 1;\n    border-radius: 4px; transition: color 0.2s; flex-shrink: 0;\n  }\n  #register-modal-close:hover { color: #ff4824; }\n  #register-modal-close svg { display: block; width: 20px; height: 20px; fill: currentColor; }\n\n  @media (max-width: 600px) { #register-modal-dialog { padding: 28px 20px 24px; } }\n\n  [builder-id=\"builder-951dd4e800b64902a7107e40a4f786a5\"] .dark-text-box.relative { display: none !important; }\n\n  .custom-sessions-container {\n    background: linear-gradient(to bottom, #1a242b 0%, #0d1318 100%);\n    border: 1px solid #000; border-radius: 0.5rem;\n    padding: 20px; margin-bottom: 20px;\n    box-shadow: 0 5px 20px rgba(0, 0, 0, 0.5); pointer-events: auto;\n  }\n  .custom-sessions-container * { pointer-events: auto; }\n  .custom-sessions-title { color: #fff; margin-bottom: 16px; font-size: 18px; font-weight: 500; }\n\n  .custom-select-all-option {\n    display: flex; align-items: center; padding: 12px 16px; margin-bottom: 16px;\n    background: rgba(255,72,36,0.08); border-radius: 8px; cursor: pointer;\n    transition: background 0.2s; border: 2px solid #ff4824;\n  }\n  .custom-select-all-option:hover { background: rgba(255,72,36,0.12); }\n  .custom-select-all-checkbox {\n    width: 20px; height: 20px; min-width: 20px; border: 2px solid #ff4824;\n    border-radius: 4px; margin-right: 12px; display: flex; align-items: center;\n    justify-content: center; background: transparent; cursor: pointer;\n  }\n  .custom-select-all-option.selected .custom-select-all-checkbox { background: #ff4824; }\n  .custom-select-all-checkbox svg { width: 14px; height: 14px; fill: white; display: none; }\n  .custom-select-all-option.selected .custom-select-all-checkbox svg { display: block; }\n  .custom-select-all-label { color: #fff; font-size: 16px; font-weight: 600; }\n\n  .custom-session-option {\n    display: flex; align-items: flex-start; padding: 16px; margin-bottom: 12px;\n    background: rgba(255,255,255,0.03); border-radius: 8px; cursor: pointer;\n    transition: background 0.2s; border: 2px solid transparent;\n  }\n  .custom-session-option:hover { background: rgba(255,255,255,0.05); }\n  .custom-session-option.selected { background: rgba(255,72,36,0.1); border-color: #ff4824; }\n  .custom-session-checkbox {\n    width: 20px; height: 20px; min-width: 20px; border: 2px solid #ff4824;\n    border-radius: 4px; margin-right: 16px; margin-top: 2px; display: flex;\n    align-items: center; justify-content: center; background: transparent; cursor: pointer;\n  }\n  .custom-session-option.selected .custom-session-checkbox { background: #ff4824; }\n  .custom-session-checkbox svg { width: 14px; height: 14px; fill: white; display: none; }\n  .custom-session-option.selected .custom-session-checkbox svg { display: block; }\n  .custom-session-info { flex: 1; color: #fff; }\n  .custom-session-title { font-size: 16px; font-weight: 500; margin-bottom: 6px; line-height: 1.4; }\n  .custom-session-subtitle { font-size: 14px; color: #ccc; margin-bottom: 4px; line-height: 1.4; }\n  .custom-session-date { font-size: 14px; color: #888; }\n\n  .custom-success-message {\n    background: linear-gradient(to bottom, #1a242b 0%, #0d1318 100%);\n    border: 1px solid #ff4824; border-radius: 0.5rem;\n    padding: 28px 24px; box-shadow: 0 5px 20px rgba(0,0,0,0.5); color: #fff;\n  }\n  .custom-success-heading { font-size: 20px; font-weight: 600; margin-bottom: 10px; color: #fff; }\n  .custom-success-body { font-size: 15px; color: #aaa; line-height: 1.6; margin-bottom: 12px; }\n  .custom-success-sessions { display: flex; flex-direction: column; gap: 8px; }\n  .custom-success-session-item {\n    background: rgba(255,72,36,0.08); border: 1px solid rgba(255,72,36,0.3);\n    border-radius: 8px; padding: 10px 14px; font-size: 14px; color: #fff;\n  }\n  .custom-success-session-item .session-check { color: #ff4824; margin-right: 8px; font-weight: bold; }\n\n  .custom-input-error { outline: 2px solid #e53e3e !important; border-radius: 0.75rem; }\n  .custom-sessions-container.custom-session-error { outline: 2px solid #e53e3e; }\n  .custom-validation-error { display: none; color: #e53e3e; font-size: 14px; margin-bottom: 12px; }\n  .custom-validation-error.visible { display: block; }\n  form .text-dusty-pink-dark { display: none; }\n\u003C/style>\n\n\u003C!-- MODAL MARKUP -->\n\u003Cdiv id=\"register-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"register-modal-title\">\n  \u003Cdiv id=\"register-modal-dialog\" tabindex=\"-1\">\n    \u003Cdiv class=\"register-modal-header\">\n      \u003Ch2 class=\"register-modal-title\" id=\"register-modal-title\">Register\u003C/h2>\n      \u003Cbutton id=\"register-modal-close\" aria-label=\"Close registration form\">\n        \u003Csvg viewBox=\"0 0 384 512\">\n          \u003Cpath d=\"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3l105.4 105.3c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256l105.3-105.4z\">\u003C/path>\n        \u003C/svg>\n      \u003C/button>\n    \u003C/div>\n    \u003Cdiv id=\"register-modal-form-slot\">\u003C/div>\n  \u003C/div>\n\u003C/div>\n\n\u003C!-- LOGIC stored as text/plain — Builder.io won't mangle or execute it -->\n\u003Cscript id=\"push-modal-logic\" type=\"text/plain\">\n      (function() {\n        // ── TOP-LEVEL GUARD ──\n        // Entire script only runs once across Builder.io/Next.js hydrations\n        if (window.__PUSH_MODAL_ACTIVE__) {\n          console.log('[Push] Already active, skipping.');\n          return;\n        }\n        window.__PUSH_MODAL_ACTIVE__ = true;\n\n        console.log('[Push] Modal logic executing.');\n\n        var BUILDER_ID  = 'builder-951dd4e800b64902a7107e40a4f786a5';\n        var GRAPHQL_URL = 'https://zvfpigexifbzhpyzt5kbtglkuq.appsync-api.eu-west-1.amazonaws.com/graphql';\n        var API_KEY     = 'da2-ktd7i4qpq5a3rjeh3b2eaqfevq';\n        var selectedSessions = [];\n        var formInitialised  = false;\n        var checkSVG = '\u003Csvg viewBox=\"0 0 24 24\">\u003Cpath d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\u003C/svg>';\n\n        // ── CAPTURE UTM PARAMS ──\n        // Runs immediately on script load, before any form interaction.\n        // Stores params in sessionStorage so they survive modal open/close.\n        (function captureUTMs() {\n          try {\n            var params = new URLSearchParams(window.location.search);\n            ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'].forEach(function(key) {\n              var val = params.get(key);\n              if (val) sessionStorage.setItem(key, val);\n            });\n            console.log('[Push] UTMs captured:', window.location.search);\n          } catch(e) {\n            console.warn('[Push] UTM capture failed:', e);\n          }\n        })();\n\n        // ── WORK EMAIL VALIDATION ──\n  var FREE_EMAIL_PROVIDERS = {\n    'gmail.com':1,'googlemail.com':1,'yahoo.com':1,'yahoo.co.uk':1,\n    'yahoo.co.in':1,'hotmail.com':1,'hotmail.co.uk':1,'outlook.com':1,\n    'outlook.co.uk':1,'live.com':1,'icloud.com':1,'me.com':1,'mac.com':1,\n    'aol.com':1,'protonmail.com':1,'proton.me':1\n  };\n\n  function isWorkEmail(email) {\n    if (!email || email.indexOf('@') === -1) return false;\n    var domain = email.split('@')[1].toLowerCase().trim();\n    return !FREE_EMAIL_PROVIDERS[domain];\n  }\n\n        // ── HARDCODED SESSIONS ──\n        // These are the Livestorm session IDs from the page source.\n        // Update these if sessions change.\n        var SESSIONS = [\n          {\n            id: 'd7e2ab2e-37f8-4f09-acf2-36c9cff68a62',\n            title: 'Security Theater vs. Security That Works',\n            subtitle: 'A conversation with Matt Johansen',\n            date: 'May 12, 2026 at 1:00 PM ET'\n          }\n        ];\n\n        // ── Inject session picker ──\n        function injectSessions(inputs) {\n          if (inputs.querySelector('.custom-sessions-container')) {\n            console.log('[Push] Sessions already injected.');\n            return;\n          }\n\n          var html = '\u003Cdiv class=\"custom-sessions-container\">';\n          html += '\u003Ch3 class=\"custom-sessions-title\">Select Session(s) *\u003C/h3>';\n          html += '\u003Cdiv class=\"custom-select-all-option\" id=\"custom-select-all\">';\n          html += '\u003Cdiv class=\"custom-select-all-checkbox\">' + checkSVG + '\u003C/div>';\n          html += '\u003Cdiv class=\"custom-select-all-label\">Select All Sessions\u003C/div>\u003C/div>';\n\n          for (var i = 0; i \u003C SESSIONS.length; i++) {\n            var s = SESSIONS[i];\n            html += '\u003Cdiv class=\"custom-session-option\" data-session-id=\"' + s.id + '\" data-session-title=\"' + s.title + '\">';\n            html += '\u003Cdiv class=\"custom-session-checkbox\">' + checkSVG + '\u003C/div>';\n            html += '\u003Cdiv class=\"custom-session-info\">';\n            html += '\u003Cdiv class=\"custom-session-title\">' + s.title + '\u003C/div>';\n            html += '\u003Cdiv class=\"custom-session-subtitle\">' + s.subtitle + '\u003C/div>';\n            html += '\u003Cdiv class=\"custom-session-date\">' + s.date + '\u003C/div>';\n            html += '\u003C/div>\u003C/div>';\n          }\n          html += '\u003C/div>';\n          inputs.insertAdjacentHTML('beforeend', html);\n          console.log('[Push] Sessions injected:', SESSIONS.length);\n\n          var builderDiv   = inputs.closest('[builder-id]') || document.querySelector('[builder-id=\"' + BUILDER_ID + '\"]');\n          var selectAllBtn = builderDiv && builderDiv.querySelector('#custom-select-all');\n          var allOptions   = builderDiv ? builderDiv.querySelectorAll('.custom-session-option') : [];\n\n          if (selectAllBtn) {\n            selectAllBtn.onclick = function() {\n              var selecting = !selectAllBtn.classList.contains('selected');\n              selectAllBtn.classList.toggle('selected', selecting);\n              selectedSessions.length = 0;\n              for (var j = 0; j \u003C allOptions.length; j++) {\n                allOptions[j].classList.toggle('selected', selecting);\n                if (selecting) selectedSessions.push(allOptions[j].getAttribute('data-session-id'));\n              }\n              console.log('[Push] Select all. Selected:', selectedSessions.length);\n            };\n\n            // Hide Select All when only one session\n              if (SESSIONS.length === 1) {\n                selectAllBtn.style.display = 'none';\n              }\n          }\n\n          for (var k = 0; k \u003C allOptions.length; k++) {\n            (function(opt) {\n              opt.onclick = function() {\n                var id = opt.getAttribute('data-session-id');\n                if (opt.classList.toggle('selected')) {\n                  selectedSessions.push(id);\n                } else {\n                  selectedSessions.splice(selectedSessions.indexOf(id), 1);\n                  if (selectAllBtn) selectAllBtn.classList.remove('selected');\n                }\n                console.log('[Push] Session toggled:', id, '| total selected:', selectedSessions.length);\n              };\n            })(allOptions[k]);\n          }\n        }\n\n        // ── Initialise form on modal open ──\n        function initForm() {\n          if (formInitialised) { console.log('[Push] initForm: already done.'); return; }\n\n          var builderDiv = document.querySelector('[builder-id=\"' + BUILDER_ID + '\"]');\n          if (!builderDiv) { console.warn('[Push] initForm: builderDiv not found'); return; }\n\n          var inputs = builderDiv.querySelector('.inputs');\n          if (!inputs) { console.warn('[Push] initForm: .inputs not found'); return; }\n\n          var slot = document.getElementById('register-modal-form-slot');\n          if (!slot) { console.warn('[Push] initForm: slot not found'); return; }\n\n          formInitialised = true;\n          console.log('[Push] initForm: all elements found, proceeding.');\n\n          if (!slot.contains(builderDiv)) {\n            slot.innerHTML = '';\n            slot.appendChild(builderDiv);\n            console.log('[Push] Moved builderDiv into slot.');\n          }\n\n          builderDiv.style.visibility    = 'visible';\n          builderDiv.style.position      = 'static';\n          builderDiv.style.pointerEvents = 'auto';\n          builderDiv.style.top           = 'auto';\n          builderDiv.style.left          = 'auto';\n\n          var btn = builderDiv.querySelector('button');\n          if (btn && btn.disabled) btn.disabled = false;\n\n          if (!builderDiv.querySelector('#custom-validation-error')) {\n            var submitBtn = builderDiv.querySelector('button');\n            if (submitBtn) submitBtn.insertAdjacentHTML('beforebegin',\n              '\u003Cdiv class=\"custom-validation-error\" id=\"custom-validation-error\">Please fill in all required fields\u003C/div>');\n          }\n\n          var form = builderDiv.querySelector('form');\n          if (form) form.addEventListener('submit', handleSubmit, true);\n\n          injectSessions(inputs);\n\n          console.log('[Push] initForm complete.');\n        }\n\n        // ── Modal open/close ──\n        document.addEventListener('click', function(e) {\n          // Guard against non-element targets (SVG, document, window)\n          // which don't have .closest() and would throw\n          if (!e.target || typeof e.target.closest !== 'function') return;\n\n          var modal = document.getElementById('register-modal');\n          if (!modal) return;\n\n          if (e.target.closest('.modal-open')) {\n            e.preventDefault();\n            e.stopPropagation();\n            console.log('[Push] Opening modal.');\n            initForm();\n            modal.classList.add('open');\n            document.body.style.overflow = 'hidden';\n            return;\n          }\n\n          if (e.target === modal || e.target.closest('#register-modal-close')) {\n            modal.classList.remove('open');\n            document.body.style.overflow = '';\n            console.log('[Push] Modal closed.');\n          }\n        });\n\n        // Escape key closes modal\n        document.addEventListener('keydown', function(e) {\n          if (e.key === 'Escape') {\n            var modal = document.getElementById('register-modal');\n            if (modal && modal.classList.contains('open')) {\n              modal.classList.remove('open');\n              document.body.style.overflow = '';\n              console.log('[Push] Modal closed via Escape.');\n            }\n          }\n        });\n\n        // ── Success screen ──\n        function showSuccess(form, registeredIds) {\n          var items = '';\n          for (var i = 0; i \u003C registeredIds.length; i++) {\n            var el    = document.querySelector('.custom-session-option[data-session-id=\"' + registeredIds[i] + '\"]');\n            var title = el ? el.getAttribute('data-session-title') : registeredIds[i];\n            items += '\u003Cdiv class=\"custom-success-session-item\">\u003Cspan class=\"session-check\">&#10003;\u003C/span>' + title + '\u003C/div>';\n          }\n          form.style.display = 'none';\n          form.insertAdjacentHTML('afterend',\n            '\u003Cdiv class=\"custom-success-message\">' +\n              '\u003Cdiv class=\"custom-success-heading\">Registration successful!\u003C/div>' +\n              '\u003Cdiv class=\"custom-success-body\">You\\'re registered for the following session' + (registeredIds.length > 1 ? 's' : '') + ':\u003C/div>' +\n              '\u003Cdiv class=\"custom-success-sessions\">' + items + '\u003C/div>' +\n            '\u003C/div>'\n          );\n        }\n\n        // ── Form submission ──\n        function handleSubmit(e) {\n          e.preventDefault();\n          e.stopPropagation();\n          e.stopImmediatePropagation();\n          console.log('[Push] handleSubmit. Selected sessions:', selectedSessions);\n\n          var form      = e.target;\n          var firstName = ((form.querySelector('input[autocomplete=\"given-name\"]')  || form.querySelector('input[aria-label*=\"first\"]')  || form.querySelector('input[arialabel*=\"first\"]')  || {}).value || '').trim();\n          var lastName  = ((form.querySelector('input[autocomplete=\"family-name\"]') || form.querySelector('input[aria-label*=\"last\"]')   || form.querySelector('input[arialabel*=\"last\"]')   || {}).value || '').trim();\n          var email     = ((form.querySelector('input[autocomplete=\"email\"]')       || form.querySelector('input[type=\"email\"]')         || form.querySelector('input[arialabel*=\"email\"]')  || {}).value || '').trim();\n\n          console.log('[Push] Values — email:', email, 'first:', firstName, 'last:', lastName);\n\n          var valid = true;\n          var fnEl  = form.querySelector('input[autocomplete=\"given-name\"]')  || form.querySelector('input[aria-label*=\"first\"]')  || form.querySelector('input[arialabel*=\"first\"]');\n          var lnEl  = form.querySelector('input[autocomplete=\"family-name\"]') || form.querySelector('input[aria-label*=\"last\"]')   || form.querySelector('input[arialabel*=\"last\"]');\n          var emEl  = form.querySelector('input[autocomplete=\"email\"]')       || form.querySelector('input[type=\"email\"]')         || form.querySelector('input[arialabel*=\"email\"]');\n\n          if (!firstName && fnEl && fnEl.closest('.dark-text-box')) { fnEl.closest('.dark-text-box').classList.add('custom-input-error'); valid = false; }\n          if (!lastName  && lnEl && lnEl.closest('.dark-text-box')) { lnEl.closest('.dark-text-box').classList.add('custom-input-error'); valid = false; }\n          if (!email     && emEl && emEl.closest('.dark-text-box')) { emEl.closest('.dark-text-box').classList.add('custom-input-error'); valid = false; }\n\n          if (selectedSessions.length === 0) {\n            var sc = document.querySelector('.custom-sessions-container');\n            if (sc) sc.classList.add('custom-session-error');\n            valid = false;\n          }\n\n          var errEl = document.getElementById('custom-validation-error');\n          if (errEl) errEl.classList.toggle('visible', !valid);\n          if (email && !isWorkEmail(email)) {\n    if (emEl && emEl.closest('.dark-text-box')) {\n      emEl.closest('.dark-text-box').classList.add('custom-input-error');\n    }\n    var errEl = document.getElementById('custom-validation-error');\n    if (errEl) {\n      errEl.textContent = 'Please use a work email address';\n      errEl.classList.add('visible');\n    }\n    console.warn('[Push] Non-work email rejected:', email);\n    return false;\n  }\n          if (!valid) { console.warn('[Push] Validation failed.'); return false; }\n\n          var btn = form.querySelector('button');\n          if (btn) { btn.disabled = true; btn.textContent = 'Registering\\u2026'; }\n\n          var toRegister = selectedSessions.slice();\n\n          function doRegister(index) {\n            if (index >= toRegister.length) {\n              console.log('[Push] All sessions registered.');\n              showSuccess(form, toRegister);\n              return;\n            }\n            var sessionId = toRegister[index];\n            console.log('[Push] Registering session', index + 1, '/', toRegister.length, '\\u2014', sessionId);\n            fetch(GRAPHQL_URL, {\n              method: 'POST',\n              headers: { 'Content-Type': 'application/json', 'X-Api-Key': API_KEY },\n              body: JSON.stringify({\n                operationName: 'RegisterWebinarSession',\n                query: 'mutation RegisterWebinarSession($input: RegisterWebinarSessionInput!) { registerWebinarSession(input: $input) { success __typename } }',\n                variables: {\n                  input: {\n                    sessionId:   sessionId,\n                    email:       email,\n                    firstName:   firstName,\n                    lastName:    lastName,\n                    country:     'America/New_York',\n                    utmCampaign: sessionStorage.getItem('utm_campaign') || '',\n                    utmContent:  sessionStorage.getItem('utm_content')  || '',\n                    utmMedium:   sessionStorage.getItem('utm_medium')   || '',\n                    utmSource:   sessionStorage.getItem('utm_source')   || '',\n                    utmTerm:     sessionStorage.getItem('utm_term')     || ''\n                  }\n                }\n              })\n            })\n            .then(function(r) { return r.json(); })\n            .then(function(d) {\n      console.log('[Push] Session', sessionId, 'response:', d);\n      if (d.errors) throw new Error(d.errors[0].message);\n      if (!d.data || !d.data.registerWebinarSession) throw new Error('Unexpected response');\n\n      // success: false typically means already registered — treat as non-fatal\n      if (!d.data.registerWebinarSession.success) {\n        console.warn('[Push] Session', sessionId, '— success: false (possibly already registered)');\n      }\n\n      doRegister(index + 1); // always continue to next session\n    })\n            .catch(function(err) {\n              console.error('[Push] Error on session', sessionId, ':', err.message);\n              if (btn) { btn.disabled = false; btn.textContent = 'Submit now'; }\n              alert('Registration failed: ' + err.message);\n            });\n          }\n\n          // BotCheck first, then register\n          fetch(GRAPHQL_URL, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', 'X-Api-Key': API_KEY },\n            body: JSON.stringify({\n              operationName: 'BotCheck',\n              query: 'mutation ($input: BotCheckInput!) { botCheck(input: $input) { bot __typename } }',\n              variables: { input: { email: null } }\n            })\n          }).catch(function() {}).then(function() { doRegister(0); });\n\n          return false;\n        }\n\n        console.log('[Push] Setup complete.');\n      })();\n\u003C/script>\n\n\u003C!-- Tiny bootstrap — executes the logic client-side only.\n     Guard prevents double-execution across hydrations. -->\n\u003Cimg\n  src=\"x\"\n  onerror=\"\n  if (!window.__PUSH_BOOTSTRAP_RAN__) {\n    window.__PUSH_BOOTSTRAP_RAN__ = true;\n    var s = document.getElementById('push-modal-logic');\n    if (s) {\n      var x = document.createElement('script');\n      x.textContent = s.textContent;\n      document.head.appendChild(x);\n    }\n  }\n  this.remove();\n\"\n  style=\"display:none;\"\n/>\n",{"large":279,"medium":280,"small":281},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"display":65},{"display":65},{"@type":47,"@version":48,"id":283,"class":284,"meta":285,"component":287,"responsiveStyles":293},"builder-aa683b15ce714878a2c4e75b98e6d610","heroic-image",{"previousId":286},"builder-d5433ce8c0354a0e8a61a42c446af20c",{"name":288,"tag":288,"options":289,"isRSC":62},"TextImageBlockVertical",{"darkMode":34,"maxWidth":290,"maxTextWidth":290,"description":291,"title":292,"animatedTitle":29,"reverse":6},1200,"\u003Cp>Join the industry's top security minds as they break down the browser attack landscape — from credential theft to AiTM phishing and beyond.\u003C/p>","\u003Ch1 class=\"product-heading\">State of \u003Cspan class=\"browser-attack-orange-block-clip\">Browser Attacks\u003C/span> Series\u003C/h1>\n",{"large":294},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"fontSize":295,"backgroundColor":296,"pointerEvents":268},"1.5rem","transparent",{"@type":47,"@version":48,"id":298,"class":299,"component":300,"responsiveStyles":303},"builder-7c68dd8720304201bf1bad4b05a5bb15","modal-open",{"name":76,"options":301,"isRSC":62},{"code":302,"scriptsClientOnly":6},"\u003C!-- \u003Cdiv class=\"mt-6 mb-16 modal-open\" style=\"z-index:3;\">\n  \u003Ca href=\"#\" class=\"px-9 py-3 border border-web-orange rounded-full cursor-pointer text-white bg-gradient-to-b from-web-orange to-web-orange-dark text-xl transition-all duration-500 hover:shadow-primary-button modal-open\"> Save My Spot\u003C/a>\n\u003C/div> -->\n\u003Cstyle>\n  .builder-7c68dd8720304201bf1bad4b05a5bb15.builder-block {z-index: 3;}\n  .builder-aa683b15ce714878a2c4e75b98e6d610 p {max-width:880px; line-height: 140%;}\n  @media (min-width:1200px) {\n    .product-heading {\n        margin-top: calc(3rem + 24px);\n    }\n  }\n\u003C/style>\n",{"large":304},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"marginLeft":268,"marginRight":268},{"@type":47,"@version":48,"id":306,"meta":307,"component":309,"responsiveStyles":312},"builder-91c8550b092d4252a91c8ac3b34aeecd",{"previousId":308},"builder-96ec6d74611c449e917c9b73f6dd9705",{"name":76,"options":310,"isRSC":62},{"code":311,"scriptsClientOnly":6},"\u003Cstyle>\n  #particle-mount {\n    position: relative;\n    width: 100vw;\n    height: 100vh;\n    background: #040A0F;\n    overflow: hidden;\n    margin-bottom: -90vh;\n    z-index: 0;\n    top: -50vh;\n  }\n  #particle-mount canvas {\n    display: block;\n    position: absolute;\n    top: 0; left: 0;\n    width: 100% !important;\n    height: 150% !important;\n  }\n\u003C/style>\n\n\u003Cdiv id=\"particle-mount\">\u003C/div>\n\n\u003Cscript>\n  (function () {\n    function initParticles() {\n      var SEPARATION = 200, AMOUNTX = 70, AMOUNTY = 70;\n      var container = document.getElementById('particle-mount');\n      if (!container) return;\n\n      var W = container.offsetWidth  || window.innerWidth;\n      var H = container.offsetHeight || 500;\n      var count = 0, mouseX = 0, windowHalfX = W / 2;\n\n      var camera = new THREE.PerspectiveCamera(50, W / H, 1, 10000);\n      camera.position.z = 1800;\n      camera.position.y = 400;\n\n      var scene = new THREE.Scene();\n\n      var numParticles = AMOUNTX * AMOUNTY;\n      var positions = new Float32Array(numParticles * 3);\n      var scales    = new Float32Array(numParticles);\n      var i = 0, j = 0;\n\n      for (var ix = 0; ix \u003C AMOUNTX; ix++) {\n        for (var iy = 0; iy \u003C AMOUNTY; iy++) {\n          positions[i]     = ix * SEPARATION - (AMOUNTX * SEPARATION) / 2;\n          positions[i + 1] = 0;\n          positions[i + 2] = iy * SEPARATION - (AMOUNTY * SEPARATION) / 2;\n          scales[j] = 1;\n          i += 3; j++;\n        }\n      }\n\n      var geometry = new THREE.BufferGeometry();\n      geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n      geometry.setAttribute('scale',    new THREE.BufferAttribute(scales, 1));\n\n      var material = new THREE.ShaderMaterial({\n        uniforms: { color: { value: new THREE.Color(0xff6b4a) } },\n        vertexShader: [\n          'attribute float scale;',\n          'void main() {',\n          '  vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);',\n          '  gl_PointSize = scale * (200.0 / -mvPosition.z);',\n          '  gl_Position = projectionMatrix * mvPosition;',\n          '}'\n        ].join('\\n'),\n        fragmentShader: [\n          'uniform vec3 color;',\n          'void main() {',\n          '  float d = length(gl_PointCoord - vec2(0.5));',\n          '  if (d > 0.5) discard;',\n          '  gl_FragColor = vec4(color, 1.0);',\n          '}'\n        ].join('\\n'),\n        transparent: true\n      });\n\n      var particles = new THREE.Points(geometry, material);\n      scene.add(particles);\n\n      var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n      renderer.setClearColor(0x040A0F, 1);\n      renderer.setPixelRatio(window.devicePixelRatio);\n      renderer.setSize(W, H);\n      container.appendChild(renderer.domElement);\n\n      container.style.touchAction = 'none';\n      container.addEventListener('pointermove', function (e) {\n        if (e.isPrimary === false) return;\n        mouseX = e.clientX - windowHalfX;\n      });\n\n      window.addEventListener('resize', function () {\n        W = container.offsetWidth || window.innerWidth;\n        H = container.offsetHeight || 500;\n        windowHalfX = W / 2;\n        camera.aspect = W / H;\n        camera.updateProjectionMatrix();\n        renderer.setSize(W, H);\n      });\n\n      (function animate() {\n        requestAnimationFrame(animate);\n        camera.position.x += (mouseX - camera.position.x) * 0.001;\n        camera.lookAt(new THREE.Vector3(0, 200, 0));\n\n        var pos = particles.geometry.attributes.position.array;\n        var scl = particles.geometry.attributes.scale.array;\n        var i = 0, j = 0;\n        for (var ix = 0; ix \u003C AMOUNTX; ix++) {\n          for (var iy = 0; iy \u003C AMOUNTY; iy++) {\n            pos[i + 1] =\n              Math.sin((ix + count) * 0.3) * 50 +\n              Math.sin((iy + count) * 0.5) * 50;\n            scl[j] =\n              (Math.sin((ix + count) * 0.3) + 1) * 20 +\n              (Math.sin((iy + count) * 0.5) + 1) * 20;\n            i += 3; j++;\n          }\n        }\n        particles.geometry.attributes.position.needsUpdate = true;\n        particles.geometry.attributes.scale.needsUpdate = true;\n        renderer.render(scene, camera);\n        count += 0.1;\n      })();\n    }\n\n    /* Dynamically inject Three.js so we control exactly when it's ready */\n    var s = document.createElement('script');\n    s.src = 'https://cdn.builder.io/o/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F2b7021d2b58144ce941edb91a6e9ecef?alt=media&token=18070a8d-cedb-494a-81ec-786aff34a4e2&apiKey=f3a1111ff5be48cdbb123cd9f5795a05';\n    s.onload = function () { initParticles(); };\n    s.onerror = function () { console.warn('particle-wave: failed to load Three.js'); };\n    document.head.appendChild(s);\n  })();\n\u003C/script>\n",{"large":313},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"@type":47,"@version":48,"id":315,"class":316,"meta":317,"responsiveStyles":319},"builder-1c56fd3dca4e4f79b242e200c30a269b","multi-color-glow-o",{"previousId":318},"builder-83b73e9caea6441f80ea8fae733456b1",{"large":320},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"height":321},"200px",{"@type":47,"@version":48,"id":323,"class":324,"meta":325,"responsiveStyles":327},"builder-b30b909f5369434d8fe2c12144d00f73","multi-color-glow-b",{"previousId":326},"builder-8c8af43ae72148fba11ff6bc58760c1a",{"large":328},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"height":321},{"@type":47,"@version":48,"id":330,"meta":331,"component":333,"responsiveStyles":336},"builder-e878a4f8821c41a5b09a8c98ba89420c",{"previousId":332},"builder-e765f57783b8405987fea9f660588124",{"name":76,"options":334,"isRSC":62},{"code":335,"scriptsClientOnly":6},"\u003Cstyle>\n\n  .heroic-image img {display: none;}\n\n  .sessions-wrap {\n    display: flex;\n    flex-direction: column;\n    gap: 24px;\n    font-family: inherit;\n    max-width: 950px;\n    margin: 0 auto;\n    padding: 24px 16px;\n  }\n  .featuring-row {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 12px;\n    padding: 0 0 8px;\n    margin-top: -120px;\n    margin-bottom: 40px;\n  }\n  .featuring-label {\n    font-size: 15px;\n    color: #888;\n  }\n  .featuring-avatars {\n    display: flex;\n  }\n  .featuring-avatars img {\n    width: 36px;\n    height: 36px;\n   // border-radius: 50%;\n    object-fit: contain;\n  /*  border: 2px solid #1a1a1a;\n    margin-left: -10px;\n    background: #333; */\n  }\n  .featuring-avatars img:first-child { margin-left: 0; }\n  .featuring-names {\n    font-size: 15px;\n    color: #888;\n  }\n  .session-card {\n    background-image: linear-gradient(180deg, #e73918, transparent 8%);\n    background-color: #000;\n    border: none;\n    border-radius: 20px;\n    padding: 1.5px 1px 0;\n    color: #fff;\n    box-shadow: 0 8px 32px #0000008c, 0 2px 8px #00000059;\n    transition: box-shadow 0.4s ease;\n  }\n  .session-card:hover {\n    background-image: linear-gradient(180deg, #e73918, transparent 8%);\n    box-shadow: 0 8px 32px #0000008c, 0 2px 8px #00000059, inset 0 .5px 1px #e73918, 0 -.25px 1px 1px #e73918;\n  }\n  .session-card-inner {\n    background: #000;\n    border-radius: 20px;\n    padding: 40px 60px 60px 60px;\n  }\n  .session-badges {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 16px;\n    flex-wrap: wrap;\n  }\n  .session-badges .badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 4px 12px;\n    border-radius: 20px;\n    font-size: 13px;\n    font-weight: 500;\n  }\n  .badge-date { background: #30100a; color: #ff4824; }\n  .badge-time { background: #1e1e1e; color: #aaa; border: 0px solid #333; }\n  .badge svg { width: 13px; height: 13px; flex-shrink: 0; }\n  .session-title {\n    font-size: 38px;\n    font-weight: 700;\n    color: #fff;\n    margin: 0 0 8px;\n    line-height: 1.2;\n  }\n  .session-subtitle {\n    font-size: 22px;\n    color: #FFF;\n    margin: 0 0 1.5rem;\n    line-height: 1.5;\n  }\n  .session-desc {\n    font-size: 15px;\n    color: #fff;\n    line-height: 1.7;\n    margin: 0 0 4px;\n  }\n  .desc-short { display: block; font-size: 18px; }\n  .desc-full  { display: none; font-size: 18px; }\n  .session-card.expanded .desc-short { display: none; }\n  .session-card.expanded .desc-full  { display: block; }\n  .toggle-btn {\n    color: #ff6b4a;\n    cursor: pointer;\n    font-size: 18px;\n    background: none;\n    border: none;\n    padding: 0;\n    font-family: inherit;\n    line-height: 1.7;\n  }\n  .toggle-btn:hover { text-decoration: underline; }\n  .session-desc p { color: #fff; margin: 0 0 1em; }\n  .session-desc p:last-child { margin-bottom: 0; }\n  .session-desc ul {\n    margin: 4px 0 12px 8px;\n    padding: 0;\n    list-style: none;\n  }\n  .session-desc ul li {\n    position: relative;\n    padding-left: 16px;\n    margin-bottom: 6px;\n    color: #ccc;\n  }\n  .session-desc ul li::before {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 9px;\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: #ff6b4a;\n    flex-shrink: 0;\n  }\n  .highlight {\n    color: #ff4824;\n    font-weight: 600;\n    display: block;\n    margin-top: 14px;\n  }\n  .session-speakers {\n    display: flex;\n    gap: 4rem;\n    margin: 3rem 0 4rem;\n    flex-wrap: wrap;\n  }\n  .speaker { display: flex; align-items: center; gap: 10px; }\n  .speaker img {\n    /* width: 48px;\n    height: 48px;\n    border-radius: 50%;\n    object-fit: cover;\n    border: 2px solid #333;\n    background: #333; */\n  }\n  .speaker-info { display: flex; flex-direction: column; }\n  .speaker-role {\n    font-size: 12px;\n    color: #ccc;\n    letter-spacing: 0.04em;\n    margin-bottom: 2px;\n  }\n  .speaker-name { font-size: 20px; line-height: 20px; font-weight: 600; color: #ff4824; }\n  .speaker-title { font-size: 14px; color: #fff; margin-top: 1px; }\n  .btn-register {\n    display: inline-block;\n    background: #ff6b4a;\n    color: #fff;\n    font-size: 14px;\n    font-weight: 600;\n    padding: 10px 22px;\n    border-radius: 6px;\n    text-decoration: none;\n    cursor: pointer;\n  }\n  .btn-register:hover { background: #e85a3a; }\n\u003C/style>\n\n\u003Cdiv class=\"sessions-wrap\">\n  \u003C!-- FEATURING -->\n  \u003Cdiv class=\"featuring-row\">\n    \u003Cspan class=\"featuring-label\">Featuring\u003C/span>\n    \u003Cdiv class=\"featuring-avatars\">\n      \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2Fd921339593714825b8d5934c375de8e1\" alt=\"John Hammond\" />\n      \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F6a1ef468689a48509c62d1fe9ac09c4b\" alt=\"Troy Hunt\" />\n      \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F86c4f6851a03498698de442370d77f7c\" alt=\"Matt Johansen\" />\n    \u003C/div>\n    \u003Cspan class=\"featuring-names\">John Hammond, Troy Hunt, and Matt Johansen\u003C/span>\n  \u003C/div>\n\n  \u003C!-- SESSION 1 -->\n  \u003Cdiv class=\"session-card\" id=\"session-1\">\n    \u003Cdiv class=\"session-card-inner\">\n      \u003Cdiv class=\"session-badges\">\n        \u003Cspan class=\"badge badge-date\">\n          \u003C!--  \u003Csvg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            \u003Crect x=\"1\" y=\"2\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"#ff4824\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M1 6h14\" stroke=\"#ff4824\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M5 1v2M11 1v2\" stroke=\"#ff4824\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n          \u003C/svg> -->\n          Watch on-demand\n        \u003C/span>\n        \u003C!--        \u003Cspan class=\"badge badge-time\">\n          \u003Csvg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            \u003Ccircle cx=\"8\" cy=\"8\" r=\"6.25\" stroke=\"#aaa\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M8 4.5V8l2.5 2\" stroke=\"#aaa\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n          \u003C/svg>\n          11:00 AM ET\n        \u003C/span>\n      \u003C/div> -->\n        \u003Ch3 class=\"session-title\">Why the Browser is the New Battleground\u003C/h3>\n        \u003Cp class=\"session-subtitle\">A Deep Dive with John Hammond and Luke Jennings\u003C/p>\n        \u003Cdiv class=\"session-desc\">\n          \u003Cspan class=\"desc-short\"> The browser is the new endpoint, and it's under attack. Attacks are happening entirely inside the browser sandbox, targeting applications directly over the internet, and blending in with legitimate web and network traffic, application access, and user activity. \u003Cbutton class=\"toggle-btn\" onclick=\"document.getElementById('session-1').classList.toggle('expanded')\">Read more\u003C/button> \u003C/span>\n          \u003Cspan class=\"desc-full\">\n            \u003Cp>The browser is the new endpoint, and it's under attack. Attacks are happening entirely inside the browser sandbox, targeting applications directly over the internet, and blending in with legitimate web and network traffic, application access, and user activity. This is a significant challenge for security teams. Existing security tools can't get visibility of what's happening inside the browser. Attackers know this, and are ruthlessly exploiting the browser blindspot. This is fuelling a lot of attacker innovation, with new tools and techniques constantly emerging. Push Security VP R&amp;D Luke Jennings is joined by John Hammond, Senior Principal Security Researcher at Huntress, to demonstrate the latest browser-based attack techniques. Ride along with Luke and John as they analyse real-world attacks, covering:\u003C/p>\n            \u003Cul>\n              \u003Cli>ConsentFix, the browser-native ClickFix attack linked to Russian APTs\u003C/li>\n              \u003Cli>Session-stealing, MFA-bypassing phishing campaigns targeting enterprises over LinkedIn and Google Ads\u003C/li>\n              \u003Cli>The latest social engineering tradecraft and detection evasion techniques\u003C/li>\n              \u003Cli>What the future of browser-based attacks looks like and what security teams can do about it\u003C/li>\n            \u003C/ul>\n            \u003Cspan class=\"highlight\">Can't make it? Don't miss out! Register anyway and get a copy of the recording in your inbox.\u003C/span>\n            \u003Cbutton class=\"toggle-btn\" onclick=\"document.getElementById('session-1').classList.toggle('expanded')\" style=\"display:block;margin-top:10px;\">Read Less\u003C/button>\n          \u003C/span>\n        \u003C/div>\n        \u003Cdiv class=\"session-speakers\">\n          \u003Cdiv class=\"speaker\">\n            \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2Fd921339593714825b8d5934c375de8e1\" alt=\"John Hammond\" />\n            \u003Cdiv class=\"speaker-info\">\n              \u003Cspan class=\"speaker-role\">Guest Speaker\u003C/span>\n              \u003Cspan class=\"speaker-name\">John Hammond\u003C/span>\n              \u003Cspan class=\"speaker-title\">Senior Principal Security Researcher at Huntress\u003C/span>\n            \u003C/div>\n          \u003C/div>\n          \u003Cdiv class=\"speaker\">\n            \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F9b7bde0f00fc423c950184d3d9bff7b7\" alt=\"Luke Jennings\" />\n            \u003Cdiv class=\"speaker-info\">\n              \u003Cspan class=\"speaker-role\">Presenter\u003C/span>\n              \u003Cspan class=\"speaker-name\">Luke Jennings\u003C/span>\n              \u003Cspan class=\"speaker-title\">VP R&amp;D, Push Security\u003C/span>\n            \u003C/div>\n          \u003C/div>\n        \u003C/div>\n        \u003Ca href=\"https://pushsecurity.com/resources/browser-attacks-why-browser-new-battleground\" class=\"px-9 py-3 border border-web-orange rounded-full cursor-pointer text-white bg-gradient-to-b from-web-orange to-web-orange-dark text-xl transition-all duration-500 hover:shadow-primary-button\">Watch now\u003C/a>\n      \u003C/div>\n    \u003C/div>\n  \u003C/div>\n  \u003C!-- SESSION 2 -->\n  \u003Cdiv class=\"session-card\" id=\"session-2\">\n    \u003Cdiv class=\"session-card-inner\">\n      \u003Cdiv class=\"session-badges\">\n        \u003Cspan class=\"badge badge-date\">\n         \u003C!-- \u003Csvg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            \u003Crect x=\"1\" y=\"2\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"#ff4824\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M1 6h14\" stroke=\"#ff4824\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M5 1v2M11 1v2\" stroke=\"#ff4824\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n          \u003C/svg> -->\n           Watch on-demand\n           \u003C!-- April 30, 2026 -->\n        \u003C/span>\n        \u003C!-- \u003Cspan class=\"badge badge-time\">\n          \u003Csvg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            \u003Ccircle cx=\"8\" cy=\"8\" r=\"6.25\" stroke=\"#aaa\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M8 4.5V8l2.5 2\" stroke=\"#aaa\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n          \u003C/svg>\n          11:00 AM ET\n        \u003C/span> -->\n      \u003C/div>\n      \u003Ch3 class=\"session-title\">Yes, You've Been Pwned\u003C/h3>\n      \u003Cp class=\"session-subtitle\">Analyzing Stolen Credential Attacks with Troy Hunt and Mark Orlando\u003C/p>\n      \u003Cdiv class=\"session-desc\">\n        \u003Cspan class=\"desc-short\"> It wasn't supposed to be like this. Passwords were supposed to be dead (just ask \u003Ca href=\"https://www.cnet.com/news/privacy/gates-predicts-death-of-the-password/\" target=\"_blank\" style=\"color:#6ab4f5;\">Bill Gates\u003C/a>). But it's 2026, and we're still talking about the risk posed by compromised credentials. \u003Cbutton class=\"toggle-btn\" onclick=\"document.getElementById('session-2').classList.toggle('expanded')\">Read more\u003C/button> \u003C/span>\n        \u003Cspan class=\"desc-full\">\n          \u003Cp>It wasn't supposed to be like this. Passwords were supposed to be dead (just ask \u003Ca href=\"https://www.cnet.com/news/privacy/gates-predicts-death-of-the-password/\" target=\"_blank\" style=\"color:#6ab4f5;\">Bill Gates\u003C/a>). But it's 2026, and we're still talking about the risk posed by compromised credentials.\u003C/p>\n          \u003Cp>Despite advancements in passwordless authentication, big pushes from organizations like Microsoft to remove passwords by default, and the rise in support for SSO and MFA, we're still seeing data breaches track back to vulnerable accounts using weak, breached, and reused passwords.\u003C/p>\n          \u003Cp>The reality we see at Push is that employees have anywhere between 3 and 100 accounts (average 15) across their business apps. For the last 1 million+ logins that Push recorded, more than a quarter (26%) were password logins. Of those password logins, 18% had a password security issue — reused, easily guessable, already leaked in a public breach list, or actively for sale in criminal forums. And on the whole, 2 in 5 accounts we see aren't protected by MFA. That creates a vast attack surface waiting to be exploited. And with literally billions of credentials available online, fed by a constant stream of infostealer compromises, phishing campaigns, and data breaches, attackers have a lot of room to work.\u003C/p>\n          \u003Cp>Push's Field CTO Mark Orlando is joined by Troy Hunt, creator of Have I Been Pwned, to discuss the compromised credential landscape. We'll cover:\u003C/p>\n          \u003Cul>\n            \u003Cli>Troy's insights on how identity attacks have evolved (and how they haven't) over the last decade\u003C/li>\n            \u003Cli>The latest trends driving new credential dumps\u003C/li>\n            \u003Cli>The reality of controls like MFA, SSO, and passkeys in combating password risk\u003C/li>\n            \u003Cli>The threat of backdoor \"ghost logins\"\u003C/li>\n            \u003Cli>The hidden implications when your credentials are leaked\u003C/li>\n            \u003Cli>What the future of passwords really looks like\u003C/li>\n          \u003C/ul>\n          \u003Cspan class=\"highlight\">Can't make it? Don't miss out! Register anyway and get a copy of the recording in your inbox.\u003C/span>\n          \u003Cbutton class=\"toggle-btn\" onclick=\"document.getElementById('session-2').classList.toggle('expanded')\" style=\"display:block;margin-top:10px;\">Read Less\u003C/button>\n        \u003C/span>\n      \u003C/div>\n      \u003Cdiv class=\"session-speakers\">\n        \u003Cdiv class=\"speaker\">\n          \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F6a1ef468689a48509c62d1fe9ac09c4b\" alt=\"Troy Hunt\" />\n          \u003Cdiv class=\"speaker-info\">\n            \u003Cspan class=\"speaker-role\">Guest Speaker\u003C/span>\n            \u003Cspan class=\"speaker-name\">Troy Hunt\u003C/span>\n            \u003Cspan class=\"speaker-title\">Creator of Have I Been Pwned\u003C/span>\n          \u003C/div>\n        \u003C/div>\n        \u003Cdiv class=\"speaker\">\n          \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F004e46af6d9c4c4188162784fe0366a5\" alt=\"Mark Orlando\" />\n          \u003Cdiv class=\"speaker-info\">\n            \u003Cspan class=\"speaker-role\">Presenter\u003C/span>\n            \u003Cspan class=\"speaker-name\">Mark Orlando\u003C/span>\n            \u003Cspan class=\"speaker-title\">Field CTO, Push Security\u003C/span>\n          \u003C/div>\n        \u003C/div>\n      \u003C/div>\n      \u003Ca href=\"https://pushsecurity.com/resources/yes-youve-been-pwned\" class=\"px-9 py-3 border border-web-orange rounded-full cursor-pointer text-white bg-gradient-to-b from-web-orange to-web-orange-dark text-xl transition-all duration-500 hover:shadow-primary-button\">Watch now\u003C/a>\n    \u003C/div>\n  \u003C/div>\n  \u003C!-- SESSION 3 -->\n  \u003Cdiv class=\"session-card\" id=\"session-3\">\n    \u003Cdiv class=\"session-card-inner\">\n      \u003Cdiv class=\"session-badges\">\n        \u003Cspan class=\"badge badge-date\">\n         \u003C!-- \u003Csvg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            \u003Crect x=\"1\" y=\"2\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"#ff4824\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M1 6h14\" stroke=\"#ff4824\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M5 1v2M11 1v2\" stroke=\"#ff4824\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n          \u003C/svg> -->\n          Watch on-demand\n          \u003C!-- May 12, 2026 -->\n        \u003C/span>\n       \u003C!-- \u003Cspan class=\"badge badge-time\">\n           \u003Csvg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            \u003Ccircle cx=\"8\" cy=\"8\" r=\"6.25\" stroke=\"#aaa\" stroke-width=\"1.5\" />\n            \u003Cpath d=\"M8 4.5V8l2.5 2\" stroke=\"#aaa\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n          \u003C/svg>\n          1:00 PM ET\n        \u003C/span>-->\n      \u003C/div>\n      \u003Ch3 class=\"session-title\">Security Theater vs. Security That Works\u003C/h3>\n      \u003Cp class=\"session-subtitle\">Why your controls aren't doing what you think they are — and what actually stops attackers.\u003C/p>\n      \u003Cdiv class=\"session-desc\">\n        \u003Cspan class=\"desc-short\"> Modern enterprises have invested heavily in security: email gateways, endpoint agents, network monitoring, SIEM, SOAR, and more. Yet breaches keep happening. And they're not happening in the sophisticated ways most security teams are preparing for. \u003Cbutton class=\"toggle-btn\" onclick=\"document.getElementById('session-3').classList.toggle('expanded')\">Read more\u003C/button> \u003C/span>\n        \u003Cspan class=\"desc-full\">\n          \u003Cp>Modern enterprises have invested heavily in security: email gateways, endpoint agents, network monitoring, SIEM, SOAR, and more. Yet breaches keep happening. And they're not happening in the sophisticated ways most security teams are preparing for.\u003C/p>\n          \u003Cp>Attackers aren't burning zero-days or crafting complex exploit chains. They're simply logging into apps over the internet with stolen or phished credentials, dumping sensitive data, and cashing out. No endpoint malware. No noisy lateral movement. And ultimately, no alerts firing.\u003C/p>\n          \u003Cp>The uncomfortable truth is that the security stack was built for a world that no longer exists. The perimeter moved to identity. Work moved to the browser. But detection and response never followed. The result is a growing gap between what organizations think they're protected against and where attacks are actually landing.\u003C/p>\n          \u003Cp>It's security theater, and attackers know it.\u003C/p>\n          \u003Cp>Push Security Field CTO Mark Orlando is joined by Matt Johansen for an honest look at where enterprise security is falling short and what actually works. You'll learn:\u003C/p>\n          \u003Cul>\n            \u003Cli>Why traditional controls are missing the attacks that matter most\u003C/li>\n            \u003Cli>How attackers are exploiting the gap between identity, SaaS, and the browser\u003C/li>\n            \u003Cli>What controls make the biggest difference today, and what is pure theater\u003C/li>\n            \u003Cli>How security teams can operationalize browser telemetry and adopt engineering-based approaches to level the playing field\u003C/li>\n          \u003C/ul>\n          \u003Cspan class=\"highlight\">Can't make it? Don't miss out! Register anyway and get a copy of the recording in your inbox.\u003C/span>\n          \u003Cbutton class=\"toggle-btn\" onclick=\"document.getElementById('session-3').classList.toggle('expanded')\" style=\"display:block;margin-top:10px;\">Read Less\u003C/button>\n        \u003C/span>\n      \u003C/div>\n      \u003Cdiv class=\"session-speakers\">\n        \u003Cdiv class=\"speaker\">\n          \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F86c4f6851a03498698de442370d77f7c\" alt=\"Matt Johansen\" />\n          \u003Cdiv class=\"speaker-info\">\n            \u003Cspan class=\"speaker-role\">Guest Speaker\u003C/span>\n            \u003Cspan class=\"speaker-name\">Matt Johansen\u003C/span>\n            \u003Cspan class=\"speaker-title\">Founder of Vulnerable U\u003C/span>\n          \u003C/div>\n        \u003C/div>\n        \u003Cdiv class=\"speaker\">\n          \u003Cimg src=\"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F004e46af6d9c4c4188162784fe0366a5\" alt=\"Mark Orlando\" />\n          \u003Cdiv class=\"speaker-info\">\n            \u003Cspan class=\"speaker-role\">Presenter\u003C/span>\n            \u003Cspan class=\"speaker-name\">Mark Orlando\u003C/span>\n            \u003Cspan class=\"speaker-title\">Field CTO, Push Security\u003C/span>\n          \u003C/div>\n        \u003C/div>\n      \u003C/div>\n      \u003Ca href=\"https://pushsecurity.com/resources/security-theatre-vs-security-works\" class=\"px-9 py-3 border border-web-orange rounded-full cursor-pointer text-white bg-gradient-to-b from-web-orange to-web-orange-dark text-xl transition-all duration-500 hover:shadow-primary-button\">Watch now\u003C/a>\n    \u003C/div>\n  \u003C/div>\n\u003C/div>\n",{"large":337},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"color":338},"#ffffff",{"@type":47,"@version":48,"id":340,"properties":341,"meta":343,"component":345,"responsiveStyles":348},"builder-a30e3f175e3d4a3f8740261c290a84c8",{"id":342},"register",{"previousId":344},"builder-fd5a2306a8d54e3c8eccf905b9793528",{"name":76,"options":346,"isRSC":62},{"code":347,"scriptsClientOnly":6},"\u003Cstyle>\n\n    .speaker-logo {\n        width: 60px;\n        height: 70px;\n    }\n\n    .list-o {\n      padding-left: 4rem;\n      padding-right: 4rem;\n    }\n\n    .size-18 {\n        font-size: 18px;\n        line-height: 32px;\n    }\n\n  .cc-section {\n      width: 99vw;\n      margin-left: auto;\n      margin-right: auto;\n  }\n\n    .webinar-box {\n      background: black;\n    }\n\n  .dark-orange-pill {\n  background-color: rgb(48, 16, 10);\n          color: #ff4824;\n          align-items: center;\n          min-width: 119px;\n          height: 29px;\n          padding: 5px 10px;\n      }\n\n     .dark-orange-pill .text-block-19 {\n      color: #ff4824;\n     }\n\n  .gray-pill {\n          color: #ffffff73;\n          background-color: #ffffff14;\n          align-items: center;\n          min-width: 119px;\n          height: 29px;\n          padding: 5px 10px;\n      }\n\n  .u-text-orange\n  {\n    color:#e73918;\n  }\n\n  .flex-block-3.u-v-flex.browser-attacks-border.u-center-auto.u-z-index-10 {\n      background-image: linear-gradient(180deg, #e73918, transparent 8%);\n      padding-top: 1.5px;\n      padding-left: 1px;\n      padding-right: 1px;\n      transition-property: box-shadow;\n      transition-duration: .4s;\n      transition-timing-function: ease;\n          border-radius: 20px;\n              max-width: 819px;\n      margin-left: auto;\n      margin-right: auto;\n  }\n\n  .browser-attacks-border:hover {\n      background-image: linear-gradient(180deg, #e73918, var(--transparent) 8%);\n      box-shadow: 0 8px 32px #0000008c, 0 2px 8px #00000059, inset 0 .5px 1px #e73918, 0 -.25px 1px 1px #e73918;\n  }\n\n  .flex-block-3.u-v-flex.webinar-box.u-mb-lg {\n      box-shadow: 0 8px 32px #0000008c, 0 2px 8px #00000059;\n  }\n  .flex-block-3.u-v-flex.webinar-box {\n      background-color: black;\n      border-radius: 20px;\n      max-width: 925px;\n      margin-left: auto;\n      margin-right: auto;\n      padding: 40px 60px 60px;\n      transition-property: height;\n      transition-duration: .2s;\n      transition-timing-function: cubic-bezier(.25, .46, .45, .94);\n  }\n  .flex-block-3.u-v-flex.webinar-box.u-mb-lg {\n      box-shadow: 0 8px 32px #0000008c, 0 2px 8px #00000059;\n  }\n  .flex-block-3.u-v-flex.webinar-box {\n      background-color: black;\n      border-radius: 20px;\n      max-width: 925px;\n      margin-left: auto;\n      margin-right: auto;\n      padding: 40px 60px 60px;\n      transition-property: height;\n      transition-duration: .2s;\n      transition-timing-function: cubic-bezier(.25, .46, .45, .94);\n  }\n  .w-layout-vflex {\n      flex-direction: column;\n      align-items: flex-start;\n      display: flex;\n  }\n  @media screen and (min-width: 1440px) {\n      .div-for-date.dark-orange-pill {\n          background-color: rgb(48, 16, 10);\n          color: #ff4824;\n          align-items: center;\n      }\n  }\n\n  @media screen and (min-width: 1440px) {\n      .div-for-date {\n          font-family: var(--_typography---dm-sans-normalized);\n          min-width: 119px;\n          height: 29px;\n          padding: 5px 10px;\n          font-weight: 600;\n      }\n  }\n  .div-for-date {\n      border-radius: 19.5px;\n      min-width: 139px;\n      height: 39px;\n      display: flex;\n  }\n  @media screen and (min-width: 1440px) {\n      .div-for-date.gray-pill {\n          color: #ffffff73;\n          background-color: #ffffff14;\n          align-items: center;\n      }\n  }\n\n  @media screen and (min-width: 1440px) {\n      .div-for-date {\n          font-family: var(--_typography---dm-sans-normalized);\n          min-width: 119px;\n          height: 29px;\n          padding: 5px 10px;\n          font-weight: 600;\n      }\n  }\n  .div-for-date {\n      border-radius: 19.5px;\n      min-width: 139px;\n      height: 39px;\n      display: flex;\n  }\n\n\n    form .text-dusty-pink-dark {\n      display: none;\n    }\n          .heroic-image {z-index: 3;}\n          .heroic-image img {max-width: 540px; margin-left:auto; margin-right:auto;\n          z-index:1;}\n          .heroic-image p {font-size: clamp(1.2 * 1rem, ((1.2 - ((1.5 - 1.2) / (90 - 20) * 20)) * 1rem + ((1.5 - 1.2) / (90 - 20)) * 100vw), 1.5 * 1rem);\n          z-index:1;}\n          .heroic-image h1 {\n            z-index:1;\n          }\n          .heroic-image .bg-dark-blue {background:transparent;}\n\n          .transparent-bg .bg-dark-blue {background:transparent;}\n        .browser-attack-orange-block-clip {  -webkit-text-fill-color: transparent;\n            -webkit-text-fill-color: transparent;\n            background-image: linear-gradient(14deg, #ff9d29 35%, #e73918 73%);\n            -webkit-background-clip: text;\n            background-clip: text;}\n\n      .subheading {\n          font-size: 1.45rem;\n          font-weight: 500;\n          line-height: 140%;\n          margin-bottom: 1rem;\n      }\n\n    .attack-techniques-border img {\n      background-image: linear-gradient(0deg, #ff9d29, #e73918 49%), linear-gradient(#0f1921, #12222c);\n        border-radius: 10px;\n        padding: 2px;\n        display: flex;\n    }\n\n\n        .multi-color-glow-o {\n          background: radial-gradient(50% 50% at 50% 50%, #FF8724 0, #FF872400 100%);\n          height: 100%;\n          left: 0px;\n          opacity: .2;\n          position: absolute;\n          top: 96px;\n          width: 100%;\n          z-index: 0;\n        }\n        .multi-color-glow-b {\n          background: linear-gradient(to bottom, #0EB1E400, #0EB1E4, #0EB1E400), radial-gradient(50% 50% at 50% 50%, #182835 0, #18283500 100%);\n          height: 100%;\n          left: 0px;\n          opacity: .025;\n          position: absolute;\n          top: 70px;\n          width: 100%;\n          z-index: 0;\n        }\n\n\n        @media (min-width: 1280px) {\n          .xl\\:py-\\[80px\\] {\n              padding-bottom: 80px;\n              padding-top: 0px;\n          }\n      }\n\n      @media (min-width: 991px) {\n      .product-heading {font-size: 64px;\n      font-weight: 600;\n      }\n      .heroic-image p {\n        margin-top: -.7rem;\n    font-weight: 300;\n      }\n      }\n\n      @media (max-width: 991px) {\n      .product-heading {font-size: 1.875rem;}\n      }\n\u003C/style>\n",{"large":349},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"marginBottom":350,"fontWeight":351},"5rem","600",{"@type":47,"@version":48,"id":353,"meta":354,"component":356,"responsiveStyles":359},"builder-520e057966414bc8a55b78bb60a6048d",{"previousId":355},"builder-a072d552beb04d9fbfd423f358d24714",{"name":76,"options":357,"isRSC":62},{"code":358,"scriptsClientOnly":6},"\u003Cstyle>\n  .webinar-box {\n    transition: height 0.4s ease;\n  }\n  body {background: #000;}\n\u003C/style>\n",{"large":360},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"id":362,"@type":47,"tagName":83,"properties":363,"responsiveStyles":364},"builder-pixel-rhgzarlvra",{"src":85,"aria-hidden":86,"alt":29,"role":87,"width":68,"height":68},{"large":365},{"height":68,"width":68,"display":90,"opacity":68,"overflow":91,"pointerEvents":92},{"deviceSize":94,"location":367},{"pathname":236,"path":368,"query":371},[369,370],"webinar","state-of-browser-security",{},{},1780946630798,1774375567090,"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F2d8e538a720e4b3190e88951e00b758c","ax7YYfD0OCeqT1Vxxv1G4FUbqVr1",[],{"breakpoints":379,"originalContentId":380,"kind":381,"winningTest":62,"hasLinks":6,"hasErrors":6,"lastPreviewUrl":382,"hasAutosaves":34},{"xsmall":31,"small":32,"medium":33},"ded08a72b3044b69933618ac53a95047","page","https://pushsecurity.com/webinar/state-of-browser-security?builder.space=f3a1111ff5be48cdbb123cd9f5795a05&builder.user.permissions=read%2Ccreate%2Cpublish%2CeditCode%2CeditDesigns%2CeditLayouts%2CeditLayers%2CeditContentPriority%2CeditFolders%2CeditProjects%2CmodifyMcpServers%2CmodifyWorkflowIntegrations%2CmodifyProjectSettings%2CconnectCodeRepository%2CcreateProjects%2CindexDesignSystems%2CsendPullRequests%2CmergePullRequests&builder.user.role.name=Developer&builder.user.role.id=developer&builder.cachebust=true&builder.preview=webinar&builder.noCache=true&builder.allowTextEdit=true&__builder_editing__=true&builder.overrides.webinar=e47acff652be4ef9aa938399f0889d5f&builder.overrides.e47acff652be4ef9aa938399f0889d5f=e47acff652be4ef9aa938399f0889d5f&builder.options.locale=Default","5baoyaa1x09",1784196734241]