PageSourceSearch

https://bubble.io/

html bubble.io collected 2026-09-24 07:38:06 UTC 52,499 bytes, 996 lines download raw bytes

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 &amp; 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 &amp; ship web &amp; mobile apps with AI and no-code" />
143<meta name="twitter:title" content="Build &amp; ship web &amp; 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&#39;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.