1<!doctype html> 2<html lang="en"> 3<head> 4<meta charset="utf-8"> 5 6<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 7 8<title>Bubble: Build web & mobile apps with the only no-code AI app builder</title>
9<script type="text/javascript"> 10 window.bubble_session_uid = '1790235485909x866268801169201700'; 11</script>
vendor: 1 bytes, line 11
11
12<script type="text/javascript"> 13 window.headers_source_maps = [["plugin_main_headers_1499780054879x111265002286743550",216,218],["plugin_main_headers_1539124824422x194279356396994560",219,221],["plugin_main_headers_1554560998630x833830244561190900",222,247],["plugin_main_headers_1568299250417x684448291308175400",248,249],["plugin_main_headers_1580238841425x582072028873097200",250,281],["plugin_main_headers_1613760507644x836536289953054700",282,297],["plugin_main_headers_1657473130919x213731060929265660",298,307],["plugin_main_headers_1672310857900x556381069924106240",308,318],["plugin_main_headers_1676280573614x891677842206097400",319,322],["plugin_main_headers_1701353509436x469375375202058240",323,394],["plugin_page_headers_AAC",395,397],["plugin_page_headers_AAW",398,400],["plugin_page_headers_AAC",401,403],["plugin_page_headers_AFP",404,406],["plugin_page_headers_AAC",407,409],["custom_page_header",411,659],["custom_app_header",660,842]] 14</script>
vendor: 1 bytes, line 14
14
15<script type="text/javascript"> 16function make_proxy(target, name) { 17 return new Proxy(target, { 18 get: function(target, prop) { 19 if (prop in target) { 20 return target[prop]; 21 } 22 throw new Error('The variable ' + name + ' is not fully initialized yet'); 23 } 24 }); 25} 26window.appquery = make_proxy({ 27 app_version: function() { return "live"; }, 28 last_change: function() { return "65505376440";}, 29}, 'appquery'); 30window.Lib = new Proxy(function() {}, { 31 get: function(target, prop) { 32 if (prop === 'is_skeleton') { 33 return true; 34 } 35 throw new Error('The variable ' + Lib + ' is not fully initialized yet'); 36 }, 37 apply: function() { 38 return make_proxy({ 39 current_user: function() { 40 return make_proxy({ id: "1790235485909x866268801169201700" }, 'Lib().current_user'); 41 } 42 }, 'Lib()'); 43 } 44}); 45</script>
vendor: 1 bytes, line 45
45
46<script type="text/javascript"> 47function load_error_function (event) { 48 return window.load_error_log.push({ msg: event.message, error_url: event.filename, line: event.lineno, col: event.colno }) 49} 50window.load_error_log = []; 51window.addEventListener('error', load_error_function); 52window.disableLoadErrorFunction = function () { 53 window.removeEventListener('error', load_error_function); 54} 55</script>
55 56<meta name="referrer" content="origin">
57<script type="text/javascript"> 58if (!window._bubble_page_load_data) { 59 window._bubble_page_load_data = {} 60} 61if (!window._bubble_page_load_data.js_execution_timings) { 62 window._bubble_page_load_data.js_execution_timings = {} 63} 64window._bubble_page_load_data.js_execution_timings['pre_early_js'] = Date.now(); 65</script>
65<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/early_js/05ae9fe83d6b755291132aab9d325d70918aafd336da1bd91a41a31c8b25734b/early.js"></script>
65<script type="text/javascript"> 66if (!window._bubble_page_load_data) { 67 window._bubble_page_load_data = {} 68} 69if (!window._bubble_page_load_data.js_execution_timings) { 70 window._bubble_page_load_data.js_execution_timings = {} 71} 72window._bubble_page_load_data.js_execution_timings['post_early_js'] = Date.now(); 73</script>
vendor: 1 bytes, line 73
73
74<script type="text/javascript">(function () { 75 function onWebFontFinish () { 76 window.google_web_fonts_active = true; 77if (window.google_web_fonts_active_cb) { 78 window.google_web_fonts_active_cb(); 79} 80 (function fontface_loaded_snippet (font) { 81 if (window.fontface_loaded == null) { 82 window.fontface_loaded = {} 83 } 84 if (font != null) { 85 window.fontface_loaded[font] = true 86 } else { 87 window.all_fontface_loaded = true 88 } 89 if (window.fontface_webfonts_loaded_cb) { 90 return window.fontface_webfonts_loaded_cb(font) 91 } 92})() 93 } 94 const WebFontConfig = {'google': { families: ["Manrope:300","Manrope:regular","Manrope:regular","Manrope:500","Manrope:500","Manrope:600","Manrope:700","Manrope:800","Manrope:800","Open Sans:300","Open Sans:regular","Open Sans:regular","Open Sans:500","Open Sans:600","Open Sans:700","Reddit Mono:regular","Roboto:500"] },'custom': { families: ["Founders Grotesk Medium","Founders Grotesk Regular","Founders Grotesk Semibold"], urls: ["https://meta-fonts.cdn.bubble.io/f1698595600992x145965494644527230/founders_grotesk_medium.css","https://meta-fonts.cdn.bubble.io/f1698595571960x199785793270322880/founders_grotesk_regular.css","https://meta-fonts.cdn.bubble.io/f1698595623974x573546875608821760/founders_grotesk_semibold.css"]}, 95 active: function() { 96 onWebFontFinish() 97 }, 98 inactive: function() { 99 console.log('Failed to load all the fonts'); 100 onWebFontFinish() 101 }, 102 fontinactive: function(family_name, fvd) { 103 console.log('fontinactive being called for ' + family_name + ', Google says the fonts didnt render'); 104 onWebFontFinish() 105 } 106 } 107 window.WebFont.load(WebFontConfig); 108})();</script>
vendor: 1 bytes, line 108
108
109<script> 110(function initialize_data() { 111const xhr = new XMLHttpRequest(); 112xhr.onreadystatechange = function() { 113 if (this.readyState === 4 && this.status === 200) { 114 const data = JSON.parse(this.responseText); 115 116 function init_data() { 117 data.forEach(function(d) { 118 Lib().db_instance().initialize_data(d.id, d.data, d.type, d.version); 119 }) 120 } 121 122 if (window.Lib && window.Lib.is_skeleton == null) { 123 init_data(); 124 } else { 125 window.Lib_post_load = init_data; 126 } 127 } 128}; 129xhr.open("GET", "https://bubble.io/api/1.1/init/data?location=" + encodeURIComponent(window.location.href), true); 130xhr.send(); 131})(); 132</script>
vendor: 1 bytes, line 132
132
133<script type="text/javascript">window.gm_key = "AIzaSyC8WJyCOmtl2wSZ841lranjoHprlnmVB_A";</script>
vendor: 1 bytes, line 133
133
134<script type="text/javascript">window.glrl_key_status = false;</script>
vendor: 1 bytes, line 134
134
135<script type="text/javascript">window.bubble_page_load_id = "1790235485936x739";</script>
vendor: 1 bytes, line 135
135
136<script type="text/javascript">window.bubble_plp_token = "Q483FWz9Wun+q72ndo3Cb5CZ4PLaDsWclyz56b4wFCE=";</script>
vendor: 1 bytes, line 136
136
137<script type="text/javascript">window.bubble_is_leanjs = false;</script>
vendor: 1 bytes, line 137
137
138<script type="text/javascript">window.bubble_shim_modules = false;</script>
138 139<link rel="icon" type="image/png" href="https://meta-q.cdn.bubble.io/cdn-cgi/image/w=128,h=,f=auto,dpr=1,fit=contain/f1530294839424x143528842134401200/Icon-no-clearspace.png" /> 140<meta name="fragment" content="!"> 141<meta name="description" content="Build with AI when you want speed, edit visually when you want precision â design, database, logic, and privacy rules. Go from idea to launched app fast."> 142<meta property="og:title" content="Build & ship web & mobile apps with AI and no-code" /> 143<meta name="twitter:title" content="Build & ship web & mobile apps with AI and no-code" /> 144<meta property="og:site_name" content="Bubble" /> 145<meta name="twitter:site_name" content="Bubble" /> 146<meta property="og:description" content="Build with AI when you want speed, edit visually when you want precision â design, database, logic, and privacy rules. Go from idea to launched app fast." /> 147<meta name="twitter:description" content="Build with AI when you want speed, edit visually when you want precision â design, database, logic, and privacy rules. Go from idea to launched app fast." /> 148<link rel="image_src" href="https://meta-q.cdn.bubble.io/cdn-cgi/image/w=,h=,f=auto,dpr=1,fit=contain/f1762463484754x595287411041153000/Bubbleio%20opengraph.png" /> 149<meta property="og:image" content="https://meta-q.cdn.bubble.io/cdn-cgi/image/w=,h=,f=auto,dpr=1,fit=contain/f1762463484754x595287411041153000/Bubbleio%20opengraph.png" /> 150<meta name="twitter:image:src" content="https://meta-q.cdn.bubble.io/cdn-cgi/image/w=,h=,f=auto,dpr=1,fit=contain/f1762463484754x595287411041153000/Bubbleio%20opengraph.png" /> 151<meta property="fb:app_id" content="340887986039814" /> 152<meta property="og:url" content="https://bubble.io/" /> 153<meta property="og:type" content="website" /> 154<meta name="twitter:card" content="summary_large_image" /> 155<link rel="apple-touch-icon" href="https://meta-q.cdn.bubble.io/cdn-cgi/image/w=192,h=,f=auto,dpr=1,fit=contain/f1534423790492x745180500205606300/icon_512x512%402x.png"> 156<meta name="viewport" content="width=device-width,initial-scale=1.0, user-scalable=no, minimal-ui">
157<script type="text/javascript">window._p = '{"id":"app_enterprise_mobile_web_2025","no_branding":true,"import_export_csv":true,"custom_domain":true}';</script>
vendor: 1 bytes, line 157
157
158<script type="text/javascript">window.bubble_page_name = "index";</script>
vendor: 1 bytes, line 158
158
159<script type="text/javascript">window.__bubble_module_mode = false;</script>
159 160<link type="text/css" href="/package/run_css/0c842430e78eb33b41b211436aa08e09e3993ea8c207a24e7c33a464e48c28a9/meta/live/index/xtrue/xfalse/run.css" rel="stylesheet">
161<script type="text/javascript"> 162if (!window._bubble_page_load_data) { 163 window._bubble_page_load_data = {} 164} 165if (!window._bubble_page_load_data.js_execution_timings) { 166 window._bubble_page_load_data.js_execution_timings = {} 167} 168window._bubble_page_load_data.js_execution_timings['pre_run_js'] = Date.now(); 169</script>
vendor: 1 bytes, line 169
169
170<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/pre_run_jquery_js/dee903a9e36db713e4c86d0cdd96d921e37be0c1293ed8dee29e2e4d7713b9ff/pre_run_jquery.js"></script>
vendor: 1 bytes, line 170
170
171<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/run_js/e2cf8e573ac3eade2496d34e1a82c26939f93b12dea72c5c3d258a7a56087065/xfalse/x30/run.js"></script>
vendor: 1 bytes, line 171
171
172<script type="text/javascript"> 173if (!window._bubble_page_load_data) { 174 window._bubble_page_load_data = {} 175} 176if (!window._bubble_page_load_data.js_execution_timings) { 177 window._bubble_page_load_data.js_execution_timings = {} 178} 179window._bubble_page_load_data.js_execution_timings['post_run_js'] = Date.now(); 180</script>
vendor: 1 bytes, line 180
180
181<script type="text/javascript"> 182if (!window._bubble_page_load_data) { 183 window._bubble_page_load_data = {} 184} 185if (!window._bubble_page_load_data.js_execution_timings) { 186 window._bubble_page_load_data.js_execution_timings = {} 187} 188window._bubble_page_load_data.js_execution_timings['pre_static_js'] = Date.now(); 189</script>
189<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/static_js/a698fc6288720256e6bf61607b777dff1d8fbad259c500fd65a93e3e78a04c97/meta/live/index/xnull/xfalse/xfalse/xfalse/static.js"></script>
189<script type="text/javascript"> 190if (!window._bubble_page_load_data) { 191 window._bubble_page_load_data = {} 192} 193if (!window._bubble_page_load_data.js_execution_timings) { 194 window._bubble_page_load_data.js_execution_timings = {} 195} 196window._bubble_page_load_data.js_execution_timings['post_static_js'] = Date.now(); 197</script>
vendor: 1 bytes, line 197
197
198<script type="text/javascript"> 199if (!window._bubble_page_load_data) { 200 window._bubble_page_load_data = {} 201} 202if (!window._bubble_page_load_data.js_execution_timings) { 203 window._bubble_page_load_data.js_execution_timings = {} 204} 205window._bubble_page_load_data.js_execution_timings['pre_dynamic_js'] = Date.now(); 206</script>
206<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/dynamic_js/cfaecfb6248ab4069a202b8cb25440a77f3c23305c8604a1359079b25d7dee17/meta/live/index/xnull/xfalse/xfalse/en_us/xfalse/xfalse/dynamic.js"></script>
206<script type="text/javascript"> 207if (!window._bubble_page_load_data) { 208 window._bubble_page_load_data = {} 209} 210if (!window._bubble_page_load_data.js_execution_timings) { 211 window._bubble_page_load_data.js_execution_timings = {} 212} 213window._bubble_page_load_data.js_execution_timings['post_dynamic_js'] = Date.now(); 214</script>
vendor: 1 bytes, line 214
214
215<script type="text/javascript">window._bubble_page_load_data.js_execution_timings.plugin_js_start_execution = Date.now();</script>
215 216<!-- 1499780054879x111265002286743550 -->
217<script id="apexcharts" src="https://cdnjs.cloudflare.com/ajax/libs/apexcharts/3.37.3/apexcharts.min.js"></script>
217 218<!-- powered by BlockCat --> 219<!-- 1539124824422x194279356396994560 -->
220<script src="//meta-q.cdn.bubble.io/f1539208662229x803640740225091600/download.js"></script>
220 221 222<!-- 1554560998630x833830244561190900 --> 223<!-- Animations Plugin Start--> 224<link type="text/css" href="https://meta-q.cdn.bubble.io/f1554561036925x195339635410308300/animations.css" rel="stylesheet"> 225<!-- The MIT License (MIT) 226 227Copyright (c) 2015-2018 Kristoffer Andreasen 228 229Permission is hereby granted, free of charge, to any person obtaining a copy 230of this software and associated documentation files (the "Software"), to deal 231in the Software without restriction, including without limitation the rights 232to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 233copies of the Software, and to permit persons to whom the Software is 234furnished to do so, subject to the following conditions: 235 236The above copyright notice and this permission notice shall be included in all 237copies or substantial portions of the Software. 238 239THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 240IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 241FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 242AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 243LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 244OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 245SOFTWARE.--> 246<!-- Animations Plugin end--> 247 248<!-- 1568299250417x684448291308175400 -->
249<script>function _0x577e(_0x5d8ec1,_0x1f41a4){_0x5d8ec1=_0x5d8ec1-0xf8;const _0x36bd14=_0x36bd();let _0x577e3e=_0x36bd14[_0x5d8ec1];return _0x577e3e;}const _0x263547=_0x577e;(function(_0x4cabda,_0x172330){const _0x5e39e8=_0x577e,_0x4521f0=_0x4cabda();while(!![]){try{const _0x3fb476=-parseInt(_0x5e39e8(0x130))/0x1+parseInt(_0x5e39e8(0x169))/0x2*(parseInt(_0x5e39e8(0xfe))/0x3)+-parseInt(_0x5e39e8(0x11c))/0x4+parseInt(_0x5e39e8(0xff))/0x5+parseInt(_0x5e39e8(0x132))/0x6+parseInt(_0x5e39e8(0x12b))/0x7+-parseInt(_0x5e39e8(0x133))/0x8*(parseInt(_0x5e39e8(0x138))/0x9);if(_0x3fb476===_0x172330)break;else _0x4521f0['push'](_0x4521f0['shift']());}catch(_0x5555f9){_0x4521f0['push'](_0x4521f0['shift']());}}}(_0x36bd,0x83ac7));function classify(_0x52e0b2){const _0x37505a=_0x577e;if(window[_0x37505a(0x13a)])return;window[_0x37505a(0x13a)]=!![];const _0x1801aa=document['createElement'](_0x37505a(0x126));_0x1801aa['id']='classifyScript',document['body'][_0x37505a(0x150)](_0x1801aa);const _0x3c41a5=function(){const _0x283286=_0x37505a,_0x411a81={'command':[],'js':[]};_0x411a81['raw']=[...new Set([...document[_0x283286(0x13d)](_0x283286(0x111)),...document[_0x283286(0x13d)]('[id*=\x22[\x22][id*=\x22]\x22]')])],_0x411a81[_0x283286(0x147)][_0x283286(0x155)](_0x57cc5b=>{const _0x3c71d1=_0x283286,_0x3b5113=_0x57cc5b['id'][_0x3c71d1(0x11f)](/\n/g,''),_0xbe1bb4=_0x3b5113[_0x3c71d1(0x11f)](/[\[\{].*[\}\]]/,'')[_0x3c71d1(0x122)]();_0xbe1bb4?_0x57cc5b['id']=_0xbe1bb4:_0x57cc5b[_0x3c71d1(0x115)]('id');let _0x1a899a=[..._0x3b5113[_0x3c71d1(0x154)](/[\[\]\{\}]/g)],_0x3827f9=0x1388;while(_0x1a899a[_0x3c71d1(0x143)]&&_0x3827f9){_0x3827f9--;const _0x36b8cd=_0x1a899a[0x0][0x0],_0x121313=_0x36b8cd==='{'?'}':']',_0x164c32=_0x36b8cd==='{'?'[':'{',_0x4a018e=_0x121313==='}'?']':'}';let _0x13c8a3={'{':0x0,'}':0x0,'[':0x0,']':0x0};const _0x412689=_0x1a899a[_0x3c71d1(0xf8)](_0x26c228=>{return _0x13c8a3[_0x26c228[0x0]]++,_0x26c228[0x0]===_0x121313&&_0x13c8a3[_0x121313]===_0x13c8a3[_0x36b8cd]&&_0x13c8a3[_0x164c32]===_0x13c8a3[_0x4a018e];});if(_0x412689!==-0x1)_0x411a81[_0x36b8cd==='{'?'command':'js'][_0x3c71d1(0x131)]({'node':_0x57cc5b,'set':_0x3b5113[_0x3c71d1(0xfa)](_0x1a899a[0x0][_0x3c71d1(0x149)]+0x1,_0x1a899a[_0x412689][_0x3c71d1(0x149)])});_0x1a899a[_0x3c71d1(0x113)](0x0,_0x412689+0x1);}}),_0x411a81[_0x283286(0x168)]['forEach']((_0x52f3fd,_0x34b6c3)=>{const _0x7db37c=_0x283286,_0x32ec4a=_0x52f3fd[_0x7db37c(0x110)];let _0x309c3=_0x52f3fd[_0x7db37c(0x123)][_0x7db37c(0x11f)](/^[^a-z]*/i,''),_0x1a9a45=0x2710,_0x4b5fa2={},_0x572ead=0x0;while(_0x1a9a45&&_0x309c3){if(!_0x1a9a45--)throw new Error('Safety\x20limit\x20was\x20reached.\x20Possible\x20infinite\x20loops?');const _0x47ba40=_0x309c3[_0x7db37c(0x10c)](/^([a-z]+)\s*:/i)?.[0x1]+_0x572ead++;if(!_0x47ba40)throw new Error('Couldn\x27t\x20extract\x20a\x20valid\x20command\x20name,\x20starting\x20at\x20index\x200\x20of:\x20«\x20'+_0x309c3+'\x20»');_0x309c3=_0x309c3['replace'](/^[^"]+/,'')['slice'](0x1);const _0x1ecbb0=_0x309c3[_0x7db37c(0x10c)](/^[^"]+/)?.[0x0];if(!_0x47ba40)throw new Error('Couldn\x27t\x20extract\x20a\x20valid\x20command\x20parameter,\x20starting\x20at\x20index\x200\x20of:\x20«\x20'+_0x309c3+'\x20»');_0x309c3=_0x309c3[_0x7db37c(0x11f)](_0x1ecbb0,'')['replace'](/^[^a-z]*/i,''),_0x4b5fa2[_0x47ba40]=_0x1ecbb0;}Object['entries'](_0x4b5fa2)[_0x7db37c(0x155)](_0xed51b8=>{const _0x441e4d=_0x7db37c;let [_0x4562e0,_0x107248]=_0xed51b8;_0x4562e0=_0x4562e0['replace'](/\d+$/,'');if(!Object[_0x441e4d(0x10b)](_0x2be555)[_0x441e4d(0xfb)](_0x4562e0)){testLog(_0x441e4d(0x142),'\x22'+_0x4562e0+_0x441e4d(0x161)),console['error']('\x22'+_0x4562e0+_0x441e4d(0x161));return;}_0x2be555[_0x4562e0](_0x32ec4a,_0x107248);});const _0x3cf961=_0x32ec4a['dataset']['tempClass'];if(_0x3cf961){let _0x27643d='';Object[_0x7db37c(0x164)](_0x4b5fa2)['forEach'](_0x5233d4=>{const _0x49c0b1=_0x7db37c,[_0x5f4432,_0x150ec4]=_0x5233d4;if(!/^(addClass)|(tempClass)/[_0x49c0b1(0x12f)](_0x5f4432))return;_0x27643d+=_0x150ec4[_0x49c0b1(0x122)]()+'\x20';}),_0x27643d=_0x27643d[_0x7db37c(0x104)]('\x20'),_0x3cf961[_0x7db37c(0x104)]('\x20')[_0x7db37c(0x155)](_0x567447=>{const _0x33f492=_0x7db37c;if(_0x27643d[_0x33f492(0xfb)](_0x567447))return;_0x32ec4a['classList'][_0x33f492(0x15e)](_0x567447);const _0x904be3=new RegExp(_0x567447,'g');_0x32ec4a['dataset'][_0x33f492(0x151)]=_0x32ec4a[_0x33f492(0x12c)][_0x33f492(0x151)][_0x33f492(0x11f)](_0x904be3,'');});}});
249const _0x4c6b17=new Error('',{'cause':[]});_0x411a81['js'][_0x283286(0x155)](_0x1fd48e=>{const _0x2b1992=_0x283286,_0x300540=_0x1fd48e[_0x2b1992(0x110)],_0x38a462=_0x1fd48e['set'],_0x153b02={'self':_0x300540,'bubble':_0x300540[_0x2b1992(0x11a)][_0x2b1992(0x12e)],'siblings':_0x4b2772(_0x300540['closest'](_0x2b1992(0x11d)),_0x2b1992(0x11d)),'parentGroup':_0x300540[_0x2b1992(0xfd)](_0x2b1992(0x129)),'cells':_0x4b2772(_0x300540[_0x2b1992(0xfd)](_0x2b1992(0x101)),_0x2b1992(0x15f))};return function _0x32e668(){const _0x15fa4c=_0x2b1992;let _0x294fc8;try{_0x294fc8=eval('let\x20properties\x20=\x20p\x20=\x20this;\x20'+_0x38a462);}catch(_0x56ee8c){const _0x51cd8a=_0x153b02[_0x15fa4c(0x127)]?.['element']?.['json']?.[_0x15fa4c(0x13c)]['%nm']||_0x153b02[_0x15fa4c(0x127)]?.[_0x15fa4c(0x13b)]?.['json']?.['cache']['%dn'],_0xcd60f6=_0x153b02[_0x15fa4c(0x127)]?.[_0x15fa4c(0x13b)]?.[_0x15fa4c(0x140)]?.[_0x15fa4c(0x13c)]['%x'],_0x5bb3cb=_0x51cd8a&&_0xcd60f6?'\x0a\x20\x20->\x20Custom\x20javascript\x20for\x20'+_0xcd60f6+'\x20element\x20\x22'+_0x51cd8a+_0x15fa4c(0x128)+_0x56ee8c[_0x15fa4c(0x10f)]:_0x15fa4c(0x146)+_0x38a462+_0x15fa4c(0x128)+_0x56ee8c[_0x15fa4c(0x10f)];_0x4c6b17[_0x15fa4c(0x10f)]+=_0x5bb3cb,_0x4c6b17['cause'][_0x15fa4c(0x131)](new Error(_0x5bb3cb,{'cause':_0x56ee8c}));return;}return _0x294fc8;}[_0x2b1992(0x100)](_0x153b02);});if(_0x4c6b17[_0x283286(0x109)][_0x283286(0x143)]){_0x4c6b17[_0x283286(0x10f)]=(_0x4c6b17['cause'][_0x283286(0x143)]>0x1?'<b>CLASSIFY:\x20Multiple\x20errors\x20occured\x20while\x20executing\x20custom\x20javascript\x20code:</b>':_0x283286(0x114))+_0x4c6b17['message']+_0x283286(0x102);throw _0x4c6b17;}},_0x2be555={'addClass':function(_0x4f8283,_0x133830){const _0x3fd479=_0x37505a;if(!_0x133830)return testLog(_0x3fd479(0x145),_0x3fd479(0x14c));const _0xc5cb4=_0x133830[_0x3fd479(0x104)]('\x20');_0x4f8283[_0x3fd479(0x136)][_0x3fd479(0x12d)](..._0xc5cb4);},'tempClass':function(_0xdac179,_0x4d6cee){const _0x1f9582=_0x37505a;if(!_0x4d6cee)return testLog(_0x1f9582(0x145),'Command\x20\x22tempClass\x22\x20canceled\x20an\x20empty\x20class\x20string\x20was\x20passed\x20in.');_0x2be555[_0x1f9582(0x156)](_0xdac179,_0x4d6cee),_0xdac179['dataset'][_0x1f9582(0x151)]=_0x4d6cee;},'removeClass':function(_0x14fa04,_0x570faa){const _0x4643a7=_0x37505a;if(!_0x570faa)return testLog(_0x4643a7(0x145),_0x4643a7(0xfc));const _0x5f2eb6=_0x570faa[_0x4643a7(0x104)]('\x20');_0x14fa04[_0x4643a7(0x136)][_0x4643a7(0x15e)](..._0x5f2eb6);},'style':function(_0x45873c,_0x127ace){const _0x2a194c=_0x37505a,_0x459413={...STYLE[_0x2a194c(0x166)](_0x45873c[_0x2a194c(0x14e)](_0x2a194c(0x160))),...STYLE[_0x2a194c(0x166)](_0x127ace)};_0x45873c[_0x2a194c(0x10e)]('style',STYLE[_0x2a194c(0x16b)](_0x459413));},'value':function(_0x1cc956,_0x11fbc1){const _0x4a5db5=_0x37505a;_0x1cc956[_0x4a5db5(0x11b)]=_0x11fbc1[_0x4a5db5(0x167)](),_0x1cc956['dispatchEvent'](new Event(_0x4a5db5(0x120)));},'disabled':function(_0x425a11,_0x5c28fa){const _0x2cf866=_0x37505a;if(/false/i[_0x2cf866(0x12f)](_0x5c28fa)||_0x5c28fa==='0')_0x5c28fa=![];_0x425a11[_0x2cf866(0x15b)]=!!_0x5c28fa;},'checked':function(_0x303368,_0x4abe50){const _0x57bf07=_0x37505a;if(/false/i[_0x57bf07(0x12f)](_0x4abe50)||_0x4abe50==='0')_0x4abe50=![];_0x303368[_0x57bf07(0x107)]=!!_0x4abe50;},'tabIndex':function(_0x2b093e,_0x313758){const _0x19df82=_0x37505a;_0x313758=parseInt(_0x313758[_0x19df82(0x167)]()[_0x19df82(0x11f)](/^[\D]*/,''));if(typeof _0x313758!==_0x19df82(0x103)||isNaN(_0x313758))return;_0x2b093e[_0x19df82(0x153)]=_0x313758;},'attribute':function(_0x44cb2e,_0x249670){const _0x1afb8f=_0x37505a;_0x249670=_0x249670['toString']();const _0x35c4b0=_0x249670['indexOf']('='),_0x2003be=_0x35c4b0>-0x1?_0x249670['slice'](0x0,_0x35c4b0)['trim']():_0x249670,_0x2e416d=_0x35c4b0>-0x1?_0x249670[_0x1afb8f(0xfa)](_0x35c4b0+0x1)||'':'';if(!/^[a-z\-]{2,}$/i[_0x1afb8f(0x12f)](_0x2003be))console[_0x1afb8f(0x142)](_0x1afb8f(0xf9)+_0x2003be+'\x22\x20does\x20not\x20seems\x20to\x20be\x20valid!');_0x44cb2e[_0x1afb8f(0x10e)](_0x2003be,_0x2e416d);},'class':function(_0x3cd132,_0x2c2d3f){const _0x20b510=_0x37505a;if(!_0x2c2d3f)return;_0x3cd132[_0x20b510(0x162)]=_0x3cd132[_0x20b510(0x162)][_0x20b510(0x11f)](/_+[^\ ]*/g,''),_0x3cd132['classList'][_0x20b510(0x12d)](..._0x2c2d3f);}},_0x4b2772=function(_0x412f6b,_0x4b9047){const _0x8e8669=_0x37505a;if(!_0x412f6b)return[];
249const _0x458e99=[..._0x412f6b[_0x8e8669(0x117)][_0x8e8669(0x14a)]];return _0x458e99[_0x8e8669(0x139)](_0x210bfd=>_0x210bfd[_0x8e8669(0x148)](_0x4b9047));},_0x3b6965={'attributes':!![],'childList':!![],'subtree':!![],'attributeFilter':['id']},_0x3ee33=new MutationObserver(_0x3c41a5);_0x3ee33[_0x37505a(0x116)](_0x52e0b2,_0x3b6965),((()=>{const _0x276e5e=_0x37505a,_0x3a2458=window['app']?.['settings']?.['client_safe'];if(!_0x3a2458)console[_0x276e5e(0x145)]('Classify:\x20Style\x20variables\x20(fonts\x20and\x20colors)\x20couldn\x27t\x20be\x20retrieved.\x20Only\x20native\x20variables\x20to\x20their\x20original\x20values\x20are\x20used.');_0x3a2458||={},_0x3a2458['font_tokens']||={'%d1':'Lato'},_0x3a2458[_0x276e5e(0x11e)]||={'%d1':{}},_0x3a2458[_0x276e5e(0x118)]||={'alert':{'%d1':_0x276e5e(0x14f)},'primary':{'%d1':_0x276e5e(0x125)},'success':{'%d1':_0x276e5e(0x14d)},'surface':{'%d1':_0x276e5e(0x141)},'background':{'%d1':_0x276e5e(0x165)},'destructive':{'%d1':_0x276e5e(0x105)},'primary_contrast':{'%d1':_0x276e5e(0x141)}},_0x3a2458[_0x276e5e(0x10d)]||={'%d1':{}};const _0x4c7733=[],_0xcc4775=(_0x942f09,_0x26a72d)=>{const _0x2d8dda=_0x276e5e;return _0x26a72d=_0x26a72d[_0x2d8dda(0x122)]()['toLocaleLowerCase']()[_0x2d8dda(0x11f)](/\s/g,'_'),_0x2d8dda(0x144)+_0x942f09+'-'+_0x26a72d;};_0x4c7733['push']({'name':_0xcc4775('f','app-font'),'value':'\x22'+_0x3a2458[_0x276e5e(0x108)]['%d1']+'\x22'}),Object[_0x276e5e(0x158)](_0x3a2458[_0x276e5e(0x11e)][_0x276e5e(0x159)])['forEach'](_0x58e7d4=>{const _0x5e8a71=_0x276e5e;if(_0x58e7d4[_0x5e8a71(0x15d)])return;const _0x46d4df={'name':_0xcc4775('f',_0x58e7d4[_0x5e8a71(0x13f)]),'value':'\x22'+_0x58e7d4['font_family']+'\x22'};_0x4c7733[_0x5e8a71(0x131)](_0x46d4df);}),Object[_0x276e5e(0x164)](_0x3a2458['color_tokens'])[_0x276e5e(0x155)](_0x183762=>{const _0x87fd19=_0x276e5e,[_0x5f2307,_0x59739e]=_0x183762;if(_0x5f2307==='%3')return;const _0x3dc931={'name':_0xcc4775('c',_0x5f2307),'value':_0x59739e['%d1']};_0x4c7733[_0x87fd19(0x131)](_0x3dc931);}),Object[_0x276e5e(0x158)](_0x3a2458[_0x276e5e(0x10d)][_0x276e5e(0x159)])['forEach'](_0x2ebb7c=>{const _0x104750=_0x276e5e;if(_0x2ebb7c[_0x104750(0x15d)])return;const _0x79fd54={'name':_0xcc4775('c',_0x2ebb7c[_0x104750(0x13f)]),'value':_0x2ebb7c['rgba']};_0x4c7733[_0x104750(0x131)](_0x79fd54);});let _0xade97e=_0x276e5e(0x112);_0x4c7733[_0x276e5e(0x155)](_0x269d5f=>_0xade97e+=_0x269d5f[_0x276e5e(0x16a)]+':\x20'+_0x269d5f[_0x276e5e(0x11b)]+';\x20'),_0xade97e+=_0x276e5e(0x16c),document[_0x276e5e(0x15c)][_0x276e5e(0x163)](_0x276e5e(0x152),_0xade97e);})()),_0x3c41a5();}let classifyCount=0x0,classifyWait=setInterval(function(){const _0xa42f89=_0x577e,_0x2c9995=document[_0xa42f89(0x106)](_0xa42f89(0x12a));_0x2c9995&&(testLog(_0xa42f89(0x157),_0xa42f89(0x124)+classifyCount),classify(_0x2c9995),clearInterval(classifyWait));classifyCount++;if(classifyCount==0x258){clearInterval(classifyWait),count=0x0,testLog(_0xa42f89(0x142),_0xa42f89(0x119));throw _0xa42f89(0x119);}},0x32);function _0x36bd(){const _0x25dc99=['findIndex','Classify:\x20the\x20attribute\x20\x22','slice','includes','Command\x20\x22removeClass\x22\x20canceled\x20an\x20empty\x20class\x20string\x20was\x20passed\x20in.','closest','3rxCwxD','3841665OmddmI','call','.bubble-element.group-item','<span\x20style=\x22display:none;\x22>','number','split','rgba(255,\x200,\x200,\x201)','querySelector','checked','font_tokens','cause','\x20\x20\x20','keys','match','color_tokens_user','setAttribute','message','node','[id*=\x22{\x22][id*=\x22}\x22]','<style>:root{','splice','<b>CLASSIFY:\x20An\x20error\x20occured\x20while\x20executing\x20custom\x20javascript\x20code:</b>','removeAttribute','observe','parentNode','color_tokens','Classify\x20plugin\x20launch\x20failed!\x20Could\x20not\x20find\x20the\x20target\x20node...','bubble_data','value','118612TqyGMg','.bubble-r-container','font_tokens_user','replace','change','toLowerCase','trim','set','Target\x20node\x20found\x20on\x20iteration\x20','rgba(2,\x205,\x20211,\x201)','script','bubble','\x22\x20threw\x20an\x20error:\x20','.bubble-element.Group','body','7226674PEWmOf','dataset','add','bubble_instance','test','905650GePiFC','push','1221138NSLLQC','526856TUzMSA','default','Object','classList','â¹ï¸\x20','99vzWfyN','filter','classifyLoaded','element','cache','querySelectorAll','constructor','%nm','json','rgba(255,\x20255,\x20255,\x201)','error','length','--c','warn','\x0a\x20\x20->\x20Custom\x20code\x20\x22','raw','matches','index','children','â ï¸\x20','Command\x20\x22addClass\x22\x20canceled\x20an\x20empty\x20class\x20string\x20was\x20passed\x20in.','rgba(23,\x20219,\x2078,\x201)','getAttribute','rgba(250,\x20181,\x2021,\x201)','appendChild','tempClass','beforeend','tabIndex','matchAll','forEach','addClass','info','values','%d1','reduce','disabled','head','%del','remove','.bubble-element.group-item[class*=\x22entry-\x22]','style','\x22\x20is\x20not\x20a\x20valid\x20Classify\x20command.','className','insertAdjacentHTML','entries','rgba(255,\x20255,\x20255,\x200)','parse','toString','command','389654PZkLwr','name','stringify','}</style>'];_0x36bd=function(){return _0x25dc99;};return _0x36bd();}const STYLE={'parse':_0x51cbd8=>typeof _0x51cbd8==='string'?_0x51cbd8[_0x263547(0x104)](';')['reduce']((_0x25423f,_0xa03637)=>{const _0xc1e478=_0x263547,[_0x23ace7,_0x57aa5b]=_0xa03637[_0xc1e478(0x104)](':');if(!_0x23ace7||!_0x57aa5b)return _0x25423f;return _0x25423f[_0x23ace7[_0xc1e478(0x121)]()[_0xc1e478(0x122)]()]=_0x57aa5b[_0xc1e478(0x122)](),_0x25423f;},{}):{},'stringify':_0x1d5ae3=>_0x1d5ae3?.[_0x263547(0x13e)]?.[_0x263547(0x16a)]===_0x263547(0x135)?Object[_0x263547(0x164)](_0x1d5ae3)[_0x263547(0x15a)]((_0x2cfe9e,_0x2a0c05)=>{const [_0x39c838,_0x4fa505]=_0x2a0c05;return _0x2cfe9e+=_0x39c838+':\x20'+_0x4fa505+';\x20';},''):''},testLog=((()=>{const _0x530b6e=_0x263547;if(app?.['app_version']!==_0x530b6e(0x12f))return()=>{};const _0xc09597=window['classifyLogs']=[],_0x3285ff={'default':_0x530b6e(0x10a),'info':_0x530b6e(0x137),'warn':_0x530b6e(0x14b),'error':'â\x20'},_0x357faa=(_0xf1fdd,_0x16b3a1)=>{const _0x126056=_0x530b6e,_0xdaa622=_0x3285ff[_0xf1fdd]||_0x3285ff[_0x126056(0x134)],_0x49fa2e=new Date()[_0x126056(0x167)]()[_0x126056(0x11f)](/ GMT.+/,'');_0xc09597[_0x126056(0x131)]('['+_0x49fa2e+']\x20'+_0xdaa622+':\x20'+_0x16b3a1);};return _0x357faa;})());</script>
249 250<!-- 1580238841425x582072028873097200 --> 251<style> 252 253 blockquote { 254 border-left: 4px solid #ccc; 255 margin-bottom: 5px; 256 margin-top: 5px; 257 padding-left: 16px; 258 } 259 260 ul, ol { 261 list-style-position: outside; 262 } 263 264 .ql-font .ql-picker-label:first-child::before { 265 font-family: inherit; 266 overflow: hide; 267 } 268 269 .ql-font .ql-picker-label { 270 overflow: hidden; 271 } 272 273 .regular-header-icon { 274 color: #444; 275 } 276 277 .tooltip-header-icon { 278 color: #ccc; 279 } 280 281</style> 282<!-- 1613760507644x836536289953054700 -->
283<script src="https://unpkg.com/@lottiefiles/[email protected]/dist/lottie-player.js"></script>
vendor: 1 bytes, line 283
283
284<script> 285 (function() { 286 "use strict"; 287 288 var observer = new MutationObserver(function() { 289 if (document.body) { 290 // It exists now 291 $('body').prepend(`<div id='canvas-loader'><div class="canvas-loader"></div></div>`) 292 observer.disconnect(); 293 } 294 }); 295 observer.observe(document.documentElement, {childList: true}); 296 })(); 297</script>
297 298<!-- 1657473130919x213731060929265660 -->
299<script src="https://cdnjs.cloudflare.com/ajax/libs/slim-select/2.4.5/slimselect.min.js" integrity="sha512-q9yTDhEJZb5wqzpEHjPZENfW50RQM3Kt2cN7Dt7HdZajz77nau1xym6R4IVdDA+YfQBiR6RLkNGal9+MfnCIcg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
299 300<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slim-select/2.4.5/slimselect.css" integrity="sha512-ijXMfMV6D0xH0UfHpPnqrwbw9cjd4AbjtWbdfVd204tXEtJtvL3TTNztvqqr9AbLcCiuNTvqHL5c9v2hOjdjpA==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 301 302 303<style> 304 .ss-main { 305 height: 100%; 306 } 307</style> 308<!-- 1672310857900x556381069924106240 --> 309<link rel="stylesheet" href="//meta.cdn.bubble.io/f1682067099681x288850957466430200/aos-2.3.4.css" /> 310<style> 311 body {overflow-x: hidden} 312</style>
313<script src="//meta.cdn.bubble.io/f1682066968082x657038063499113700/aos-2.3.4.js"></script>
vendor: 1 bytes, line 313
313
314<script> 315 window.addEventListener('DOMContentLoaded', () => { 316 AOS.init(); 317 }); 318</script>
318 319<!-- 1676280573614x891677842206097400 -->
320<script src="https://unpkg.com/@lottiefiles/[email protected]/dist/lottie-player.js"></script>
vendor: 1 bytes, line 320
320
321<script src="https://unpkg.com/@dotlottie/[email protected]/dist/dotlottie-player.js"></script>
vendor: 1 bytes, line 321
321
322<script src="https://unpkg.com/@lottiefiles/[email protected]/dist/lottie-interactivity.min.js"></script>
322 323<!-- 1701353509436x469375375202058240 --> 324<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/css/iziToast.min.css"> 325
326<script src="https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/js/iziToast.min.js" type="text/javascript"></script>
326 327 328<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,[email protected],100..700,0..1,-50..200" /> 329 330 331 332<style> 333 .success-strong { 334 font-family: 'Founders Grotesk'; 335 border-radius: 5px; 336 } 337 .warning-strong { 338 font-family: 'Founders Grotesk'; 339 border-radius: 5px; 340 } 341 .error-strong { 342 font-family: 'Founders Grotesk'; 343 border-radius: 5px; 344 } 345 .info-strong { 346 font-family: 'Founders Grotesk'; 347 border-radius: 5px; 348 } 349 .success-subtle { 350 font-family: 'Founders Grotesk'; 351 border: solid; 352 border-radius: 5px; 353 border-width: 1px; 354 border-color: #5DB170; 355 } 356 .warning-subtle { 357 font-family: 'Founders Grotesk'; 358 border: solid; 359 border-radius: 5px; 360 border-width: 1px; 361 border-color: #F6E11F; 362 } 363 .error-subtle { 364 font-family: 'Founders Grotesk'; 365 border: solid; 366 border-radius: 5px; 367 border-width: 1px; 368 border-color: #E87583; 369 } 370 .info-subtle { 371 font-family: 'Founders Grotesk'; 372 border: solid; 373 border-radius: 5px; 374 border-width: 1px; 375 border-color: #0887C4; 376 } 377 378 379.material-symbols-outlined { 380 font-variation-settings: 381 'FILL' 0, 382 'wght' 400, 383 'GRAD' 0, 384 'opsz' 24 385} 386 387 388/* Gets rid of the inner shadow */ 389.iziToast:after { 390 box-shadow: none !important; 391 } 392</style> 393 394 395<!-- AAC -->
396<script> if (!window.moment) { document.write('
396<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js" async> <\/script>'); }</script>
396 397 398<!-- AAW --> 399<!--
399<script src="//meta-q.cdn.bubble.io/f1720626465286x914878848304398300/inview222.js"></script>
399--> 400 401<!-- AAC -->
402<script src="//meta-q.cdn.bubble.io/f1611609403390x115653819846792690/js.cookie.min.js"></script>
402 403 404<!-- AFP --> 405<link rel="stylesheet" href="//meta.cdn.bubble.io/f1680271457857x336483009628357300/owl.carousel.css"><link rel="stylesheet" href="//meta.cdn.bubble.io/f1680271495251x342890714585694800/owl.theme.default.css"><style> .owl-stage-outer { overflow: hidden; } .owl-stage-outer, .owl-stage{ height : inherit; } .owl-carousel{ overflow: hidden !important; }</style>
405<script src="//meta.cdn.bubble.io/f1680271377304x782822413126425000/owl.carousel.min.js"></script>
405 406 407<!-- AAC -->
408<script src="//meta-q.cdn.bubble.io/f1698677582960x142994180260085580/gsap.min.js"></script>
408 409
410<script type="text/javascript">window._bubble_page_load_data.js_execution_timings.plugin_js_end_execution = Date.now();</script>
410 411<!-- custom page header --> 412<link rel="canonical" href="https://bubble.io" hreflang="en-us" /> 413 414<!-- Amplitude Web Experiment Plus Segment Integration -->
415<script 416 type="text/javascript" 417 src="https://cdn.amplitude.com/script/4ddc8ad920d365796f0c90fd98aaa1ab.experiment.js?integration=segment"> 418</script>
418 419 420 421<!-- HOTJAR -->
422<script>
vendor: 125 bytes, lines 422-425
422 423 (function(h,o,t,j,a,r){ 424 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 425 h._hjSettings={hjid:
4253439193
vendor: 258 bytes, lines 425-430
425,hjsv:6}; 426 a=o.getElementsByTagName('head')[0]; 427 r=o.createElement('script');r.async=1; 428 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 429 a.appendChild(r); 430 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
431</script>
431 432<!-- HOTJAR --> 433 434<!-- Styling specifically for the old homepage and should be deleted once the Control UI is deleted --> 435<style> 436#img_reorder { 437 /* Move #img_reorder to the first position in the scale meets simplicity group */ 438 order: -1 !important; 439} 440</style> 441 442 443<!-- Styling specifically for the new homepage UI --> 444<style> 445 446/* HERO, STATS, LOGOS */ 447 448#group-hero { 449 overflow: hidden !important; 450} 451 452#toastsuccess { 453 position: fixed !important; 454 z-index: 2147483647 !important; 455} 456 457#logo_scroll_light { 458 /* Fades out the left- and right-most 5% of the logo carousel*/ 459 mask-image: linear-gradient(to right, transparent 5%, white 10%, white 90%, transparent 95%); 460 mask-repeat: no-repeat; 461 mask-size: 100% 100%; 462 463/* WebKit-specific support for the fading out of the logo carousel */ 464-webkit-mask-image: linear-gradient(to right, transparent 5%, white 10%, white 90%, transparent 95%); 465-webkit-mask-repeat: no-repeat; 466-webkit-mask-size: 100% 100%; 467} 468 469#logo_scroll_dark { 470 /* Fades out the left- and right-most 5% of the logo carousel*/ 471 mask-image: linear-gradient(to right, transparent 5%, black 10%, black 90%, transparent 95%); 472 mask-repeat: no-repeat; 473 mask-size: 100% 100%; 474 475/* WebKit-specific support for the fading out of the logo carousel */ 476-webkit-mask-image: linear-gradient(to right, transparent 5%, black 10%, black 90%, transparent 95%); 477-webkit-mask-repeat: no-repeat; 478-webkit-mask-size: 100% 100%; 479} 480 481#border-radius { 482 border-radius: 16px !important; 483} 484 485@media only screen and (max-width: 992px) { 486 #border-radius { 487 border-radius: 12px !important; 488 } 489} 490 491@media only screen and (max-width: 500px) { 492 #border-radius { 493 border-radius: 8px !important; 494 } 495} 496 497 498/* BUILT WITH BUBBLE */ 499 500#group-built-with-bubble { 501 overflow: hidden !important; 502} 503 504#sticky-section { 505 position: sticky !important; 506 position: -webkit-sticky; 507 top: 172px; 508} 509 510 511/* MOBILE AND AI */ 512 513#mobile_gradient_border { 514 border: 1px solid transparent !important; 515 background-image: 516 linear-gradient(0deg, #DBE8FC, #DBE8FC), 517 linear-gradient(270deg, #0C29AB, #1E6DF6) !important; 518 background-origin: border-box !important; 519 background-clip: padding-box, border-box !important; 520} 521 522#mobile_gradient_text { 523 background-image: linear-gradient(270deg, #0C29AB, #1E6DF6); 524 background-clip: text; 525 -webkit-background-clip: text; 526 color: transparent; 527 -webkit-text-fill-color: transparent; 528} 529 530#ai_gradient_border { 531 border: 1px solid transparent !important; 532 background-image: 533 linear-gradient(0deg, #080D3B, #080D3B), 534 linear-gradient(270deg, hsla(287, 94%, 54%, 1), hsla(218, 92%, 64%, 1)) !important; 535 background-origin: border-box !important; 536 background-clip: padding-box, border-box !important; 537} 538 539#ai_gradient_text { 540 background-image: linear-gradient(270deg, hsla(287, 94%, 54%, 1), hsla(218, 92%, 64%, 1)); 541 background-clip: text; 542 -webkit-background-clip: text; 543 color: transparent; 544 -webkit-text-fill-color: transparent; 545} 546 547.button-icon-slide .icon-item { 548 transition: transform 0.2s ease; 549} 550 551.button-icon-slide:hover .icon-item { 552 transform: translateX(4px); 553} 554 555 556/* HOW BUBBLE WORKS */ 557 558/* This ID lives on Group Blobs because putting it on the parent group would prevent the sticky-section from working properly*/ 559#group-how-bubble-works { 560 overflow: hidden !important; 561} 562 563#img_reorder_first { 564 order: -1 !important; 565} 566 567/* AI */ 568 569#group-ai { 570 overflow: hidden !important; 571} 572 573 574/* TESTIMONIALS, WHY BUBBLE*/ 575 576#group-testimonials { 577 overflow: hidden !important; 578} 579 580/* Used to smoothly scale down/up the testimonial cards */ 581#scale-75 { 582 transform: scale(0.75); 583 transition: transform 0.5s ease-in-out; 584} 585 586#scale-100 { 587 transform: scale(1); 588 transition: transform 0.5s ease-in-out; 589} 590 591 592/* ENTERPRISE */ 593 594#group-enterprise { 595 overflow: hidden !important; 596} 597 598#enterprise-image { 599 order: -1 !important; 600} 601 602 603/* CTA, FOOTER */ 604 605#group-footer { 606 overflow: hidden !important; 607} 608 609 /* Moves the blobs in the bottom CTA/footer around */ 610#circle-footer-1 { 611 position: relative; 612 -webkit-animation: circle-footer-1 10s infinite; 613 animation: circle-footer-1 10s infinite; 614} 615@-webkit-keyframes circle-footer-1 { 616 0% {left: 0%; top: 0%;} 617 35% {left: -8%; top: 8%;} 618 70% {left: 0%; top: 0%;} 619 100% {left: 0%; top: 0%;} 620} 621 622#circle-footer-2 { 623 position: relative; 624 -webkit-animation: circle-footer-2 20s infinite; 625 animation: circle-footer-2 20s infinite; 626} 627@-webkit-keyframes circle-footer-2 { 628 0% {left: 0%; top: 0%;} 629 35% {left: 6%; top: -12%;} 630 70% {left: 0%; top: 0%;} 631 100% {left: 0%; top: 0%;} 632} 633 634#social_wall_rg { 635 /* Fades out the left- and right-most 5% of the social carousel*/ 636 mask-image: linear-gradient(to right, transparent 5%, white 10%, white 90%, transparent 95%); 637 mask-repeat: no-repeat; 638 mask-size: 100% 100%; 639
640/* WebKit-specific support for the fading out of the logo carousel */ 641-webkit-mask-image: linear-gradient(to right, transparent 5%, white 10%, white 90%, transparent 95%); 642-webkit-mask-repeat: no-repeat; 643-webkit-mask-size: 100% 100%; 644} 645 646#social_wall_rg_mobile { 647 scrollbar-width: none; /* Firefox */ 648} 649 650#social_wall_rg_mobile::-webkit-scrollbar { 651 display: none; 652} 653 654#social_wall_rg_inner { 655 overflow-x: hidden; 656} 657 658 659</style> 660<!-- custom app meta header --> 661<meta name="google-site-verification" content="88Ar13XH_rSvj7CJtTCL1jWpReoEHqiUFARcvqmUlPs" /> 662<meta name="segment-site-verification" content="7Q1wR8WIrEuEwzYnez5b3Ugp2CWuengC">
663<script>window.prerenderReady = false;</script>
vendor: 1 bytes, line 663
663
664<script type="application/ld+json"> 665{ 666 "@context": "http://schema.org", 667 "@type": "Website", 668 "name": "The most powerful no-code platform | Bubble", 669 "description": "Bubble introduces a new way to build a web application. Itâs a no-code tool that lets you build SaaS platforms, marketplaces and CRMs without code. Bubble hosts all applications on its cloud platform.", 670 "url": "https://bubble.io", 671 "image": "https://s3.amazonaws.com/appforest_uf/f1530294839424x143528842134401200/Icon-no-clearspace.png", 672 "genre": "http://vocab.getty.edu/aat/300265431", 673 "keywords": "No-Code App, Web app, Visual programming, Database, Productivity" 674}</script>
674 675<style>body {background: white; }</style>
676<script type="application/ld+json">{ 677 "@context":"http://schema.org", 678 "@type":"Organization", 679 "name":"Bubble", 680 "logo":"https://s3.amazonaws.com/appforest_uf/f1530294839424x143528842134401200/Icon-no-clearspace.png", 681 "url":"https://bubble.io", 682 "sameAs":[ 683 "https://www.facebook.com/bubblebuilder", 684 "https://twitter.com/bubble", 685 "https://www.linkedin.com/company/bubble", 686 "https://www.instagram.com/bubble__hq", 687 "https://en.wikipedia.org/wiki/Bubble_(programming_language)" 688 ], 689 "brand":{ 690 "@type":"Organization", 691 "name":"Bubble", 692 "description":"Bubble introduces a new way to build a web application. Itâs a no-code tool that lets you build SaaS platforms, marketplaces and CRMs without code. Bubble hosts all applications on its cloud platform.", 693 "logo":"https://s3.amazonaws.com/appforest_uf/f1530294839424x143528842134401200/Icon-no-clearspace.png", 694 "sameAs":[ 695 "https://www.facebook.com/bubblebuilder", 696 "https://twitter.com/bubble", 697 "https://www.linkedin.com/company/bubble", 698 "https://www.instagram.com/bubble__hq", 699 "https://en.wikipedia.org/wiki/Bubble_(programming_language)" 700 ] 701 } 702}</script>
702 703 704<!-- maze snippet | Nate, 8/20/26 -->
705<script> 706(function (m, a, z, e) { 707 var s, t, u, v; 708 try { 709 t = m.sessionStorage.getItem('maze-us'); 710 } catch (err) {} 711 712 if (!t) { 713 t = new Date().getTime(); 714 try { 715 m.sessionStorage.setItem('maze-us', t); 716 } catch (err) {} 717 } 718 719 u = document.currentScript || (function () { 720 var w = document.getElementsByTagName('script'); 721 return w[w.length - 1]; 722 })(); 723 v = u && u.nonce; 724 725 s = a.createElement('script'); 726 s.src = z + '?apiKey=' + e; 727 s.async = true; 728 if (v) s.setAttribute('nonce', v); 729 a.getElementsByTagName('head')[0].appendChild(s); 730 m.mazeUniversalSnippetApiKey = e; 731})(window, document, 'https://snippet.maze.co/maze-universal-loader.js', '26b6db98-0ef4-48cb-9249-e80273df6bf8'); 732</script>
732 733 734<!-- TVScientific by PJ 5/13/26, modified 8/4/26 -->
735<script src="https://assets.tvscipixel.com/tvscientific-pix-o-89a9189f-2626-4577-8998-e3953ece9d0d.js"> </script>
735 736 737 738<style> 739 740::selection { 741 background: #90DFFF; 742} 743 744::-moz-selection { 745 background: #90DFFF; 746} 747 748/* This will target all link elements in meta*/ 749a { 750 color: #0c29ab; 751 text-decoration-color: #0c29ab; 752} 753 754/* This will target all link elements in meta that have already been opened by the user*/ 755a:visited { 756 color: #79059A; 757 text-decoration-color: #79059A; 758} 759 760 761/*This will target the hover state of all link elements*/ 762a:hover { 763 color: #091e7c; 764 text-decoration: underline; 765 text-decoration-color: #091e7c; 766} 767 768/* Increases right padding on dropdowns for the carets */ 769select.bubble-element.Dropdown.dropdown-chevron{ 770background-position: right 8px top 50%, 0 0; 771} 772 773/* Improved styling for remove icon on Multiselect values */ 774.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { 775 font-weight: normal !important; 776 margin-right: 4px !important; 777} 778 779 780</style> 781 782<!-- Added 5/23 by John - META-3994 --> 783
784<script>(function(){window.addEventListener("load",function(){var t=document.createElement("script");t.type="text/javascript",t.async=!0,t.src="https://app.birdie.so/widget/embed/sqs7i0ne",document.body.appendChild(t)});})(); 785</script>
785 786 787<!-- Added by Andrew on 4/30/24 to introduce a Meta-controlled Built on Bubble banner. This forces the banner to appear in the bottom left corner of the screen, and allows it to behave as a link --> 788<a href="https://bubble.io/blog/dogfooding-startup-tech?utm_source=app_mention&utm_content=meta" target="_blank" id="customBubbleBanner"> 789 <div class="banner-content"> 790 <img src="https://meta-q.cdn.bubble.io/f1756386552835x162920220128838430/Logo%20%281%29.svg" alt="Bubble"> 791 <span>Built on Bubble</span> 792 </div> 793</a> 794 795<style> 796/* The Built on Bubble banner is designed to be hidden by default and optionally turned on via the header. */ 797#customBubbleBanner { 798 display: none; 799} 800 801</style> 802 803<!-- Ahrefs snippet added on Jan 24th -->
804<script src="https://analytics.ahrefs.com/analytics.js" data-key="Eh64xj1q6Oj3Y8AAb4cshg" async></script>
804 805 806 807<!-- TikTok Pixel Code Start by PJ 5/13/26 -->
808<script> 809!function (w, d, t) { 810 w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie","holdConsent","revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for( 811var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};n=document.createElement("script") 812;n.type="text/javascript",n.async=!0,n.src=r+"?sdkid="+e+"&lib="+t;e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(n,e)}; 813 814 815 ttq.load('D6UMEIRC77U8BUJPT1G0'); 816 ttq.page(); 817}(window, document, 'ttq'); 818</script>
818 819<!-- TikTok Pixel Code End --> 820 821 822<!-- Vibe.co pixel by PJ 5/13/26 -->
823<script> !function(v,i,b,e,c,o){if(!v[c]){var s=v[c]=function(){s.process?s.process.apply(s,arguments):s.queue.push(arguments)};s.queue=[],s.b=1*new Date;var t=i.createElement(b);t.async=!0,t.src=e;var n=i.getElementsByTagName(b)[0];n.parentNode.insertBefore(t,n)}}(window,document,"script","https://s.vibe.co/vbpx.js","vbpx"); vbpx('init','1JI6zM'); vbpx('event', 'page_view'); </script>
823 824 825 826<!-- Cookie-script snippet that shows the cookie consent banner on all pages except /invoice, /payout_receipt, /figma-to-bubble-extension, and /home -->
827<script type="text/javascript"> 828 // Check if the current URL doesn't include excluded paths 829 if ( 830 !window.location.pathname.includes('/invoice') && 831 !window.location.pathname.includes('/payout_receipt') && 832 !window.location.pathname.includes('/figma-to-bubble-extension') && 833 !window.location.pathname.includes('/home') 834 ) { 835 // Create and append the cookie consent script only if not on excluded pages 836 const scriptElement = document.createElement('script'); 837 scriptElement.type = 'text/javascript'; 838 scriptElement.charset = 'UTF-8'; 839 scriptElement.src = '//cdn.cookie-script.com/s/a012d639d84e8e4c3639a55e0fbad470.js'; 840 document.head.appendChild(scriptElement); 841 } 842</script>
842 843</head> 844<body>
844<script type="text/javascript"> 845window.addEventListener('DOMContentLoaded', function () { 846 if (window.appquery == null) { 847 (function() { 848 const html = ` 849 <div class="error-card"> 850 <div class="error-section"> 851 <div class="error-title">Your browser was unable to load some necessary resources</div> 852 <div class="error-message">Contact your IT network administrator to allow access to: 853 ⢠d3dqmih97rcqmh.cloudfront.net 854 ⢠meta-q.cdn.bubble.io/ 855 ⢠d1muf25xaso8hp.cloudfront.net</div> 856 </div> 857 </div> 858 ` 859 860 const css = document.createElement('style') 861 css.type = 'text/css' 862 css.appendChild( 863 document.createTextNode(` 864 .error-overlay { 865 width: 100%; 866 height: 100%; 867 background: rgba(0,0,0,0.30); 868 overflow: hidden; 869 display: flex; 870 justify-content: center; 871 align-items: flex-start; 872 position: fixed; 873 inset: 0; 874 z-index: 999999; 875 } 876 877 .error-card { 878 width: 500px; 879 margin: 40px; 880 background: white; 881 box-shadow: 0px 1px 2px rgba(0,0,0,0.10); 882 border-radius: 8px; 883 display: flex; 884 flex-direction: column; 885 } 886 887 .error-section { 888 padding: 40px; 889 display: flex; 890 flex-direction: column; 891 gap: 12px; 892 } 893 894 .error-title { 895 color: #1A1A1A; 896 font-size: 18px; 897 font-family: Arial, sans-serif; 898 font-weight: 600; 899 line-height: 28px; 900 } 901 902 .error-message { 903 color: #525252; 904 font-size: 14px; 905 font-family: Arial, sans-serif; 906 font-weight: 400; 907 line-height: 20px; 908 white-space: pre-wrap; 909 } 910 `) 911 ) 912 document.head.appendChild(css) 913 914 const container = document.createElement('div') 915 container.className = 'error-overlay' 916 container.innerHTML = html 917 document.body.appendChild(container) 918 })() 919 httpRequest = new XMLHttpRequest(); 920httpRequest.open('POST', '/user/m', true); 921httpRequest.setRequestHeader('Content-Type', 'application/json'); 922httpRequest.send(JSON.stringify({measures: {page_load_error: 1, url: document.location.href, errors: window.load_error_log}})); 923 }; 924}); 925</script>
925<script type="text/javascript">window.addEventListener('DOMContentLoaded', function () {if (window.appquery && window.app == null) {(function() { 926 const html = ` 927 <div class="error-card"> 928 <div class="error-section"> 929 <div class="error-title">Your browser was unable to load the application</div> 930 <div class="error-message">We've been notified of the issue. Please try again in a few moments and make sure not to use ad-blockers.</div> 931 </div> 932 </div> 933 ` 934 935 const css = document.createElement('style') 936 css.type = 'text/css' 937 css.appendChild( 938 document.createTextNode(` 939 .error-overlay { 940 width: 100%; 941 height: 100%; 942 background: rgba(0,0,0,0.30); 943 overflow: hidden; 944 display: flex; 945 justify-content: center; 946 align-items: flex-start; 947 position: fixed; 948 inset: 0; 949 z-index: 999999; 950 } 951 952 .error-card { 953 width: 500px; 954 margin: 40px; 955 background: white; 956 box-shadow: 0px 1px 2px rgba(0,0,0,0.10); 957 border-radius: 8px; 958 display: flex; 959 flex-direction: column; 960 } 961 962 .error-section { 963 padding: 40px; 964 display: flex; 965 flex-direction: column; 966 gap: 12px; 967 } 968 969 .error-title { 970 color: #1A1A1A; 971 font-size: 18px; 972 font-family: Arial, sans-serif; 973 font-weight: 600; 974 line-height: 28px; 975 } 976 977 .error-message { 978 color: #525252; 979 font-size: 14px; 980 font-family: Arial, sans-serif; 981 font-weight: 400; 982 line-height: 20px; 983 white-space: pre-wrap; 984 } 985 `) 986 ) 987 document.head.appendChild(css) 988 989 const container = document.createElement('div') 990 container.className = 'error-overlay' 991 container.innerHTML = html 992 document.body.appendChild(container) 993 })()}});</script>
993 994<img style="display: none;" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />
994<script type="text/javascript">window.pv_data = [{"key":"full_url_text","value":"https://bubble.io/"},{"key":"referrer_text","value":"direct"},{"key":"referring_domain_text","value":"direct"},{"key":"pagename_text","value":"index"},{"key":"user_agent_text","value":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PageSourceSearchBot/1.0; +https://pagesourcesearch.com/bot) Chrome/128.0.0.0 Safari/537.36"}];</script>
994 995</body> 996</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.