[{"data":1,"prerenderedAt":346},["ShallowReactive",2],{"application-flags":3,"navbar":7,"always-visible-banner":36,"navbar-about-highlight":100,"navbar-resource-highlight":174,"webinar-/webinar/device-code-phishing":220},[4],{"enabled":5,"name":6},false,"maintenanceMode",[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,"dvapm2h7god",{"createdDate":37,"id":38,"name":39,"modelId":40,"published":13,"stageModifiedSincePublish":5,"query":41,"data":42,"variations":89,"lastUpdated":90,"firstPublished":91,"testRatio":23,"createdBy":92,"lastUpdatedBy":93,"folders":94,"meta":95,"rev":99},1774965361051,"fd266d0172cc47429be7ad10f48c99ad","always visible banner","0678d178ec8b41efb8a23c09dba7874d",[],{"url":29,"ctaText":43,"text":44,"blocks":45,"state":85},"ewrererw","testrfesssssssssss",[46,73],{"@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>Is your stack covered? 51 browser &amp; identity attacks, mapped.\u003C/p>","text-base",{"content":60,"fontSize":58,"url":61},"\u003Cp>\u003Cstrong style=\"font-weight:700;\">See the matrix →\u003C/strong>\u003C/p>\n","https://pushsecurity.com/resources/browser-identity-attacks-matrix/",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",{"id":74,"@type":47,"tagName":75,"properties":76,"responsiveStyles":80},"builder-pixel-b92kcxejcyr","img",{"src":77,"aria-hidden":78,"alt":29,"role":79,"width":68,"height":68},"https://cdn.builder.io/api/v1/pixel?apiKey=f3a1111ff5be48cdbb123cd9f5795a05","true","presentation",{"large":81},{"height":68,"width":68,"display":82,"opacity":68,"overflow":83,"pointerEvents":84},"block","hidden","none",{"deviceSize":86,"location":87},"large",{"path":29,"query":88},{},{},1778612252607,1774968080803,"ST0tXQM8slWpFrmioqKHmENB2qe2","ax7YYfD0OCeqT1Vxxv1G4FUbqVr1",[],{"kind":96,"hasLinks":5,"breakpoints":97,"lastPreviewUrl":98,"hasAutosaves":34,"hasErrors":5},"component",{"xsmall":31,"small":32,"medium":33},"https://pushsecurity.com/?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=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","avvo0y7xujg",[101,137],{"createdDate":102,"id":103,"name":104,"modelId":105,"published":13,"stageModifiedSincePublish":5,"query":106,"data":107,"variations":130,"lastUpdated":131,"firstPublished":132,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":133,"meta":134,"rev":136},1776247359804,"9136a8f18b3b4a6ba29b8653a99372b1","testimonial-inductive-automation","20d9eaa352304613b3d1a794b400703d",[],{"link":108,"type":109,"testimonialLink":110,"testimonial":111},{},"testimonial","/customer-stories/inductive-automation",{"@type":112,"id":113,"model":109,"value":114},"@builder.io/core:Reference","f028f2b685bb47cd8bf9e82a26dd5a79",{"query":115,"folders":116,"createdDate":117,"id":113,"name":118,"modelId":119,"published":13,"data":120,"variations":124,"lastUpdated":125,"firstPublished":126,"testRatio":23,"createdBy":92,"lastUpdatedBy":92,"meta":127,"rev":129},[],[],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":121,"jobTitle":122,"quote":118,"image":123},"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":128,"hasAutosaves":34},{"small":32,"medium":33},"cp10v96zu1b",{},1776247404986,1776247404973,[],{"breakpoints":135,"kind":28,"lastPreviewUrl":29,"hasAutosaves":5},{"xsmall":31,"small":32,"medium":33},"10c1efgj5va",{"createdDate":138,"id":139,"name":140,"modelId":105,"published":13,"meta":141,"stageModifiedSincePublish":5,"query":143,"data":144,"variations":170,"lastUpdated":171,"firstPublished":172,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":173,"rev":136},1776255761419,"05a9322735fc427db12e2740e4302300","Report: 2026 Browser Attack Techniques",{"breakpoints":142,"kind":28,"lastPreviewUrl":29,"hasAutosaves":5},{"xsmall":31,"small":32,"medium":33},[],{"testimonial":145,"link":164,"type":167,"title":140,"description":168,"image":169},{"@type":112,"id":146,"model":109,"value":147},"192acbb1f9ca4cac918c0ec435a8bae3",{"query":148,"folders":149,"createdDate":150,"id":146,"name":151,"modelId":119,"published":13,"data":152,"variations":158,"lastUpdated":159,"firstPublished":160,"testRatio":23,"createdBy":92,"lastUpdatedBy":24,"meta":161,"rev":163},[],[],1728981467463,"Push does for identity what CrowdStrike did for the endpoint",{"video":153,"jobTitle":154,"author":155,"qoute":29,"quote":156,"image":157},"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":162,"hasAutosaves":34},{"small":32,"medium":33},"j436mu0ufu",{"text":165,"url":166},"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,[],[175,198],{"createdDate":176,"id":177,"name":140,"modelId":178,"published":13,"meta":179,"stageModifiedSincePublish":5,"query":181,"data":182,"variations":193,"lastUpdated":194,"firstPublished":195,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":196,"rev":197},1776256900280,"1f429607996e4e5fae8fe3f9b9610e55","4829faa81e7c4ee8bd2d000e160e8d3c",{"breakpoints":180,"kind":28,"lastPreviewUrl":29,"hasAutosaves":5},{"xsmall":31,"small":32,"medium":33},[],{"testimonial":183,"link":192,"type":167,"title":140,"description":168,"image":169},{"@type":112,"id":146,"model":109,"value":184},{"query":185,"folders":186,"createdDate":150,"id":146,"name":151,"modelId":119,"published":13,"data":187,"variations":188,"lastUpdated":159,"firstPublished":160,"testRatio":23,"createdBy":92,"lastUpdatedBy":24,"meta":189,"rev":191},[],[],{"video":153,"jobTitle":154,"author":155,"qoute":29,"quote":156,"image":157},{},{"kind":28,"lastPreviewUrl":29,"breakpoints":190,"hasAutosaves":34},{"small":32,"medium":33},"m86lrznq8un",{"text":165,"url":166},{},1776256937553,1776256937540,[],"6f32flcianp",{"createdDate":199,"id":200,"name":201,"modelId":178,"published":13,"stageModifiedSincePublish":5,"query":202,"data":203,"variations":214,"lastUpdated":215,"firstPublished":216,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":217,"meta":218,"rev":197},1776256949234,"ce043785b71b4ece98eac811ecf4ba10","inductive-automation",[],{"link":204,"type":109,"testimonial":205,"testimonialLink":110},{},{"@type":112,"id":113,"model":109,"value":206},{"query":207,"folders":208,"createdDate":117,"id":113,"name":118,"modelId":119,"published":13,"data":209,"variations":210,"lastUpdated":125,"firstPublished":126,"testRatio":23,"createdBy":92,"lastUpdatedBy":92,"meta":211,"rev":213},[],[],{"author":121,"jobTitle":122,"quote":118,"image":123},{},{"kind":28,"lastPreviewUrl":29,"breakpoints":212,"hasAutosaves":34},{"small":32,"medium":33},"f18g50edx4s",{},1776256974140,1776256974130,[],{"breakpoints":219,"kind":28,"lastPreviewUrl":29,"hasAutosaves":5},{"xsmall":31,"small":32,"medium":33},{"createdDate":221,"id":222,"name":223,"modelId":224,"published":13,"stageModifiedSincePublish":5,"query":225,"data":231,"variations":335,"lastUpdated":336,"firstPublished":337,"testRatio":23,"screenshot":338,"createdBy":92,"lastUpdatedBy":93,"folders":339,"meta":340,"rev":345},1780321101978,"99563fe6bdf7471c9fef4f05f55ae435","Device code phishing in 2026","6d76dff70cb7466ca1f45901fc1f0c93",[226],{"@type":227,"property":228,"operator":229,"value":230},"@builder.io/core:Query","urlPath","is","/webinar/device-code-phishing",{"titlePage":232,"themeId":5,"seoTitle":223,"title":233,"date":234,"inputs":238,"image":239,"seoDescription":240,"textButton":241,"blocks":242,"url":230,"state":329},"It's 2025 — Why Haven't We Solved Phishing Yet?!","New webinar: Device code phishing in 2026",{"startEventDate":235,"time":236,"endEventDate":237},1782810000000,"Multiple Timezones",1782835200000,[],"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F52f947d0099948408d73a80643fa004d","Join the latest webinar from Push Security showcasing device code phishing kits and how device code logins are abused in real-world attacks.","Register",[243,255,271,281,291,302,315,324],{"@type":47,"@version":48,"id":244,"meta":245,"component":247,"responsiveStyles":251},"builder-123a802c62b742b89c4a9062df206255",{"previousId":246},"builder-f54594a3ed5b4d6783b9a0d90e256435",{"name":248,"options":249,"isRSC":62},"Custom Code",{"code":250,"scriptsClientOnly":5},"\u003C!-- STYLES — Modal + Form -->\n\u003Cstyle>\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  /* ── Standalone form fields ── */\n  #push-custom-form .push-form-fields { display: flex; flex-direction: column; gap: 16px; margin-bottom: 16px; }\n\n  #push-custom-form .push-form-row { display: flex; flex-direction: row; gap: 16px; }\n  @media (max-width: 600px) { #push-custom-form .push-form-row { flex-direction: column; } }\n\n  #push-custom-form .dark-text-box {\n    width: 100%; height: 65px;\n    display: flex; align-items: center;\n    background: linear-gradient(to bottom, #1a242b 0%, #000 100%);\n    border: 1px solid #000; border-radius: 0.5rem;\n    box-shadow: 0 5px 20px rgba(0,0,0,0.5);\n  }\n  #push-custom-form .dark-text-box.custom-input-error { outline: 2px solid #e53e3e; }\n\n  #push-custom-form input.input:-webkit-autofill,\n  #push-custom-form input.input:-webkit-autofill:hover,\n  #push-custom-form input.input:-webkit-autofill:focus,\n  #push-custom-form input.input:-webkit-autofill:active {\n    -webkit-box-shadow: 0 0 0 30px #0d1318 inset !important;\n    -webkit-text-fill-color: #fff !important;\n    caret-color: #fff;\n  }\n\n  #push-custom-form input.input {\n    width: 100%; background: transparent; border: none;\n    color: #fff; font-size: 16px; outline: none;\n  }\n  #push-custom-form input.input::placeholder { color: #888; }\n\n  #push-custom-form .push-form-subscribe { margin: 16px 0; }\n  #push-custom-form .push-subscribe-label {\n    display: flex; align-items: center; gap: 10px;\n    color: #fff; font-size: 14px; cursor: pointer;\n  }\n  #push-custom-form .push-subscribe-label input[type=\"checkbox\"] { cursor: pointer; }\n  #push-custom-form .push-submit-btn {\n    display: flex; align-items: center; justify-content: center;\n    width: 100%; margin-bottom: 12px;\n  }\n  #push-custom-form .push-form-privacy { font-size: 12px; color: #888; }\n\n  /* ── Country select ── */\n  .custom-country-wrapper {\n    width: 100%; margin-bottom: 0; position: relative;\n    height: 65px;\n    background: linear-gradient(to bottom, #1a242b 0%, #000 100%);\n    border: 1px solid #000; border-radius: 0.5rem;\n    box-shadow: 0 5px 20px rgba(0,0,0,0.5);\n  }\n  .custom-country-wrapper::after {\n    content: '';\n    pointer-events: none;\n    position: absolute; right: 16px; top: 50%; transform: translateY(-50%);\n    width: 12px; height: 8px;\n    background: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23888' d='M6 8L0 0h12z'/%3E%3C/svg%3E\") no-repeat center;\n  }\n  .custom-country-select {\n    position: absolute; inset: 0;\n    width: 100%; height: 100%; padding: 0 40px 0 16px;\n    background: transparent; border: none; border-radius: 0.5rem;\n    color: #ccc; font-size: 16px; cursor: pointer;\n    appearance: none; -webkit-appearance: none; outline: none;\n  }\n  .custom-country-select:focus { outline: none; }\n  .custom-country-wrapper:focus-within { border-color: #ff4824; }\n  .custom-country-select option { background: #0d1318; color: #fff; }\n  .custom-country-select.has-value { color: #fff; }\n  .custom-country-wrapper.custom-input-error {\n    outline: 2px solid #e53e3e; border-radius: 0.5rem;\n  }\n\n  /* ── Sessions container ── */\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  /* ── Group select buttons (Select US / Select UK) ── */\n  .custom-group-buttons { display: flex; gap: 12px; margin-bottom: 16px; }\n  .custom-group-btn {\n    flex: 1; display: flex; align-items: center; padding: 12px 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-group-btn:hover { background: rgba(255,72,36,0.12); }\n  .custom-group-btn .custom-select-all-checkbox {\n    width: 20px; height: 20px; min-width: 20px; border: 2px solid #ff4824;\n    border-radius: 4px; margin-right: 10px; display: flex; align-items: center;\n    justify-content: center; background: transparent; flex-shrink: 0;\n  }\n  .custom-group-btn.selected .custom-select-all-checkbox { background: #ff4824; }\n  .custom-group-btn .custom-select-all-checkbox svg { width: 14px; height: 14px; fill: white; display: none; }\n  .custom-group-btn.selected .custom-select-all-checkbox svg { display: block; }\n  .custom-group-label { color: #fff; font-size: 14px; font-weight: 600; line-height: 1.3; }\n\n  /* ── Event rows (title + subtitle + time checkboxes) ── */\n  .custom-session-event {\n    background: rgba(255,255,255,0.03); border-radius: 8px;\n    padding: 16px; margin-bottom: 12px;\n  }\n  .custom-session-event-title { font-size: 16px; font-weight: 500; color: #fff; margin-bottom: 4px; line-height: 1.4; }\n  .custom-session-event-subtitle { font-size: 14px; color: #ccc; margin-bottom: 12px; line-height: 1.4; }\n\n  /* ── Time checkboxes row ── */\n  .custom-session-times { display: flex; gap: 10px; flex-wrap: wrap; }\n  .custom-session-option {\n    flex: 1; min-width: 120px; display: flex; align-items: center; padding: 10px 12px;\n    background: rgba(255,255,255,0.04); border-radius: 6px; cursor: pointer;\n    border: 2px solid transparent; transition: background 0.2s;\n  }\n  .custom-session-option:hover { background: rgba(255,255,255,0.08); }\n  .custom-session-option.selected { background: rgba(255,72,36,0.1); border-color: #ff4824; }\n  .custom-session-checkbox {\n    width: 18px; height: 18px; min-width: 18px; border: 2px solid #ff4824;\n    border-radius: 4px; margin-right: 8px; display: flex; align-items: center;\n    justify-content: center; background: transparent; flex-shrink: 0;\n  }\n  .custom-session-option.selected .custom-session-checkbox { background: #ff4824; }\n  .custom-session-checkbox svg { width: 12px; height: 12px; fill: white; display: none; }\n  .custom-session-option.selected .custom-session-checkbox svg { display: block; }\n  .custom-session-time-label { color: #aaa; font-size: 13px; line-height: 1.3; }\n  .custom-session-option.selected .custom-session-time-label { color: #fff; }\n\n  /* ── Success message ── */\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  /* ── Validation ── */\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    var isBuilderPreview = window.location.search.indexOf('builder.preview') !== -1 ||\n                           window.location.search.indexOf('__builder_editing__') !== -1;\n    if (!isBuilderPreview && 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 GRAPHQL_URL = 'https://zvfpigexifbzhpyzt5kbtglkuq.appsync-api.eu-west-1.amazonaws.com/graphql';\n    var API_KEY     = 'da2-ktd7i4qpq5a3rjeh3b2eaqfevq';\n    var selectedSessions = [];\n    var selectedCountry  = '';\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    (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    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    // ── COUNTRY LIST ──\n    var COUNTRIES = [\n      'United States','Canada','United Kingdom','Australia','South Africa',\n      'Afghanistan','Albania','Algeria','Andorra','Angola','Antigua and Barbuda',\n      'Argentina','Armenia','Austria','Azerbaijan','Bahamas','Bahrain','Bangladesh',\n      'Barbados','Belarus','Belgium','Belize','Benin','Bhutan','Bolivia',\n      'Bosnia and Herzegovina','Botswana','Brazil','Brunei','Bulgaria','Burkina Faso',\n      'Burundi','Cambodia','Cameroon','Cape Verde','Central African Republic','Chad',\n      'Chile','China','Colombia','Comoros','Congo','Costa Rica','Croatia','Cuba',\n      'Cyprus','Czech Republic','Denmark','Djibouti','Dominica','Dominican Republic',\n      'Ecuador','Egypt','El Salvador','Equatorial Guinea','Eritrea','Estonia',\n      'Ethiopia','Fiji','Finland','France','Gabon','Gambia','Georgia','Germany',\n      'Ghana','Greece','Grenada','Guatemala','Guinea','Guinea-Bissau','Guyana',\n      'Haiti','Honduras','Hungary','Iceland','India','Indonesia','Iran','Iraq',\n      'Ireland','Israel','Italy','Jamaica','Japan','Jordan','Kazakhstan','Kenya',\n      'Kiribati','Kuwait','Kyrgyzstan','Laos','Latvia','Lebanon','Lesotho',\n      'Liberia','Libya','Liechtenstein','Lithuania','Luxembourg','Macedonia',\n      'Madagascar','Malawi','Malaysia','Maldives','Mali','Malta','Marshall Islands',\n      'Mauritania','Mauritius','Mexico','Micronesia','Moldova','Monaco','Mongolia',\n      'Montenegro','Morocco','Mozambique','Myanmar','Namibia','Nauru','Nepal',\n      'Netherlands','New Zealand','Nicaragua','Niger','Nigeria','North Korea',\n      'Norway','Oman','Pakistan','Palau','Palestine','Panama','Papua New Guinea',\n      'Paraguay','Peru','Philippines','Poland','Portugal','Qatar','Romania',\n      'Russia','Rwanda','Saint Kitts and Nevis','Saint Lucia',\n      'Saint Vincent and the Grenadines','Samoa','San Marino','Sao Tome and Principe',\n      'Saudi Arabia','Senegal','Serbia','Seychelles','Sierra Leone','Singapore',\n      'Slovakia','Slovenia','Solomon Islands','Somalia','South Korea','South Sudan',\n      'Spain','Sri Lanka','Sudan','Suriname','Swaziland','Sweden','Switzerland',\n      'Syria','Taiwan','Tajikistan','Tanzania','Thailand','Timor-Leste','Togo',\n      'Tonga','Trinidad and Tobago','Tunisia','Turkey','Turkmenistan','Tuvalu',\n      'Uganda','Ukraine','United Arab Emirates','Uruguay','Uzbekistan','Vanuatu',\n      'Vatican City','Venezuela','Vietnam','Yemen','Zambia','Zimbabwe'\n    ];\n\n    // ── GROUPS ──\n    // Define the regional groups shown as \"Select X Sessions\" buttons.\n    // Remove or leave empty to show no group buttons (single-region webinars).\n    var GROUPS = [\n      { id: 'us', label: 'Select US Sessions' },\n      { id: 'uk', label: 'Select UK Sessions' }\n    ];\n\n    // ── SESSIONS ──\n    // Each session needs: id, group (must match a GROUPS id), title, subtitle, date.\n    // Sessions from different Livestorm events can be mixed freely —\n    // the GraphQL mutation only needs the sessionId.\n    // Group buttons appear automatically when there are sessions in 2+ groups.\n    // If only 1 session total, group buttons are hidden.\n    //\n    // Event: Device code phishing in 2026\n    // Event ID: fec7e3d9-c6a5-41b9-aeb3-74af0850f01b\n    var SESSIONS = [\n      {\n        id: '6f52840a-0c52-453b-9f0d-1634619c04fd',\n        eventId: 'fec7e3d9-c6a5-41b9-aeb3-74af0850f01b',\n        group: 'uk',\n        title: 'Device code phishing in 2026',\n        subtitle: 'behind-the-scenes demos, real kits, and where it\\'s headed next',\n        date: 'Jun 30 10:00 AM BST'\n      },\n      {\n        id: 'bfcbf7b3-8c33-4683-a4d8-af6e1a87c341',\n        eventId: 'fec7e3d9-c6a5-41b9-aeb3-74af0850f01b',\n        group: 'us',\n        title: 'Device code phishing in 2026',\n        subtitle: 'behind-the-scenes demos, real kits, and where it\\'s headed next',\n        date: 'Jun 30 11:00 AM EST'\n      }\n    ];\n\n    // ── Build and inject the standalone form ──\n    function initForm() {\n      var slot = document.getElementById('register-modal-form-slot');\n      if (!slot) { console.warn('[Push] initForm: slot not found'); return; }\n\n      if (formInitialised && !slot.querySelector('#push-custom-form')) {\n        console.log('[Push] DOM re-rendered, re-initialising.');\n        formInitialised = false;\n        selectedSessions.length = 0;\n        selectedCountry = '';\n      }\n\n      if (formInitialised) { console.log('[Push] initForm: already done.'); return; }\n      formInitialised = true;\n      console.log('[Push] initForm: building form.');\n\n      // ── Country options ──\n      var countryOptions = '\u003Coption value=\"\" disabled selected>Country *\u003C/option>';\n      for (var i = 0; i \u003C COUNTRIES.length; i++) {\n        countryOptions += '\u003Coption value=\"' + COUNTRIES[i] + '\">' + COUNTRIES[i] + '\u003C/option>';\n      }\n\n      // ── Sessions HTML ──\n      var sessionsHTML = buildSessionsHTML();\n\n      // ── Full form HTML ──\n      slot.innerHTML =\n        '\u003Cform id=\"push-custom-form\" novalidate>' +\n          '\u003Cdiv class=\"push-form-fields\">' +\n            '\u003Cdiv class=\"push-form-row\">' +\n              '\u003Cdiv class=\"dark-text-box\" id=\"field-firstName\">' +\n                '\u003Cinput autocomplete=\"given-name\" placeholder=\"First name *\" id=\"push-firstName\" class=\"input px-6 rounded-lg text-white\" />' +\n              '\u003C/div>' +\n              '\u003Cdiv class=\"dark-text-box\" id=\"field-lastName\">' +\n                '\u003Cinput autocomplete=\"family-name\" placeholder=\"Last name *\" id=\"push-lastName\" class=\"input px-6 rounded-lg text-white\" />' +\n              '\u003C/div>' +\n            '\u003C/div>' +\n            '\u003Cdiv class=\"dark-text-box\" id=\"field-email\">' +\n              '\u003Cinput autocomplete=\"email\" type=\"email\" placeholder=\"Work email *\" id=\"push-email\" class=\"input px-6 rounded-lg text-white\" />' +\n            '\u003C/div>' +\n            '\u003Cdiv class=\"dark-text-box\" id=\"field-org\">' +\n              '\u003Cinput placeholder=\"Your organization\" id=\"push-org\" class=\"input px-6 rounded-lg text-white\" />' +\n            '\u003C/div>' +\n            '\u003Cdiv class=\"custom-country-wrapper\" id=\"custom-country-wrapper\">' +\n              '\u003Cselect class=\"custom-country-select\" id=\"custom-country-select\">' + countryOptions + '\u003C/select>' +\n            '\u003C/div>' +\n            sessionsHTML +\n          '\u003C/div>' +\n          '\u003Cdiv class=\"push-form-subscribe\">' +\n            '\u003Clabel class=\"push-subscribe-label\">' +\n              '\u003Cinput type=\"checkbox\" id=\"push-subscribe\" checked />' +\n              '\u003Cspan>Subscribe me to email updates from Push\u003C/span>' +\n            '\u003C/label>' +\n          '\u003C/div>' +\n          '\u003Cdiv class=\"custom-validation-error\" id=\"custom-validation-error\">Please fill in all required fields\u003C/div>' +\n          '\u003Cbutton type=\"submit\" class=\"push-submit-btn p-btn-rounded-base p-btn-web-orange\">Submit now\u003C/button>' +\n          '\u003Cdiv class=\"push-form-privacy\">By signing up to this webinar you agree to our \u003Ca href=\"/legal/privacy/\" class=\"text-web-orange\">privacy policy\u003C/a>.\u003C/div>' +\n        '\u003C/form>';\n\n      // Wire up country select\n      var countrySelect = slot.querySelector('#custom-country-select');\n      if (countrySelect) {\n        countrySelect.addEventListener('change', function() {\n          selectedCountry = countrySelect.value;\n          countrySelect.classList.add('has-value');\n          var cw = document.getElementById('custom-country-wrapper');\n          if (cw) cw.classList.remove('custom-input-error');\n        });\n      }\n\n      // Wire up sessions\n      wireSessionListeners(slot);\n\n      // Wire up form submit\n      var form = slot.querySelector('#push-custom-form');\n      if (form) form.addEventListener('submit', handleSubmit, true);\n\n      console.log('[Push] initForm complete.');\n    }\n\n    // ── Build the sessions container HTML ──\n    function buildSessionsHTML() {\n      var html = '\u003Cdiv class=\"custom-sessions-container\" id=\"push-sessions\">';\n      html += '\u003Ch3 class=\"custom-sessions-title\">Select Session(s) *\u003C/h3>';\n\n      // Determine which groups actually have sessions\n      var activeGroupIds = {};\n      for (var i = 0; i \u003C SESSIONS.length; i++) {\n        if (SESSIONS[i].group) activeGroupIds[SESSIONS[i].group] = true;\n      }\n      var activeGroups = [];\n      for (var g = 0; g \u003C GROUPS.length; g++) {\n        if (activeGroupIds[GROUPS[g].id]) activeGroups.push(GROUPS[g]);\n      }\n\n      // Show group select buttons only if sessions span 2+ distinct Livestorm events\n      // AND there are 2+ active groups. Single-event webinars (US + UK times for one\n      // event) don't need group selectors since each group has at most one session.\n      var uniqueEventIds = {};\n      for (var ui = 0; ui \u003C SESSIONS.length; ui++) {\n        if (SESSIONS[ui].eventId) uniqueEventIds[SESSIONS[ui].eventId] = true;\n      }\n      var numUniqueEvents = 0;\n      for (var ek in uniqueEventIds) { if (uniqueEventIds.hasOwnProperty(ek)) numUniqueEvents++; }\n\n      if (numUniqueEvents > 1 && activeGroups.length > 1) {\n        html += '\u003Cdiv class=\"custom-group-buttons\">';\n        for (var ag = 0; ag \u003C activeGroups.length; ag++) {\n          html += '\u003Cdiv class=\"custom-group-btn\" data-group=\"' + activeGroups[ag].id + '\">';\n          html += '\u003Cdiv class=\"custom-select-all-checkbox\">' + checkSVG + '\u003C/div>';\n          html += '\u003Cdiv class=\"custom-group-label\">' + activeGroups[ag].label + '\u003C/div>';\n          html += '\u003C/div>';\n        }\n        html += '\u003C/div>';\n      }\n\n      // Group sessions by title (each unique title = one event row)\n      var eventOrder = [];\n      var eventMap = {};\n      for (var s = 0; s \u003C SESSIONS.length; s++) {\n        var sess = SESSIONS[s];\n        if (!eventMap[sess.title]) {\n          eventMap[sess.title] = { title: sess.title, subtitle: sess.subtitle, sessions: [] };\n          eventOrder.push(sess.title);\n        }\n        eventMap[sess.title].sessions.push(sess);\n      }\n\n      // Render each event row\n      for (var e = 0; e \u003C eventOrder.length; e++) {\n        var evt = eventMap[eventOrder[e]];\n        html += '\u003Cdiv class=\"custom-session-event\">';\n        html += '\u003Cdiv class=\"custom-session-event-title\">' + evt.title + '\u003C/div>';\n        if (evt.subtitle) html += '\u003Cdiv class=\"custom-session-event-subtitle\">' + evt.subtitle + '\u003C/div>';\n\n        // Time checkboxes in a row\n        html += '\u003Cdiv class=\"custom-session-times\">';\n        for (var si = 0; si \u003C evt.sessions.length; si++) {\n          var es = evt.sessions[si];\n          html += '\u003Cdiv class=\"custom-session-option\"' +\n                      ' data-session-id=\"' + es.id + '\"' +\n                      ' data-session-title=\"' + es.title + '\"' +\n                      ' data-group=\"' + (es.group || '') + '\">';\n          html += '\u003Cdiv class=\"custom-session-checkbox\">' + checkSVG + '\u003C/div>';\n          html += '\u003Cdiv class=\"custom-session-time-label\">' + es.date + '\u003C/div>';\n          html += '\u003C/div>';\n        }\n        html += '\u003C/div>'; // end custom-session-times\n        html += '\u003C/div>'; // end custom-session-event\n      }\n\n      html += '\u003C/div>'; // end custom-sessions-container\n      return html;\n    }\n\n    // ── Wire session and group button interactions ──\n    function wireSessionListeners(slot) {\n      // Individual session time checkboxes\n      var allOptions = slot.querySelectorAll('.custom-session-option');\n      for (var i = 0; i \u003C allOptions.length; i++) {\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              var idx = selectedSessions.indexOf(id);\n              if (idx > -1) selectedSessions.splice(idx, 1);\n            }\n            updateGroupButtonStates(slot);\n            clearSessionError();\n            console.log('[Push] Session toggled:', id, '| total:', selectedSessions.length);\n          };\n        })(allOptions[i]);\n      }\n\n      // Group select buttons\n      var groupBtns = slot.querySelectorAll('.custom-group-btn');\n      for (var g = 0; g \u003C groupBtns.length; g++) {\n        (function(btn) {\n          btn.onclick = function() {\n            var groupId = btn.getAttribute('data-group');\n            var isSelected = btn.classList.contains('selected');\n\n            if (isSelected) {\n              // Already fully selected — deselect this group\n              deselectGroup(slot, groupId);\n            } else {\n              // Selecting this group — if another group is FULLY selected, deselect it first\n              var allGroupBtns = slot.querySelectorAll('.custom-group-btn');\n              for (var ob = 0; ob \u003C allGroupBtns.length; ob++) {\n                var otherGroupId = allGroupBtns[ob].getAttribute('data-group');\n                if (otherGroupId !== groupId && isGroupFullySelected(slot, otherGroupId)) {\n                  deselectGroup(slot, otherGroupId);\n                }\n              }\n              selectGroup(slot, groupId);\n            }\n            console.log('[Push] Group toggled:', groupId, '| total:', selectedSessions.length);\n          };\n        })(groupBtns[g]);\n      }\n    }\n\n    function isGroupFullySelected(slot, groupId) {\n      var opts = slot.querySelectorAll('.custom-session-option[data-group=\"' + groupId + '\"]');\n      if (!opts.length) return false;\n      for (var i = 0; i \u003C opts.length; i++) {\n        if (!opts[i].classList.contains('selected')) return false;\n      }\n      return true;\n    }\n\n    function selectGroup(slot, groupId) {\n      var opts = slot.querySelectorAll('.custom-session-option[data-group=\"' + groupId + '\"]');\n      for (var i = 0; i \u003C opts.length; i++) {\n        var id = opts[i].getAttribute('data-session-id');\n        if (!opts[i].classList.contains('selected')) {\n          opts[i].classList.add('selected');\n          selectedSessions.push(id);\n        }\n      }\n      updateGroupButtonStates(slot);\n      clearSessionError();\n    }\n\n    function deselectGroup(slot, groupId) {\n      var opts = slot.querySelectorAll('.custom-session-option[data-group=\"' + groupId + '\"]');\n      for (var i = 0; i \u003C opts.length; i++) {\n        var id = opts[i].getAttribute('data-session-id');\n        opts[i].classList.remove('selected');\n        var idx = selectedSessions.indexOf(id);\n        if (idx > -1) selectedSessions.splice(idx, 1);\n      }\n      updateGroupButtonStates(slot);\n    }\n\n    function updateGroupButtonStates(slot) {\n      var groupBtns = slot.querySelectorAll('.custom-group-btn');\n      for (var i = 0; i \u003C groupBtns.length; i++) {\n        var groupId = groupBtns[i].getAttribute('data-group');\n        groupBtns[i].classList.toggle('selected', isGroupFullySelected(slot, groupId));\n      }\n    }\n\n    function clearSessionError() {\n      if (selectedSessions.length > 0) {\n        var sc = document.getElementById('push-sessions');\n        if (sc) sc.classList.remove('custom-session-error');\n      }\n    }\n\n    // ── Modal open/close ──\n    // Capture phase (true) so Nuxt's router cannot swallow the click first.\n    document.addEventListener('click', function(e) {\n      if (!e.target || typeof e.target.closest !== 'function') return;\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    }, true);\n\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') + ' — ' + el.querySelector('.custom-session-time-label').textContent) : 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 = (document.getElementById('push-firstName') || {}).value || '';\n      var lastName  = (document.getElementById('push-lastName')  || {}).value || '';\n      var email     = (document.getElementById('push-email')     || {}).value || '';\n      var country   = selectedCountry;\n\n      firstName = firstName.trim();\n      lastName  = lastName.trim();\n      email     = email.trim();\n\n      console.log('[Push] Values — email:', email, 'first:', firstName, 'last:', lastName, 'country:', country);\n\n      var valid = true;\n      if (!firstName) { var f = document.getElementById('field-firstName'); if (f) f.classList.add('custom-input-error'); valid = false; }\n      if (!lastName)  { var l = document.getElementById('field-lastName');  if (l) l.classList.add('custom-input-error'); valid = false; }\n      if (!email)     { var em = document.getElementById('field-email');    if (em) em.classList.add('custom-input-error'); valid = false; }\n\n      if (!country) {\n        var cw = document.getElementById('custom-country-wrapper');\n        if (cw) cw.classList.add('custom-input-error');\n        valid = false;\n      }\n\n      if (selectedSessions.length === 0) {\n        var sc = document.getElementById('push-sessions');\n        if (sc) sc.classList.add('custom-session-error');\n        valid = false;\n      }\n\n      var errEl = document.getElementById('custom-validation-error');\n\n      if (email && !isWorkEmail(email)) {\n        var ef = document.getElementById('field-email');\n        if (ef) ef.classList.add('custom-input-error');\n        if (errEl) { errEl.textContent = 'Please use a work email address'; errEl.classList.add('visible'); }\n        console.warn('[Push] Non-work email rejected:', email);\n        return false;\n      }\n\n      if (errEl) errEl.classList.toggle('visible', !valid);\n      if (!valid) { console.warn('[Push] Validation failed.'); return false; }\n\n      var btn = form.querySelector('button[type=\"submit\"]');\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:     country,\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          if (!d.data.registerWebinarSession.success) {\n            console.warn('[Push] Session', sessionId, '— success: false (possibly already registered)');\n          }\n          doRegister(index + 1);\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      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!-- Bootstrap — executes the logic client-side once the DOM is ready. -->\n\u003Cscript>\nfunction runModalLogic() {\n  if (window.__PUSH_BOOTSTRAP_RAN__) return;\n  window.__PUSH_BOOTSTRAP_RAN__ = true;\n  window.__PUSH_MODAL_ACTIVE__ = false;\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}\nif (document.readyState === 'loading') {\n  document.addEventListener('DOMContentLoaded', runModalLogic);\n} else {\n  runModalLogic();\n}\n\u003C/script>",{"large":252,"medium":253,"small":254},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"display":65},{"display":65},{"@type":47,"@version":48,"id":256,"class":257,"meta":258,"component":260,"responsiveStyles":266},"builder-0bdcb91d05d747f28a84c3d020a2313d","heroic-image",{"previousId":259},"builder-aa683b15ce714878a2c4e75b98e6d610",{"name":261,"tag":261,"options":262,"isRSC":62},"TextImageBlockVertical",{"darkMode":34,"maxWidth":263,"maxTextWidth":263,"description":264,"title":265,"animatedTitle":29,"reverse":5},1200,"\u003Cp>Join the latest webinar from Push Security VP Research Luke Jennings, showcasing the evolution in device code phishing kits and how device code logins are abused in real-world attacks.\u003C/p>\n","\u003Ch1>\u003Cspan style=\"color: rgb(255, 72, 36);\">Threat research webinar:\u003C/span>\u003C/h1>\u003Ch1>Device code phishing in 2026\u003C/h1>",{"large":267},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"fontSize":268,"backgroundColor":269,"pointerEvents":270},"1.5rem","transparent","auto",{"@type":47,"@version":48,"id":272,"class":273,"meta":274,"component":276,"responsiveStyles":279},"builder-78a0b5d41d32429aba69195880fd8cdd","modal-open",{"previousId":275},"builder-7c68dd8720304201bf1bad4b05a5bb15",{"name":248,"options":277,"isRSC":62},{"code":278,"scriptsClientOnly":5},"\u003Cdiv class=\"mt-4 mb-4 modal-open\" style=\"z-index:3; position: relative;\">\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\"> Register now \u003C/a>\n\u003C/div>\n\u003C!-- \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":280},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"marginLeft":270,"marginRight":270},{"@type":47,"@version":48,"layerName":282,"id":283,"meta":284,"component":286,"responsiveStyles":289},"Particle-mount","builder-b6bb053f8f744ecba51856f670b0f8a2",{"previousId":285},"builder-91c8550b092d4252a91c8ac3b34aeecd",{"name":248,"options":287,"isRSC":62},{"code":288,"scriptsClientOnly":5},"\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":290},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"@type":47,"@version":48,"id":292,"meta":293,"component":295,"responsiveStyles":298},"builder-f900bc63775d477aa2b9b9c60be89e51",{"previousId":294},"builder-e878a4f8821c41a5b09a8c98ba89420c",{"name":248,"options":296,"isRSC":62},{"code":297,"scriptsClientOnly":5},"\u003Cstyle>\n\n  .heroic-image img {display: none;}\n  .heroic-image p {    line-height: 140%;}\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    display: none;\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  }\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: #ff4824;\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          \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          June 30\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\">Device code phishing in 2026\u003C/h3>\n        \u003Cp class=\"session-subtitle\">Behind-the-scenes demos, real kits, and where it’s headed next.\u003C/p>\n        \u003Cdiv class=\"session-desc\">\n          \u003Cspan class=\"desc-short\">\u003Cp>At the start of 2026, device code phishing was still a niche technique associated with Russian state-linked campaigns. Six months later, we’re tracking 18x kits in the wild, a 37x spike in detections, and it feels like every PhaaS vendor in the AiTM space has added device code phishing to their platform. \u003C/p>\n\u003Cp>What was an espionage-grade technique 18 months ago is now a criminal commodity.\u003C/p>\n \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>At the start of 2026, device code phishing was still a niche technique associated with Russian state-linked campaigns. Six months later, we’re tracking 18x kits in the wild, a 37x spike in detections, and it feels like every PhaaS vendor in the AiTM space has added device code phishing to their platform.\u003C/p>\n\u003Cp>What was an espionage-grade technique 18 months ago is now a criminal commodity.\n\u003C/p>\u003Cp>Device code phishing is the go-to for criminals in 2026 because it doesn’t matter what login controls you have deployed. Strong passwords, MFA, even passkeys: it sidesteps the standard login process altogether by targeting the authorization layer. This is effectively post-auth phishing.\u003C/p>\n\u003Cp>Once an attacker has a valid token, a single phished session can quickly escalate into broad access across an organization's connected apps and services.\u003C/p>\n\u003Cp>Join Luke Jennings, Push's VP of R&D, for a threat research-focused session that goes behind the scenes of device code phishing — with live demos, real examples from kits and campaigns in the wild, and a practical look at what security teams can do about it. We'll cover:\n\u003C/p>\n            \u003Cul>\n              \u003Cli>Real examples from the most notable kits and campaigns Push is tracking in the wild\u003C/li>\n              \u003Cli>Live demos of device code phishing from the attacker's side — across both Microsoft and non-Microsoft apps\u003C/li>\n              \u003Cli>How AiTM kits and device code phishing are converging into multi-technique platforms\u003C/li>\n              \u003Cli>Mitigation strategies, their practical limitations, and the gaps that remain\u003C/li>\n              \u003Cli>The future of device code phishing — and why Microsoft targeting is just the beginning\u003C/li>\n            \u003C/ul>\n            \u003Cspan class=\"highlight\">Can't make it? Register anyway and we'll send you the recording.\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          \u003C!-- \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           \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        \u003Cbr />\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 modal-open\">Register now\u003C/a>\n      \u003C/div>\n    \u003C/div>\n  \u003C!-- \u003C/div> -->\n\u003C/div>\n",{"large":299},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"color":300,"marginTop":301},"#ffffff","-4.5rem",{"@type":47,"@version":48,"id":303,"properties":304,"meta":306,"component":308,"responsiveStyles":311},"builder-9867577adc554aaba79b28e5022a1ba0",{"id":305},"register",{"previousId":307},"builder-a30e3f175e3d4a3f8740261c290a84c8",{"name":248,"options":309,"isRSC":62},{"code":310,"scriptsClientOnly":5},"\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":312},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"marginBottom":313,"fontWeight":314},"5rem","600",{"@type":47,"@version":48,"id":316,"meta":317,"component":319,"responsiveStyles":322},"builder-2724d7f4ff564b94b01a2994f3872605",{"previousId":318},"builder-520e057966414bc8a55b78bb60a6048d",{"name":248,"options":320,"isRSC":62},{"code":321,"scriptsClientOnly":5},"\u003Cstyle>\n  .webinar-box {\n    transition: height 0.4s ease;\n  }\n  body {background: #000;}\n\u003C/style>\n",{"large":323},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"id":325,"@type":47,"tagName":75,"properties":326,"responsiveStyles":327},"builder-pixel-bl509jwep0h",{"src":77,"aria-hidden":78,"alt":29,"role":79,"width":68,"height":68},{"large":328},{"height":68,"width":68,"display":82,"opacity":68,"overflow":83,"pointerEvents":84},{"deviceSize":86,"location":330},{"pathname":230,"path":331,"query":334},[332,333],"webinar","device-code-phishing",{},{},1780342940750,1780329237503,"https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2Ff99cfbd189ab439397296dbbb05da423",[],{"winningTest":62,"originalContentId":341,"hasLinks":5,"lastPreviewUrl":342,"kind":343,"hasErrors":5,"breakpoints":344,"hasAutosaves":5},"e47acff652be4ef9aa938399f0889d5f","https://pushsecurity.com/webinar/device-code-phishing?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=99563fe6bdf7471c9fef4f05f55ae435&builder.overrides.99563fe6bdf7471c9fef4f05f55ae435=99563fe6bdf7471c9fef4f05f55ae435&builder.options.locale=Default","page",{"xsmall":31,"small":32,"medium":33},"3rqa6jhk9a6",1780356509889]