<!DOCTYPE html>

<!-- Last Published: Wed, June 03 2026 09:10:50 -->
<html lang="en-GB" dir="ltr">
<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <link rel="preconnect" href="https://assets.softr-files.com">
    <link rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
      integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N"
      crossorigin="anonymous">
    <script>
        const reactDefaultThemes = {defaultBaseTextSize: '14px',defaultBodyFont: 'Montserrat',defaultBodyFontWeight: '400',defaultBodyTextColor: '#383B3D',defaultButtonBackgroundColor: '#6f2896',defaultButtonRoundness: '0rem',defaultRoundButtonsAndInputs: false,defaultButtonTextColor: '#ffffff',defaultContainerStyle: 'custom-1440px',defaultTitleFont: 'Montserrat',defaultTitleFontWeight: '400',defaultTitleTextColor: '#0f0e0f',defaultSize: 'M',defaultBackgroundColor: '#ffffff',defaultShadow: false,defaultBackgroundStyle: 'HIGHLIGHTED',defaultSurfaceColor: '#ffffff',defaultSuccessColor: '#41d33e',defaultWarningColor: '#f8d313',defaultDangerColor: '#f73730',defaultNavigationDesktopTop: 'softAccent',defaultNavigationDesktopSide: 'regular',defaultNavigationMobileTop: 'softAccent',defaultNavigationMobileSide: 'regular',defaultNavigationMobileBottom: 'regular',defaultBorderVariant: 'light'};
    </script>
        <script>window.isNavigationTransitionsEnabled = true; window.isViteBuildEnabled = true; </script>
        <script src="https://assets.softr-files.com/softr-blocks/prod/libs/softr-page-renderer/softr-page-renderer.js?t=1779882547065"></script>

<meta name="twitter:title" content="Page not found">
<meta property="twitter:title" content="Page not found">
<meta property="og:title" content="Page not found">
<meta name="twitter:description" content="Urban Design Learning gives local councils more authority.">
<meta property="twitter:description" content="Urban Design Learning gives local councils more authority.">
<meta property="og:description" content="Urban Design Learning gives local councils more authority.">
<meta property="og:image" content="https://assets.softr-files.com/applications/536fa465-18a1-4b2d-a81d-642ca647f60f/assets/a49cfb12-8c4e-4fbe-8766-8ee3991c7b6b.png">
<meta name="twitter:image" content="https://assets.softr-files.com/applications/536fa465-18a1-4b2d-a81d-642ca647f60f/assets/a49cfb12-8c4e-4fbe-8766-8ee3991c7b6b.png">
<meta name="twitter:card" content="summary_large_image">
<meta property="og:url" content="https://www.urbandesignlearning.com/wordpress/?feed=rss2">
<meta property="twitter:url" content="https://www.urbandesignlearning.com/wordpress/?feed=rss2">
<meta property="og:type" content="website">
<meta property="og:site_name" content="UDL">

<title>Page not found</title>
<meta name="description" content="Urban Design Learning gives local councils more authority.">


<link rel="icon" type="image/x-icon" href="https://assets.softr-files.com/applications/536fa465-18a1-4b2d-a81d-642ca647f60f/assets/251fa34a-ff3f-4c25-8e75-bfc52bb5dee0.png?rnd=1700128929404?rnd=1766497963978?rnd=1766498172373?rnd=1774954093817?rnd=1774955524914?rnd=1775054819020?rnd=1775054927829"/>


<link rel="canonical" href="https://www.urbandesignlearning.com/404" />
<link href="https://fonts.softr-files.com/google/api/css?family=Montserrat:100,200,300,400,500,600,700,800,900,100i,200i,300i,400i,500i,600i,700i,800i,900i&display=block" rel="stylesheet">

<link href="https://assets.softr-files.com/libs/font-awesome/6.5.0/css/all.min.css" rel="stylesheet">


<style type="text/css">

    html {
        scroll-behavior: smooth;
        font-size: 14px;
        overflow-x: hidden;
        background-color: #ffffff;
    }

    body {
        /* fallback for devices that do not support dvh units */
        min-height: 100vh;
        min-height: 100dvh;
        /* reboot.css sets its own background, but we want it to match our theme */
        background-color: inherit;
    }

    .container {
        max-width: 100%;
    }

    @media (min-width: 576px) {
        .container {
            max-width: 540px;
        }
    }

    @media (max-width: 576px) {
        .navbar-brand img {
            max-width: 15rem !important;
        }
    }

    @media (min-width: 768px) {
        .container {
            max-width: 720px;
        }
    }

    @media (min-width: 992px) {
        .container {
            max-width: 960px;
        }
    }

    @media (min-width: 1200px) {
        .container {
            max-width: 1440px;
        }
    }

    p, h1, h2, h3, h4, h5, small {
        white-space: pre-line;
    }

    @media screen and (max-width: 768px) {
        input, select, textarea {
            font-size: 16px !important;
        }
    }

    h1.sw-font-family-default,
    h2.sw-font-family-default,
    h3.sw-font-family-default {
        font-family: "Montserrat";
    }

    h1.sw-font-weight-default,
    h2.sw-font-weight-default,
    h3.sw-font-family-default {
        font-weight: 400;
    }

    h1.sw-text-color-default,
    h2.sw-text-color-default,
    h3.sw-font-family-default {
        color: #0f0e0f;
    }

    section.sw-font-family-default,
    header.sw-font-family-default,
    nav.sw-font-family-default,
    footer.sw-font-family-default,
    div.sw-font-family-default,
    span.sw-font-family-default,
    small.sw-font-family-default,
    pre.sw-font-family-default,
    p.sw-font-family-default,
    b.sw-font-family-default,
    li.sw-font-family-default,
    ul.sw-font-family-default,
    a.sw-font-family-default,
    h4.sw-font-family-default,
    h5.sw-font-family-default,
    h6.sw-font-family-default {
        font-family: "Montserrat";
    }

    span.sw-font-weight-default,
    li.sw-font-weight-default span,
    small.sw-font-weight-default,
    li.sw-font-weight-default small,
    pre.sw-font-weight-default,
    p.sw-font-weight-default,
    h4.sw-font-weight-default,
    h5.sw-font-weight-default,
    h6.sw-font-weight-default {
        font-weight: 400;
    }

    span.sw-text-color-default,
    li.sw-text-color-default span,
    small.sw-text-color-default,
    li.sw-text-color-default small,
    pre.sw-text-color-default,
    p.sw-text-color-default,
    div.sw-text-color-default,
    h4.sw-text-color-default,
    h5.sw-text-color-default,
    h6.sw-text-color-default {
        color: #383B3D;
    }

    input.sw-font-family-default,
    textarea.sw-font-family-default {
        font-family: "Montserrat";
    }

    input.sw-font-weight-default,
    textarea.sw-font-weight-default {
        font-weight: 400;
    }

    .sw-font-family-default::-webkit-input-placeholder,
    .sw-font-family-default::-moz-placeholder,
    .sw-font-family-default:-ms-input-placeholder,
    .sw-font-family-default:-moz-placeholder {
        font-family: "Montserrat";
    }

    .sw-font-family-default::-webkit-input-placeholder,
    .sw-font-family-default::-moz-placeholder,
    .sw-font-family-default:-ms-input-placeholder,
    .sw-font-family-default:-moz-placeholder {
        font-weight: 400;
    }

    .sw-text-color-default[data-element='button'] {
        color: #ffffff;
    }

    .sw-background-color-default[data-element='button'] {
        background-color: #6f2896;
    }

    .sw-border-radius-default[data-element='button'] {
        border-radius: 0rem;
    }

    /* Micromodal styles */
    .sw-modal {
        display: none;
    }

    .sw-modal.is-open {
        display: block;
    }

    .sw-modal .sw-modal-overlay {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.6);
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 9999;
    }

    .sw-modal .sw-modal-container {
        background-color: #FFFFFF;
        padding: 40px 10px 10px 10px;
        overflow-y: auto;
        box-sizing: border-box;
        position: relative;
        margin: auto;
        border-radius: 16px;
    }

    .sw-modal #sw-modal-content {
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .sw-modal .sw-modal-close {
        background: transparent;
        border: 0;
        position: absolute;
        right: 10px;
        top: 10px;
    }

    .sw-modal-close:focus {
        outline: none;
    }

    .sw-modal .sw-modal-iframe {
        border: none;
    }

    .sw-modal-size-sm {
        width: 464px;
        height: 350px;
        max-width: 95vw;
        max-height: 95vh;
    }


    .sw-modal-size-md {
        width: 755px;
        height: 600px;
        max-width: 95vw;
        max-height: 95vh;
    }

    .sw-modal-size-lg {
        width: 1196px;
        height: 780px;
        max-width: 95vw;
        max-height: 95vh;
    }

    .sw-modal-size-xl {
        width: 95vw;
        height: 95vh;
    }

    .sw-modal-container > div, #sw-modal-content, #sw-modal-content iframe {
        width: 100%;
        height: 100%;
    }

    .sw-modal-close:before {
        content: "\2715";
    }

    @keyframes rotation {
        from {
            transform: rotate(0deg);
        }
        to {
            transform: rotate(359deg);
        }
    }


</style>

<style>
    .sw-font-size-3xl {
        font-size: 2rem;
    }
    .sw-font-size-4xl {
        font-size: 2.25rem;
    }
    .sw-font-size-5xl {
        font-size: 3rem;
    }

</style>

<!-- App Integrations -->
<!-- Global site tag (gtag.js) - Google Analytics --><script data-iub-purposes="4"  async src="https://www.googletagmanager.com/gtag/js?id=G-FC2PPQME47"></script><script data-iub-purposes="4" >window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', 'G-FC2PPQME47', { 'anonymize_ip': true });</script><!-- End Global site tag (gtag.js) - Google Analytics --><!-- Google Tag Manager --><script data-iub-purposes="4" >(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NQ75GQ53');</script><!-- End Google Tag Manager --><!-- HotJar --><script data-iub-purposes="4" >(function(h,o,t,j,a,r){h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};h._hjSettings={hjid:5094615,hjsv:6};a=o.getElementsByTagName('head')[0];r=o.createElement('script');r.async=1;r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;a.appendChild(r);})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');</script><!-- End HotJar -->
<!-- End Integrations -->



<script>window['application_context'] = {}; window['application_context']['policies'] ={"numberOfSupportedDomains":3,"canDisableSoftrBranding":true,"hasSoftrBrandingFooterBoundSupport":true,"numberOfDatasourceRecordsPerTable":50000,"numberOfInternalUsers":100,"numberOfExternalUsers":10000,"supportedNumberOfMembershipUsers":100000,"hasGoogleAuthenticationSupport":true,"hasSamlAuthenticationSupport":false,"hasOpenIdAuthenticationSupport":false,"hasUserLastSeenSupport":true,"hasUserAuthOneTimeCodeSupport":true,"has2faSupport":true,"hasAdvancedSecuritySupport":true,"numberOfDaysApplicationHistory":365,"hasCustomCodeSupport":true,"hasEmbedBlockSupport":true,"hasTransferApplicationsAcrossWorkspace":true,"hasPwaSupport":true,"hasDynamicAppLogoSupport":false,"hasSignatureFieldSupport":true,"hasFormConditionsSupport":true,"hasTransferOwnershipSupport":null,"hasActionButtonRecordLevelVisibilitySupport":true,"hasActionButtonCustomUserGroupVisibilitySupport":true,"numberOfUsersInWorkspace":null,"numberOfCustomUserGroups":null,"restrictedDataSources":[],"restrictedBlocks":[],"hasInlineEditingSupport":true,"hasFilteredUserSyncSupport":true,"restrictedActions":[],"hasEditAddFormOptionFilterSupport":null,"hasCustomEmailSenderSupport":true,"hasSoftrApiSupport":true,"hasDomainRestrictedSignUpSupport":true,"supportedDataRestrictionOperations":["VIEW","EDIT","DELETE","ADD"],"hasHideBlockOnDetailsPageSupport":true,"hasOptionFilterSupport":true,"hasCustomDomainAddOnSupport":true,"hasUserAddOnSupport":false,"numberOfAiCredits":10000,"workflowsMaxExecutionTimeSeconds":null,"workflowsMinimumPollingIntervalSeconds":60,"numberOfWorkflowActionExecutionsPerMonth":25000,"restrictedWorkflowActions":[],"restrictedWorkflowTriggers":[],"hasApplicationLevelCommentsSupport":true,"numberOfSupportedSoftrDatabaseRecordsPerWorkspace":1000000,"numberOfSupportedSoftrDatabaseRecordsPerDatabase":200000,"supportedSoftrDatabaseStorageSizePerWorkspace":250000000000}; window['application_context']['date_and_time_settings'] = {"formatSettings":{"type":"FIXED","localSettings":null,"fixedSettings":{"dateFormat":"DD-MM-YYYY","dateFormatSeparator":"/","timeFormat":"12","weekStart":7}},"timezoneSettings":{"type":"LOCAL","fixedTimezone":null}}; window['application_context']['number_formatting_settings'] = {"type":"LOCAL","fixedLocale":null}; window['application_context']['global_search_settings'] = {"enabled":false,"searchPlaceholder":"Search","initialStateMessage":"Type something to start searching","initialStateImage":null,"noResultsMessage":"No results found","noResultsImage":null,"backdrop":null}; window['application_context']['user_settings'] = {"authSettings":{"loginEnabled":true,"authenticationMethods":["EMAIL"],"signUpSettings":{"policy":"OPEN_TO_PUBLIC","allowedDomains":[]},"userSessionExpiration":"90_DAYS","userInactivityTimeout":"NEVER","emailAuthSettings":{"loginMethods":["EMAIL_CODE"],"passwordSettings":{"inputLabel":"Password","inputPlaceholder":"Enter your password","forgotPasswordText":"Forgot password","incorrectPasswordText":"Incorrect password.","newPasswordLabel":"New password","newPasswordPlaceholder":"Set a secure password","strongPasswords":true,"minimumCharactersText":"At least 12 characters","upperAndLowerCaseText":"1 uppercase & 1 lowercase","numberText":"1 number (0-9)","symbolText":"1 symbol (!@#$%^&*)","repeatPasswordLabel":"Repeat password","repeatPasswordPlaceholder":"Repeat your password","passwordsDontMatchText":"Passwords don't match."},"emailOneTimeCodeSettings":{"expiration":"5_MINUTES","inputLabel":"Verification code","inputPlaceholder":"Enter verification code","resendText":"Resend","invalidCodeText":"Invalid code."},"secondaryLoginMethods":[],"smsOneTimeCodeSettings":null,"authenticatorSettings":null,"inputLabel":"Email","inputPlaceholder":"Enter your email"},"googleSettings":{"clientId":null,"clientSecret":null,"userType":"INTERNAL","emailDomains":[]},"ssoSettings":{"type":"SAML","emailDomains":[],"saml":{"acsUrl":null,"audienceUrl":null,"metadataXml":null,"emailKey":null,"firstNameKey":null,"lastNameKey":null},"openId":{"callbackUrl":null,"providerUrl":null,"tokenServiceUrl":null,"clientId":null,"clientSecret":null}}},"autoInvite":false}; window['application_context']['application_logo'] = {"type":"IMAGE","icon":{"logo":"","text":""},"image":{"horizontal":"https://assets.softr-files.com/applications/536fa465-18a1-4b2d-a81d-642ca647f60f/assets/be322237-a13e-4f08-bf87-4cc1580f5654.png","square":null}}; window['application_context']['user_connection'] = {}; window['application_context']['user_connection']['datasource'] = {}; window['application_context']['user_connection']['datasource']['id'] = '31a34dd3-7291-471a-8961-78f7e836b77d'; window['application_context']['user_connection']['datasource']['datasource_integration_type'] = 'AIRTABLE'; window['application_context']['user_connection']['attributes'] = {"emailFieldName":"Email","magicTokenFieldName":"Magic Link"}; </script>

<style>
 .sw-font-size-5xl {
    font-size: 3rem;
  }
  .sw-font-size-4xl {
    font-size: 2.25rem;
  }
</style>
<script>
  document.addEventListener("DOMContentLoaded", () => {
    if($(window).width() < 768) {
       $('h1.sw-font-size-10xl').removeClass('sw-font-size-10xl').addClass('sw-font-size-5xl');
       $('h1.sw-font-size-9xl').removeClass('sw-font-size-9xl').addClass('sw-font-size-5xl');
       $('h1.sw-font-size-8xl').removeClass('sw-font-size-8xl').addClass('sw-font-size-5xl');
       $('h1.sw-font-size-7xl').removeClass('sw-font-size-7xl').addClass('sw-font-size-5xl');
       $('h1.sw-font-size-6xl').removeClass('sw-font-size-6xl').addClass('sw-font-size-4xl');
       $('h2.sw-font-size-10xl').removeClass('sw-font-size-10xl').addClass('sw-font-size-5xl');
       $('h2.sw-font-size-9xl').removeClass('sw-font-size-9xl').addClass('sw-font-size-5xl');
       $('h2.sw-font-size-8xl').removeClass('sw-font-size-8xl').addClass('sw-font-size-5xl');
       $('h2.sw-font-size-7xl').removeClass('sw-font-size-7xl').addClass('sw-font-size-5xl');
       $('h2.sw-font-size-6xl').removeClass('sw-font-size-6xl').addClass('sw-font-size-4xl');
       $('div.sw-font-size-10xl').removeClass('sw-font-size-10xl').addClass('sw-font-size-5xl');
       $('div.sw-font-size-9xl').removeClass('sw-font-size-9xl').addClass('sw-font-size-5xl');
       $('div.sw-font-size-8xl').removeClass('sw-font-size-8xl').addClass('sw-font-size-5xl');
       $('div.sw-font-size-7xl').removeClass('sw-font-size-7xl').addClass('sw-font-size-5xl');
       $('div.sw-font-size-6xl').removeClass('sw-font-size-6xl').addClass('sw-font-size-4xl');
       $('p.sw-font-size-10xl').removeClass('sw-font-size-10xl').addClass('sw-font-size-5xl');
       $('p.sw-font-size-9xl').removeClass('sw-font-size-9xl').addClass('sw-font-size-5xl');
       $('p.sw-font-size-8xl').removeClass('sw-font-size-8xl').addClass('sw-font-size-5xl');
       $('p.sw-font-size-7xl').removeClass('sw-font-size-7xl').addClass('sw-font-size-5xl');
       $('p.sw-font-size-6xl').removeClass('sw-font-size-6xl').addClass('sw-font-size-4xl');
       $('span.sw-font-size-10xl').removeClass('sw-font-size-10xl').addClass('sw-font-size-5xl');
       $('span.sw-font-size-9xl').removeClass('sw-font-size-9xl').addClass('sw-font-size-5xl');
       $('span.sw-font-size-8xl').removeClass('sw-font-size-8xl').addClass('sw-font-size-5xl');
       $('span.sw-font-size-7xl').removeClass('sw-font-size-7xl').addClass('sw-font-size-5xl');
       $('span.sw-font-size-6xl').removeClass('sw-font-size-6xl').addClass('sw-font-size-4xl');
    }
  });
</script>




<script>window['is401Page'] = false; </script>


<script>
    const BlocksRenderedEventName = "@softr/page-content-loaded";
</script>

<script>
    function applyMobileTextSizesForV4Blocks() {
        const width = window.innerWidth;

        const largeElements = [
            'h1.sw-font-size-10xl', 'h1.sw-font-size-9xl', 'h1.sw-font-size-8xl', 'h1.sw-font-size-7xl',
            'h2.sw-font-size-10xl', 'h2.sw-font-size-9xl', 'h2.sw-font-size-8xl', 'h2.sw-font-size-7xl',
            'h3.sw-font-size-10xl', 'h3.sw-font-size-9xl', 'h3.sw-font-size-8xl', 'h3.sw-font-size-7xl',
            'div.sw-font-size-10xl', 'div.sw-font-size-9xl', 'div.sw-font-size-8xl', 'div.sw-font-size-7xl',
            'p.sw-font-size-10xl', 'p.sw-font-size-9xl', 'p.sw-font-size-8xl', 'p.sw-font-size-7xl',
            'span.sw-font-size-10xl', 'span.sw-font-size-9xl', 'span.sw-font-size-8xl', 'span.sw-font-size-7xl',
        ];

        const smallElements = [
            'h1.sw-font-size-6xl', 'h2.sw-font-size-6xl', 'h3.sw-font-size-6xl', 'div.sw-font-size-6xl', 'p.sw-font-size-6xl', 'span.sw-font-size-6xl',
        ];

        if (width < 576) {
            largeElements.forEach(selector => {
                document.querySelectorAll(selector).forEach(el => {
                    el.classList.remove(selector.split('.').slice(1).join(' '));
                    el.classList.add('sw-font-size-4xl');
                });
            });

            smallElements.forEach(selector => {
                document.querySelectorAll(selector).forEach(el => {
                    el.classList.remove(selector.split('.').slice(1).join(' '));
                    el.classList.add('sw-font-size-3xl');
                });
            });
        } else if (width < 768) {
            largeElements.forEach(selector => {
                document.querySelectorAll(selector).forEach(el => {
                    el.classList.remove(selector.split('.').slice(1).join(' '));
                    el.classList.add('sw-font-size-5xl');
                });
            });

            smallElements.forEach(selector => {
                document.querySelectorAll(selector).forEach(el => {
                    el.classList.remove(selector.split('.').slice(1).join(' '));
                    el.classList.add('sw-font-size-4xl');
                });
            });
        }
    }
</script>

<!-- This script synchronizes the query parameters and path of the top window with those of the iframe.
     It updates the top window's URL, and include any query parameters from the iframe's URL
     when the iframe's path is redirected. -->
<script>
    function topWindowLocationHref() {
      try {
        return window.top.location.href;
      } catch (_error) { // explicitly ignored to avoid noise
        // It's possible that the page is embedded in a cross-origin iframe, in which case,
        // accessing window.top.location will throw.
        // This creates a lot of noise in sentry, so catching and ignoring it here
        return window.location.href;
      }
    }

    document.addEventListener("DOMContentLoaded", function() {
        if (shouldNotReplaceTopWithCurrent()) {
            return;
        }
        try {
            const currentUrl = new URL(window.location.href);
            const topUrl = new URL(topWindowLocationHref());

            const currentParams = new URLSearchParams(currentUrl.search);
            const topParams = new URLSearchParams(topUrl.search);

            for (const [key, value] of topParams) {
                // do not append duplicate query parameters
                if (!currentParams.has(key) && !Array.from(currentParams).some(([k, v]) => k === key)) {
                    currentParams.append(key, value);
                }
            }

            currentUrl.search = currentParams.toString();
            window.top.history.pushState(null, '', currentUrl.toString());
        } catch (error) {
            console.error("An error occurred while updating query parameters:", error);
        }
    });

    function shouldNotReplaceTopWithCurrent() {
        if (window.location.href.split('?')[0] === topWindowLocationHref().split('?')[0]) {
            return true;
        }

        if ("false" !== "true" && !topWindowLocationHref().includes(".preview.")) {
            return true;
        }

        if ("false" === "true" || window.location.href.includes("viewMode=modal") || window.location.href.includes("viewMode%3Dmodal")) {
            return true;
        }

        return false;
    }
</script>

<script>
    document.addEventListener("DOMContentLoaded", function () {
        window.parent.postMessage({ name: 'previewIframeLoaded' }, '*');
    });
    /** Image lineup on mobile **/
    window.addEventListener(BlocksRenderedEventName, function () {
        function changeImageDirectionsOnMobile() {

            const classListSection = $('body>div>section')?.attr('class')?.split(/\s+/);
            const textClassSection = classListSection?.find(cls => cls.startsWith('feature'));

            const classListHeader = $('body>div>header')?.attr('class')?.split(/\s+/);
            const textClassHeader = classListHeader?.find(cls => cls.startsWith('hero'));

            /*If FEATURE block*/
            if (textClassSection) {
                findRowsWidthImageAndReverse(textClassSection)
            }

            /*If HERO block*/
            if (textClassHeader) {
                findRowsWidthImageAndReverse(textClassHeader)
            }
        }

        function findRowsWidthImageAndReverse(textClass) {
            const rowsWithImages = $('.' + textClass + ' .row.align-items-center').has('img').toArray();
            const rowsWithLeftSideImages = rowsWithImages.filter(row => {
                return $(row).children().first().children().first().prop("tagName") === 'IMG';
            });


            rowsWithLeftSideImages.forEach(row => {
                if ($(window).width() <= 768) {
                    row.classList.add('flex-column-reverse')
                }
            });
        }

        if ($(window).width() <= 768) {
            changeImageDirectionsOnMobile();
        }
    });

    /** BG Size on mobile **/
    window.addEventListener(BlocksRenderedEventName, function () {
        if ($(window).width() <= 768) {
            var element = $('section.sw-background-size-auto, header.sw-background-size-auto');
            element.removeClass('sw-background-size-auto');
            element.css('background-size', 'cover');

            $('section.sw-background-attachment-fixed, header.sw-background-attachment-fixed').removeClass('sw-background-attachment-fixed');
        }
    });

    /** Disable zoom on mobile **/
    window.addEventListener(BlocksRenderedEventName, function () {
        if ($(window).width() <= 768) {
            $('input.sw-font-size-s').removeClass('sw-font-size-s');
            $('textarea.sw-font-size-s').removeClass('sw-font-size-s');
            $('select.sw-font-size-s').removeClass('sw-font-size-s');
        }
    });

    window.addEventListener('user-sign-out', (e) => {
        const message = {
            name: 'user-sign-out-triggered',
        };

        window.parent.postMessage(message, '*');
    });

    function isSafari() {
        const chromeAgent = window.navigator.userAgent.includes("Chrome");
        const safariAgent = window.navigator.userAgent.includes("Safari");

        // Google Chrome also contains "Safari" user agent.
        return safariAgent && !chromeAgent;
    }
</script>

<script>
    // Detect PWA mode early (before any fullscreen API calls) and mark the document.
    // This allows hiding elements in PWA even when it enters fullscreen,
    // without affecting regular browser fullscreen mode.
    if (window.matchMedia('(display-mode: standalone)').matches          // Chrome/Edge/Safari desktop & mobile PWA
        || window.matchMedia('(display-mode: minimal-ui)').matches       // minimal-ui PWA
        || window.matchMedia('(display-mode: window-controls-overlay)').matches // desktop PWA with custom title bar
        || window.matchMedia('(display-mode: fullscreen)').matches       // PWA manifest set to fullscreen (safe at load time)
        || window.navigator.standalone === true) {                       // iOS Safari home screen app
        document.documentElement.classList.add('is-pwa');
    }
</script>
<style>
    .is-pwa .progressier-widget {
        display: none !important;
    }
</style>


</head>

<body>


<div id="page-content" data-appsubdomain="udlearning.softr.app" data-appid="536fa465-18a1-4b2d-a81d-642ca647f60f" data-pageId="5dcad12e-cba2-4c07-a960-1795eb902aa7" data-workspaceid="b44c3040-dd51-41c4-bb4c-ba58adff201b" data-paymentplan="price_1MWTrzIWZwIztnHlDhOozM8T" class="content">

</div>


<!-- Scripts -->
<script src="https://assets.softr-files.com/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://assets.softr-files.com/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script
  src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
  integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
  crossorigin="anonymous">
</script>
<script src="https://assets.softr-files.com/libs/micromodal/0.4.10/micromodal.min.js"></script>

<script>
    /** this function is called from list blocks (do not delete) **/
    function openSwModal(url, size) {
        MicroModal.init({
            disableScroll: true,
            awaitOpenAnimation: true,
            awaitCloseAnimation: true
        });

        MicroModal.show("sw-modal");

        const iframeElem = document.querySelector(".sw-modal-iframe");
        const modalContainer = document.querySelector(".sw-modal-container");

        const viewModeParam = "viewMode=modal";
        const urlIsLocal = url.startsWith('#') || url.startsWith('/') || url.startsWith(window.location.origin);
        const modalUrl = urlIsLocal ? (url.indexOf("?") !== -1 ? url + "&" + viewModeParam : url + "?" + viewModeParam) : url;
        iframeElem.setAttribute("src", modalUrl);

        modalContainer.classList.remove('sw-modal-size-sm', 'sw-modal-size-md', 'sw-modal-size-lg', 'sw-modal-size-xl');
        modalContainer.classList.add('sw-modal-size-' + size);

        setTimeout(() => {
            // Add event listener to detect when the modal is closed
            const closeButton = document.querySelector('.sw-modal-close');
            const backdrop = document.querySelector('.sw-modal-overlay');

            closeButton.addEventListener('click', resetIframe);
            backdrop.addEventListener('click', resetIframe);
        }, 1000)

    }

    const resetIframe = () => {
        const iframeElem = document.querySelector('.sw-modal-iframe');
        iframeElem.removeAttribute('src');
    }
</script>

<script>
    /** Bugfix on multiple ?recordId= issue **/
    setInterval(function () {
        $('section a').each(function () {
            const href = $(this).attr('href');
            if (href && href.includes('?recordId=')) {
                const countOfRecords = (href.match(/\?recordId=/g) || []).length;
                if (countOfRecords > 1) {
                    const index = href.lastIndexOf('?recordId=');
                    const cleanedHref = href.substring(0, index);
                    $(this).attr('href', cleanedHref);
                }
            }
        });
    }, 1000);
</script>

<script type="text/javascript">
    if (window.jQuery && window.jQuery.ajaxSetup) {
        window.jQuery.ajaxSetup({
            beforeSend: function (xhr, settings) {
                if (settings && settings.url && (
                    settings.url.includes('/integrations/airtable/')
                    || settings.url.includes('/v1/applications/536fa465-18a1-4b2d-a81d-642ca647f60f')
                    || settings.url.includes('/v1/comments')
                    || settings.url.includes('/v3/comments')
                    || settings.url.includes('/forms/form-to-email')
                    || settings.url.includes('/forms/form-to-api'))
                ) {
                    xhr.setRequestHeader('softr-page-id', '5dcad12e-cba2-4c07-a960-1795eb902aa7');
                }
            }
        });
    }

    window['utility1'] = {}; 
var softrBlocks = [{"id":"83bfeccc-da02-4b91-8664-85fc333e37f3","version":"5.0.0","hrid":"utility1","name":"404-not-found","title":"Page not found","image":"https://assets.softr-files.com/assets/blocks/studio/404-not-found-thumbnail.png","category":"Utility","keywords":"Not found, simple, 404","elements":{"definitions":{},"container":{"styles":[{"type":"group","styles":[{"type":"group","styles":[{"type":"control","controlType":"color","value":null,"fallback":{"type":"THEME","key":"tokens.colors.background.default"},"label":"Background color","key":"block.backgroundColor"}],"expanded":true,"label":"General"},{"type":"group","styles":[{"type":"control","controlType":"size","value":null,"fallback":{"type":"THEME","key":"config.size"},"options":["S","M","L"],"label":"Size","key":"title.size"},{"type":"control","controlType":"font","label":"Font","styles":[{"type":"control","controlType":"fontFamily","value":null,"fallback":{"type":"THEME","key":"tokens.typography.heading.fontFamily"},"label":"Font family","key":"title.headingFontFamily"},{"type":"control","controlType":"fontWeight","value":null,"fallback":{"type":"THEME","key":"tokens.typography.heading.fontWeight"},"options":[100,200,300,400,500,600,700,800,900],"optionsMeta":{"100":{"label":"Hairline"},"200":{"label":"Thin"},"300":{"label":"Light"},"400":{"label":"Normal"},"500":{"label":"Medium"},"600":{"label":"Semibold"},"700":{"label":"Bold"},"800":{"label":"Extrabold"},"900":{"label":"Black"}},"label":"Font weight","key":"title.headingFontWeight"},{"type":"control","controlType":"color","value":null,"fallback":{"type":"THEME","key":"tokens.colors.text.heading"},"label":"Color","key":"title.color"}]}],"expanded":false,"label":"Title"},{"type":"group","styles":[{"type":"control","controlType":"size","value":null,"fallback":{"type":"THEME","key":"config.size"},"options":["S","M","L"],"label":"Size","key":"description.size"},{"type":"control","controlType":"font","label":"Font","styles":[{"type":"control","controlType":"fontFamily","value":null,"fallback":{"type":"THEME","key":"tokens.typography.body.fontFamily"},"label":"Font family","key":"description.bodyFontFamily"},{"type":"control","controlType":"fontWeight","value":null,"fallback":{"type":"THEME","key":"tokens.typography.body.fontWeight"},"options":[100,200,300,400,500,600,700,800,900],"optionsMeta":{"100":{"label":"Hairline"},"200":{"label":"Thin"},"300":{"label":"Light"},"400":{"label":"Normal"},"500":{"label":"Medium"},"600":{"label":"Semibold"},"700":{"label":"Bold"},"800":{"label":"Extrabold"},"900":{"label":"Black"}},"label":"Font weight","key":"description.bodyFontWeight"},{"type":"control","controlType":"color","value":null,"fallback":{"type":"THEME","key":"tokens.colors.text.heading"},"label":"Color","key":"description.color"}]}],"expanded":false,"label":"Message"},{"type":"group","styles":[{"type":"control","controlType":"fontFamily","value":null,"fallback":{"type":"THEME","key":"tokens.typography.body.fontFamily"},"label":"Font family","key":"button.bodyFontFamily"},{"type":"control","controlType":"fontWeight","value":null,"fallback":{"type":"VALUE","value":600},"options":[100,200,300,400,500,600,700,800,900],"optionsMeta":{"100":{"label":"Hairline"},"200":{"label":"Thin"},"300":{"label":"Light"},"400":{"label":"Normal"},"500":{"label":"Medium"},"600":{"label":"Semibold"},"700":{"label":"Bold"},"800":{"label":"Extrabold"},"900":{"label":"Black"}},"label":"Font weight","key":"button.fontWeight"},{"type":"control","controlType":"color","value":null,"fallback":{"type":"THEME","key":"tokens.colors.action.primary.text"},"label":"Color","key":"button.color"},{"type":"control","controlType":"color","value":null,"fallback":{"type":"THEME","key":"tokens.colors.action.primary.background.idle"},"label":"Background color","key":"button.backgroundColor"}],"expanded":false,"label":"Button"}],"expanded":false,"label":"General"}]},"title":{"value":"Page not found"},"description":{"value":"The page you are looking for does not exist."},"button":{"enabled":true,"label":"Back to home","icon":"","action":"OPEN_PAGE","options":{"destination":"/"}},"image":{"type":"image","url":"https://assets.softr-files.com/assets/blocks/user-accounts/404.svg","icon":""}},"type":"static","collection":null,"enabled":"true","order":"null","updated":null,"visibility":{"userGroup":{"predefinedUserGroupType":"ALL_USERS","customUserGroupIds":[],"enabledPredefinedUserGroupTypes":["ALL_USERS","LOGGED_IN_USERS","NON_LOGGED_IN_USERS"]},"devices":["laptop","tablet","mobile"],"detailsPageRecordCondition":null},"settings":{},"container":null,"presets":null,"created_at":"2025-08-24T11:55:17.710"}];
softrBlocks.forEach(function(block) {
  var blockUniqueName = block.id.replace(/-/g, '');
  window['block_' + blockUniqueName + '_defJson'] = block;
  window['block_' + blockUniqueName + '_defJson']['defaultTheme'] = reactDefaultThemes;
});
SoftrPageRenderer.render({blocks: softrBlocks, targetElement: document.getElementById('page-content'), workspaceId: "b44c3040-dd51-41c4-bb4c-ba58adff201b", appId: "536fa465-18a1-4b2d-a81d-642ca647f60f", pageId: "5dcad12e-cba2-4c07-a960-1795eb902aa7", showMadeWithBadge: false, badgeType: "FLOATING_BADGE", aiApp: false, paymentPlan: "price_1MWTrzIWZwIztnHlDhOozM8T", baseUrl: "https://assets.softr-files.com/softr-blocks/prod/blocks", theme: reactDefaultThemes, appCustomHeaderCode: "<!-- ============================================================\n     SOFTR GLOBAL HEADER CODE\n     Paste this ENTIRE block into: Softr > Settings > Advanced > Custom Code > Header\n     Last updated: 2026-03-25\n     ============================================================ -->\n\n<!-- Google Tag Manager -->\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-NQ75GQ53');<\/script>\n<!-- End Google Tag Manager -->\n\n<!-- Hotjar Tracking Code for https://www.urbandesignlearning.com -->\n<script>\n    (function(h,o,t,j,a,r){\n        h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n        h._hjSettings={hjid:5094615,hjsv:6};\n        a=o.getElementsByTagName('head')[0];\n        r=o.createElement('script');r.async=1;\n        r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n        a.appendChild(r);\n    })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n<\/script>\n\n<!-- ============================================================\n     UDL GLOBAL STYLES — Geist font + brand overrides\n     ============================================================ -->\n\n<!-- Load Geist from Google Fonts CDN -->\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap\" rel=\"stylesheet\">\n\n<style>\n  /* ============================================================\n     1. TYPOGRAPHY — Override Montserrat → Geist everywhere\n     ============================================================ */\n  *,\n  body,\n  h1, h2, h3, h4, h5, h6,\n  p, a, span, li, td, th,\n  input, textarea, select, button,\n  [class*=\"softr\"],\n  [class*=\"MuiTypography\"],\n  [class*=\"MuiButton\"],\n  [class*=\"MuiInput\"] {\n    font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif !important;\n  }\n\n  /* Heading weight: Medium → Regular */\n  h1, h2, h3, h4, h5, h6 {\n    font-weight: 400 !important;\n  }\n\n  /* ============================================================\n     2. ROUNDNESS — Square corners everywhere\n     ============================================================ */\n  button,\n  input,\n  textarea,\n  select,\n  [class*=\"MuiButton\"],\n  [class*=\"MuiCard\"],\n  [class*=\"MuiPaper\"],\n  [class*=\"softr\"],\n  img,\n  .card,\n  [class*=\"rounded\"],\n  [style*=\"border-radius\"] {\n    border-radius: 0 !important;\n  }\n\n  /* Catch Tailwind rounded classes in Softr code blocks */\n  .rounded-sm, .rounded, .rounded-md, .rounded-lg, .rounded-xl,\n  .rounded-2xl, .rounded-3xl, .rounded-full,\n  .rounded-t, .rounded-r, .rounded-b, .rounded-l,\n  .rounded-tl, .rounded-tr, .rounded-br, .rounded-bl {\n    border-radius: 0 !important;\n  }\n\n  /* ============================================================\n     3. SHADOWS — Remove all\n     ============================================================ */\n  [class*=\"MuiPaper\"],\n  [class*=\"MuiCard\"],\n  [class*=\"softr\"],\n  .card {\n    box-shadow: none !important;\n  }\n\n  /* 4. NAVIGATION — handled by Softr block styles (home-header3, Regular variant) */\n\n  /* ============================================================\n     5. ACCENT COLOR — Purple for links, buttons, interactive\n     ============================================================ */\n  a:not(header a):not(nav a) {\n    color: #6F2896;\n  }\n\n  button[class*=\"primary\"],\n  [class*=\"MuiButton-contained\"],\n  a[class*=\"primary\"] {\n    background-color: #6F2896 !important;\n  }\n\n  /* ============================================================\n     6. MAX CONTENT WIDTH — 1140 → 1440\n     Only target Softr's top-level page containers, NOT every\n     element with \"container\" in its class (which breaks native\n     list blocks, filter containers, etc.)\n     ============================================================ */\n  .MuiContainer-root,\n  [style*=\"max-width: 1140px\"],\n  [style*=\"max-width:1140px\"] {\n    max-width: 1440px !important;\n  }\n\n  /* ============================================================\n     7. FOOTER OVERRIDE — match Alexis's redesign\n     Uses exact structural selectors derived from live DOM inspection.\n     DOM structure (stable, no hashed classes):\n       footer\n         > div (inner wrapper)\n           > div:first-child   — brand (logo + tagline + social)\n           > [role=\"list\"]     — nav columns\n               > div           — column\n                 > div:first-child  — column header (EVENTS / RESOURCES / SERVICES)\n                 > div:last-child   — column links\n           > div:last-child    — bottom bar (copyright + secondary links)\n     Last updated: 2026-03-31\n     ============================================================ */\n\n  /* Background */\n  footer,\n  footer > div {\n    background: #6F2896 !important;\n  }\n\n  /* Brand column — flex column so logo sits top, tagline sits bottom */\n  footer > div > div:first-child {\n    display: flex !important;\n    flex-direction: column !important;\n  }\n\n  /* All links in footer → white, no underline, P Medium */\n  footer a {\n    color: #FFFFFF !important;\n    text-decoration: none !important;\n    font-size: 18px !important;\n    font-weight: 400 !important;\n    line-height: 27px !important;\n  }\n\n  footer a:hover {\n    text-decoration: underline !important;\n  }\n\n  /* Tagline — 70% white, pushed to bottom of brand column via auto margin */\n  footer > div > div:first-child > p {\n    color: rgba(255, 255, 255, 0.7) !important;\n    font-size: 18px !important;\n    font-weight: 400 !important;\n    line-height: 27px !important;\n    max-width: 346px;\n    margin-top: auto !important;\n  }\n\n  /* Footer logo — 2x bigger, converted to white.\n     brightness(0) collapses all colours to black,\n     invert(1) flips black to white.\n     Works on any dark logo regardless of original colour.\n     Header logo is unaffected — this selector only fires inside footer.\n\n     IMPORTANT: we must size the wrapping <a> and [data-testid=\"image\"]\n     div too. Softr sets the container div's inline height to 2rem (32px).\n     Sizing only the <img> causes it to overflow its container and visually\n     overlap the tagline below it in flex-column layouts (visible on mobile). */\n  footer > div > div:first-child > a,\n  footer > div > div:first-child > a [data-testid=\"image\"] {\n    height: 45px !important;\n    display: block !important;\n  }\n\n  footer img.softr-nav-logo {\n    height: 45px !important;\n    width: auto !important;\n    border-radius: 0 !important;\n    filter: brightness(0) invert(1) !important;\n  }\n\n  /* Social icons — hidden (not in Alexis's design)\n     To restore: remove this rule */\n  footer ul[aria-label=\"Social media\"] {\n    display: none !important;\n  }\n\n  /* Column headers (EVENTS / RESOURCES / SERVICES)\n     → 50% white, remove ALL CAPS text-transform */\n  footer [role=\"list\"] > div > div:first-child {\n    color: rgba(255, 255, 255, 0.5) !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    font-size: 18px !important;\n    font-weight: 400 !important;\n    line-height: 27px !important;\n  }\n\n  /* Columns container — spread out */\n  footer [role=\"list\"] {\n    gap: 80px !important;\n  }\n\n  /* Column nav links → white, P Medium */\n  footer [role=\"list\"] a {\n    color: #FFFFFF !important;\n    font-size: 18px !important;\n    font-weight: 400 !important;\n    line-height: 27px !important;\n    text-decoration: none !important;\n  }\n\n  footer [role=\"list\"] a:hover {\n    text-decoration: underline !important;\n  }\n\n  /* Bottom bar — top divider line */\n  footer > div > div:last-child {\n    border-top: 1px solid rgba(255, 255, 255, 0.3) !important;\n    /* Remove any existing border colours Softr may apply */\n    border-right: none !important;\n    border-bottom: none !important;\n    border-left: none !important;\n  }\n\n  /* Copyright text → 50% white */\n  footer > div > div:last-child > p {\n    color: rgba(255, 255, 255, 0.5) !important;\n    font-size: 18px !important;\n    font-weight: 400 !important;\n    line-height: 27px !important;\n  }\n\n  /* Secondary links container — wider spacing to align with columns above */\n  footer > div > div:last-child > div {\n    display: flex !important;\n    gap: 80px !important;\n  }\n\n  /* Secondary links (About us, Privacy, Contact us) → 50% white, hover full white */\n  footer > div > div:last-child a {\n    color: rgba(255, 255, 255, 0.5) !important;\n    font-size: 18px !important;\n    font-weight: 400 !important;\n    text-decoration: none !important;\n  }\n\n  footer > div > div:last-child a:hover {\n    color: #FFFFFF !important;\n    text-decoration: none !important;\n  }\n\n  /* ============================================================\n     8. FOOTER — MOBILE FIXES (≤768px)\n     On mobile, the brand column stacks after the nav columns and\n     the tagline's `margin-top: auto` pushes it oddly, causing the\n     logo and tagline to overlap visually. These rules neutralise\n     that auto margin and add a clean gap.\n     ============================================================ */\n  @media (max-width: 768px) {\n    /* Force source order: brand first, nav columns second, bottom bar last.\n       Softr's default mobile layout reorders the brand column to the bottom,\n       so the logo appears after the SERVICES list. These explicit `order`\n       values put it back at the top. */\n    footer > div {\n      display: flex !important;\n      flex-direction: column !important;\n    }\n    footer > div > div:first-child {\n      order: 1 !important;\n      gap: 16px !important;\n      align-items: flex-start !important;\n    }\n    footer > div > [role=\"list\"] {\n      order: 2 !important;\n    }\n    footer > div > div:last-child {\n      order: 3 !important;\n    }\n\n    /* Tagline — remove desktop's margin-top: auto */\n    footer > div > div:first-child > p {\n      margin-top: 0 !important;\n    }\n\n    /* Logo — keep it white and contained */\n    footer img.softr-nav-logo {\n      filter: brightness(0) invert(1) !important;\n      display: block !important;\n      position: static !important;\n    }\n  }\n\n</style>\n", pageCustomHeaderCode: "", appCustomFooterCode: "<!-- Google Tag Manager (noscript) -->\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-NQ75GQ53\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\n<!-- End Google Tag Manager (noscript) -->", pageCustomFooterCode: "", featureFlags: {"navigationLayout": true, "fixedBlockRoots": true, "universalDSForAirtable": true, }, context: {"application_context": {"application_logo":{"type":"IMAGE","icon":{"logo":"","text":""},"image":{"horizontal":"https://assets.softr-files.com/applications/536fa465-18a1-4b2d-a81d-642ca647f60f/assets/be322237-a13e-4f08-bf87-4cc1580f5654.png","square":null}},"date_and_time_settings":{"format_settings":{"type":"FIXED","local_settings":null,"fixed_settings":{"date_format":"DD-MM-YYYY","date_format_separator":"/","time_format":"12","week_start":7}},"timezone_settings":{"type":"LOCAL","fixed_timezone":null}},"number_formatting_settings":{"type":"LOCAL","fixed_locale":null},"global_search_settings":{"enabled":false,"search_placeholder":"Search","initial_state_message":"Type something to start searching","initial_state_image":null,"no_results_message":"No results found","no_results_image":null,"backdrop":null},"user_settings":{"auth_settings":{"login_enabled":true,"authentication_methods":["EMAIL"],"sign_up_settings":{"policy":"OPEN_TO_PUBLIC","allowed_domains":[]},"user_session_expiration":"90_DAYS","user_inactivity_timeout":"NEVER","email_auth_settings":{"login_methods":["EMAIL_CODE"],"password_settings":{"input_label":"Password","input_placeholder":"Enter your password","forgot_password_text":"Forgot password","incorrect_password_text":"Incorrect password.","new_password_label":"New password","new_password_placeholder":"Set a secure password","strong_passwords":true,"minimum_characters_text":"At least 12 characters","upper_and_lower_case_text":"1 uppercase & 1 lowercase","number_text":"1 number (0-9)","symbol_text":"1 symbol (!@#$%^&*)","repeat_password_label":"Repeat password","repeat_password_placeholder":"Repeat your password","passwords_dont_match_text":"Passwords don't match."},"email_one_time_code_settings":{"expiration":"5_MINUTES","input_label":"Verification code","input_placeholder":"Enter verification code","resend_text":"Resend","invalid_code_text":"Invalid code."},"secondary_login_methods":[],"sms_one_time_code_settings":null,"authenticator_settings":null,"input_label":"Email","input_placeholder":"Enter your email"},"google_settings":{"client_id":null,"client_secret":null,"user_type":"INTERNAL","email_domains":[]},"sso_settings":{"type":"SAML","email_domains":[],"saml":{"acs_url":null,"audience_url":null,"metadata_xml":null,"email_key":null,"first_name_key":null,"last_name_key":null},"open_id":{"callback_url":null,"provider_url":null,"token_service_url":null,"client_id":null,"client_secret":null}}},"auto_invite":false},"user_connection":{"datasource":{"id":"31a34dd3-7291-471a-8961-78f7e836b77d","datasource_integration_type":"AIRTABLE"},"attributes":{"emailFieldName":"Email","magicTokenFieldName":"Magic Link"}},"user_group_redirection":null,"polling_configs":{"defaultPollingInterval":10000,"datasources":{"SQL_SERVER":8000,"MARIADB":8000,"MYSQL":8000,"XANO_SQL":8000,"GOOGLE_SHEET":8000,"SUPABASE":8000,"NOTION":8000,"SMARTSUITE":8000,"MONDAY":8000,"SOFTR_TABLES":8000,"CLICKUP":8000,"CODA":8000,"MICROSOFT_EXCEL":8000,"AIRTABLE":8000,"POSTGRESQL":8000}},"comment_settings":{"general_settings":{"allow_mentions":false,"allow_attachments":false,"rich_text_formatting":false,"block_display_settings":{"sort_direction":"NEWEST_ON_TOP","surface":false,"show_vertical_line":false},"side_panel_display_settings":{"sort_direction":"NEWEST_ON_TOP","surface":false,"show_vertical_line":false,"comment_panel_display_mode":"PUSH_MAIN_CONTENT"},"keep_comments_for_inactive_users":true,"comment_deletion_user_groups":[]},"message_settings":{"comment_list_title":"Comments","comment_box_placeholder":"Leave a comment...","notifications_toggle_label":"Enable/disable notifications","submit_button":{"label":"Submit","icon":""},"cancel_button":{"label":"Cancel","icon":""},"edit_button":{"label":"Edit","icon":"plus"},"delete_button":{"label":"Delete","icon":"trash-01"},"load_more_comments_button":{"label":"Load more comments","icon":""},"empty_state_message":"No comments yet.","edited_comment_indicator":"(edited)"},"mention_permissions":[],"comment_block_settings":[]},"spa_mode_enabled":false,"agents":null}}}).then(() => window.dispatchEvent(new Event("@softr/page-content-loaded")));

</script>


<script src="https://assets.softr-files.com/libs/iframe-resizer/4.2.11/iframeResizer.contentWindow.min.js" crossorigin="anonymous"></script>

<!-- Localhost -->
<script type="text/javascript">
    if (window.location.hostname === 'localhost') {
        if (getUrlParam('domain')) {
            setCookie('serverName', getUrlParam('domain'), 30);
        }
    }

    function setCookie(name, value, days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "expires=" + date.toUTCString();
        document.cookie = name + "=" + value + ";" + expires + ";path=/;" + "SameSite=None; Secure";
    }

    function getUrlParam(name) {
        const url = new URL(window.location.href);
        let param;
        for (var key of url.searchParams.keys()) {
            if (key.toLowerCase() === name.toLowerCase()) {
                param = url.searchParams.get(name);
                break;
            }
        }
        return param;
    }
</script>

<!-- Modal HTML -->
<div id="sw-modal" class="sw-modal" aria-hidden="true">
    <div class="sw-modal-overlay" data-micromodal-close>
        <div tabindex="-1" class="sw-modal-container">
            <div role="dialog" aria-modal="true" aria-labelledby="micromodal-title">
                <button aria-label="Close modal" class="sw-modal-close" onclick="MicroModal.close('sw-modal')"></button>
                <div id="sw-modal-content">
                    <iframe class="sw-modal-iframe"></iframe>
                </div>
            </div>
        </div>
    </div>
</div>

<!--Scroll to section-->
<script>

    window.addEventListener(BlocksRenderedEventName, function () {
        $('a').each(function (index, el) {
            let href = $(el).attr('href');
            let path = cleanSlugFromPath(location.pathname);
            if (href && href.startsWith(path + '#')) {
                const scrollTo = href.split('#')[1];
                $(this).attr('href', '#' + scrollTo);
            }
        });

        function cleanSlugFromPath(pagePath) {
            if (pagePath.includes("/r/rec")) {
                pagePath = pagePath.substring(0, pagePath.indexOf("/r/rec"));
                pagePath = pagePath.substring(0, pagePath.lastIndexOf("/"));
            }

            return pagePath + (pagePath.endsWith('/') ? '' : '/');
        }
    });

</script>

</body>

</html>
