import * as Framer from "framer"; import { ResolveLinks, useSiteRefs } from "framer"; import * as React from "react"; import { createPortal } from "react-dom"; import * as ReactDOM from "react-dom/client"; import BaseBlack from "https://framerusercontent.com/modules/cbkKBTX8UtbnQrkSCOl1/u6Z44T5DyJAn4qPFmNLs/pt63jZDeI.js"; import Base from "https://framerusercontent.com/modules/yLdVt2rSZP8xiaDLjXHG/iP8kdCPNwwoGw83Q8JeS/L562wYucj.js"; const routes = {augiA20Il: {elements: {N9HS7cwGB: "nav-change"}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/sl0wzEkBLrrO59a98Hyu/FrL5MHplbJ0rFY5ZPEYw/augiA20Il.js")), path: "/"}, wHf8006AD: {elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/fJnRrUj7mG5V0PdaEvki/4N0Bos8cIIYCTCzzJGio/wHf8006AD.js")), path: "/about-us"}, hRDmEOTDi: {elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/rAEju7kGXjyrEnuyDsrO/QrYjVeat9w7fCKsFtTFt/hRDmEOTDi.js")), path: "/contact"}, I7Uubn7gZ: {elements: {mjRm8Qg1n: "nav-change"}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/eAikFZVTvwA8rJ0km0bA/LR0yTtkOyAa2CWbynAJq/I7Uubn7gZ.js")), path: "/our-services"}, A0KLOaQwh: {elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/dyh4d2xcPrtGfTiUjJce/H6CPeH9PCvmQF9AGOD9N/A0KLOaQwh.js")), path: "/404"}, dILLGiTNT: {elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/1fVAADwgiZZEvzxa9CtT/qY3RKOwv8YMqPXE4VliU/dILLGiTNT.js")), path: "/pricing"}, Zig8uQuqy: {elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/e6uCw1G82HCF0IcF3tB0/0IgOw0ItFlIIWPS6gFcz/Zig8uQuqy.js")), path: "/blog"}, ClCKQsCmR: {collectionId: "nrURXlajq", elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/je8Izcl3RY2tk1jr7Rfu/Iyf3bQDyKz3St5M42qsP/ClCKQsCmR.js")), path: "/teams/:ZSeqozLkm"}, RNZTwtDuQ: {collectionId: "QSCEvOCzd", elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/wjK4wo1j80V4qrO5xOz0/qyILCgzCIKvzz3krVWqG/RNZTwtDuQ.js")), path: "/our-services/:eFnXXZiS4"}, Ksnb25Hzy: {collectionId: "rAjl8lYSc", elements: {}, page: Framer.lazy(() => import("https://framerusercontent.com/modules/ymRn9mGhhcacMrqbXBzf/UNYRpKjlTSHgTldBqzro/Ksnb25Hzy.js")), path: "/blog/:CqVvgMUzo"}} const locales = [{code: "en", id: "default", name: "English", slug: "", textDirection: "ltr"}] const collectionUtils = {nrURXlajq: async () => (await import("https://framerusercontent.com/modules/3ONDKN0LZbRCu1pIPSje/Ue03n6tjlLpJW9T7Wbrh/nrURXlajq.js"))?.["utils"], QSCEvOCzd: async () => (await import("https://framerusercontent.com/modules/aCOqmmDfcWdpxunl2Vbu/aiAEaNN0SilhH3zeYPaR/QSCEvOCzd.js"))?.["utils"], rAjl8lYSc: async () => (await import("https://framerusercontent.com/modules/n51KlW6VfYdV3MbDynGO/0aLo0YM7b81F5yP7PCuI/rAjl8lYSc.js"))?.["utils"]} const framerSiteId = "cce53e8f7a48fbe3e73ad7d49953710f23be1be01c73a68af5c2a6dc063ae2b5" function Template({webPageId, children, style, ...rest}) {const props1 = {twqwx_YSR: {href: {hash: ":N9HS7cwGB", webPageId: "augiA20Il"}, refKey: true}} const props2 = {EfEi2pPRP: true} const props3 = {...props2, EfEi2pPRP: false} const props4 = {...props1, twqwx_YSR: {href: {hash: ":mjRm8Qg1n", webPageId: "I7Uubn7gZ"}, refKey: true}} const siteRef = useSiteRefs() const templateProps = {A0KLOaQwh: props3, augiA20Il: props1, ClCKQsCmR: props2, dILLGiTNT: props2, hRDmEOTDi: props3, I7Uubn7gZ: props4, Ksnb25Hzy: props2, RNZTwtDuQ: props2, wHf8006AD: props2, Zig8uQuqy: props2} const props = templateProps[webPageId] ?? {} switch (webPageId) {case "augiA20Il": case "I7Uubn7gZ": return React.createElement(ResolveLinks, {links: [props["twqwx_YSR"]]}, (resolvedLinks) => React.createElement(Base, {...props, key: "Base", style, twqwx_YSR: siteRef(resolvedLinks[0])}, children(true))); case "wHf8006AD": case "hRDmEOTDi": case "A0KLOaQwh": case "dILLGiTNT": case "Zig8uQuqy": case "ClCKQsCmR": case "RNZTwtDuQ": case "Ksnb25Hzy": return React.createElement(BaseBlack, {...props, key: "BaseBlack", style}, children(true)); default: { return children(false) }}} export function getLayoutTemplateBreakpoints(routeId) {switch (routeId) {case "augiA20Il": case "I7Uubn7gZ": return [{hash: "m5w6qg", mediaQuery: "(min-width: 1280px)"}, {hash: "r4pt59", mediaQuery: "(min-width: 810px) and (max-width: 1279.98px)"}, {hash: "1h90a08", mediaQuery: "(max-width: 809.98px)"}] case "wHf8006AD": case "hRDmEOTDi": case "A0KLOaQwh": case "dILLGiTNT": case "Zig8uQuqy": case "ClCKQsCmR": case "RNZTwtDuQ": case "Ksnb25Hzy": return [{hash: "1avm65q", mediaQuery: "(min-width: 1280px)"}, {hash: "1ye1p48", mediaQuery: "(min-width: 810px) and (max-width: 1279.98px)"}, {hash: "1w70g2p", mediaQuery: "(max-width: 809.98px)"}] default: { return undefined }}} const isBrowser = typeof document !== "undefined" const isBot = isBrowser && /bot|-google|google-|yandex|ia_archiver|crawl|spider/iu.test(navigator.userAgent) export async function getPageRoot({ routeId, pathVariables, localeId, collectionItemId }) { const rootPreload = routes[routeId].page.preload() const content = React.createElement( Framer.PageRoot, { isWebsite: true, environment: "site", routeId, pathVariables, routes, collectionUtils, framerSiteId, notFoundPage: Framer.lazy(() => import("https://framerusercontent.com/modules/dyh4d2xcPrtGfTiUjJce/H6CPeH9PCvmQF9AGOD9N/A0KLOaQwh.js")), isReducedMotion: undefined, localeId, locales, preserveQueryParams: undefined, siteCanonicalURL: "https://aeline.framer.website", EditorBar: typeof window !== "undefined" ? (() => { if (isBot) { console.log("[Framer On-Page Editing] Unavailable because navigator is bot") return } return Framer.lazy(async () => { const dependencies = { __version: 3, framer: { useCurrentRoute: Framer.useCurrentRoute, useLocaleInfo: Framer.useLocaleInfo, useRouter: Framer.useRouter, }, react: { createElement: React.createElement, Fragment: React.Fragment, memo: React.memo, useCallback: React.useCallback, useEffect: React.useEffect, useRef: React.useRef, useState: React.useState, useLayoutEffect: React.useLayoutEffect, }, "react-dom": { createPortal }, } window.__framer_editorBarDependencies = dependencies const { createEditorBar } = await import("/framer.com/edit/init.mjs") return { default: createEditorBar(), } }) })() : undefined , adaptLayoutToTextDirection: true, LayoutTemplate: Template, loadSnippetsModule: new Framer.LazyValue(() => import("https://framerusercontent.com/modules/7S82agF082Y3p1LMESgq/iyg7ZkWgfsEAU2Cf9htJ/snippets.js")), initialCollectionItemId: collectionItemId, } ) const contentWithFeaturesContext = React.createElement( Framer.LibraryFeaturesProvider, { children: content, value: {autobahnNavigation: true, disableCustomCode: false, editorBarDisableFrameAncestorsSecurity: false, motionDivToDiv: false, onPageLocalizationSupport: true, onPageMoveTool: true, synchronousNavigationOnDesktop: false, yieldOnTap: false} } ) const contentWithGracefullyDegradingErrorBoundary = React.createElement(Framer.GracefullyDegradingErrorBoundary, { children: contentWithFeaturesContext }) const page = React.createElement(Framer.PageEffectsProvider, { children: contentWithGracefullyDegradingErrorBoundary, value: {global: {enter: {mask: {type: "circle", x: "50%", y: "50%"}, opacity: 0, rotate: 0, rotate3d: false, rotateX: 0, rotateY: 0, scale: 1, transition: {bounce: 0, damping: 30, delay: 0, duration: 0.25, durationBasedSpring: true, ease: [0.27, 0, 0.51, 1], mass: 1, stiffness: 400, type: "tween"}, x: "0px", y: "0px"}}, routes: {}} }) // We don't want the initial render to immediately have to suspend. await rootPreload return page } if (isBrowser) { window.__framer_importFromPackage = (packageAndFilename, exportIdentifier) => () => { return React.createElement(Framer.ErrorPlaceholder, { error: 'Package component not supported: "' + exportIdentifier + '" in "' + packageAndFilename + '"' }) } window.__framer_events = window.__framer_events || [] // Initialize lazy modules cache for hydration Framer.initLazyModulesCache() // Fallback support for stack gaps Framer.installFlexboxGapWorkaroundIfNeeded() const container = document.getElementById("main") // We know that #main is parsed before this script, so we don't need to wait for DOMContentLoaded or similar events. if ("framerHydrateV2" in container.dataset) main(true, container) else main(false, container) } function track() { if (!isBrowser) return window.__framer_events.push(arguments) } async function main(shouldHydrate, container) { function handleError(error, errorInfo, recoverable = true) { if (error.caught || window.__framer_hadFatalError) return // we already logged it const componentStack = errorInfo?.componentStack if (recoverable) { console.warn("Caught a recoverable error. The site is still functional, but might have some UI flickering or degraded page load performance. If you are the author of this website, update external components and check recently added custom code or code overrides to fix the following server/client mismatches:\n", error, componentStack) // we only want to collect 1%, because this can be quite noisy (floods the data pipeline) if (Math.random() > 0.01) return } else { console.error("Caught a fatal error. Please report the following to the Framer team via /framer.com/contact/:\n", error, componentStack) } track(recoverable ? "published_site_load_recoverable_error" : "published_site_load_error", { message: String(error), componentStack, // componentStack is more useful stack: componentStack ? undefined : error instanceof Error && typeof error.stack === "string" ? error.stack : null, }) } try { let routeId, localeId, pathVariables, breakpoints, routeData if (shouldHydrate) { routeData = JSON.parse(container.dataset["framerHydrateV2"]) routeId = routeData.routeId localeId = routeData.localeId pathVariables = routeData.pathVariables breakpoints = routeData.breakpoints routeId = Framer.patchRoutesForABTesting(routes, routeId) // Prioritize optimized route id to avoid flickering in browsers not supporting the server-timing header (Safari older than 16.4) } else { Framer.patchRoutesForABTesting(routes, undefined) // This must happen before inferInitialRouteFromPath const serverRouteExperimentEnabled = true const serverRoute = serverRouteExperimentEnabled && performance.getEntriesByType("navigation")[0]?.serverTiming?.find(e => e.name === "route")?.description if (serverRoute) { const routeData = new URLSearchParams(serverRoute) routeId = routeData.get("id") localeId = routeData.get("locale") for (const [key, value] of routeData.entries()) { if (!key.startsWith("var.")) continue pathVariables ??= {} pathVariables[key.slice(4)] = value } } if (!routeId || !localeId) { const routeData = Framer.inferInitialRouteFromPath(routes, decodeURIComponent(location.pathname), true, locales) routeId = routeData.routeId localeId = routeData.localeId pathVariables = routeData.pathVariables } } const pagePromise = getPageRoot({ routeId, localeId, pathVariables, collectionItemId: routeData?.collectionItemId, }) if (typeof window !== "undefined") { void (async () => { const route = routes[routeId] const defaultLocaleId = "default" const framerLocale = locales.find(({ id }) => !localeId ? id === defaultLocaleId : id === localeId).code let collectionItemId = routeData?.collectionItemId ?? null if (collectionItemId === null && route?.collectionId && collectionUtils) { const utils = await collectionUtils[route.collectionId]?.() const [slug] = Object.values(pathVariables) if (utils && typeof slug === "string") { collectionItemId = (await utils.getRecordIdBySlug(slug, framerLocale || undefined)) ?? null } } const resolvedDateTimeOptions = Intl.DateTimeFormat().resolvedOptions() const timezone = resolvedDateTimeOptions.timeZone const locale = resolvedDateTimeOptions.locale // wait for the page to be activated before sending the pageview event // https://developer.chrome.com/docs/web-platform/prerender-pages#impact-on-analytics await new Promise((resolve) => { if (document.prerendering) { document.addEventListener("prerenderingchange", resolve, { once: true }) } else { resolve() } }) window.__framer_events.push([ "published_site_pageview", { framerSiteId: framerSiteId ?? null, version: 2, routePath: route?.path || "/", collectionItemId, framerLocale: framerLocale || null, webPageId: route?.abTestingVariantId ?? routeId, abTestId: route?.abTestId, referrer: document.referrer || null, url: window.location.href, hostname: window.location.hostname || null, pathname: window.location.pathname || null, hash: window.location.hash || null, search: window.location.search || null, timezone, locale, }, "eager" ]) // Yield to avoid blocking the main thread with the user code await Framer.yieldToMain({ priority: "background", ensureContinueBeforeUnload: true, continueAfter: "paint" }) document.dispatchEvent(new CustomEvent("framer:pageview", { detail: { framerLocale: framerLocale || null } })) })() } const page = await pagePromise if (shouldHydrate) { Framer.withPerformanceMarks("framer-rewrite-breakpoints", () => { Framer.removeHiddenBreakpointLayersV2(breakpoints) window.__framer_onRewriteBreakpoints?.(breakpoints) }) const startTransition = isBot ? cb => cb() : React.startTransition startTransition(() => { Framer.markHydrationStart() if (true) Framer.turnOffReactEventHandling() ReactDOM.hydrateRoot(container, page, { onRecoverableError: handleError }) }) } else { ReactDOM.createRoot(container, { onRecoverableError: handleError }).render(page) } } catch (error) { handleError(error, undefined, false) throw error } } ;(function () { if (!isBrowser) return React.startTransition(() => { ReactDOM.hydrateRoot( document.getElementById("__framer-badge-container"), React.createElement(React.Suspense, {}, React.createElement(React.lazy(() => import("__framer-badge")))) ) }) })()