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>Wavy Element Curves</title>
9<script type="text/javascript"> 10 window.bubble_session_uid = '1791015914119x708002614138110600'; 11</script>
vendor: 1 bytes, line 11
11
12<script type="text/javascript"> 13 window.headers_source_maps = [["plugin_main_headers_1618916043803x877032991371296800",217,434]] 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 "23481641612";}, 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: "1791015914119x708002614138110600" }, '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: ["DM Sans:500","Inter:600","Inter:800","Lato:400","Poppins:500"] }, 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://wavy-curves.bubbleapps.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 = "";</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 = "1791015914145x1419";</script>
vendor: 1 bytes, line 135
135
136<script type="text/javascript">window.bubble_plp_token = "1791015914429.5OuT8Ws72auwFGmI6hkSJDq/CvAPwF5Vj22sClup8Eo=";</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://95ad2d3b428441d5478816b64e3582ee.cdn.bubble.io/f1530294839424x143528842134401200/Icon-no-clearspace.png" /> 140<meta name="fragment" content="!"> 141<meta name="description" content="Bubble introduces a new way to build a web application. Itâs a point-and-click programming tool. Bubble hosts all applications on its cloud platform."> 142<meta name="description" content="Bubble introduces a new way to build a web application. Itâs a point-and-click programming tool. Bubble hosts all applications on its cloud platform."> 143<meta name="twitter:card" content="summary_large_image" /> 144<meta property="og:title" content="Check out my Bubble app" /> 145<meta name="twitter:title" content="Check out my Bubble app" /> 146<meta property="og:site_name" content="Bubble" /> 147<meta name="twitter:site_name" content="Bubble" /> 148<meta property="og:description" content="Bubble is the only platform that lets you switch between AI prompting and visual editing to go beyond prototypes and launch real apps â no code required. " /> 149<meta name="twitter:description" content="Bubble is the only platform that lets you switch between AI prompting and visual editing to go beyond prototypes and launch real apps â no code required. " /> 150<link rel="image_src" href="https://95ad2d3b428441d5478816b64e3582ee.cdn.bubble.io/f1762463484754x595287411041153000/Bubbleio%20opengraph.png" /> 151<meta property="og:image" content="https://95ad2d3b428441d5478816b64e3582ee.cdn.bubble.io/f1762463484754x595287411041153000/Bubbleio%20opengraph.png" /> 152<meta name="twitter:image:src" content="https://95ad2d3b428441d5478816b64e3582ee.cdn.bubble.io/f1762463484754x595287411041153000/Bubbleio%20opengraph.png" /> 153<meta property="og:url" content="https://wavy-curves.bubbleapps.io/" /> 154<meta property="og:type" content="website" /> 155<meta property="fb:app_id" content="340887986039814" /> 156<meta name="twitter:card" content="summary_large_image" /> 157<meta name="viewport" content="width=device-width,initial-scale=1.0">
158<script type="text/javascript">window._p = '{"id":"app_plugin_demo","no_branding":false,"import_export_csv":false,"custom_domain":false}';</script>
vendor: 1 bytes, line 158
158
159<script type="text/javascript">window.bubble_page_name = "index";</script>
vendor: 1 bytes, line 159
159
160<script type="text/javascript">window.__bubble_module_mode = false;</script>
160 161<link type="text/css" href="/package/run_css/43e086a2ca08ed39d4f07666038f7c4e4a7e7eb9df1d468616b33b88a3b10e1a/wavy-curves/live/index/xfalse/xfalse/run.css" rel="stylesheet">
162<script type="text/javascript"> 163if (!window._bubble_page_load_data) { 164 window._bubble_page_load_data = {} 165} 166if (!window._bubble_page_load_data.js_execution_timings) { 167 window._bubble_page_load_data.js_execution_timings = {} 168} 169window._bubble_page_load_data.js_execution_timings['pre_run_js'] = Date.now(); 170</script>
vendor: 1 bytes, line 170
170
171<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 171
171
172<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/run_js/7071f7b382ccc6d041103d870a4570d077555f03000bb5d6d4422cbe7bed9355/xfalse/x30/run.js"></script>
vendor: 1 bytes, line 172
172
173<script type="text/javascript"> 174if (!window._bubble_page_load_data) { 175 window._bubble_page_load_data = {} 176} 177if (!window._bubble_page_load_data.js_execution_timings) { 178 window._bubble_page_load_data.js_execution_timings = {} 179} 180window._bubble_page_load_data.js_execution_timings['post_run_js'] = Date.now(); 181</script>
vendor: 1 bytes, line 181
181
182<script type="text/javascript"> 183if (!window._bubble_page_load_data) { 184 window._bubble_page_load_data = {} 185} 186if (!window._bubble_page_load_data.js_execution_timings) { 187 window._bubble_page_load_data.js_execution_timings = {} 188} 189window._bubble_page_load_data.js_execution_timings['pre_static_js'] = Date.now(); 190</script>
190<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/static_js/481a23e104f05df2dae81b9adb72fba82af8c3d08ca5135dc505b906ed8eba2d/wavy-curves/live/index/xnull/xfalse/xfalse/xfalse/static.js"></script>
190<script type="text/javascript"> 191if (!window._bubble_page_load_data) { 192 window._bubble_page_load_data = {} 193} 194if (!window._bubble_page_load_data.js_execution_timings) { 195 window._bubble_page_load_data.js_execution_timings = {} 196} 197window._bubble_page_load_data.js_execution_timings['post_static_js'] = Date.now(); 198</script>
vendor: 1 bytes, line 198
198
199<script type="text/javascript"> 200if (!window._bubble_page_load_data) { 201 window._bubble_page_load_data = {} 202} 203if (!window._bubble_page_load_data.js_execution_timings) { 204 window._bubble_page_load_data.js_execution_timings = {} 205} 206window._bubble_page_load_data.js_execution_timings['pre_dynamic_js'] = Date.now(); 207</script>
207<script type="text/javascript" crossorigin="anonymous" charset="UTF-8" src="/package/dynamic_js/dd437390a2ab89283eef9f22fa76e9a377470c88053d7e423d91bdc12925b5ea/wavy-curves/live/index/xnull/xfalse/xfalse/en_us/xfalse/xfalse/dynamic.js"></script>
207<script type="text/javascript"> 208if (!window._bubble_page_load_data) { 209 window._bubble_page_load_data = {} 210} 211if (!window._bubble_page_load_data.js_execution_timings) { 212 window._bubble_page_load_data.js_execution_timings = {} 213} 214window._bubble_page_load_data.js_execution_timings['post_dynamic_js'] = Date.now(); 215</script>
vendor: 1 bytes, line 215
215
216<script type="text/javascript">window._bubble_page_load_data.js_execution_timings.plugin_js_start_execution = Date.now();</script>
216 217<!-- 1618916043803x877032991371296800 -->
218<script defer src="//meta.cdn.bubble.io/f1678588430465x230578802325048350/icons.js"></script>
218 219
220<script> 221 const allSelect2 = /\[(hi.*)\](.*)\[\/(hi.*)\]/; 222 const colormatch2 = /#[0-9A-f]{3,6}#/; 223 const fillMatcher2 = /fill="currentColor"/; 224 225 function replaceIcon(btn) { 226 let content = btn.getAttribute("title"); 227 228 if (!content) return; 229 230 let iconColor = content.match(colormatch2); 231 content = content.replace(colormatch2, ""); 232 const iconMarkup = content.match(allSelect2); 233 if (!iconMarkup) { 234 return; 235 } 236 237 if (iconMarkup[1] != iconMarkup[3]) return; 238 239 const iconProps = iconMarkup[1].slice(2).split("-"); 240 241 const props = { 242 name: iconMarkup[2], 243 size: "20px", 244 color: btn.innerHTML.match(colormatch2) 245 ? btn.innerHTML.match(colormatch2)[0].slice(0, -1) 246 : undefined, 247 set: "mini", 248 position: undefined, 249 iconHTML: undefined, 250 style: 'style="', 251 spacing: "8px", 252 stroke_width: "1.5px", 253 }; 254 255 if (props.color) { 256 props.iconHTML = props.iconHTML.replace( 257 fillMatcher2, 258 "fill=" + iconColor 259 ); 260 } 261 262 iconProps.forEach((property) => { 263 switch (property) { 264 case "l": 265 props.position = "left"; 266 break; 267 case "r": 268 props.position = "right"; 269 break; 270 case "b": 271 props.position = "center"; 272 break; 273 case "o": 274 props.set = "outlined"; 275 break; 276 case "s": 277 props.set = "solid"; 278 break; 279 } 280 if (/m[0-99]+/.test(property)) { 281 const matched = property.match(/m([0-99]+)/); 282 props.spacing = `${matched[1]}px`; 283 } 284 if (/w[0-99]+/.test(property)) { 285 const matched = property.match(/w([0-99]+)/); 286 props.stroke_width = `${matched[1]/10}px`; 287 } 288 289 const number = Number(property); 290 291 if (number && number > 0) { 292 props.size = String(number) + "px"; 293 } 294 }); 295 296 if (props.name == "no-icon") { 297 btn.classList.add("heroicon"); 298 299 btn.setAttribute("title", btn.getAttribute("title").replace(allSelect2, "").replace(/\u00AD/g, '')); 300 btn.childNodes.forEach((node) => { 301 if (node.nodeName !== "#text") { 302 node.remove(); 303 } 304 305 }); 306 return; 307 } 308 309 if (window[`heroicons_${props.set}`].has(props.name)) { 310 props.iconHTML = window[`heroicons_${props.set}`].get(props.name); 311 } else { 312 return; 313 } 314 315 btn.classList.add("heroicon"); 316 317 props.style += ` ${props.set == "outlined" ? ` stroke-width: ${props.stroke_width};` : "" 318 } height: ${props.size}; width: ${props.size}; `; 319 320 let insertBefore = props.iconHTML.lastIndexOf("viewBox"); 321 322 btn.setAttribute("title", btn.getAttribute("title").replace(allSelect2, "").replace(/\u00AD/g, '')); 323 btn.childNodes.forEach((node) => { 324 if (node.nodeName !== "#text") { 325 node.remove(); 326 } 327 }); 328 329 btn.style.display = "inline-flex"; 330 btn.style.alignItems = "center"; 331 332 if (props.position == "left") { 333 let styledHTML = 334 props.iconHTML.substring(0, insertBefore) + 335 props.style + 336 `margin-right:${props.spacing}"` + 337 props.iconHTML.substring(insertBefore); 338 btn.insertAdjacentHTML("afterbegin", styledHTML); 339 } else if (props.position == "right") { 340 let styledHTML = 341 props.iconHTML.substring(0, insertBefore) + 342 props.style + 343 `margin-left:${props.spacing}"` + 344 props.iconHTML.substring(insertBefore); 345 btn.insertAdjacentHTML("beforeend", styledHTML); 346 } else { 347 let styledHTML = 348 props.iconHTML.substring(0, insertBefore) + 349 props.style + 350 `"` + 351 props.iconHTML.substring(insertBefore); 352 btn.insertAdjacentHTML("beforeend", styledHTML); 353 } 354 } 355 356 document.addEventListener("DOMContentLoaded", function () {
357 let config = { 358 subtree: true, 359 childList: true, 360 attributes: true, 361 characterData: false, 362 attributeFilter: ["title"] 363 }; 364 365 let callback = function (mutationsList, observer) { 366 for (let mutation of mutationsList) { 367 if (mutation.target.tagName === "BUTTON") { 368 replaceIcon(mutation.target); 369 } else if (mutation.addedNodes) { 370 mutation.addedNodes.forEach((node) => { 371 if (node.tagName == "BUTTON") { 372 replaceIcon(node); 373 } 374 }); 375 } 376 } 377 }; 378 379 const observer = new MutationObserver(callback); 380 observer.observe(document, config); 381 }); 382</script>
382 383 384<style> 385 .animate-spin>circle { 386 color: inherit; 387 opacity: 25%; 388 } 389 390 .animate-spin { 391 animation: 1s linear infinite spin; 392 } 393 394 @keyframes spin { 395 from { 396 transform: rotate(0); 397 } 398 399 to { 400 transform: rotate(360deg); 401 } 402 } 403 404 .heroicon { 405 display: inline-flex; 406 align-items: center; 407 justify-content: center; 408 gap: 0 !important; 409 } 410 411 .dots_one { 412 stroke: currentColor; 413 fill: currentColor; 414 animation: dots 0.8s linear infinite; 415 animation-delay: -0.8s; 416 margin-right: 1px; 417 } 418 419 .dots_two { 420 animation-delay: -0.65s; 421 } 422 423 .dots_three { 424 animation-delay: -0.5s; 425 } 426 427 @keyframes dots { 428 429 93.75%, 430 100% { 431 opacity: 0.2; 432 } 433 } 434</style>
435<script type="text/javascript">window._bubble_page_load_data.js_execution_timings.plugin_js_end_execution = Date.now();</script>
435 436</head> 437<body>
437<script type="text/javascript"> 438window.addEventListener('DOMContentLoaded', function () { 439 if (window.appquery == null) { 440 (function() { 441 const html = ` 442 <div class="error-card"> 443 <div class="error-section"> 444 <div class="error-title">Your browser was unable to load some necessary resources</div> 445 <div class="error-message">Contact your IT network administrator to allow access to: 446 ⢠d3dqmih97rcqmh.cloudfront.net 447 ⢠95ad2d3b428441d5478816b64e3582ee.cdn.bubble.io/ 448 ⢠d1muf25xaso8hp.cloudfront.net</div> 449 </div> 450 </div> 451 ` 452 453 const css = document.createElement('style') 454 css.type = 'text/css' 455 css.appendChild( 456 document.createTextNode(` 457 .error-overlay { 458 width: 100%; 459 height: 100%; 460 background: rgba(0,0,0,0.30); 461 overflow: hidden; 462 display: flex; 463 justify-content: center; 464 align-items: flex-start; 465 position: fixed; 466 inset: 0; 467 z-index: 999999; 468 } 469 470 .error-card { 471 width: 500px; 472 margin: 40px; 473 background: white; 474 box-shadow: 0px 1px 2px rgba(0,0,0,0.10); 475 border-radius: 8px; 476 display: flex; 477 flex-direction: column; 478 } 479 480 .error-section { 481 padding: 40px; 482 display: flex; 483 flex-direction: column; 484 gap: 12px; 485 } 486 487 .error-title { 488 color: #1A1A1A; 489 font-size: 18px; 490 font-family: Arial, sans-serif; 491 font-weight: 600; 492 line-height: 28px; 493 } 494 495 .error-message { 496 color: #525252; 497 font-size: 14px; 498 font-family: Arial, sans-serif; 499 font-weight: 400; 500 line-height: 20px; 501 white-space: pre-wrap; 502 } 503 `) 504 ) 505 document.head.appendChild(css) 506 507 const container = document.createElement('div') 508 container.className = 'error-overlay' 509 container.innerHTML = html 510 document.body.appendChild(container) 511 })() 512 httpRequest = new XMLHttpRequest(); 513httpRequest.open('POST', '/user/m', true); 514httpRequest.setRequestHeader('Content-Type', 'application/json'); 515httpRequest.send(JSON.stringify({measures: {page_load_error: 1, url: document.location.href, errors: window.load_error_log}})); 516 }; 517}); 518</script>
518<script type="text/javascript">window.addEventListener('DOMContentLoaded', function () {if (window.appquery && window.app == null) {(function() { 519 const html = ` 520 <div class="error-card"> 521 <div class="error-section"> 522 <div class="error-title">Your browser was unable to load the application</div> 523 <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> 524 </div> 525 </div> 526 ` 527 528 const css = document.createElement('style') 529 css.type = 'text/css' 530 css.appendChild( 531 document.createTextNode(` 532 .error-overlay { 533 width: 100%; 534 height: 100%; 535 background: rgba(0,0,0,0.30); 536 overflow: hidden; 537 display: flex; 538 justify-content: center; 539 align-items: flex-start; 540 position: fixed; 541 inset: 0; 542 z-index: 999999; 543 } 544 545 .error-card { 546 width: 500px; 547 margin: 40px; 548 background: white; 549 box-shadow: 0px 1px 2px rgba(0,0,0,0.10); 550 border-radius: 8px; 551 display: flex; 552 flex-direction: column; 553 } 554 555 .error-section { 556 padding: 40px; 557 display: flex; 558 flex-direction: column; 559 gap: 12px; 560 } 561 562 .error-title { 563 color: #1A1A1A; 564 font-size: 18px; 565 font-family: Arial, sans-serif; 566 font-weight: 600; 567 line-height: 28px; 568 } 569 570 .error-message { 571 color: #525252; 572 font-size: 14px; 573 font-family: Arial, sans-serif; 574 font-weight: 400; 575 line-height: 20px; 576 white-space: pre-wrap; 577 } 578 `) 579 ) 580 document.head.appendChild(css) 581 582 const container = document.createElement('div') 583 container.className = 'error-overlay' 584 container.innerHTML = html 585 document.body.appendChild(container) 586 })()}});</script>
586 587<img style="display: none;" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /> 588</body> 589</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.