PageSourceSearch

https://paxflow.io/

html paxflow.io collected 2026-10-07 15:57:34 UTC 195,878 bytes, 3,910 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-GB">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1">
6    <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
7
8	<!-- This site is optimized with the Yoast SEO plugin v28.5 - https://yoast.com/product/yoast-seo-wordpress/ -->
9	<title>PaxFlow | TravelTech Tools to Streamline Tour Operations</title>
10	<meta name="description" content="Streamline your tour operations with PaxFlow’s TravelTech tools for automation, AI, &amp; self-service. Save time, reduce manual tasks, grow faster. Learn more" />
11	<link rel="canonical" href="https://paxflow.io/" />
12	<meta property="og:locale" content="en_GB" />
13	<meta property="og:type" content="website" />
14	<meta property="og:title" content="PaxFlow | TravelTech Tools to Streamline Tour Operations" />
15	<meta property="og:description" content="Streamline your tour operations with PaxFlow’s TravelTech tools for automation, AI, &amp; self-service. Save time, reduce manual tasks, grow faster. Learn more" />
16	<meta property="og:url" content="https://paxflow.io/" />
17	<meta property="og:site_name" content="PaxFlow" />
18	<meta property="article:modified_time" content="2026-06-19T17:07:13+00:00" />
19	<meta name="twitter:card" content="summary_large_image" />
20	
20<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/paxflow.io\/","url":"https:\/\/paxflow.io\/","name":"PaxFlow | TravelTech Tools to Streamline Tour Operations","isPartOf":{"@id":"https:\/\/paxflow.io\/#website"},"about":{"@id":"https:\/\/paxflow.io\/#organization"},"datePublished":"2026-06-01T13:51:18+00:00","dateModified":"2026-06-19T17:07:13+00:00","description":"Streamline your tour operations with PaxFlow’s TravelTech tools for automation, AI, & self-service. Save time, reduce manual tasks, grow faster. Learn more","breadcrumb":{"@id":"https:\/\/paxflow.io\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/paxflow.io\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/paxflow.io\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/paxflow.io\/#website","url":"https:\/\/paxflow.io\/","name":"PaxFlow","description":"Streamline Tour Operations with Ease","publisher":{"@id":"https:\/\/paxflow.io\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/paxflow.io\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/paxflow.io\/#organization","name":"PaxFlow","url":"https:\/\/paxflow.io\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/paxflow.io\/#\/schema\/logo\/image\/","url":"https:\/\/paxflow.io\/wp-content\/uploads\/2026\/06\/cropped-PaxFlow-logo-original-landscape.png","contentUrl":"https:\/\/paxflow.io\/wp-content\/uploads\/2026\/06\/cropped-PaxFlow-logo-original-landscape.png","width":280,"height":80,"caption":"PaxFlow"},"image":{"@id":"https:\/\/paxflow.io\/#\/schema\/logo\/image\/"}}]}</script>
20
21	<!-- / Yoast SEO plugin. -->
22
23
24<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://paxflow.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpaxflow.io%2F" />
25<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://paxflow.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpaxflow.io%2F&#038;format=xml" />
26<style id="wp-img-auto-sizes-contain-inline-css">
27img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
28/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
29</style>
30<style id="wp-emoji-styles-inline-css">
31
32	img.wp-smiley, img.emoji {
33		display: inline !important;
34		border: none !important;
35		box-shadow: none !important;
36		height: 1em !important;
37		width: 1em !important;
38		margin: 0 0.07em !important;
39		vertical-align: -0.1em !important;
40		background: none !important;
41		padding: 0 !important;
42	}
43/*# sourceURL=wp-emoji-styles-inline-css */
44</style>
45<style id="wp-block-library-inline-css">
46:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
46--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
47
48/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
49</style>
50<style id="classic-theme-styles-inline-css">
51/*! This file is auto-generated */
52.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
53/*# sourceURL=/wp-includes/css/classic-themes.min.css */
54</style>
55
56<style id="global-styles-inline-css">
57:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
570) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
57.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
58/*# sourceURL=global-styles-inline-css */
59</style>
60
61<link rel='stylesheet' id='paxflow-page-blocks-css' href='https://paxflow.io/wp-content/plugins/paxflow-page-blocks/assets/paxflow-page-blocks.css?ver=1.1.0' media='all' />
62<link rel='stylesheet' id='paxflow-figma-index-DI-05Qc7.css-css' href='https://paxflow.io/wp-content/themes/paxflow-chris-theme-mobile-fixed/dist/assets/index-DI-05Qc7.css?ver=1781892046' media='all' />
63<style id="kadence-blocks-global-variables-inline-css">
64:root {--global-kb-font-size-sm:clamp(0.8rem, 0.73rem + 0.217vw, 0.9rem);--global-kb-font-size-md:clamp(1.1rem, 0.995rem + 0.326vw, 1.25rem);--global-kb-font-size-lg:clamp(1.75rem, 1.576rem + 0.543vw, 2rem);--global-kb-font-size-xl:clamp(2.25rem, 1.728rem + 1.63vw, 3rem);--global-kb-font-size-xxl:clamp(2.5rem, 1.456rem + 3.26vw, 4rem);--global-kb-font-size-xxxl:clamp(2.75rem, 0.489rem + 7.065vw, 6rem);}:root {--global-palette1: #3182CE;--global-palette2: #2B6CB0;--global-palette3: #1A202C;--global-palette4: #2D3748;--global-palette5: #4A5568;--global-palette6: #718096;--global-palette7: #EDF2F7;--global-palette8: #F7FAFC;--global-palette9: #ffffff;}
65/*# sourceURL=kadence-blocks-global-variables-inline-css */
66</style>
67<style id="paxflow-vce-v5-style-inline-css">
68#paxflow-vce-toolbar {
69    position: fixed;
70    right: 18px;
71    bottom: 18px;
72    z-index: 99999999;
73    display: flex;
74    gap: 8px;
75    align-items: center;
76    font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
77}
78#paxflow-vce-toolbar button {
79    border: 0;
80    border-radius: 12px;
81    padding: 12px 14px;
82    font-weight: 800;
83    cursor: pointer;
84    box-shadow: 0 12px 30px rgba(15,23,42,.18);
85}
86#paxflow-vce-edit-toggle { background: #8b16ff; color: #fff; }
87#paxflow-vce-apply { background: #111827; color: #fff; }
88#paxflow-vce-clear { background: #fff; color: #111827; border: 1px solid #e5e7eb !important; }
89.paxflow-vce-active [data-paxflow-vce-editable="1"] { cursor: pointer !important; }
90.paxflow-vce-active [data-paxflow-vce-editable="1"]:hover { outline: 3px solid #9b20ff !important; outline-offset: 3px !important; }
91.paxflow-vce-selected { outline: 4px solid #9b20ff !important; outline-offset: 4px !important; }
92#paxflow-vce-modal-backdrop {
93    position: fixed;
94    inset: 0;
95    z-index: 99999998;
96    display: none;
97    align-items: center;
98    justify-content: center;
99    background: rgba(17, 24, 39, .62);
100    padding: 20px;
101    font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
102}
103#paxflow-vce-modal-backdrop.is-open { display: flex; }
104#paxflow-vce-modal {
105    width: min(620px, 100%);
106    background: #fff;
107    border-radius: 18px;
108    box-shadow: 0 30px 80px rgba(0,0,0,.24);
109    padding: 22px;
110    color: #111827;
111}
112#paxflow-vce-modal h3 { margin: 0 0 16px; font-size: 20px; }
113#paxflow-vce-modal label { display: block; margin: 12px 0 6px; font-size: 13px; font-weight: 800; color: #374151; }
114#paxflow-vce-modal input, #paxflow-vce-modal textarea, #paxflow-vce-modal select {
115    width: 100%;
116    box-sizing: border-box;
117    border: 1px solid #d1d5db;
118    border-radius: 10px;
119    padding: 11px 12px;
120    font: inherit;
121}
122#paxflow-vce-modal textarea { min-height: 110px; resize: vertical; }
123#paxflow-vce-selector { font-size: 12px !important; color: #6b7280; }
124.paxflow-vce-help { font-size: 12px; color: #6b7280; margin-top: 6px; line-height: 1.4; }
125.paxflow-vce-row { display: grid; grid-template-columns: 1fr; gap: 10px; }
126.paxflow-vce-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 18px; }
127.paxflow-vce-actions button { border: 0; border-radius: 10px; padding: 11px 14px; font-weight: 800; cursor: pointer; }
128#paxflow-vce-cancel { background: #f3f4f6; color: #111827; }
129#paxflow-vce-save { background: #8b16ff; color: #fff; }
130/*# sourceURL=paxflow-vce-v5-style-inline-css */
131</style>
132<link rel="https://api.w.org/" href="https://paxflow.io/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://paxflow.io/wp-json/wp/v2/pages/27" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://paxflow.io/xmlrpc.php?rsd" />
133<link rel='shortlink' href='https://paxflow.io/' />
134<!-- Google Tag Manager -->
135<script>
vendor: 331 bytes, lines 135-139
135(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
136new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
137j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
138'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
139})(window,document,'script','dataLayer','
139GTM-5LKB4KP
vendor: 3 bytes, line 139
139');
139</script>
139
140<!-- End Google Tag Manager --><style class="wpcode-css-snippet">.whitespace-nowrap {
141	white-space: nowrap !important;
142}
143
144.inline-block {
145	display: inline-block !important;
146}</style>    <style id="paxflow-site-ext-shared-footer-css">
147        .pf-react-footer {
148            border-top: 1px solid #e5e7eb;
149            padding: 80px 48px;
150            background: #ffffff;
151        }
152        .pf-react-footer-inner { max-width: 1440px; margin: 0 auto; }
153        .pf-react-footer-main {
154            display: grid;
155            grid-template-columns: repeat(5, minmax(0, 1fr));
156            gap: 48px;
157            margin-bottom: 80px;
158        }
159        .pf-react-footer-brand { grid-column: span 2; }
160        .pf-react-footer-logo {
161            display: inline-flex;
162            align-items: center;
163            margin-bottom: 24px;
164            text-decoration: none;
165        }
166        .pf-react-footer-logo img {
167            display: block;
168            height: 40px;
169            width: auto;
170            max-width: 180px;
171            object-fit: contain;
172        }
173        .pf-react-footer-logo span {
174            color: #111827;
175            font-size: 28px;
176            font-weight: 800;
177            letter-spacing: -0.04em;
178        }
179        .pf-react-footer-brand p {
180            max-width: 320px;
181            margin: 0;
182            color: #4b5563;
183            font-size: 15px;
184            line-height: 1.65;
185        }
186        .pf-react-footer-socials {
187            display: flex;
188            align-items: center;
189            gap: 16px;
190            margin-top: 24px;
191        }
192        .pf-react-footer-socials a {
193            width: 40px;
194            height: 40px;
195            border-radius: 10px;
196            background: #f3f4f6;
197            display: flex;
198            align-items: center;
199            justify-content: center;
200            color: #374151;
201            transition: background 0.2s ease;
202        }
203        .pf-react-footer-socials a:hover { background: #e5e7eb; }
204        .pf-react-footer-socials svg { width: 20px; height: 20px; fill: currentColor; }
205        .pf-react-footer-links {
206            grid-column: span 3;
207            display: grid;
208            grid-template-columns: repeat(4, minmax(0, 1fr));
209            gap: 32px;
210        }
211        .pf-react-footer-links a {
212            display: block;
213            color: #4b5563;
214            font-size: 15px;
215            line-height: 1.4;
216            text-decoration: none;
217            margin-bottom: 16px;
218        }
219        .pf-react-footer-links a:hover { color: #111827; }
220        .pf-react-footer-bottom {
221            padding-top: 40px;
222            border-top: 1px solid #e5e7eb;
223            color: #4b5563;
224            font-size: 14px;
225        }
226        .pf-react-footer-bottom p { margin: 0; }
227        @media (max-width: 768px) {
228            .pf-react-footer { padding: 56px 20px; }
229            .pf-react-footer-main {
230                grid-template-columns: 1fr;
231                gap: 40px;
232                margin-bottom: 56px;
233            }
234            .pf-react-footer-brand,
235            .pf-react-footer-links { grid-column: auto; }
236            .pf-react-footer-links {
237                grid-template-columns: repeat(2, minmax(0, 1fr));
238                gap: 20px 28px;
239            }
240        }
241    </style>
242    <link rel="icon" href="https://paxflow.io/wp-content/uploads/2026/08/cropped-PaxFlow-Favicon-1-32x32.png" sizes="32x32" />
243<link rel="icon" href="https://paxflow.io/wp-content/uploads/2026/08/cropped-PaxFlow-Favicon-1-192x192.png" sizes="192x192" />
244<link rel="apple-touch-icon" href="https://paxflow.io/wp-content/uploads/2026/08/cropped-PaxFlow-Favicon-1-180x180.png" />
245<meta name="msapplication-TileImage" content="https://paxflow.io/wp-content/uploads/2026/08/cropped-PaxFlow-Favicon-1-270x270.png" />
246<style id="wp-custom-css">
247@media (max-width: 768px) {
248  #root section[class*="pt-40"] {
249    padding-top: 0px !important;
250  }
251
252  #root section[class*="px-12"] {
253    padding-left: 20px !important;
254    padding-right: 20px !important;
255  }
256
257  #root section[class*="pb-32"] {
258    padding-bottom: 48px !important;
259  }
260
261  #root [class*="col-span-12"],
262  #root [class*="lg:col-span-6"],
263  #root [class*="space-y-10"],
264  #root [class*="space-y-6"] {
265    width: 100% !important;
266    max-width: 100% !important;
267    margin-left: 0 !important;
268    margin-right: 0 !important;
269    box-sizing: border-box !important;
270  }
271}
272
273</style>
274    <style>
275        @media (max-width: 768px) {
276            /*
277             * Fix Figma/Tailwind hero section mobile spacing.
278             * pt-40 = huge top gap, px-12 = excessive side padding.
279             */
280            #root section[class*="pt-40"],
281            #root section[class*="px-12"],
282            #root section[class*="overflow-hidden"] {
283                padding-top: 24px !important;
284                padding-left: 24px !important;
285                padding-right: 24px !important;
286                overflow-x: hidden !important;
287                box-sizing: border-box !important;
288            }
289
290            /*
291             * Fix inner hero/grid columns being wider than viewport.
292             */
293            #root [class*="col-span-12"],
294            #root [class*="lg:col-span-6"],
295            #root [class*="space-y-10"],
296            #root [class*="space-y-6"] {
297                width: 100% !important;
298                max-width: 100% !important;
299                margin-left: 0 !important;
300                margin-right: 0 !important;
301                box-sizing: border-box !important;
302            }
303
304            /*
305             * Keep headings readable and wrapped on mobile.
306             */
307            #root h1,
308            #root h1 span,
309            #root h2,
310            #root h2 span {
311                max-width: 100% !important;
312                white-space: normal !important;
313                overflow-wrap: break-word !important;
314                word-break: normal !important;
315            }
316
317            #root h1 {
318                font-size: clamp(38px, 10vw, 48px) !important;
319                line-height: 1.08 !important;
320            }
321
322            /*
323             * Make hero media/cards fit inside mobile viewport.
324             */
325            #root img,
326            #root video,
327            #root iframe,
328            #root picture,
329            #root canvas,
330            #root svg {
331                max-width: 100% !important;
332                height: auto !important;
333                object-fit: contain !important;
334            }
335        }
336    </style>
337        <style>
338        /*
339         * Desktop/tablet: restore normal React/Figma pricing table behaviour.
340         */
341        @media (min-width: 769px) {
342            #root table {
343                width: 100% !important;
344                min-width: 0 !important;
345                max-width: 100% !important;
346                table-layout: auto !important;
347            }
348
349            #root table th,
350            #root table td {
351                width: auto !important;
352                min-width: 0 !important;
353                max-width: none !important;
354                position: static !important;
355                transform: none !important;
356            }
357
358            #root div:has(> table) {
359                overflow-x: visible !important;
360                width: 100% !important;
361                max-width: 100% !important;
362            }
363
364            .paxflow-pricing-table-scroll-wrap {
365                display: contents !important;
366            }
367        }
368
369        /*
370         * Mobile only: allow the full pricing table to swipe horizontally.
371         */
372        @media (max-width: 768px) {
373            #root section:has(table) {
374                overflow-x: visible !important;
375            }
376
377            #root div:has(> table) {
378                width: 100% !important;
379                max-width: 100% !important;
380                overflow-x: auto !important;
381                overflow-y: visible !important;
382                -webkit-overflow-scrolling: touch !important;
383                touch-action: pan-x pan-y !important;
384            }
385
386            #root div:has(> table) table {
387                width: 1040px !important;
388                min-width: 1040px !important;
389                max-width: none !important;
390                table-layout: fixed !important;
391            }
392
393            #root div:has(> table) th,
394            #root div:has(> table) td {
395                position: static !important;
396                left: auto !important;
397                right: auto !important;
398                transform: none !important;
399                overflow: visible !important;
400                white-space: normal !important;
401                box-sizing: border-box !important;
402            }
403
404            #root div:has(> table) th:first-child,
405            #root div:has(> table) td:first-child {
406                width: 360px !important;
407                min-width: 360px !important;
408                max-width: 360px !important;
409            }
410
411            #root div:has(> table) th:not(:first-child),
412            #root div:has(> table) td:not(:first-child) {
413                width: 170px !important;
414                min-width: 170px !important;
415                max-width: 170px !important;
416                text-align: center !important;
417            }
418
419            .paxflow-pricing-table-scroll-wrap {
420                display: contents !important;
421            }
422        }
423    </style>
424        <style>
425        .paxflow-home-video-modal-header,
426        .paxflow-home-video-modal-header h4,
427        #paxflow-home-video-modal h4,
428        #paxflow-home-video-modal .paxflow-home-video-modal-title {
429            display: none !important;
430            visibility: hidden !important;
431            height: 0 !important;
432            margin: 0 !important;
433            padding: 0 !important;
434            border: 0 !important;
435        }
436
437        #paxflow-home-video-modal .paxflow-home-video-modal-panel {
438            background: transparent !important;
439            box-shadow: none !important;
440            overflow: visible !important;
441        }
442
443        #paxflow-home-video-modal .paxflow-home-video-modal-body {
444            padding: 0 !important;
445            margin: 0 !important;
446        }
447
448        #paxflow-home-video-modal .paxflow-home-video-frame {
449            margin: 0 !important;
450        }
451    </style>
452    </head>
453
454<body class="home wp-singular page-template-default page page-id-27 wp-custom-logo wp-theme-paxflow-chris-theme-mobile-fixed">
455<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 455-456
455
456<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
456GTM-5LKB4KP
vendor: 85 bytes, lines 456-457
456"
457height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
458<!-- End Google Tag Manager (noscript) -->
459
460<div id="root"></div>
461
462        <header id="paxflow-wp-desktop-header">
463            <div class="paxflow-wp-desktop-inner">
464                <a class="paxflow-wp-desktop-logo" href="https://paxflow.io/" aria-label="PaxFlow">
465                    <img src="https://paxflow.io/wp-content/uploads/2026/06/cropped-PaxFlow-logo-original-landscape.png" alt="PaxFlow">                </a>
466
467                <nav class="paxflow-wp-desktop-nav" aria-label="Main navigation">
468                    <ul id="menu-dekstop-menu" class="paxflow-wp-desktop-menu"><li id="menu-item-41" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-41"><a href="https://paxflow.io/platform/">Platform</a></li>
469<li id="menu-item-42" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-42"><a href="https://paxflow.io/insights/">Insights</a></li>
470<li id="menu-item-10243" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10243"><a href="https://paxflow.io/partner-with-paxflow/">Partners</a></li>
471<li id="menu-item-40" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-40"><a href="https://paxflow.io/pricing/">Pricing</a></li>
472</ul>                </nav>
473
474                <div class="paxflow-wp-desktop-actions">
475                    <a class="paxflow-wp-desktop-signin" href="/sign-in">
476                        Sign in
477                    </a>
478
479                    <a class="paxflow-wp-desktop-demo" href="/contact">
480                        Book Demo
481                    </a>
482                </div>
483            </div>
484        </header>
485                <div id="paxflow-wp-mobile-header">
486            <div class="paxflow-wp-mobile-inner">
487                <a class="paxflow-wp-mobile-logo" href="https://paxflow.io/" aria-label="PaxFlow">
488                    <img src="https://paxflow.io/wp-content/uploads/2026/06/cropped-PaxFlow-logo-original-landscape.png" alt="PaxFlow">                </a>
489
490                <button id="paxflow-wp-mobile-toggle" type="button" aria-label="Open menu" aria-expanded="false">
491                    <span></span>
492                    <span></span>
493                    <span></span>
494                </button>
495
496                <a class="paxflow-wp-mobile-cta" href="/contact">
497                    Book Demo
498                </a>
499            </div>
500
501            <div id="paxflow-wp-mobile-panel">
502                <ul id="menu-mobile-menu" class="paxflow-wp-mobile-menu"><li id="menu-item-37" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-37"><a href="https://paxflow.io/platform/">Platform</a></li>
503<li id="menu-item-34" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-34"><a href="https://paxflow.io/insights/">Insights</a></li>
504<li id="menu-item-38" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38"><a href="https://paxflow.io/pricing/">Pricing</a></li>
505</ul>            </div>
506        </div>
507        
507<script type="speculationrules">
508{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/paxflow-chris-theme-mobile-fixed/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
509</script>
vendor: 1 bytes, line 509
509
510<script>
511	function hideIntercomLauncher() {
512		if (typeof window.Intercom === 'function') {
513			window.Intercom('update', { hide_default_launcher: true });
514		} else {
515			setTimeout(hideIntercomLauncher, 200);
516		}
517	}
518
519	const intercomHidePaths = [
520		'/upgrade',
521		'/paxflow-home-screen'
522	];
523
524	const currentPath = window.location.pathname;
525
526	if (intercomHidePaths.some(prefix => currentPath.startsWith(prefix))) {
527		console.log('Hiding intercom bubble.');
528		hideIntercomLauncher();
529	}
530</script>
530<script data-cfasync="false">
531  document.onreadystatechange = function () {
532    if (document.readyState == "complete") {
533      var logout_link = document.querySelectorAll('a[href*="wp-login.php?action=logout"]');
534      if (logout_link) {
535        for(var i=0; i < logout_link.length; i++) {
536          logout_link[i].addEventListener( "click", function() {
537            Intercom('shutdown');
538          });
539        }
540      }
541    }
542  };
543</script>
vendor: 2 bytes, line 543
543
544<script data-cfasync="false">
545  window.intercomSettings = {"app_id":"xpm774xv","language_override":"en","installation_type":"wordpress","installation_version":"3.0.2"};
546</script>
vendor: 2 bytes, line 546
546
547<script data-cfasync="false">(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',w.intercomSettings);}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/xpm774xv';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);};if(document.readyState==='complete'){l();}else if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script>
547<script type="module" src="https://paxflow.io/wp-content/themes/paxflow-chris-theme-mobile-fixed/dist/assets/index-DF8F96qp.js?ver=1787221794"></script>
547<script id="paxflow-vce-v5-js-before">
548window.PaxFlowVCEv5Data = {"canEdit":false,"ajaxUrl":"https:\/\/paxflow.io\/wp-admin\/admin-ajax.php","nonce":"e0bc714704","liveEdits":[{"id":"pfvce_1781194694226_77ddbc5a4a93b8","page":"\/contact","selector":"#root > div > div > section:nth-of-type(2) > div > div:nth-of-type(2) > div:nth-of-type(1) > h3","type":"text","text":"15-minute call","href":"","media":"","alt":"","updated":1781194698},{"id":"pfvce_1781543276714_20b0e5babc2df8","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(1) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/customer-messaging\/","media":"","alt":"","updated":1781543286},{"id":"pfvce_1781544000617_a39808fda50d5","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(2) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/paxportal\/","media":"","alt":"","updated":1781544005},{"id":"pfvce_1781544254397_e90da110cb4c08","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(3) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/departure-management\/","media":"","alt":"","updated":1781544259},{"id":"pfvce_1781544699064_8eff56bfb87318","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(4) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/booking-forms\/","media":"","alt":"","updated":1781544702},{"id":"pfvce_1781545006765_2d13fffe9cc17","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(5) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/resource-management\/","media":"","alt":"","updated":1781545011},{"id":"pfvce_1781545330812_728f23b30ddd4","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(6) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/shift-scheduling\/","media":"","alt":"","updated":1781545334},{"id":"pfvce_1781545511706_2d0b562ea29f8","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(7) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/enroute-application\/","media":"","alt":"","updated":1781545526},{"id":"pfvce_1781545529869_e5b230f07cd57","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(7) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/enroute-application\/","media":"","alt":"","updated":1781545532},{"id":"pfvce_1781545672886_9ed2cd63ae2f08","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(8) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/ticket-scanning\/","media":"","alt":"","updated":1781545676},{"id":"pfvce_1781545860309_254b3a987a8448","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(9) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/ai-chatbot\/","media":"","alt":"","updated":1781545864},{"id":"pfvce_1781609221863_f95abd9426abc8","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(1) > h3","type":"text","text":"Operations management","href":"","media":"","alt":"","updated":1781609240},{"id":"pfvce_1781609242353_2d5e57cfac0cd8","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(1) > h3","type":"text","text":"Operations Management","href":"","media":"","alt":"","updated":1781609247},{"id":"pfvce_1781609249821_e2b2c95b9f9e68","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(1) > p","type":"text","text":"Intelligent scheduling and resource allocation across your entire operation covering resource management, departure management, and shift scheduling","href":"","media":"","alt":"","updated":1781609283},{"id":"pfvce_1781609348673_6450046204f75","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(2) >
548 p","type":"text","text":"Automated messaging infrastructure across all customer touchpoints, covering WhatsApp, SMS, Email, and an AI chatbot","href":"","media":"","alt":"","updated":1781609377},{"id":"pfvce_1781609439543_c4ab4b0a23615","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(4) > div:nth-of-type(2) > div:nth-of-type(2) > span","type":"text","text":"Ticket scanning","href":"","media":"","alt":"","updated":1781609448},{"id":"pfvce_1781609455263_9cfc7c77bc61b8","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(4) > div:nth-of-type(2) > div:nth-of-type(2) > span","type":"text","text":"Shift assignments","href":"","media":"","alt":"","updated":1781609468},{"id":"pfvce_1781609469768_424c7133f5477","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(4) > div:nth-of-type(2) > div:nth-of-type(3) > span","type":"text","text":"Group communications","href":"","media":"","alt":"","updated":1781609477},{"id":"pfvce_1781609491685_825ca54d984698","page":"\/","selector":"#root > div > section:nth-of-type(6) > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(2) > span","type":"text","text":"Capacity optimisation","href":"","media":"","alt":"","updated":1781609495},{"id":"pfvce_1781609560802_11584866707788","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(1) > p","type":"text","text":"PaxFlow has provided a solution that allows us to collect necessary passenger details from customers, via booking forms on PaxPortal, to comply with EU laws for boat tours.\u201d","href":"","media":"","alt":"","updated":1781609573},{"id":"pfvce_1781609575626_7838c5f28a303","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(1) > p","type":"text","text":"PaxFlow has provided a solution that allows us to collect necessary passenger details from customers, via booking forms on PaxPortal, to comply with EU laws for boat tours.\u201d","href":"","media":"","alt":"","updated":1781609581},{"id":"pfvce_1781609583768_242b3c8626fae","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1)","type":"text","text":"Mick Lomers","href":"","media":"","alt":"","updated":1781609621},{"id":"pfvce_1781609622754_f6e92c99cdc048","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(2)","type":"text","text":"Sales Manager","href":"","media":"","alt":"","updated":1781609629},{"id":"pfvce_1781609630957_7b9b749238ba3","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(3)","type":"text","text":"Brim Explorer","href":"","media":"","alt":"","updated":1781609638},{"id":"pfvce_1781609646213_5966d02790536","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(2) > p","type":"text","text":"PaxFlow greatly simplifies our operational side and connects all the systems we use for communications and bookings, whether with tourists or staff.\u201d","href":"","media":"","alt":"","updated":1781609650},{"id":"pfvce_1781609671323_81c1db9c1bba48","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(1)","type":"text","text":"Kristj\u00e1n Bj\u00f6rnsson","href":"","media":"","alt":"","updated":1781609683},{"id":"pfvce_1781609685334_2ec3a64ebae62","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(2)","type":"text","text":"Chief Commercial Officer","href":"","media":"","alt":"","updated":1781609697},{"id":"pfvce_1781609698906_bff73e261aac9","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(3)","type":"text","text":"BusTravel Iceland","href":"","media":"","alt":"","updated":1781609712},{"id":"pfvce_1781609732163_e94a25504d7bc","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(3) > p","type":"text","text":"We were able to get rid of all the spread sheets we used to have to plan our vehicles for tours and staff on shifts. PaxFlow is a critical tool in our operations today.\u201d","href":"","media":"","alt":"","updated":1781609735},{"id":"pfvce_1781609736859_ecc9c8895a8838","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(3) > div:nth-of-type(2) > div:nth-of-type(1)","type":"text","text":"Javier Fabregat","href":"","media":"","alt":"","updated":1781609754},{"id":"pfvce_1781609825527_e6e26db741c56","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(3) > div:nth-of-type(2) > div:nth-of-type(1)","type":"text","text":"Javier Zapata","href":"","media":"","alt":"","updated":1781609841},{"id":"pfvce_1781609842727_f4b51de748d5","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(3) > div:nth-of-type(2) > div:nth-of-type(2)","type":"text","text":"IT Manager","href":"","media":"","alt":"","updated":1781609847},{"id":"pfvce_1781609848067_e466968f285cb","page":"\/","selector":"#root > div > section:nth-of-type(7) > div > div:nth-of-type(2) > div:nth-of-type(3) > div:nth-of-type(2) > div:nth-of-type(3)","type":"text","text":"TA Scotland","href":"","media":"","alt":"","updated":1781609858},{"id":"pfvce_1781610402104_1473bcc8dbf8b8","page":"\/","selector":"#root > div > section:nth-of-type(9) > div > div > div:nth-of-type(2) > div > p","type":"text","text":"Schedule a personalised demo with our team to understand how PaxFlow can transform your operational infrastru
548cture.","href":"","media":"","alt":"","updated":1781610408},{"id":"pfvce_1781610421412_96a0c2ec4898b8","page":"\/insights","selector":"#root > div > div > section:nth-of-type(1) > div > h1","type":"text","text":"Learn how to optimise your tour operations","href":"","media":"","alt":"","updated":1781610427},{"id":"pfvce_1781610442679_f0aead25ee7828","page":"\/insights","selector":"#root > div > div > section:nth-of-type(1) > div > p:nth-of-type(2)","type":"text","text":"Expert guides, industry insights, and best practice tips from the PaxFlow team","href":"","media":"","alt":"","updated":1781610450},{"id":"pfvce_1781610487950_f3cc0fa8d7021","page":"\/insights","selector":"#root > div > div > section:nth-of-type(6) > div > a","type":"link","text":"Book a Demo","href":"\/contact\/","media":"","alt":"","updated":1781610495},{"id":"pfvce_1781610612828_d95289203d734","page":"\/insights","selector":"#root > div > div > section:nth-of-type(5) > div > div:nth-of-type(2) > a:nth-of-type(1)","type":"link","text":"Getting Started with PaxFlowComplete guide to setting up your account and onboarding your first tour.Read guide","href":"https:\/\/help.paxflow.io\/en\/articles\/11831730-how-to-get-started-with-paxflow","media":"","alt":"","updated":1781610622},{"id":"pfvce_1781627713162_f9d89d9947324","page":"\/insights","selector":"#root > div > div > section:nth-of-type(5) > div > div:nth-of-type(2) > a:nth-of-type(1)","type":"link","text":"Getting Started with PaxFlowComplete guide to setting up your account and onboarding your first tour.Read guide","href":"https:\/\/help.paxflow.io\/en\/articles\/11831730-how-to-get-started-with-paxflow","media":"","alt":"","updated":1781627791},{"id":"pfvce_1781628011502_dca6e514a974f","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(1) > span:nth-of-type(2)","type":"text","text":"PaxPlanner - Departures &amp; scheduling","href":"","media":"","alt":"","updated":1781628024},{"id":"pfvce_1781628026361_e5b969ca0273d8","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(1) > span:nth-of-type(2)","type":"html","text":"<p>PaxPlanner - Departures &amp; scheduling<\/p>","href":"","media":"","alt":"","updated":1781628047},{"id":"pfvce_1781628049161_190c6ddf2c49e8","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(2) > span:nth-of-type(2)","type":"text","text":"PaxCRM - 2,000 messages\/month","href":"","media":"","alt":"","updated":1781628063},{"id":"pfvce_1781628065921_c7fb8ad670f34","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(3) > span:nth-of-type(2)","type":"text","text":"PaxForms - 1,000 responses\/month","href":"","media":"","alt":"","updated":1781628077},{"id":"pfvce_1781628083424_a8a4abec8ad33","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(4) > span:nth-of-type(2)","type":"text","text":"PaxPortal - Customer self-service","href":"","media":"","alt":"","updated":1781628100},{"id":"pfvce_1781628132612_8f4b848fefa06","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(5) > span:nth-of-type(2)","type":"text","text":"PaxPortal - Customer self-service","href":"","media":"","alt":"","updated":1781628136},{"id":"pfvce_1781628141099_41dabc5dc0eb78","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(4) > span:nth-of-type(2)","type":"text","text":"PaxForms - 1,000 responses\/month","href":"","media":"","alt":"","updated":1781628144},{"id":"pfvce_1781628148380_0cad801bf4ab38","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(3) > span:nth-of-type(2)","type":"text","text":"PaxCRM - 2,000 messages\/month","href":"","media":"","alt":"","updated":1781628151},{"id":"pfvce_1781628204220_41e3f5b00a21a","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(3) > span:nth-of-type(2)","type":"text","text":"PaxForms - 1,000 responses\/month","href":"","media":"","alt":"","updated":1781628210},{"id":"pfvce_1781628211699_6584f3a5551c98","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(5) > span:nth-of-type(2)","type":"text","text":"PaxPortal - Customer self-service","href":"","media":"","alt":"","updated":1781628214},{"id":"pfvce_1781628216432_56ebc4075295b","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(4) > span:nth-of-type(2)","type":"text","text":"PaxPortal - Customer self-service","href":"","media":"","alt":"","updated":1781628220},{"id":"pfvce_1781628223001_86e6c090fff308","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(5) > span:nth-of-type(2)","type":"html","text":"<p>PaxEnroute - Guide &amp; driver app<\/p>","href":"","media":"","alt":"","updated":1781628249}
548,{"id":"pfvce_1781628282977_e171d5c26f5168","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(2) > span:nth-of-type(2)","type":"text","text":"PaxCRM - 5,000 messages\/month","href":"","media":"","alt":"","updated":1781628290},{"id":"pfvce_1781628293233_eeba8ccf0f4228","page":"\/pricing","selector":"div > section:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(2) > ul > li:nth-of-type(3) > span:nth-of-type(2)","type":"text","text":"PaxForms - 2,500 responses\/month","href":"","media":"","alt":"","updated":1781628299},{"id":"pfvce_1781782293941_628b411f1b6f9","page":"\/insights","selector":"#root > div > div > section:nth-of-type(5) > div > div:nth-of-type(2) > a:nth-of-type(2)","type":"link","text":"Optimisation Best PracticesAdvanced strategies for maximizing efficiency and reducing operational overhead.Read guide","href":"#","media":"","alt":"","updated":1781782298},{"id":"pfvce_1781782389852_873d47aaff59f8","page":"\/insights","selector":"#root > div > div > section:nth-of-type(6) > div > a","type":"link","text":"Book a Demo","href":"\/contact\/","media":"","alt":"","updated":1781782396},{"id":"pfvce_1781876526924_e2f477fb873f4","page":"\/insights","selector":"#root > div > div > section:nth-of-type(5) > div > div:nth-of-type(2) > a:nth-of-type(2)","type":"link","text":"PaxFlow OperationsTransform your tour operations with PaxFlow's Operational Intelligence Layer.Read guide","href":"https:\/\/help.paxflow.io\/en\/collections\/19126585-paxflow-operations","media":"","alt":"","updated":1781876529},{"id":"pfvce_1781876579608_2aa50fdd2ae2c8","page":"\/insights","selector":"#root > div > div > section:nth-of-type(5) > div > div:nth-of-type(2) > a:nth-of-type(3)","type":"link","text":"Messaging AutomationMaximise the value of every customer with cross-channel automated messaging mastery.Read guide","href":"https:\/\/help.paxflow.io\/en\/collections\/7643242-paxflow-messages","media":"","alt":"","updated":1781876583},{"id":"pfvce_1781876588096_3492861ed39918","page":"\/insights","selector":"#root > div > div > section:nth-of-type(5) > div > div:nth-of-type(2) > a:nth-of-type(4)","type":"link","text":"Customer Self-ServiceLearn how to allow your customer to self-serve and alleviate the pressures from your team.Read guide","href":"https:\/\/help.paxflow.io\/en\/collections\/2461353-paxportal-customer-portal","media":"","alt":"","updated":1781876591},{"id":"pfvce_1781877331524_e1b299007c588","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(1) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/departure-management\/","media":"","alt":"","updated":1781877344},{"id":"pfvce_1781877346745_bdce903aa2487","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(2) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/resource-management\/","media":"","alt":"","updated":1781877353},{"id":"pfvce_1781877355577_51c1baeb4c973","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(3) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/shift-scheduling\/","media":"","alt":"","updated":1781877365},{"id":"pfvce_1781877381642_d1a4c54ba4164","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(4) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/enroute-application\/","media":"","alt":"","updated":1781877391},{"id":"pfvce_1781877393282_b3c1115fbb71c8","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(5) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/ticket-scanning\/","media":"","alt":"","updated":1781877402},{"id":"pfvce_1781877414585_6216d300070bc8","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(6) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/ai-chatbot\/","media":"","alt":"","updated":1781877423},{"id":"pfvce_1781877425951_cc28863bf5c0e8","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(7) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/customer-messaging\/","media":"","alt":"","updated":1781877434},{"id":"pfvce_1781877437141_299dbd7f375ed","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(8) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/paxportal\/","media":"","alt":"","updated":1781877468},{"id":"pfvce_1781877470484_b6e8e6951943b","page":"\/platform","selector":"#root > div > div > section:nth-of-type(2) > div > div > div:nth-of-type(9) > div:nth-of-type(1) > a","type":"link","text":"Learn more","href":"\/platform\/booking-forms\/","media":"","alt":"","updated":1781877477},{"id":"pfvce_1781879583578_c2038e538bb61","page":"\/","selector":"#pricing > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(3) > div:nth-of-type(5) > span","type":"text","text":"Dedicated account manager","href":"","media":"","alt":"","updated":1781879592},{"id":"pfvce_1781879593268_51a216440e67c","page":"\/","selector":"#pricing > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(3) > div:nth-of-type(1) > span","type":"text","text":"Up to 60,000 passengers\/year","href":"","media":"","alt":"","updated":1781879599},{"id":"pfvce_1781879640790_c3ceb37b6df01","page":"\/","selector":"#wp-admin-bar-site-name > a","type":"link","text":"Chris's PaxFlow Version","href":"https:\/\/paxflow.io\/wp-admin\/","media":"","alt":"","updated":1781879643},{"id":"pfvce_1782155996375_97e11a0316be5","page":"\/","selector":"#root > div > section:nth-of-type(2) > div > div:nth-of-type(1) > div > div:nth-of-type(5)","type":"text","text":"TA Scotland","href":"","media":"","alt":"","updated":1782156003}
548,{"id":"pfvce_1782156011353_11688076c4f8a","page":"\/","selector":"#root > div > section:nth-of-type(2) > div > div:nth-of-type(1) > div > div:nth-of-type(5)","type":"text","text":"TA SCOTLAND","href":"","media":"","alt":"","updated":1782156016},{"id":"pfvce_1789730659179_bac3f21107fe48","page":"\/","selector":"article > section > section:nth-of-type(1) > div:nth-of-type(2) > div > div:nth-of-type(1) > div:nth-of-type(1) > p:nth-of-type(1)","type":"text","text":"Use this page as a reusable campaign template. Edit the headline, offer, use case and supporting sections for each promotion without rebuilding the layout. This is a test","href":"","media":"","alt":"","updated":1789730665},{"id":"pfvce_1789730680898_af202723af2928","page":"\/","selector":"article > section > section:nth-of-type(1) > div:nth-of-type(2) > div > div:nth-of-type(1) > div:nth-of-type(1) > p:nth-of-type(1)","type":"text","text":"Use this page as a reusable campaign template. Edit the headline, offer, use case and supporting sections for each promotion without rebuilding the layout.","href":"","media":"","alt":"","updated":1789730686},{"id":"pfvce_1789730694065_cb673b3c550a7","page":"\/","selector":"article > section > section:nth-of-type(1) > div:nth-of-type(2) > div > div:nth-of-type(1) > div:nth-of-type(2) > a:nth-of-type(1)","type":"link","text":"Book demo","href":"#book-demo","media":"","alt":"","updated":1789730702},{"id":"pfvce_1789730726932_c4d4dd4f6ee258","page":"\/","selector":"main > article > section > section:nth-of-type(4) > div > div:nth-of-type(2) > div:nth-of-type(2) > a","type":"link","text":"Book demo","href":"#book-demo","media":"","alt":"","updated":1789730735},{"id":"pfvce_1789730741255_401d7f4738778","page":"\/","selector":"section > section:nth-of-type(8) > div > div > div:nth-of-type(2) > div > div > a:nth-of-type(1)","type":"link","text":"Book demo","href":"#book-demo","media":"","alt":"","updated":1789730744},{"id":"pfvce_1789731452421_b51677f4e8227","page":"\/","selector":"article > section > section:nth-of-type(1) > div:nth-of-type(2) > div > div:nth-of-type(1) > div:nth-of-type(1) > p:nth-of-type(1)","type":"text","text":"Use this page as a reusable campaign template. Edit the headline, offer, use case and supporting sections for each promotion without rebuilding the layout. Chris did this.","href":"","media":"","alt":"","updated":1789731459}],"draftEdits":[],"currentPath":""};
549//# sourceURL=paxflow-vce-v5-js-before
550</script>
vendor: 1 bytes, line 550
550
551<script id="paxflow-vce-v5-js-after">
552(function(){
553    const data = window.PaxFlowVCEv5Data || {};
554    const canEdit = !!data.canEdit;
555    let liveEdits = Array.isArray(data.liveEdits) ? data.liveEdits : [];
556    let draftEdits = Array.isArray(data.draftEdits) ? data.draftEdits : [];
557    let editMode = false;
558    let selectedElement = null;
559    let selectedInfo = null;
560    let applying = false;
561
562    function currentPath(){
563        let p = window.location.pathname.replace(/\/$/, '');
564        return p === '' ? '/' : p;
565    }
566
567    function pageMatches(edit){
568        const page = (edit.page || '').replace(/\/$/, '') || 'all';
569        const path = currentPath();
570        return page === 'all' || page === '*' || page === path || (page === '/' && path === '/');
571    }
572
573    function normalizeHtml(value){
574        let v = String(value || '');
575        if (v.indexOf('<') !== -1) return v;
576        const parts = v.split(/\n\s*\n/g).map(s => s.trim()).filter(Boolean);
577        if (parts.length > 1) {
578            return parts.map(s => '<span style="display:block;margin-bottom:18px;">' + escapeHtml(s).replace(/\n/g, '<br>') + '</span>').join('');
579        }
580        return escapeHtml(v).replace(/\n/g, '<br>');
581    }
582
583    function escapeHtml(s){
584        return String(s).replace(/[&<>"]/g, function(c){
585            return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];
586        });
587    }
588
589    function findBestLink(el){
590        if (!el) return null;
591        if (el.matches && el.matches('a[href]')) return el;
592        const closest = el.closest ? el.closest('a[href]') : null;
593        if (closest) return closest;
594        return el.querySelector ? el.querySelector('a[href]') : null;
595    }
596
597    function applySingleEdit(edit){
598        if (!pageMatches(edit) || !edit.selector) return;
599        let el = null;
600        try { el = document.querySelector(edit.selector); } catch(e) { return; }
601        if (!el) return;
602
603        if (edit.type === 'link') {
604            const link = findBestLink(el);
605            if (link && edit.href) {
606                link.setAttribute('href', edit.href);
607                if (edit.href.indexOf('http') === 0 && !edit.href.includes(window.location.hostname)) {
608                    link.setAttribute('target', '_blank');
609                    link.setAttribute('rel', 'noopener noreferrer');
610                } else {
611                    link.removeAttribute('target');
612                    link.removeAttribute('rel');
613                }
614            }
615            return; // Critical: link edits NEVER overwrite card/text HTML.
616        }
617
618        if (edit.type === 'image') {
619            const img = (el.matches && el.matches('img')) ? el : (el.querySelector ? el.querySelector('img') : null);
620            if (img && edit.media) img.setAttribute('src', edit.media);
621            if (img && edit.alt) img.setAttribute('alt', edit.alt);
622            return;
623        }
624
625        if (edit.type === 'video') {
626            const media = (el.matches && el.matches('iframe,video,source')) ? el : (el.querySelector ? el.querySelector('iframe,video,source') : null);
627            if (media && edit.media) media.setAttribute('src', edit.media);
628            return;
629        }
630
631        if (edit.type === 'html') {
632            el.innerHTML = normalizeHtml(edit.text || '');
633            return;
634        }
635
636        if (edit.type === 'text') {
637            el.textContent = edit.text || '';
638        }
639    }
640
641    function applyEdits(){
642        if (applying) return;
643        applying = true;
644        try {
645            liveEdits.forEach(applySingleEdit);
646            if (canEdit) draftEdits.forEach(applySingleEdit);
647        } finally {
648            applying = false;
649        }
650    }
651
652    function selectorFor(el){
653        if (!el || !el.tagName) return '';
654        if (el.id) return '#' + CSS.escape(el.id);
655        const parts = [];
656        let node = el;
657        let safety = 0;
658        while (node && node.nodeType === 1 && node !== document.body && safety < 8) {
659            let tag = node.tagName.toLowerCase();
660            if (node.id) {
661                parts.unshift('#' + CSS.escape(node.id));
662                break;
663            }
664            let parent = node.parentElement;
665            if (!parent) break;
666            let siblings = Array.from(parent.children).filter(c => c.tagName === node.tagName);
667            if (siblings.length > 1) {
668                tag += ':nth-of-type(' + (siblings.indexOf(node) + 1) + ')';
669            }
670            parts.unshift(tag);
671            node = parent;
672            safety++;
673            if (node && node.id === 'root') {
674                parts.unshift('#root');
675                break;
676            }
677        }
678        return parts.join(' > ');
679    }
680
681    function isTextOnly(el){
682        if (!el) return false;
683        const tag = el.tagName ? el.tagName.toLowerCase() : '';
684        const allowed = ['p','span','h1','h2','h3','h4','h5','h6','li','strong','em','small','div'];
685        if (!allowed.includes(tag)) return false;
686        if (['script','style','noscript'].includes(tag)) return false;
687        const text = (el.textContent || '').trim();
688        if (!text || text.length > 1200) return false;
689        const complex = el.querySelector && el.querySelector('img,svg,video,iframe,form,input,select,textarea,button,section,article');
690        if (complex) return false;
691        const childBlocks = el.querySelectorAll ? el.querySelectorAll('div,p,h1,h2,h3,h4,h5,h6,ul,ol').length : 0;
692        return childBlocks <= 2;
693    }
694
695    function editableTargetFromClick(target){
696        if (!target || target.closest('#paxflow-vce-toolbar,#paxflow-vce-modal-backdrop')) return null;
697        if (target.matches && target.matches('img,iframe,video')) return target;
698        const link = target.closest ? target.closest('a[href]') : null;
699        if (link) return link;
700        let node = target;
701        let steps = 0;
702        while (node && node !== document.body && steps < 5) {
703            if (isTextOnly(node)) return node;
704            node = node.parentElement;
705            steps++;
706        }
707        return null;
708    }
709
710    function markEditables(){
711        if (!canEdit) return;
712        document.querySelectorAll('[data-paxflow-vce-editable]').forEach(el => el.removeAttribute('data-paxflow-vce-editable'));
713        const selectors = 'a[href],button,img,iframe,video,p,span,h1,h2,h3,h4,h5,h6,li,div';
714        document.querySelectorAll(selectors).forEach(el => {
715            if (editableTargetFromClick(el) === el) el.setAttribute('data-paxflow-vce-editable', '1');
716        });
717    }
718
719    function makeToolbar(){
720        if (!canEdit || document.getElementById('paxflow-vce-toolbar')) return;
721        const bar = document.createElement('div');
722        bar.id = 'paxflow-vce-toolbar';
723        bar.innerHTML = '<button id="paxflow-vce-edit-toggle" type="button">Edit PaxFlow Page</button><button id="paxflow-vce-apply" type="button">Apply Changes</button><button id="paxflow-vce-clear" type="button">Clear Draft</button>';
724        document.body.appendChild(bar);
725        document.getElementById('paxflow-vce-edit-toggle').addEventListener('click', function(){
726            editMode = !editMode;
727            document.documentElement.classList.toggle('paxflow-vce-active', editMode);
728            this.textContent = editMode ? 'Stop Editing' : 'Edit PaxFlow Page';
729            markEditables();
730        });
731        document.getElementById('paxflow-vce-apply').addEventListener('click', applyDraftsAjax);
732        document.getElementById('paxflow-vce-clear').addEventListener('click', clearDraftsAjax);
733    }
734
735    function makeModal(){
736        if (!canEdit || document.getElementById('paxflow-vce-modal-backdrop')) return;
737        const wrap = document.createElement('div');
738        wrap.id = 'paxflow-vce-modal-backdrop';
739        wrap.innerHTML = `
740            <div id="paxflow-vce-modal" role="dialog" aria-modal="true">
741                <h3 id="paxflow-vce-title">Edit content</h3>
742                <label>Detected selector</label>
743                <input id="paxflow-vce-selector" type="text" readonly>
744                <label>Edit type</label>
745                <select id="paxflow-vce-type">
746                    <option value="text">Text</option>
747                    <option value="html">HTML</option>
748                    <option value="link">Link/button URL only</option>
749                    <option value="image">Image</option>
750                    <option value="video">Video/iframe</option>
751                </select>
752                <label>Text / HTML value</label>
753                <textarea id="paxflow-vce-text"></textarea>
754                <div class="paxflow-vce-help">For links, this field is ignored so cards are not accidentally overwritten. Select the title/body text separately if you want to edit copy.</div>
755                <label>Link URL</label>
756                <input id="paxflow-vce-href" type="url" placeholder="https://... or /page/">
757                <label>Image/video URL</label>
758                <input id="paxflow-vce-media" type="url" placeholder="https://...">
759                <label>Image alt text</label>
760                <input id="paxflow-vce-alt" type="text">
761                <div class="paxflow-vce-actions">
762                    <button id="paxflow-vce-cancel" type="button">Cancel</button>
763                    <button id="paxflow-vce-save" type="button">Save change</button>
764                </div>
765            </div>`;
766        document.body.appendChild(wrap);
767        document.getElementById('paxflow-vce-cancel').addEventListener('click', closeModal);
768        document.getElementById('paxflow-vce-save').addEventListener('click', saveCurrentEditAjax);
769        wrap.addEventListener('click', function(e){ if (e.target === wrap) closeModal(); });
770    }
771
772    function openModal(el){
773        selectedElement = el;
774        const selector = selectorFor(el);
775        const tag = el.tagName.toLowerCase();
776        let type = 'text';
777        let href = '';
778        let media = '';
779        let alt = '';
780        if (tag === 'a' || tag === 'button') { type = 'link'; }
781        if (tag === 'img') { type = 'image'; media = el.getAttribute('src') || ''; alt = el.getAttribute('alt') || ''; }
782        if (tag === 'iframe' || tag === 'video') { type = 'video'; media = el.getAttribute('src') || ''; }
783        if (tag === 'a') href = el.getAttribute('href') || '';
784        if (tag === 'button') href = '';
785        selectedInfo = { id: 'pfvce_' + Date.now() + '_' + Math.random().toString(16).slice(2), selector, type };
786        document.getElementById('paxflow-vce-title').textContent = 'Edit ' + (type === 'link' ? 'link' : type);
787        document.getElementById('paxflow-vce-selector').value = selector;
788        document.getElementById('paxflow-vce-type').value = type;
789        document.getElementById('paxflow-vce-text').value = (type === 'html') ? el.innerHTML : (el.textContent || '').trim();
790        document.getElementById('paxflow-vce-href').value = href;
791        document.getElementById('paxflow-vce-media').value = media;
792        document.getElementById('paxflow-vce-alt').value = alt;
793        document.getElementById('paxflow-vce-modal-backdrop').classList.add('is-open');
794    }
795
796    function closeModal(){
797        const m = document.getElementById('paxflow-vce-modal-backdrop');
798        if (m) m.classList.remove('is-open');
799        if (selectedElement) selectedElement.classList.remove('paxflow-vce-selected');
800        selectedElement = null;
801        selectedInfo = null;
802    }
803
804    function ajax(action, payload){
805        const fd = new FormData();
806        fd.append('action', action);
807        fd.append('nonce', data.nonce || '');
808        if (payload) Object.keys(payload).forEach(k => fd.append(k, payload[k]));
809        return fetch(data.ajaxUrl, { method: 'POST', credentials: 'same-origin', body: fd }).then(r => r.json());
810    }
811
812    function saveCurrentEditAjax(){
813        if (!selectedInfo) return;
814        const edit = {
815            id: selectedInfo.id,
816            page: currentPath(),
817            selector: document.getElementById('paxflow-vce-selector').value,
818            type: document.getElementById('paxflow-vce-type').value,
819            text: document.getElementById('paxflow-vce-text').value,
820            href: document.getElementById('paxflow-vce-href').value,
821            media: document.getElementById('paxflow-vce-media').value,
822            alt: document.getElementById('paxflow-vce-alt').value
823        };
824        ajax('paxflow_vce_v5_save_draft', { edit: JSON.stringify(edit) }).then(res => {
825            if (!res || !res.success) { alert((res && res.data && res.data.message) || 'Could not save change'); return; }
826            draftEdits = res.data.edits || [];
827            applySingleEdit(edit);
828            markEditables();
829            closeModal();
830        });
831    }
832
833    function applyDraftsAjax(){
834        ajax('paxflow_vce_v5_apply').then(res => {
835            if (!res || !res.success) { alert((res && res.data && res.data.message) || 'Could not apply changes'); return; }
836            liveEdits = res.data.edits || [];
837            alert('Changes applied. Clear cache before public testing.');
838        });
839    }
840
841    function clearDraftsAjax(){
842        if (!confirm('Clear all draft edits for this editor? Live applied edits will remain until you apply an empty draft.')) return;
843        ajax('paxflow_vce_v5_clear_draft').then(res => {
844            if (!res || !res.success) { alert('Could not clear drafts'); return; }
845            draftEdits = [];
846            alert('Drafts cleared.');
847        });
848    }
849
850    function initEditor(){
851        if (!canEdit) return;
852        makeToolbar();
853        makeModal();
854        markEditables();
855        document.addEventListener('click', function(e){
856            if (!editMode) return;
857            const target = editableTargetFromClick(e.target);
858            if (!target) return;
859            e.preventDefault();
860            e.stopPropagation();
861            if (selectedElement) selectedElement.classList.remove('paxflow-vce-selected');
862            selectedElement = target;
863            selectedElement.classList.add('paxflow-vce-selected');
864            openModal(target);
865        }, true);
866    }
867
868    function schedule(){
869        applyEdits();
870        if (canEdit) markEditables();
871    }
872
873    document.addEventListener('DOMContentLoaded', function(){ applyEdits(); initEditor(); });
874    window.addEventListener('load', function(){ applyEdits(); if (canEdit) markEditables(); });
875    setTimeout(schedule, 300);
876    setTimeout(schedule, 1000);
877    setTimeout(schedule, 2000);
878
879    const obs = new MutationObserver(function(){
880        if (applying) return;
881        clearTimeout(window.__paxflowVce5Timer);
882        window.__paxflowVce5Timer = setTimeout(schedule, 120);
883    });
884    obs.observe(document.documentElement, { childList: true, subtree: true });
885})();
886//# sourceURL=paxflow-vce-v5-js-after
887</script>
vendor: 1 bytes, line 887
887
888<script id="wp-emoji-settings" type="application/json">
889{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://paxflow.io/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}}
890</script>
vendor: 1 bytes, line 890
890
891<script type="module">
892/*! This file is auto-generated */
893var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
894//# sourceURL=https://paxflow.io/wp-includes/js/wp-emoji-loader.min.js
895</script>
895
896        
896<script>
897            (function () {
898                var lastPath = window.location.pathname;
899
900                function scrollToTopIfPathChanged() {
901                    if (window.location.pathname !== lastPath) {
902                        lastPath = window.location.pathname;
903                        window.scrollTo({
904                            top: 0,
905                            left: 0,
906                            behavior: 'auto'
907                        });
908                    }
909                }
910
911                var originalPushState = history.pushState;
912                var originalReplaceState = history.replaceState;
913
914                history.pushState = function () {
915                    originalPushState.apply(history, arguments);
916                    setTimeout(scrollToTopIfPathChanged, 0);
917                };
918
919                history.replaceState = function () {
920                    originalReplaceState.apply(history, arguments);
921                    setTimeout(scrollToTopIfPathChanged, 0);
922                };
923
924                window.addEventListener('popstate', function () {
925                    setTimeout(scrollToTopIfPathChanged, 0);
926                });
927
928                document.addEventListener('click', function () {
929                    setTimeout(scrollToTopIfPathChanged, 50);
930                });
931            })();
932        </script>
932
933                <style>
934            html,
935            body,
936            #root {
937                background: #FBFCFD !important;
938            }
939
940            #paxflow-wp-mobile-header,
941            #paxflow-wp-desktop-header {
942                background: #FBFCFD !important;
943            }
944
945            /* Hide both WordPress headers by default, then reveal by breakpoint */
946            #paxflow-wp-mobile-header,
947            #paxflow-wp-desktop-header {
948                display: none;
949            }
950
951            /* Hide exported React/Figma header/nav because WordPress controls navigation now */
952            #root header,
953            #root nav {
954                display: none !important;
955            }
956
957            @media (min-width: 769px) {
958                body {
959                    padding-top: 80px !important;
960                    background: #FBFCFD !important;
961                }
962
963                body.admin-bar {
964                    padding-top: 112px !important;
965                }
966
967                #paxflow-wp-desktop-header {
968                    display: block !important;
969                    position: fixed !important;
970                    top: 0 !important;
971                    left: 0 !important;
972                    right: 0 !important;
973                    width: 100% !important;
974                    z-index: 9999999 !important;
975                    background: #FBFCFD !important;
976                    border-bottom: 0 !important;
977                    box-shadow: none !important;
978                }
979
980                body.admin-bar #paxflow-wp-desktop-header {
981                    top: 32px !important;
982                }
983
984                .paxflow-wp-desktop-inner {
985                    display: grid !important;
986                    grid-template-columns: auto 1fr auto !important;
987                    align-items: center !important;
988                    gap: 32px !important;
989                    width: 100% !important;
990                    max-width: 1280px !important;
991                    margin: 0 auto !important;
992                    padding: 16px 32px !important;
993                    box-sizing: border-box !important;
994                    background: #FBFCFD !important;
995                }
996
997                .paxflow-wp-desktop-logo,
998                .paxflow-wp-desktop-logo:visited {
999                    display: inline-flex !important;
1000                    align-items: center !important;
1001                    justify-content: flex-start !important;
1002                    text-decoration: none !important;
1003                    min-width: 0 !important;
1004                }
1005
1006                .paxflow-wp-desktop-logo img {
1007                    display: block !important;
1008                    width: auto !important;
1009                    max-width: 170px !important;
1010                    max-height: 48px !important;
1011                    height: auto !important;
1012                    object-fit: contain !important;
1013                }
1014
1015                .paxflow-wp-desktop-logo span {
1016                    color: #0f172a !important;
1017                    font-weight: 800 !important;
1018                    font-size: 24px !important;
1019                    letter-spacing: -0.03em !important;
1020                }
1021
1022                .paxflow-wp-desktop-nav {
1023                    display: flex !important;
1024                    align-items: center !important;
1025                    justify-content: center !important;
1026                    min-width: 0 !important;
1027                }
1028
1029                .paxflow-wp-desktop-menu {
1030                    display: flex !important;
1031                    align-items: center !important;
1032                    justify-content: center !important;
1033                    gap: 28px !important;
1034                    list-style: none !important;
1035                    margin: 0 !important;
1036                    padding: 0 !important;
1037                }
1038
1039                .paxflow-wp-desktop-menu li {
1040                    margin: 0 !important;
1041                    padding: 0 !important;
1042                }
1043
1044                .paxflow-wp-desktop-menu a {
1045                    color: #334155 !important;
1046                    text-decoration: none !important;
1047                    font-weight: 600 !important;
1048                    font-size: 15px !important;
1049                    line-height: 1 !important;
1050                    white-space: nowrap !important;
1051                }
1052
1053                .paxflow-wp-desktop-menu a:hover {
1054                    color: #0f172a !important;
1055                }
1056
1057                .paxflow-wp-desktop-actions {
1058                    display: flex !important;
1059                    align-items: center !important;
1060                    justify-content: flex-end !important;
1061                    gap: 14px !important;
1062                    white-space: nowrap !important;
1063                }
1064
1065                .paxflow-wp-desktop-signin {
1066                    display: inline-flex !important;
1067                    align-items: center !important;
1068                    justify-content: center !important;
1069                    color: #334155 !important;
1070                    text-decoration: none !important;
1071                    font-weight: 650 !important;
1072                    font-size: 15px !important;
1073                    line-height: 1 !important;
1074                    padding: 14px 8px !important;
1075                }
1076
1077                .paxflow-wp-desktop-signin:hover {
1078                    color: #0f172a !important;
1079                }
1080
1081                .paxflow-wp-desktop-demo {
1082                    display: inline-flex !important;
1083                    align-items: center !important;
1084                    justify-content: center !important;
1085                    white-space: nowrap !important;
1086                    padding: 14px 22px !important;
1087                    border-radius: 16px !important;
1088                    background: linear-gradient(135deg, #8b1cf6 0%, #ec008c 100%) !important;
1089                    color: #ffffff !important;
1090                    font-weight: 750 !important;
1091                    font-size: 15px !important;
1092                    line-height: 1 !important;
1093                    text-decoration: none !important;
1094                    box-shadow: 0 14px 35px rgba(236, 0, 140, 0.22) !important;
1095                }
1096
1097                #root {
1098                    margin-top: 0 !important;
1099                    padding-top: 0 !important;
1100                    background: #FBFCFD !important;
1101                }
1102
1103                #root main,
1104                #root main section:first-child {
1105                    margin-top: 0 !important;
1106                    padding-top: 0 !important;
1107                    background: #FBFCFD !important;
1108                }
1109            }
1110
1111            @media (max-width: 768px) {
1112                html,
1113                body,
1114                #root {
1115                    width: 100% !important;
1116                    max-width: 100vw !important;
1117                    overflow-x: hidden !important;
1118                    background: #FBFCFD !important;
1119                }
1120
1121                body {
1122                    padding-top: 76px !important;
1123                    background: #FBFCFD !important;
1124                }
1125
1126                body.admin-bar {
1127                    padding-top: 122px !important;
1128                }
1129
1130                #paxflow-wp-mobile-header {
1131                    display: block !important;
1132                    position: fixed !important;
1133                    top: 0 !important;
1134                    left: 0 !important;
1135                    right: 0 !important;
1136                    width: 100% !important;
1137                    max-width: 100vw !important;
1138                    z-index: 9999999 !important;
1139                    transform: none !important;
1140                    margin: 0 !important;
1141                    background: #FBFCFD !important;
1142                    border-bottom: 0 !important;
1143                    box-shadow: none !important;
1144                }
1145
1146                body.admin-bar #paxflow-wp-mobile-header {
1147                    top: 46px !important;
1148                }
1149
1150                .paxflow-wp-mobile-inner {
1151                    display: grid !important;
1152                    grid-template-columns: minmax(0, 1fr) auto auto !important;
1153                    align-items: center !important;
1154                    gap: 12px !important;
1155                    width: 100% !important;
1156                    max-width: 100vw !important;
1157                    padding: 12px 16px !important;
1158                    box-sizing: border-box !important;
1159                    background: #FBFCFD !important;
1160                }
1161
1162                .paxflow-wp-mobile-logo {
1163                    display: inline-flex !important;
1164                    align-items: center !important;
1165                    justify-content: flex-start !important;
1166                    min-width: 0 !important;
1167                    padding-left: 0 !important;
1168                    margin-left: 0 !important;
1169                    text-decoration: none !important;
1170                }
1171
1172                .paxflow-wp-mobile-logo img {
1173                    display: block !important;
1174                    width: auto !important;
1175                    max-width: 145px !important;
1176                    max-height: 42px !important;
1177                    height: auto !important;
1178                    object-fit: contain !important;
1179                }
1180
1181                .paxflow-wp-mobile-logo span {
1182                    color: #0f172a !important;
1183                    font-weight: 800 !important;
1184                    font-size: 22px !important;
1185                    letter-spacing: -0.03em !important;
1186                }
1187
1188                #paxflow-wp-mobile-toggle {
1189                    display: inline-flex !important;
1190                    flex-direction: column !important;
1191                    align-items: center !important;
1192                    justify-content: center !important;
1193                    gap: 5px !important;
1194                    width: 44px !important;
1195                    height: 44px !important;
1196                    padding: 0 !important;
1197                    border: 1px solid rgba(15, 23, 42, 0.12) !important;
1198                    border-radius: 12px !important;
1199                    background: #ffffff !important;
1200                    cursor: pointer !important;
1201                    flex-shrink: 0 !important;
1202                }
1203
1204                #paxflow-wp-mobile-toggle span {
1205                    display: block !important;
1206                    width: 20px !important;
1207                    height: 2px !important;
1208                    background: #0f172a !important;
1209                    border-radius: 99px !important;
1210                }
1211
1212                .paxflow-wp-mobile-cta {
1213                    display: inline-flex !important;
1214                    align-items: center !important;
1215                    justify-content: center !important;
1216                    white-space: nowrap !important;
1217                    min-width: max-content !important;
1218                    padding: 12px 16px !important;
1219                    border-radius: 14px !important;
1220                    background: linear-gradient(135deg, #8b1cf6 0%, #ec008c 100%) !important;
1221                    color: #ffffff !important;
1222                    font-weight: 700 !important;
1223                    font-size: 14px !important;
1224                    line-height: 1 !important;
1225                    text-decoration: none !important;
1226                }
1227
1228                #paxflow-wp-mobile-panel {
1229                    display: none !important;
1230                    padding: 0 16px 16px !important;
1231                    background: #FBFCFD !important;
1232                }
1233
1234                #paxflow-wp-mobile-panel.is-open {
1235                    display: block !important;
1236                }
1237
1238                .paxflow-wp-mobile-menu {
1239                    list-style: none !important;
1240                    margin: 0 !important;
1241                    padding: 10px !important;
1242                    border: 1px solid rgba(15, 23, 42, 0.10) !important;
1243                    border-radius: 18px !important;
1244                    box-shadow: 0 24px 70px rgba(15, 23, 42, 0.14) !important;
1245                    background: #ffffff !important;
1246                }
1247
1248                .paxflow-wp-mobile-menu li {
1249                    margin: 0 !important;
1250                    padding: 0 !important;
1251                }
1252
1253                .paxflow-wp-mobile-menu a {
1254                    display: block !important;
1255                    padding: 14px 12px !important;
1256                    color: #0f172a !important;
1257                    font-weight: 650 !important;
1258                    text-decoration: none !important;
1259                    border-bottom: 1px solid rgba(15, 23, 42, 0.08) !important;
1260                }
1261
1262                .paxflow-wp-mobile-menu li:last-child a {
1263                    border-bottom: 0 !important;
1264                }
1265
1266                #root {
1267                    margin-top: 0 !important;
1268                    padding-top: 0 !important;
1269                    background: #FBFCFD !important;
1270                }
1271
1272                #wpadminbar,
1273                #wpadminbar * {
1274                    max-width: none !important;
1275                }
1276            }
1277        </style>
1278
1279        
1279<script>
1280            (function () {
1281                function setupPaxFlowMobileMenu() {
1282                    var toggle = document.getElementById('paxflow-wp-mobile-toggle');
1283                    var panel = document.getElementById('paxflow-wp-mobile-panel');
1284
1285                    if (!toggle || !panel || toggle.dataset.ready === '1') {
1286                        return;
1287                    }
1288
1289                    toggle.dataset.ready = '1';
1290
1291                    toggle.addEventListener('click', function () {
1292                        var isOpen = panel.classList.toggle('is-open');
1293                        toggle.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
1294                    });
1295
1296                    panel.addEventListener('click', function (event) {
1297                        if (event.target && event.target.tagName === 'A') {
1298                            panel.classList.remove('is-open');
1299                            toggle.setAttribute('aria-expanded', 'false');
1300                        }
1301                    });
1302                }
1303
1304                document.addEventListener('DOMContentLoaded', setupPaxFlowMobileMenu);
1305                window.addEventListener('load', setupPaxFlowMobileMenu);
1306            })();
1307        </script>
1307
1308            
1308<script>
1309        (function () {
1310            var themeAssetsUrl = "https:\/\/paxflow.io\/wp-content\/themes\/paxflow-chris-theme-mobile-fixed\/dist\/assets\/";
1311
1312            function fixAssetUrl(url) {
1313                if (!url) return url;
1314
1315                if (url.indexOf('/assets/') === 0) {
1316                    return themeAssetsUrl + url.replace('/assets/', '');
1317                }
1318
1319                return url;
1320            }
1321
1322            function fixImagesAndMedia() {
1323                document.querySelectorAll('img').forEach(function (img) {
1324                    var src = img.getAttribute('src');
1325                    var fixedSrc = fixAssetUrl(src);
1326
1327                    if (fixedSrc !== src) {
1328                        img.setAttribute('src', fixedSrc);
1329                    }
1330
1331                    var srcset = img.getAttribute('srcset');
1332                    if (srcset && srcset.indexOf('/assets/') !== -1) {
1333                        img.setAttribute(
1334                            'srcset',
1335                            srcset.replaceAll('/assets/', themeAssetsUrl)
1336                        );
1337                    }
1338                });
1339
1340                document.querySelectorAll('source').forEach(function (source) {
1341                    var src = source.getAttribute('src');
1342                    var fixedSrc = fixAssetUrl(src);
1343
1344                    if (fixedSrc !== src) {
1345                        source.setAttribute('src', fixedSrc);
1346                    }
1347
1348                    var srcset = source.getAttribute('srcset');
1349                    if (srcset && srcset.indexOf('/assets/') !== -1) {
1350                        source.setAttribute(
1351                            'srcset',
1352                            srcset.replaceAll('/assets/', themeAssetsUrl)
1353                        );
1354                    }
1355                });
1356
1357                document.querySelectorAll('video').forEach(function (video) {
1358                    var src = video.getAttribute('src');
1359                    var fixedSrc = fixAssetUrl(src);
1360
1361                    if (fixedSrc !== src) {
1362                        video.setAttribute('src', fixedSrc);
1363                    }
1364                });
1365            }
1366
1367            document.addEventListener('DOMContentLoaded', fixImagesAndMedia);
1368            window.addEventListener('load', fixImagesAndMedia);
1369
1370            setTimeout(fixImagesAndMedia, 250);
1371            setTimeout(fixImagesAndMedia, 750);
1372            setTimeout(fixImagesAndMedia, 1500);
1373            setTimeout(fixImagesAndMedia, 3000);
1374        })();
1375    </script>
1375
1376        
1376<script>
1377        (function () {
1378            var themeAssetsUrl = "https:\/\/paxflow.io\/wp-content\/themes\/paxflow-chris-theme-mobile-fixed\/dist\/assets\/";
1379
1380            function fixPlaceholderImages() {
1381                document.querySelectorAll('img[data-original-url]').forEach(function (img) {
1382                    var originalUrl = img.getAttribute('data-original-url');
1383
1384                    if (!originalUrl) {
1385                        return;
1386                    }
1387
1388                    var fixedUrl = originalUrl;
1389
1390                    if (originalUrl.indexOf('/assets/') === 0) {
1391                        fixedUrl = themeAssetsUrl + originalUrl.replace('/assets/', '');
1392                    }
1393
1394                    if (img.getAttribute('src') !== fixedUrl) {
1395                        img.setAttribute('src', fixedUrl);
1396                    }
1397
1398                    img.removeAttribute('loading');
1399                    img.removeAttribute('decoding');
1400                    img.style.objectFit = 'contain';
1401                });
1402            }
1403
1404            document.addEventListener('DOMContentLoaded', fixPlaceholderImages);
1405            window.addEventListener('load', fixPlaceholderImages);
1406
1407            setTimeout(fixPlaceholderImages, 250);
1408            setTimeout(fixPlaceholderImages, 750);
1409            setTimeout(fixPlaceholderImages, 1500);
1410            setTimeout(fixPlaceholderImages, 3000);
1411        })();
1412    </script>
1412
1413        <style>
1414        @media (max-width: 768px) {
1415            #paxflow-onboarding-root .pf-mobile-pax-input-wrap {
1416                display: block !important;
1417                margin: 18px 0 24px !important;
1418            }
1419
1420            #paxflow-onboarding-root .pf-mobile-pax-input-wrap label {
1421                display: block !important;
1422                font-size: 0.95rem !important;
1423                font-weight: 600 !important;
1424                color: #111111 !important;
1425                margin-bottom: 8px !important;
1426                text-align: left !important;
1427            }
1428
1429            #paxflow-onboarding-root .pf-mobile-pax-input-wrap input {
1430                width: 100% !important;
1431                min-height: 56px !important;
1432                border-radius: 12px !important;
1433                border: 1px solid rgba(17, 17, 17, 0.14) !important;
1434                background: #f7f7f9 !important;
1435                padding: 14px 16px !important;
1436                font-size: 1rem !important;
1437                color: #111111 !important;
1438            }
1439
1440            #paxflow-onboarding-root .pf-mobile-pax-help {
1441                margin-top: 8px !important;
1442                font-size: 0.85rem !important;
1443                color: #6b7280 !important;
1444                line-height: 1.4 !important;
1445                text-align: left !important;
1446            }
1447
1448            /*
1449             * Hide the original range slider and unreadable labels on mobile only.
1450             */
1451            #paxflow-onboarding-root #pf-pax-slider {
1452                display: none !important;
1453            }
1454
1455            #paxflow-onboarding-root #pf-pax-slider-wrapper,
1456            #paxflow-onboarding-root #pf-pax-slider-labels {
1457                display: none !important;
1458            }
1459        }
1460
1461        @media (min-width: 769px) {
1462            #paxflow-onboarding-root .pf-mobile-pax-input-wrap {
1463                display: none !important;
1464            }
1465        }
1466    </style>
1467
1468    
1468<script>
1469        (function () {
1470            function paxToSliderValue(pax) {
1471                pax = parseInt(pax || '0', 10);
1472
1473                if (!pax || pax < 10000) return 0;
1474                if (pax <= 30000) return 1;
1475                if (pax <= 50000) return 2;
1476                if (pax <= 100000) return 3;
1477                if (pax <= 200000) return 4;
1478                if (pax <= 300000) return 5;
1479                return 6;
1480            }
1481
1482            function setupMobilePaxInput() {
1483                var root = document.getElementById('paxflow-onboarding-root');
1484                if (!root) return;
1485
1486                var slider = root.querySelector('#pf-pax-slider');
1487                if (!slider) return;
1488
1489                if (root.querySelector('#pf-mobile-pax-input')) return;
1490
1491                var sliderWrapper = slider.parentElement;
1492                if (!sliderWrapper) return;
1493
1494                sliderWrapper.id = 'pf-pax-slider-wrapper';
1495
1496                var labelsRow = sliderWrapper.nextElementSibling;
1497                if (labelsRow) {
1498                    labelsRow.id = 'pf-pax-slider-labels';
1499                }
1500
1501                var wrap = document.createElement('div');
1502                wrap.className = 'pf-mobile-pax-input-wrap';
1503                wrap.innerHTML = `
1504                    <label for="pf-mobile-pax-input">Approximate passengers per year</label>
1505                    <input
1506                        id="pf-mobile-pax-input"
1507                        type="number"
1508                        min="0"
1509                        step="1000"
1510                        inputmode="numeric"
1511                        placeholder="e.g. 25000"
1512                    >
1513                    <div class="pf-mobile-pax-help">
1514                        Enter an estimate. We’ll use this to suggest the right PaxFlow tier.
1515                    </div>
1516                `;
1517
1518                sliderWrapper.parentNode.insertBefore(wrap, sliderWrapper);
1519
1520                var input = wrap.querySelector('#pf-mobile-pax-input');
1521
1522                input.addEventListener('input', function () {
1523                    var sliderValue = paxToSliderValue(input.value);
1524
1525                    slider.value = sliderValue;
1526                    slider.dispatchEvent(new Event('input', { bubbles: true }));
1527                    slider.dispatchEvent(new Event('change', { bubbles: true }));
1528                });
1529            }
1530
1531            document.addEventListener('DOMContentLoaded', setupMobilePaxInput);
1532            window.addEventListener('load', setupMobilePaxInput);
1533
1534            setTimeout(setupMobilePaxInput, 250);
1535            setTimeout(setupMobilePaxInput, 750);
1536            setTimeout(setupMobilePaxInput, 1500);
1537
1538            document.addEventListener('click', function () {
1539                setTimeout(setupMobilePaxInput, 250);
1540            });
1541        })();
1542    </script>
1542
1543        
1543<script>
1544        (function () {
1545            function normaliseInsightsLinks() {
1546                if (!window.location.pathname.replace(/\/$/, '').endsWith('/insights')) {
1547                    return;
1548                }
1549
1550                var currentOrigin = window.location.origin;
1551
1552                document.querySelectorAll('a[href]').forEach(function (link) {
1553					link.removeAttribute('target');
1554                    link.removeAttribute('rel');
1555					
1556                    var href = link.getAttribute('href');
1557                    if (!href) return;
1558
1559                    var parsed;
1560
1561                    try {
1562                        parsed = new URL(href, currentOrigin);
1563                    } catch (e) {
1564                        return;
1565                    }
1566
1567                    /*
1568                     * Rewrite old/main PaxFlow blog links to this WordPress build.
1569                     * Keeps the exact slug, changes only the domain.
1570                     */
1571                    if (
1572                        parsed.hostname.includes('paxflow.io') ||
1573                        parsed.hostname.includes('paxflownewtdev.wpenginepowered.com')
1574                    ) {
1575                        var path = parsed.pathname;
1576
1577                        /*
1578                         * If the old link already contains /insights/slug
1579                         */
1580                        if (path.includes('/insights/')) {
1581                            var parts = path.split('/').filter(Boolean);
1582                            var insightsIndex = parts.indexOf('insights');
1583
1584                            if (insightsIndex !== -1 && parts[insightsIndex + 1]) {
1585                                var slug = parts[insightsIndex + 1];
1586                                link.setAttribute('href', currentOrigin + '/insights/' + slug + '/');
1587                            }
1588                        }
1589
1590                        /*
1591                         * If the old link is just /slug/
1592                         */
1593                        else {
1594                            var slugOnly = path.split('/').filter(Boolean).pop();
1595
1596                            if (slugOnly) {
1597                                link.setAttribute('href', currentOrigin + '/insights/' + slugOnly + '/');
1598                            }
1599                        }
1600                    }
1601                });
1602            }
1603
1604            document.addEventListener('DOMContentLoaded', normaliseInsightsLinks);
1605            window.addEventListener('load', normaliseInsightsLinks);
1606
1607            setTimeout(normaliseInsightsLinks, 300);
1608            setTimeout(normaliseInsightsLinks, 1000);
1609            setTimeout(normaliseInsightsLinks, 2000);
1610
1611            document.addEventListener('click', function () {
1612                setTimeout(normaliseInsightsLinks, 300);
1613            });
1614        })();
1615    </script>
1615
1616        <style>
1617        .paxflow-pricing-modal-backdrop {
1618            position: fixed;
1619            inset: 0;
1620            background: rgba(17, 24, 39, 0.55);
1621            display: none;
1622            align-items: center;
1623            justify-content: center;
1624            padding: 18px;
1625            z-index: 9999999;
1626        }
1627
1628        .paxflow-pricing-modal-backdrop.is-open {
1629            display: flex;
1630        }
1631
1632        .paxflow-pricing-modal {
1633            width: 100%;
1634            max-width: 520px;
1635            background: #ffffff;
1636            border-radius: 18px;
1637            border: 1px solid #E6E8EE;
1638            box-shadow: 0 26px 70px rgba(0, 0, 0, 0.22);
1639            padding: 22px 22px 18px;
1640            position: relative;
1641            font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
1642            color: #111827;
1643        }
1644
1645        .paxflow-pricing-modal-close {
1646            position: absolute;
1647            top: 12px;
1648            right: 12px;
1649            width: 38px;
1650            height: 38px;
1651            border-radius: 12px;
1652            border: 1px solid #E6E8EE;
1653            background: #ffffff;
1654            cursor: pointer;
1655            font-size: 18px;
1656            line-height: 1;
1657            display: flex;
1658            align-items: center;
1659            justify-content: center;
1660            color: #000000;
1661        }
1662
1663        .paxflow-pricing-modal-close:hover {
1664            border-color: #C215D3;
1665            transform: translateY(-1px);
1666        }
1667
1668        .paxflow-pricing-modal-title {
1669            margin: 2px 44px 6px 0;
1670            font-size: 20px;
1671            font-weight: 900;
1672            color: #111827;
1673        }
1674
1675        .paxflow-pricing-modal-subtitle {
1676            margin: 0 44px 16px 0;
1677            font-size: 14px;
1678            color: #6B7280;
1679            line-height: 1.45;
1680        }
1681
1682        .paxflow-pricing-modal-actions {
1683            display: flex;
1684            flex-direction: column;
1685            gap: 10px;
1686            margin-top: 8px;
1687        }
1688
1689        .paxflow-pricing-modal-btn {
1690            width: 100%;
1691            border-radius: 12px;
1692            padding: 14px 14px;
1693            font-weight: 800;
1694            font-size: 15px;
1695            border: 1px solid transparent;
1696            cursor: pointer;
1697            transition: all 0.2s ease;
1698            text-decoration: none;
1699            display: inline-flex;
1700            align-items: center;
1701            justify-content: center;
1702            box-sizing: border-box;
1703        }
1704
1705        .paxflow-pricing-modal-btn.primary {
1706            background: #5A0091;
1707            color: #ffffff;
1708            box-shadow: 0 12px 26px rgba(90, 0, 145, 0.22);
1709        }
1710
1711        .paxflow-pricing-modal-btn.primary:hover {
1712            background: #C215D3;
1713            box-shadow: 0 14px 30px rgba(194, 21, 211, 0.22);
1714            transform: translateY(-1px);
1715        }
1716
1717        .paxflow-pricing-modal-btn.outline {
1718            background: #F4F0F2;
1719            color: #111827;
1720            border-color: #5A0091;
1721        }
1722
1723        .paxflow-pricing-modal-btn.outline:hover {
1724            border-color: #C215D3;
1725        }
1726
1727        .paxflow-pricing-modal-note {
1728            margin: 6px 0 0;
1729            font-size: 13px;
1730            color: #6B7280;
1731            line-height: 1.45;
1732        }
1733    </style>
1734
1735    
1735<script>
1736        (function () {
1737            function isPricingPage() {
1738                return window.location.pathname.replace(/\/$/, '') === '/pricing';
1739            }
1740
1741            function createPricingModal() {
1742                if (document.getElementById('paxflow-pricing-modal')) return;
1743
1744                var modal = document.createElement('div');
1745                modal.className = 'paxflow-pricing-modal-backdrop';
1746                modal.id = 'paxflow-pricing-modal';
1747                modal.setAttribute('aria-hidden', 'true');
1748                modal.setAttribute('role', 'dialog');
1749                modal.setAttribute('aria-modal', 'true');
1750
1751                modal.innerHTML = `
1752                    <div class="paxflow-pricing-modal" role="document">
1753                        <button type="button" class="paxflow-pricing-modal-close" aria-label="Close modal">×</button>
1754
1755                        <div class="paxflow-pricing-modal-title">Choose your booking platform</div>
1756                        <div class="paxflow-pricing-modal-subtitle">
1757                            Customers with Bókun can install PaxFlow on the Bókun Appstore.
1758                        </div>
1759
1760                        <div class="paxflow-pricing-modal-actions">
1761                            <a class="paxflow-pricing-modal-btn primary"
1762                               href="https://extranet.bokun.io/v2/appstore/app/119"
1763                               target="_blank"
1764                               rel="noopener">
1765                                Install on Bókun Appstore
1766                            </a>
1767
1768                            <div class="paxflow-pricing-modal-note">
1769                                Customers with iTicket from VisitGroup or other booking platforms, please talk to sales.
1770                            </div>
1771
1772                            <a class="paxflow-pricing-modal-btn outline"
1773   href="/contact/">
1774    Talk to sales
1775</a>
1776                        </div>
1777                    </div>
1778                `;
1779
1780                document.body.appendChild(modal);
1781
1782                var closeBtn = modal.querySelector('.paxflow-pricing-modal-close');
1783
1784                function closeModal() {
1785                    modal.classList.remove('is-open');
1786                    modal.setAttribute('aria-hidden', 'true');
1787                    document.body.style.overflow = '';
1788                }
1789
1790                closeBtn.addEventListener('click', closeModal);
1791
1792                modal.addEventListener('click', function (e) {
1793                    if (e.target === modal) closeModal();
1794                });
1795
1796                document.addEventListener('keydown', function (e) {
1797                    if (e.key === 'Escape' && modal.classList.contains('is-open')) {
1798                        closeModal();
1799                    }
1800                });
1801            }
1802
1803            function openPricingModal() {
1804                createPricingModal();
1805
1806                var modal = document.getElementById('paxflow-pricing-modal');
1807                if (!modal) return;
1808
1809                modal.classList.add('is-open');
1810                modal.setAttribute('aria-hidden', 'false');
1811                document.body.style.overflow = 'hidden';
1812
1813                var closeBtn = modal.querySelector('.paxflow-pricing-modal-close');
1814                if (closeBtn) closeBtn.focus();
1815            }
1816
1817            function bindTryForFreeButtons() {
1818                if (!isPricingPage()) return;
1819
1820                createPricingModal();
1821
1822                document.querySelectorAll('a, button').forEach(function (el) {
1823                    var text = (el.textContent || '').trim().toLowerCase();
1824
1825                    if (text === 'try for free') {
1826                        if (el.dataset.paxflowModalBound === 'true') return;
1827
1828                        el.dataset.paxflowModalBound = 'true';
1829
1830                        el.addEventListener('click', function (e) {
1831                            e.preventDefault();
1832                            e.stopPropagation();
1833                            openPricingModal();
1834                        }, true);
1835                    }
1836                });
1837            }
1838
1839            document.addEventListener('DOMContentLoaded', bindTryForFreeButtons);
1840            window.addEventListener('load', bindTryForFreeButtons);
1841
1842            setTimeout(bindTryForFreeButtons, 300);
1843            setTimeout(bindTryForFreeButtons, 1000);
1844            setTimeout(bindTryForFreeButtons, 2000);
1845
1846            document.addEventListener('click', function () {
1847                setTimeout(bindTryForFreeButtons, 300);
1848            });
1849        })();
1850    </script>
1850
1851        
1851<script>
1852        (function () {
1853            function isHomepage() {
1854                var path = window.location.pathname.replace(/\/$/, '');
1855                return path === '' || path === '/';
1856            }
1857
1858            function findDemoSection() {
1859                return (
1860                    document.querySelector('#paxflow-onboarding-root') ||
1861                    document.querySelector('[id*="demo"]') ||
1862                    document.querySelector('[class*="demo"]') ||
1863                    document.querySelector('[id*="contact"]') ||
1864                    document.querySelector('[class*="contact"]')
1865                );
1866            }
1867
1868            function scrollToDemo() {
1869                var demoSection = findDemoSection();
1870
1871                if (demoSection) {
1872                    var offset = 100;
1873                    var top = demoSection.getBoundingClientRect().top + window.pageYOffset - offset;
1874
1875                    window.scrollTo({
1876                        top: top,
1877                        behavior: 'smooth'
1878                    });
1879                } else {
1880                    window.location.href = '/contact/';
1881                }
1882            }
1883
1884            function fixContactSalesButtons() {
1885                if (!isHomepage()) return;
1886
1887                document.querySelectorAll('a, button').forEach(function (el) {
1888                    var text = (el.textContent || '').trim().toLowerCase();
1889
1890                    if (text === 'contact sales') {
1891                        el.removeAttribute('target');
1892                        el.removeAttribute('rel');
1893
1894                        if (el.tagName.toLowerCase() === 'a') {
1895                            el.setAttribute('href', '#demo');
1896                        }
1897
1898                        if (el.dataset.paxflowContactSalesBound === 'true') return;
1899                        el.dataset.paxflowContactSalesBound = 'true';
1900
1901                        el.addEventListener('click', function (e) {
1902                            e.preventDefault();
1903                            e.stopPropagation();
1904                            scrollToDemo();
1905                        }, true);
1906                    }
1907                });
1908            }
1909
1910            document.addEventListener('DOMContentLoaded', fixContactSalesButtons);
1911            window.addEventListener('load', fixContactSalesButtons);
1912
1913            setTimeout(fixContactSalesButtons, 300);
1914            setTimeout(fixContactSalesButtons, 1000);
1915            setTimeout(fixContactSalesButtons, 2000);
1916        })();
1917    </script>
1917
1918        <style>
1919        .paxflow-home-video-modal-backdrop {
1920            position: fixed;
1921            inset: 0;
1922            z-index: 9999999;
1923            display: none;
1924            align-items: center;
1925            justify-content: center;
1926            padding: 20px;
1927            background: rgba(17, 24, 39, 0.72);
1928        }
1929
1930        .paxflow-home-video-modal-backdrop.is-open {
1931            display: flex;
1932        }
1933
1934       .paxflow-home-video-modal-panel {
1935    width: min(960px, 100%);
1936    background: transparent;
1937    border-radius: 18px;
1938    overflow: visible;
1939    box-shadow: none;
1940    position: relative;
1941}
1942
1943.paxflow-home-video-modal-close {
1944    position: absolute;
1945    top: -46px;
1946    right: 0;
1947    width: 38px;
1948    height: 38px;
1949    border: none;
1950    border-radius: 999px;
1951    background: rgba(255, 255, 255, 0.92);
1952    font-size: 28px;
1953    line-height: 1;
1954    cursor: pointer;
1955    color: #111827;
1956    padding: 0;
1957    z-index: 2;
1958    display: flex;
1959    align-items: center;
1960    justify-content: center;
1961}
1962
1963.paxflow-home-video-modal-body {
1964    padding: 0;
1965}
1966
1967        .paxflow-home-video-frame {
1968            position: relative;
1969            width: 100%;
1970            padding-bottom: 56.25%;
1971            height: 0;
1972            overflow: hidden;
1973            border-radius: 12px;
1974            background: #000000;
1975        }
1976
1977        .paxflow-home-video-frame iframe {
1978            position: absolute;
1979            inset: 0;
1980            width: 100%;
1981            height: 100%;
1982            border: 0;
1983        }
1984
1985        @media (max-width: 768px) {
1986            .paxflow-home-video-modal-backdrop {
1987                padding: 12px;
1988            }
1989
1990            .paxflow-home-video-modal-body {
1991                padding: 14px;
1992            }
1993        }
1994    </style>
1995
1996    
1996<script>
1997        (function () {
1998            function isHomepage() {
1999                var path = window.location.pathname.replace(/\/$/, '');
2000                return path === '' || path === '/';
2001            }
2002
2003            function createVideoModal() {
2004                if (document.getElementById('paxflow-home-video-modal')) return;
2005
2006                /*
2007                 * Change this ID if the Platform page demo uses a different YouTube video.
2008                 */
2009                var demoVideoId = 'YPRZc6Xus6U';
2010
2011                var modal = document.createElement('div');
2012                modal.id = 'paxflow-home-video-modal';
2013                modal.className = 'paxflow-home-video-modal-backdrop';
2014                modal.setAttribute('aria-hidden', 'true');
2015                modal.setAttribute('role', 'dialog');
2016                modal.setAttribute('aria-modal', 'true');
2017
2018                modal.innerHTML = `
2019                    <div class="paxflow-home-video-modal-panel" role="document">
2020                        <div class="paxflow-home-video-modal-header">
2021                            <h4>Watch a 7-minute demo</h4>
2022                            <button type="button" class="paxflow-home-video-modal-close" aria-label="Close">×</button>
2023                        </div>
2024
2025                        <div class="paxflow-home-video-modal-body">
2026                            <div class="paxflow-home-video-frame">
2027                                <iframe
2028                                    data-src="https://www.youtube.com/embed/${demoVideoId}?autoplay=1&mute=1&rel=0&modestbranding=1&playsinline=1"
2029                                    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
2030                                    allowfullscreen
2031                                ></iframe>
2032                            </div>
2033                        </div>
2034                    </div>
2035                `;
2036
2037                document.body.appendChild(modal);
2038
2039                var closeBtn = modal.querySelector('.paxflow-home-video-modal-close');
2040                var iframe = modal.querySelector('iframe');
2041
2042                function closeModal() {
2043                    modal.classList.remove('is-open');
2044                    modal.setAttribute('aria-hidden', 'true');
2045                    document.body.style.overflow = '';
2046
2047                    if (iframe) {
2048                        iframe.setAttribute('src', '');
2049                    }
2050                }
2051
2052                closeBtn.addEventListener('click', closeModal);
2053
2054                modal.addEventListener('click', function (e) {
2055                    if (e.target === modal) {
2056                        closeModal();
2057                    }
2058                });
2059
2060                document.addEventListener('keydown', function (e) {
2061                    if (e.key === 'Escape' && modal.classList.contains('is-open')) {
2062                        closeModal();
2063                    }
2064                });
2065            }
2066
2067            function openVideoModal() {
2068                createVideoModal();
2069
2070                var modal = document.getElementById('paxflow-home-video-modal');
2071                if (!modal) return;
2072
2073                var iframe = modal.querySelector('iframe');
2074                if (iframe) {
2075                    iframe.setAttribute('src', iframe.getAttribute('data-src'));
2076                }
2077
2078                modal.classList.add('is-open');
2079                modal.setAttribute('aria-hidden', 'false');
2080                document.body.style.overflow = 'hidden';
2081
2082                var closeBtn = modal.querySelector('.paxflow-home-video-modal-close');
2083                if (closeBtn) closeBtn.focus();
2084            }
2085
2086            function bindViewPlatformButton() {
2087                if (!isHomepage()) return;
2088
2089                createVideoModal();
2090
2091                document.querySelectorAll('a, button').forEach(function (el) {
2092                    var text = (el.textContent || '').trim().toLowerCase();
2093
2094                    if (text === 'view platform') {
2095                        if (el.dataset.paxflowVideoModalBound === 'true') return;
2096
2097                        el.dataset.paxflowVideoModalBound = 'true';
2098
2099                        if (el.tagName.toLowerCase() === 'a') {
2100                            el.setAttribute('href', '#watch-demo');
2101                            el.removeAttribute('target');
2102                            el.removeAttribute('rel');
2103                        }
2104
2105                        el.addEventListener('click', function (e) {
2106                            e.preventDefault();
2107                            e.stopPropagation();
2108                            openVideoModal();
2109                        }, true);
2110                    }
2111                });
2112            }
2113
2114            document.addEventListener('DOMContentLoaded', bindViewPlatformButton);
2115            window.addEventListener('load', bindViewPlatformButton);
2116
2117            setTimeout(bindViewPlatformButton, 300);
2118            setTimeout(bindViewPlatformButton, 1000);
2119            setTimeout(bindViewPlatformButton, 2000);
2120
2121            document.addEventListener('click', function () {
2122                setTimeout(bindViewPlatformButton, 300);
2123            });
2124        })();
2125    </script>
2125
2126        
2126<script>
2127        (function () {
2128            function updateSignInLinks() {
2129                var signInUrl = 'https://admin.paxflow.io/';
2130
2131                document.querySelectorAll('a, button').forEach(function (el) {
2132                    var text = (el.textContent || '').trim().toLowerCase();
2133
2134                    if (text === 'sign in' || text === 'signin') {
2135                        if (el.tagName.toLowerCase() === 'a') {
2136                            el.setAttribute('href', signInUrl);
2137                            el.setAttribute('target', '_blank');
2138                            el.setAttribute('rel', 'noopener noreferrer');
2139                        } else {
2140                            el.onclick = function (e) {
2141                                e.preventDefault();
2142                                window.open(signInUrl, '_blank', 'noopener,noreferrer');
2143                            };
2144                        }
2145                    }
2146                });
2147            }
2148
2149            document.addEventListener('DOMContentLoaded', updateSignInLinks);
2150            window.addEventListener('load', updateSignInLinks);
2151
2152            setTimeout(updateSignInLinks, 300);
2153            setTimeout(updateSignInLinks, 1000);
2154            setTimeout(updateSignInLinks, 2000);
2155
2156            document.addEventListener('click', function () {
2157                setTimeout(updateSignInLinks, 300);
2158            });
2159        })();
2160    </script>
2160
2161        <style id="paxflow-site-ext-about-css">
2162        .paxflow-investment-section,
2163        .paxflow-leadership-section {
2164            background: #FFFFFF;
2165            padding: 96px 48px;
2166            border-top: 0 !important;
2167        }
2168        .paxflow-investment-section { padding-bottom: 64px; }
2169        .paxflow-leadership-section { padding-top: 40px; }
2170        .paxflow-investment-inner,
2171        .paxflow-leadership-inner {
2172            max-width: 808px;
2173            margin: 0 auto;
2174            text-align: left;
2175        }
2176        .paxflow-investment-header,
2177        .paxflow-leadership-header {
2178            max-width: 100%;
2179            margin: 0 0 48px;
2180            text-align: left;
2181        }
2182        .paxflow-investment-title,
2183        .paxflow-leadership-title {
2184            margin: 0 0 24px;
2185            color: #111827;
2186            font-size: 34px;
2187            line-height: 1.18;
2188            letter-spacing: -0.035em;
2189            font-weight: 700;
2190        }
2191        .paxflow-investment-copy,
2192        .paxflow-leadership-copy {
2193            max-width: 100%;
2194            margin: 0;
2195            color: #111827;
2196            font-size: 17px;
2197            line-height: 1.55;
2198        }
2199        .paxflow-investment-logos {
2200            display: flex;
2201            align-items: center;
2202            justify-content: flex-start;
2203            gap: 24px;
2204            flex-wrap: wrap;
2205        }
2206        .paxflow-investment-logo-card {
2207            display: flex;
2208            align-items: center;
2209            justify-content: center;
2210            min-width: 300px;
2211            min-height: 130px;
2212            padding: 32px 42px;
2213            border: 1px solid #e5e7eb;
2214            border-radius: 22px;
2215            background: #ffffff;
2216            box-shadow: 0 18px 50px rgba(15, 23, 42, 0.06);
2217        }
2218        .paxflow-investment-logo-card img {
2219            display: block;
2220            width: auto;
2221            height: auto;
2222            object-fit: contain;
2223        }
2224        .paxflow-investment-logo-card img.paxflow-logo-primary { max-width: 360px; max-height: 120px; }
2225        .paxflow-investment-logo-card img.paxflow-logo-brunnur { max-width: 260px; max-height: 80px; }
2226        .paxflow-leadership-grid { display: grid; grid-template-columns: 1fr; gap: 28px; }
2227        .paxflow-leader-card {
2228            display: grid;
2229            grid-template-columns: 160px 1fr;
2230            gap: 28px;
2231            align-items: start;
2232            padding: 32px;
2233            border: 1px solid #e5e7eb;
2234            border-radius: 24px;
2235            background: #ffffff;
2236            box-shadow: 0 18px 50px rgba(15, 23, 42, 0.06);
2237        }
2238        .paxflow-leader-image {
2239            width: 160px;
2240            height: 160px;
2241            border-radius: 20px;
2242            overflow: hidden;
2243            background: #f3f4f6;
2244        }
2245        .paxflow-leader-image img {
2246            display: block;
2247            width: 100%;
2248            height: 100%;
2249            object-fit: cover;
2250        }
2251        .paxflow-leader-name {
2252            margin: 0 0 6px;
2253            color: #111827;
2254            font-size: 24px;
2255            line-height: 1.2;
2256            letter-spacing: -0.025em;
2257            font-weight: 700;
2258        }
2259        .paxflow-leader-role {
2260            margin: 0 0 18px;
2261            color: #9333ea;
2262            font-size: 15px;
2263            line-height: 1.4;
2264            font-weight: 700;
2265        }
2266        .paxflow-leader-bio {
2267            margin: 0 0 20px;
2268            color: #374151;
2269            font-size: 16px;
2270            line-height: 1.65;
2271        }
2272        .paxflow-leader-link {
2273            display: inline-flex;
2274            align-items: center;
2275            color: #9333ea;
2276            font-size: 15px;
2277            font-weight: 700;
2278            text-decoration: none;
2279        }
2280        .paxflow-leader-link:hover { color: #c215d3; text-decoration: underline; }
2281        @media (max-width: 768px) {
2282            .paxflow-investment-section,
2283            .paxflow-leadership-section { padding: 72px 20px; }
2284            .paxflow-investment-section { padding-bottom: 48px; }
2285            .paxflow-leadership-section { padding-top: 28px; }
2286            .paxflow-investment-inner,
2287            .paxflow-leadership-inner { max-width: 100%; text-align: left; }
2288            .paxflow-investment-header,
2289            .paxflow-leadership-header { margin-bottom: 36px; text-align: left; }
2290            .paxflow-investment-title,
2291            .paxflow-leadership-title { font-size: 32px; line-height: 1.15; }
2292            .paxflow-investment-copy,
2293            .paxflow-leadership-copy { font-size: 16px; line-height: 1.6; }
2294            .paxflow-investment-logos { justify-content: flex-start; gap: 20px; }
2295            .paxflow-investment-logo-card { width: 100%; min-width: 0; min-height: 120px; padding: 24px; }
2296            .paxflow-investment-logo-card img.paxflow-logo-primary { max-width: 300px; max-height: 105px; }
2297            .paxflow-investment-logo-card img.paxflow-logo-brunnur { max-width: 230px; max-height: 70px; }
2298            .paxflow-leader-card { grid-template-columns: 1fr; gap: 22px; padding: 24px; }
2299            .paxflow-leader-image { width: 140px; height: 140px; }
2300            .paxflow-leader-name { font-size: 22px; }
2301        }
2302    </style>
2303
2304    
2304<script id="paxflow-site-ext-about-js">
2305        (function () {
2306            function isAboutPage() {
2307                var path = window.location.pathname.replace(/\/$/, '');
2308                return path === '/about' || path === '/about-us';
2309            }
2310
2311            function findSectionByHeading(headingText) {
2312                var wanted = headingText.toLowerCase();
2313                var candidates = document.querySelectorAll('#root h1, #root h2, #root h3, #root h4, h1, h2, h3, h4');
2314
2315                for (var i = 0; i < candidates.length; i++) {
2316                    var text = (candidates[i].textContent || '').trim().toLowerCase();
2317
2318                    if (text.includes(wanted)) {
2319                        var section = candidates[i].closest('section');
2320                        if (section && section.id !== 'root') return section;
2321
2322                        var parent = candidates[i].parentElement;
2323                        var steps = 0;
2324                        while (parent && steps < 5) {
2325                            var tag = parent.tagName ? parent.tagName.toLowerCase() : '';
2326                            if (tag === 'section') return parent;
2327                            parent = parent.parentElement;
2328                            steps++;
2329                        }
2330                    }
2331                }
2332                return null;
2333            }
2334
2335            function createInvestmentSection() {
2336                var section = document.createElement('section');
2337                section.className = 'paxflow-investment-section';
2338                section.innerHTML = `
2339                    <div class="paxflow-investment-inner">
2340                        <div class="paxflow-investment-header">
2341                            <h2 class="paxflow-investment-title">Backed by investors and innovation support</h2>
2342                            <p class="paxflow-investment-copy">PaxFlow is supported by experienced investors and Icelandic innovation partners as we build the operations intelligence layer for modern tour businesses.</p>
2343                        </div>
2344                        <div class="paxflow-investment-logos">
2345                            <div class="paxflow-investment-logo-card">
2346                                <img class="paxflow-logo-primary" src="https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/image-6.png" alt="PaxFlow investment and support partner">
2347                            </div>
2348                            <div class="paxflow-investment-logo-card">
2349                                <img class="paxflow-logo-brunnur" src="https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/Brunnur_Logo_Large-300x44-1.webp" alt="Brunnur Ventures">
2350                            </div>
2351                        </div>
2352                    </div>`;
2353                return section;
2354            }
2355
2356            function createLeadershipSection() {
2357                var section = document.createElement('section');
2358                section.className = 'paxflow-leadership-section';
2359                section.innerHTML = `
2360                    <div class="paxflow-leadership-inner">
2361                        <div class="paxflow-leadership-header">
2362                            <h2 class="paxflow-leadership-title">PaxFlow Leadership</h2>
2363                            <p class="paxflow-leadership-copy">Meet the people helping shape PaxFlow's product, strategy and long-term vision.</p>
2364                        </div>
2365                        <div class="paxflow-leadership-grid">
2366                            <article class="paxflow-leader-card">
2367                                <div class="paxflow-leader-image"><img src="https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/soffia-th-300x291-1.png" alt="Soffia Thordardottir"></div>
2368                                <div>
2369                                    <h3 class="paxflow-leader-name">Soffia Thordardottir</h3>
2370                                    <p class="paxflow-leader-role">Founder &amp; CEO, PaxFlow</p>
2371                                    <p class="paxflow-leader-bio">Soffia is a seasoned leader with over 12 years of experience in the travel tech space. She is the former Director of Travel Solutions at TM Software &amp; Origo and Product Portfolio Manager of Product Labs at Origo Iceland. Soffia has a background in Computer Science and Business Administration and is certified in Product Management from UC Berkeley Haas School of Business. She is a skilled problem solver and strategic leader, committed to creating innovative digital products that combine her passion for travel, tech and gear.</p>
2372                                    <a class="paxflow-leader-link" href="https://www.linkedin.com/in/soffiath/" target="_blank" rel="noopener noreferrer">View LinkedIn →</a>
2373                                </div>
2374                            </article>
2375                            <article class="paxflow-leader-card">
2376                                <div class="paxflow-leader-image">
2376<img src="https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/andri2-150x150-1.jpeg" alt="Andri Heiðar Kristinsson"></div>
2377                                <div>
2378                                    <h3 class="paxflow-leader-name">Andri Heiðar Kristinsson</h3>
2379                                    <p class="paxflow-leader-role">Chairman of the Board</p>
2380                                    <p class="paxflow-leader-bio">Andri Heiðar is a Stanford MBA graduate and a true entrepreneur and leader, with previous experience building consumer products at LinkedIn and scaling the SlideShare mobile app from the ground up to millions of users. Andri previously founded Travelade, a tech startup aimed at making travel more personal. He is also the former CEO of Digital Iceland, an organisation leading the digital transformation of the Icelandic government.</p>
2381                                    <a class="paxflow-leader-link" href="https://www.linkedin.com/in/andriheidar/" target="_blank" rel="noopener noreferrer">View LinkedIn →</a>
2382                                </div>
2383                            </article>
2384                        </div>
2385                    </div>`;
2386                return section;
2387            }
2388
2389            function addAboutSections() {
2390                if (!isAboutPage()) return false;
2391                if (document.querySelector('.paxflow-investment-section') || document.querySelector('.paxflow-leadership-section')) return true;
2392
2393                var investmentSection = createInvestmentSection();
2394                var leadershipSection = createLeadershipSection();
2395                var backedByExperienceSection = findSectionByHeading('Backed by experience');
2396
2397                if (backedByExperienceSection && backedByExperienceSection.parentNode) {
2398                    backedByExperienceSection.parentNode.insertBefore(investmentSection, backedByExperienceSection);
2399                    investmentSection.parentNode.insertBefore(leadershipSection, investmentSection.nextSibling);
2400                    backedByExperienceSection.remove();
2401                    return true;
2402                }
2403
2404                var readySection = findSectionByHeading('Ready to transform your tour operations');
2405                if (readySection && readySection.parentNode) {
2406                    readySection.parentNode.insertBefore(investmentSection, readySection);
2407                    investmentSection.parentNode.insertBefore(leadershipSection, investmentSection.nextSibling);
2408                    return true;
2409                }
2410
2411                var root = document.querySelector('#root main') || document.querySelector('#root') || document.body;
2412                root.appendChild(investmentSection);
2413                root.appendChild(leadershipSection);
2414                return true;
2415            }
2416
2417            document.addEventListener('DOMContentLoaded', addAboutSections);
2418            window.addEventListener('load', addAboutSections);
2419            setTimeout(addAboutSections, 300);
2420            setTimeout(addAboutSections, 1000);
2421            setTimeout(addAboutSections, 2000);
2422            setTimeout(addAboutSections, 3500);
2423
2424            if (window.MutationObserver) {
2425                var observer = new MutationObserver(function () {
2426                    if (isAboutPage()) addAboutSections();
2427                });
2428                observer.observe(document.documentElement, { childList: true, subtree: true });
2429            }
2430        })();
2431    </script>
2431
2432        <style>
2433        .paxflow-investment-section,
2434        .paxflow-leadership-section {
2435            background: #FFFFFF;
2436            padding: 96px 48px;
2437            border-top: 0 !important;
2438        }
2439
2440        .paxflow-investment-section {
2441            padding-bottom: 64px;
2442        }
2443
2444        .paxflow-leadership-section {
2445            padding-top: 40px;
2446        }
2447
2448        .paxflow-investment-inner,
2449        .paxflow-leadership-inner {
2450            max-width: 808px;
2451            margin: 0 auto;
2452            text-align: left;
2453        }
2454
2455        .paxflow-investment-header,
2456        .paxflow-leadership-header {
2457            max-width: 100%;
2458            margin: 0 0 48px;
2459            text-align: left;
2460        }
2461
2462        .paxflow-investment-title,
2463        .paxflow-leadership-title {
2464            margin: 0 0 24px;
2465            color: #111827;
2466            font-size: 34px;
2467            line-height: 1.18;
2468            letter-spacing: -0.035em;
2469            font-weight: 700;
2470        }
2471
2472        .paxflow-investment-copy,
2473        .paxflow-leadership-copy {
2474            max-width: 100%;
2475            margin: 0;
2476            color: #111827;
2477            font-size: 17px;
2478            line-height: 1.55;
2479        }
2480
2481        .paxflow-investment-logos {
2482            display: flex;
2483            align-items: center;
2484            justify-content: flex-start;
2485            gap: 24px;
2486            flex-wrap: wrap;
2487        }
2488
2489        .paxflow-investment-logo-card {
2490            display: flex;
2491            align-items: center;
2492            justify-content: center;
2493            min-width: 300px;
2494            min-height: 130px;
2495            padding: 32px 42px;
2496            border: 1px solid #e5e7eb;
2497            border-radius: 22px;
2498            background: #ffffff;
2499            box-shadow: 0 18px 50px rgba(15, 23, 42, 0.06);
2500        }
2501
2502        .paxflow-investment-logo-card img {
2503            display: block;
2504            width: auto;
2505            height: auto;
2506            object-fit: contain;
2507        }
2508
2509        .paxflow-investment-logo-card img.paxflow-logo-primary {
2510            max-width: 360px;
2511            max-height: 120px;
2512        }
2513
2514        .paxflow-investment-logo-card img.paxflow-logo-brunnur {
2515            max-width: 260px;
2516            max-height: 80px;
2517        }
2518
2519        .paxflow-leadership-grid {
2520            display: grid;
2521            grid-template-columns: 1fr;
2522            gap: 28px;
2523        }
2524
2525        .paxflow-leader-card {
2526            display: grid;
2527            grid-template-columns: 160px 1fr;
2528            gap: 28px;
2529            align-items: start;
2530            padding: 32px;
2531            border: 1px solid #e5e7eb;
2532            border-radius: 24px;
2533            background: #ffffff;
2534            box-shadow: 0 18px 50px rgba(15, 23, 42, 0.06);
2535        }
2536
2537        .paxflow-leader-image {
2538            width: 160px;
2539            height: 160px;
2540            border-radius: 20px;
2541            overflow: hidden;
2542            background: #f3f4f6;
2543        }
2544
2545        .paxflow-leader-image img {
2546            display: block;
2547            width: 100%;
2548            height: 100%;
2549            object-fit: cover;
2550        }
2551
2552        .paxflow-leader-name {
2553            margin: 0 0 6px;
2554            color: #111827;
2555            font-size: 24px;
2556            line-height: 1.2;
2557            letter-spacing: -0.025em;
2558            font-weight: 700;
2559        }
2560
2561        .paxflow-leader-role {
2562            margin: 0 0 18px;
2563            color: #9333ea;
2564            font-size: 15px;
2565            line-height: 1.4;
2566            font-weight: 700;
2567        }
2568
2569        .paxflow-leader-bio {
2570            margin: 0 0 20px;
2571            color: #374151;
2572            font-size: 16px;
2573            line-height: 1.65;
2574        }
2575
2576        .paxflow-leader-link {
2577            display: inline-flex;
2578            align-items: center;
2579            color: #9333ea;
2580            font-size: 15px;
2581            font-weight: 700;
2582            text-decoration: none;
2583        }
2584
2585        .paxflow-leader-link:hover {
2586            color: #c215d3;
2587            text-decoration: underline;
2588        }
2589
2590        @media (max-width: 768px) {
2591            .paxflow-investment-section,
2592            .paxflow-leadership-section {
2593                padding: 72px 20px;
2594            }
2595
2596            .paxflow-investment-section {
2597                padding-bottom: 48px;
2598            }
2599
2600            .paxflow-leadership-section {
2601                padding-top: 28px;
2602            }
2603
2604            .paxflow-investment-inner,
2605            .paxflow-leadership-inner {
2606                max-width: 100%;
2607                text-align: left;
2608            }
2609
2610            .paxflow-investment-header,
2611            .paxflow-leadership-header {
2612                margin-bottom: 36px;
2613                text-align: left;
2614            }
2615
2616            .paxflow-investment-title,
2617            .paxflow-leadership-title {
2618                font-size: 32px;
2619                line-height: 1.15;
2620            }
2621
2622            .paxflow-investment-copy,
2623            .paxflow-leadership-copy {
2624                font-size: 16px;
2625                line-height: 1.6;
2626            }
2627
2628            .paxflow-investment-logos {
2629                justify-content: flex-start;
2630                gap: 20px;
2631            }
2632
2633            .paxflow-investment-logo-card {
2634                width: 100%;
2635                min-width: 0;
2636                min-height: 120px;
2637                padding: 24px;
2638            }
2639
2640            .paxflow-investment-logo-card img.paxflow-logo-primary {
2641                max-width: 300px;
2642                max-height: 105px;
2643            }
2644
2645            .paxflow-investment-logo-card img.paxflow-logo-brunnur {
2646                max-width: 230px;
2647                max-height: 70px;
2648            }
2649
2650            .paxflow-leader-card {
2651                grid-template-columns: 1fr;
2652                gap: 22px;
2653                padding: 24px;
2654            }
2655
2656            .paxflow-leader-image {
2657                width: 140px;
2658                height: 140px;
2659            }
2660
2661            .paxflow-leader-name {
2662                font-size: 22px;
2663            }
2664        }
2665    </style>
2666
2667    
2667<script>
2668        (function () {
2669            function isAboutPage() {
2670                var path = window.location.pathname.replace(/\/$/, '');
2671                return path === '/about' || path === '/about-us';
2672            }
2673
2674            function findSectionByHeading(headingText) {
2675                var wanted = headingText.toLowerCase();
2676                var candidates = document.querySelectorAll('#root h1, #root h2, #root h3, #root h4, h1, h2, h3, h4');
2677
2678                for (var i = 0; i < candidates.length; i++) {
2679                    var text = (candidates[i].textContent || '').trim().toLowerCase();
2680
2681                    if (text.includes(wanted)) {
2682                        var section = candidates[i].closest('section');
2683
2684                        if (section) {
2685                            return section;
2686                        }
2687
2688                        var parent = candidates[i].parentElement;
2689                        var steps = 0;
2690
2691                        while (parent && steps < 4) {
2692                            if (parent.tagName && parent.tagName.toLowerCase() === 'section') {
2693                                return parent;
2694                            }
2695
2696                            parent = parent.parentElement;
2697                            steps++;
2698                        }
2699                    }
2700                }
2701
2702                return null;
2703            }
2704
2705            function createInvestmentSection() {
2706                var section = document.createElement('section');
2707                section.className = 'paxflow-investment-section';
2708
2709                section.innerHTML = `
2710                    <div class="paxflow-investment-inner">
2711                        <div class="paxflow-investment-header">
2712                            <h2 class="paxflow-investment-title">
2713                                Backed by investors and innovation support
2714                            </h2>
2715
2716                            <p class="paxflow-investment-copy">
2717                                PaxFlow is supported by experienced investors and Icelandic innovation partners as we build the operations intelligence layer for modern tour businesses.
2718                            </p>
2719                        </div>
2720
2721                        <div class="paxflow-investment-logos">
2722                            <div class="paxflow-investment-logo-card">
2723                                <img class="paxflow-logo-primary" src="https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/image-6.png" alt="PaxFlow investment and support partner">
2724                            </div>
2725
2726                            <div class="paxflow-investment-logo-card">
2727                                <img class="paxflow-logo-brunnur" src="https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/Brunnur_Logo_Large-300x44-1.webp" alt="Brunnur Ventures">
2728                            </div>
2729                        </div>
2730                    </div>
2731                `;
2732
2733                return section;
2734            }
2735
2736            function createLeadershipSection() {
2737                var section = document.createElement('section');
2738                section.className = 'paxflow-leadership-section';
2739
2740                section.innerHTML = `
2741                    <div class="paxflow-leadership-inner">
2742                        <div class="paxflow-leadership-header">
2743                            <h2 class="paxflow-leadership-title">PaxFlow Leadership</h2>
2744                            <p class="paxflow-leadership-copy">
2745                                Meet the people helping shape PaxFlow’s product, strategy and long-term vision.
2746                            </p>
2747                        </div>
2748
2749                        <div class="paxflow-leadership-grid">
2750                            <article class="paxflow-leader-card">
2751                                <div class="paxflow-leader-image">
2752                                    <img src="https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/soffia-th-300x291-1.png" alt="Soffia Thordardottir">
2753                                </div>
2754
2755                                <div>
2756                                    <h3 class="paxflow-leader-name">Soffia Thordardottir</h3>
2757                                    <p class="paxflow-leader-role">Founder &amp; CEO, PaxFlow</p>
2758                                    <p class="paxflow-leader-bio">
2759                                        Soffia is a seasoned leader with over 12 years of experience in the travel tech space. She is the former Director of Travel Solutions at TM Software &amp; Origo and Product Portfolio Manager of Product Labs at Origo Iceland. Soffia has a background in Computer Science and Business Administration and is certified in Product Management from UC Berkeley Haas School of Business. She is a skilled problem solver and strategic leader, committed to creating innovative digital products that combine her passion for travel, tech and gear.
2760                                    </p>
2761                                    <a class="paxflow-leader-link" href="https://www.linkedin.com/in/soffiath/" target="_blank" rel="noopener noreferrer">View LinkedIn →</a>
2762                                </div>
2763                            </article>
2764
2765                            <article class="paxflow-leader-card">
2766                                <div class="paxflow-leader-image">
2767                                    <img src="https://paxflownewtdev.wpenginepowered.com/w
2767p-content/uploads/2026/06/andri2-150x150-1.jpeg" alt="Andri Heiðar Kristinsson">
2768                                </div>
2769
2770                                <div>
2771                                    <h3 class="paxflow-leader-name">Andri Heiðar Kristinsson</h3>
2772                                    <p class="paxflow-leader-role">Chairman of the Board</p>
2773                                    <p class="paxflow-leader-bio">
2774                                        Andri Heiðar is a Stanford MBA graduate and a true entrepreneur and leader, with previous experience building consumer products at LinkedIn and scaling the SlideShare mobile app from the ground up to millions of users. Andri previously founded Travelade, a tech startup aimed at making travel more personal. He is also the former CEO of Digital Iceland, an organisation leading the digital transformation of the Icelandic government.
2775                                    </p>
2776                                    <a class="paxflow-leader-link" href="https://www.linkedin.com/in/andriheidar/" target="_blank" rel="noopener noreferrer">View LinkedIn →</a>
2777                                </div>
2778                            </article>
2779                        </div>
2780                    </div>
2781                `;
2782
2783                return section;
2784            }
2785
2786            function addAboutSections() {
2787                if (!isAboutPage()) return;
2788
2789                if (
2790                    document.querySelector('.paxflow-investment-section') ||
2791                    document.querySelector('.paxflow-leadership-section')
2792                ) {
2793                    return;
2794                }
2795
2796                var investmentSection = createInvestmentSection();
2797                var leadershipSection = createLeadershipSection();
2798
2799                var backedByExperienceSection = findSectionByHeading('Backed by experience');
2800
2801                if (backedByExperienceSection && backedByExperienceSection.parentNode) {
2802                    backedByExperienceSection.parentNode.insertBefore(investmentSection, backedByExperienceSection);
2803                    investmentSection.parentNode.insertBefore(leadershipSection, investmentSection.nextSibling);
2804                    backedByExperienceSection.remove();
2805                    return;
2806                }
2807
2808                var readySection = findSectionByHeading('Ready to transform your tour operations');
2809
2810                if (readySection && readySection.parentNode) {
2811                    readySection.parentNode.insertBefore(investmentSection, readySection);
2812                    investmentSection.parentNode.insertBefore(leadershipSection, investmentSection.nextSibling);
2813                    return;
2814                }
2815
2816                var root = document.querySelector('#root main') || document.querySelector('#root') || document.body;
2817
2818                root.appendChild(investmentSection);
2819                root.appendChild(leadershipSection);
2820            }
2821
2822            document.addEventListener('DOMContentLoaded', addAboutSections);
2823            window.addEventListener('load', addAboutSections);
2824
2825            setTimeout(addAboutSections, 300);
2826            setTimeout(addAboutSections, 1000);
2827            setTimeout(addAboutSections, 2000);
2828        })();
2829    </script>
2829
2830        <style>
2831        body.paxflow-pricing-cleaned .paxflow-hide-pricing-element {
2832            display: none !important;
2833        }
2834
2835        body.paxflow-pricing-cleaned .paxflow-three-plan-grid {
2836            grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
2837            max-width: 1100px !important;
2838        }
2839
2840        body.paxflow-pricing-cleaned table.paxflow-no-starter-column th:nth-child(2),
2841        body.paxflow-pricing-cleaned table.paxflow-no-starter-column td:nth-child(2) {
2842            display: none !important;
2843        }
2844
2845        body.paxflow-pricing-cleaned table.paxflow-no-starter-column {
2846            width: 100% !important;
2847            min-width: 0 !important;
2848            max-width: 100% !important;
2849            table-layout: fixed !important;
2850        }
2851
2852        @media (max-width: 1024px) {
2853            body.paxflow-pricing-cleaned .paxflow-three-plan-grid {
2854                grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
2855                max-width: 760px !important;
2856            }
2857        }
2858
2859        @media (max-width: 768px) {
2860            body.paxflow-pricing-cleaned .paxflow-three-plan-grid {
2861                grid-template-columns: 1fr !important;
2862                max-width: 100% !important;
2863            }
2864
2865            body.paxflow-pricing-cleaned table.paxflow-no-starter-column {
2866                width: 870px !important;
2867                min-width: 870px !important;
2868                max-width: none !important;
2869            }
2870
2871            body.paxflow-pricing-cleaned table.paxflow-no-starter-column th:first-child,
2872            body.paxflow-pricing-cleaned table.paxflow-no-starter-column td:first-child {
2873                width: 360px !important;
2874                min-width: 360px !important;
2875                max-width: 360px !important;
2876            }
2877
2878            body.paxflow-pricing-cleaned table.paxflow-no-starter-column th:not(:first-child),
2879            body.paxflow-pricing-cleaned table.paxflow-no-starter-column td:not(:first-child) {
2880                width: 170px !important;
2881                min-width: 170px !important;
2882                max-width: 170px !important;
2883            }
2884        }
2885    </style>
2886
2887    
2887<script>
2888        (function () {
2889            function isPricingPage() {
2890                var path = window.location.pathname.replace(/\/$/, '');
2891                return path === '/pricing';
2892            }
2893
2894            function normalise(text) {
2895                return (text || '').replace(/\s+/g, ' ').trim().toLowerCase();
2896            }
2897
2898            function hideMonthlyAnnualToggle() {
2899                var candidates = document.querySelectorAll('#root div, #root section');
2900
2901                candidates.forEach(function (el) {
2902                    var text = normalise(el.textContent);
2903
2904                    if (
2905                        text.includes('monthly') &&
2906                        text.includes('annual') &&
2907                        text.length < 120
2908                    ) {
2909                        el.classList.add('paxflow-hide-pricing-element');
2910                    }
2911                });
2912            }
2913
2914            function hideStarterPricingCard() {
2915                var candidates = document.querySelectorAll('#root h1, #root h2, #root h3, #root div, #root span');
2916
2917                candidates.forEach(function (el) {
2918                    var text = normalise(el.textContent);
2919
2920                    if (text !== 'starter') return;
2921
2922                    var parent = el;
2923                    var steps = 0;
2924
2925                    while (parent && steps < 8) {
2926                        var parentText = normalise(parent.textContent);
2927
2928                        if (
2929                            parentText.includes('starter') &&
2930                            (
2931                                parentText.includes('€159') ||
2932                                parentText.includes('up to 1,000 monthly pax') ||
2933                                parentText.includes('paxplanner')
2934                            ) &&
2935                            parentText.includes('try for free')
2936                        ) {
2937                            parent.classList.add('paxflow-hide-pricing-element');
2938
2939                            var grid = parent.parentElement;
2940                            if (grid) {
2941                                grid.classList.add('paxflow-three-plan-grid');
2942                            }
2943
2944                            return;
2945                        }
2946
2947                        parent = parent.parentElement;
2948                        steps++;
2949                    }
2950                });
2951            }
2952
2953            function removeStarterFeatureColumn() {
2954                document.querySelectorAll('#root table').forEach(function (table) {
2955                    var text = normalise(table.textContent);
2956
2957                    if (
2958                        !text.includes('features') ||
2959                        !text.includes('starter') ||
2960                        !text.includes('grow') ||
2961                        !text.includes('pro') ||
2962                        !text.includes('enterprise')
2963                    ) {
2964                        return;
2965                    }
2966
2967                    table.classList.add('paxflow-no-starter-column');
2968
2969                    table.querySelectorAll('tr').forEach(function (row) {
2970                        var cells = row.children;
2971
2972                        /*
2973                         * Standard feature rows:
2974                         * Features | Starter | Grow | Pro | Enterprise
2975                         */
2976                        if (cells.length >= 5 && cells[1]) {
2977                            cells[1].style.setProperty('display', 'none', 'important');
2978                        }
2979
2980                        /*
2981                         * Section divider rows with colspan.
2982                         */
2983                        Array.prototype.forEach.call(cells, function (cell) {
2984                            var colspan = parseInt(cell.getAttribute('colspan') || '0', 10);
2985
2986                            if (colspan >= 5) {
2987                                cell.setAttribute('colspan', '4');
2988                            }
2989                        });
2990                    });
2991                });
2992            }
2993
2994            function applyPricingChanges() {
2995                if (!isPricingPage()) return;
2996
2997                document.body.classList.add('paxflow-pricing-cleaned');
2998
2999                hideMonthlyAnnualToggle();
3000                hideStarterPricingCard();
3001                removeStarterFeatureColumn();
3002            }
3003
3004            document.addEventListener('DOMContentLoaded', applyPricingChanges);
3005            window.addEventListener('load', applyPricingChanges);
3006
3007            setTimeout(applyPricingChanges, 300);
3008            setTimeout(applyPricingChanges, 1000);
3009            setTimeout(applyPricingChanges, 2000);
3010
3011            var observer = new MutationObserver(function () {
3012                applyPricingChanges();
3013            });
3014
3015            document.addEventListener('DOMContentLoaded', function () {
3016                var root = document.querySelector('#root') || document.body;
3017
3018                if (root) {
3019                    observer.observe(root, {
3020                        childList: true,
3021                        subtree: true
3022                    });
3023                }
3024            });
3025        })();
3026    </script>
3026
3027        <style>
3028        body.paxflow-pricing-pro-popular .paxflow-old-price-no-strike {
3029            text-decoration: none !important;
3030            text-decoration-line: none !important;
3031        }
3032
3033        body.paxflow-pricing-pro-popular .paxflow-old-popular-badge {
3034            display: none !important;
3035        }
3036
3037        body.paxflow-pricing-pro-popular .paxflow-grow-unfeatured {
3038            border-color: #e5e7eb !important;
3039            box-shadow: 0 18px 40px rgba(15, 23, 42, 0.08) !important;
3040            background: #ffffff !important;
3041        }
3042
3043        body.paxflow-pricing-pro-popular .paxflow-pro-featured {
3044            position: relative !important;
3045            border: 2px solid #9333ea !important;
3046            box-shadow: 0 24px 60px rgba(147, 51, 234, 0.16) !important;
3047            background: #ffffff !important;
3048            overflow: visible !important;
3049            padding-top: 38px !important;
3050        }
3051
3052        body.paxflow-pricing-pro-popular .paxflow-pro-featured::before {
3053            content: "Most Popular";
3054            position: absolute;
3055            top: -14px;
3056            left: 50%;
3057            transform: translateX(-50%);
3058            z-index: 5;
3059            display: inline-flex;
3060            align-items: center;
3061            justify-content: center;
3062            padding: 7px 18px;
3063            border-radius: 999px;
3064            background: linear-gradient(135deg, #9333ea 0%, #c215d3 100%);
3065            color: #ffffff;
3066            font-size: 14px;
3067            line-height: 1;
3068            font-weight: 800;
3069            white-space: nowrap;
3070            box-shadow: 0 12px 28px rgba(147, 51, 234, 0.28);
3071        }
3072
3073        body.paxflow-pricing-pro-popular .paxflow-grow-neutral-cta {
3074            background: #f3f4f6 !important;
3075            color: #111827 !important;
3076            box-shadow: none !important;
3077            border-color: transparent !important;
3078        }
3079
3080        body.paxflow-pricing-pro-popular .paxflow-pro-gradient-cta {
3081            background: linear-gradient(135deg, #9333ea 0%, #db2777 100%) !important;
3082            color: #ffffff !important;
3083            box-shadow: 0 12px 28px rgba(147, 51, 234, 0.24) !important;
3084            border-color: transparent !important;
3085        }
3086
3087        @media (max-width: 768px) {
3088            body.paxflow-pricing-pro-popular .paxflow-pro-featured {
3089                margin-top: 18px !important;
3090            }
3091        }
3092    </style>
3093
3094    
3094<script>
3095        (function () {
3096            function isPricingPage() {
3097                var path = window.location.pathname.replace(/\/$/, '');
3098                return path === '/pricing';
3099            }
3100
3101            function normalise(text) {
3102                return (text || '').replace(/\s+/g, ' ').trim().toLowerCase();
3103            }
3104
3105            function findPricingCard(planName, priceText) {
3106                var wantedPlan = planName.toLowerCase();
3107                var wantedPrice = priceText.toLowerCase();
3108
3109                var candidates = document.querySelectorAll('#root h1, #root h2, #root h3, #root div, #root span');
3110
3111                for (var i = 0; i < candidates.length; i++) {
3112                    var text = normalise(candidates[i].textContent);
3113
3114                    if (text !== wantedPlan) continue;
3115
3116                    var parent = candidates[i];
3117                    var steps = 0;
3118
3119                    while (parent && steps < 8) {
3120                        var parentText = normalise(parent.textContent);
3121
3122                        if (
3123                            parentText.includes(wantedPlan) &&
3124                            parentText.includes(wantedPrice) &&
3125                            (
3126                                parentText.includes('try for free') ||
3127                                parentText.includes('talk to sales')
3128                            )
3129                        ) {
3130                            return parent;
3131                        }
3132
3133                        parent = parent.parentElement;
3134                        steps++;
3135                    }
3136                }
3137
3138                return null;
3139            }
3140
3141            function removeOnlyStrikethroughFromOldPrice(card) {
3142                if (!card) return;
3143
3144                card.querySelectorAll('*').forEach(function (el) {
3145                    var text = normalise(el.textContent);
3146                    var style = window.getComputedStyle(el);
3147                    var decoration = style.textDecorationLine || style.textDecoration || '';
3148
3149                    var looksLikeOldPrice =
3150                        text.match(/^€\s?\d+\s?\/\s?monthly$/) ||
3151                        text.includes('/monthly');
3152
3153                    var hasLineThrough =
3154                        decoration.indexOf('line-through') !== -1 ||
3155                        (
3156                            typeof el.className === 'string' &&
3157                            el.className.toLowerCase().includes('line-through')
3158                        );
3159
3160                    if (looksLikeOldPrice && hasLineThrough) {
3161                        el.classList.add('paxflow-old-price-no-strike');
3162
3163                        el.style.setProperty('text-decoration', 'none', 'important');
3164                        el.style.setProperty('text-decoration-line', 'none', 'important');
3165
3166                        if (typeof el.className === 'string') {
3167                            el.className = el.className
3168                                .replace(/\bline-through\b/g, '')
3169                                .replace(/\s+/g, ' ')
3170                                .trim();
3171                        }
3172                    }
3173                });
3174            }
3175
3176            function neutraliseGrowCard(growCard) {
3177                if (!growCard) return;
3178
3179                growCard.classList.add('paxflow-grow-unfeatured');
3180
3181                growCard.querySelectorAll('*').forEach(function (el) {
3182                    var text = normalise(el.textContent);
3183
3184                    if (text === 'most popular') {
3185                        el.classList.add('paxflow-old-popular-badge');
3186                    }
3187                });
3188
3189                growCard.querySelectorAll('a, button').forEach(function (btn) {
3190                    var text = normalise(btn.textContent);
3191
3192                    if (text === 'try for free') {
3193                        btn.classList.add('paxflow-grow-neutral-cta');
3194                    }
3195                });
3196            }
3197
3198            function featureProCard(proCard) {
3199                if (!proCard) return;
3200
3201                proCard.classList.add('paxflow-pro-featured');
3202
3203                proCard.querySelectorAll('a, button').forEach(function (btn) {
3204                    var text = normalise(btn.textContent);
3205
3206                    if (text === 'try for free') {
3207                        btn.classList.add('paxflow-pro-gradient-cta');
3208                    }
3209                });
3210            }
3211
3212            function applyPricingChanges() {
3213                if (!isPricingPage()) return;
3214
3215                document.body.classList.add('paxflow-pricing-pro-popular');
3216
3217                var growCard = findPricingCard('Grow', '€366');
3218                var proCard = findPricingCard('Pro', '€650');
3219                var enterpriseCard = findPricingCard('Enterprise', 'Custom');
3220
3221                neutraliseGrowCard(growCard);
3222                featureProCard(proCard);
3223
3224                removeOnlyStrikethroughFromOldPrice(growCard);
3225                removeOnlyStrikethroughFromOldPrice(proCard);
3226                removeOnlyStrikethroughFromOldPrice(enterpriseCard);
3227
3228                document.querySelectorAll('#root *').forEach(function (el) {
3229                    var text = normalise(el.textContent);
3230                    var style = window.getComputedStyle(el);
3231                    var decoration = style.textDecorationLine || style.textDecoration || '';
3232
3233                    if (
3234                        (
3235                            text.match(/^€\s?\d+\s?\/\s?monthly$/) ||
3236                            text.includes('/monthly')
3237                        ) &&
3238                        decoration.indexOf('line-through') !== -1
3239                    ) {
3240                        el.classList.add('paxflow-old-price-no-strike');
3241                        el.style.setProperty('text-decoration', 'none', 'important');
3242                        el.style.setProperty('text-decoration-line', 'none', 'important');
3243                    }
3244                });
3245            }
3246
3247            document.addEventListener('DOMContentLoaded', applyPricingChanges);
3248            window.addEventListener('load', applyPricingChanges);
3249
3250            setTimeout(applyPricingChanges, 300);
3251            setTimeout(applyPricingChanges, 1000);
3252            setTimeout(applyPricingChanges, 2000);
3253
3254            var observer = new MutationObserver(function () {
3255                applyPricingChanges();
3256            });
3257
3258            document.addEventListener('DOMContentLoaded', function () {
3259                var root = document.querySelector('#root') || document.body;
3260
3261                if (root) {
3262                    observer.observe(root, {
3263                        childList: true,
3264                        subtree: true
3265                    });
3266                }
3267            });
3268        })();
3269    </script>
3269
3270        <style>
3271        .pf-react-footer-links.paxflow-footer-menu-managed {
3272            grid-column: span 3;
3273            display: grid;
3274            grid-template-columns: repeat(4, minmax(0, 1fr));
3275            gap: 32px;
3276        }
3277
3278        .pf-react-footer-links.paxflow-footer-menu-managed a {
3279            display: block;
3280            color: #4b5563;
3281            font-size: 15px;
3282            line-height: 1.4;
3283            text-decoration: none;
3284            margin-bottom: 16px;
3285        }
3286
3287        .pf-react-footer-links.paxflow-footer-menu-managed a:hover {
3288            color: #111827;
3289        }
3290
3291        @media (max-width: 768px) {
3292            .pf-react-footer-links.paxflow-footer-menu-managed {
3293                grid-column: auto;
3294                grid-template-columns: repeat(2, minmax(0, 1fr));
3295                gap: 20px 28px;
3296            }
3297        }
3298    </style>
3299
3300    
3300<script>
3301        (function () {
3302            var items = [{"title":"About","url":"https:\/\/paxflow.io\/about\/","target":"","rel":""},{"title":"Privacy Policy","url":"https:\/\/paxflow.io\/privacy-policy\/","target":"","rel":""},{"title":"Customer Agreement","url":"https:\/\/paxflow.io\/customer-agreement\/","target":"","rel":""},{"title":"Insights","url":"https:\/\/paxflow.io\/insights\/","target":"","rel":""}];
3303            var knownFooterTexts = ['about us', 'customer agreement', 'privacy policy', 'contact us', 'insights', 'bókun', 'bokun', 'iticket', 'other booking systems'];
3304
3305            function chunk(arr, size) {
3306                var out = [];
3307                for (var i = 0; i < arr.length; i += size) {
3308                    out.push(arr.slice(i, i + size));
3309                }
3310                return out;
3311            }
3312
3313            function buildMenu() {
3314                var wrapper = document.createElement('div');
3315                wrapper.className = 'pf-react-footer-links paxflow-footer-menu-managed';
3316
3317                chunk(items, 2).forEach(function (group) {
3318                    var col = document.createElement('div');
3319
3320                    group.forEach(function (item) {
3321                        var a = document.createElement('a');
3322                        a.textContent = item.title || '';
3323                        a.href = item.url || '#';
3324
3325                        if (item.target) {
3326                            a.target = item.target;
3327                        }
3328
3329                        if (item.rel) {
3330                            a.rel = item.rel;
3331                        } else if (item.target === '_blank') {
3332                            a.rel = 'noopener noreferrer';
3333                        }
3334
3335                        col.appendChild(a);
3336                    });
3337
3338                    wrapper.appendChild(col);
3339                });
3340
3341                return wrapper;
3342            }
3343
3344            function replaceContainer(container) {
3345                if (!container || container.dataset.paxflowFooterManaged === 'true') return;
3346
3347                var fresh = buildMenu();
3348                fresh.dataset.paxflowFooterManaged = 'true';
3349
3350                container.replaceWith(fresh);
3351            }
3352
3353            function commonAncestor(elements) {
3354                if (!elements.length) return null;
3355
3356                var firstAncestors = [];
3357                var node = elements[0];
3358
3359                while (node) {
3360                    firstAncestors.push(node);
3361                    node = node.parentElement;
3362                }
3363
3364                for (var i = 0; i < firstAncestors.length; i++) {
3365                    var candidate = firstAncestors[i];
3366                    var ok = elements.every(function (el) {
3367                        return candidate.contains(el);
3368                    });
3369
3370                    if (ok) return candidate;
3371                }
3372
3373                return null;
3374            }
3375
3376            function applyFooterMenu() {
3377                if (!items || !items.length) return;
3378
3379                document.querySelectorAll('.pf-react-footer-links').forEach(function (container) {
3380                    replaceContainer(container);
3381                });
3382
3383                document.querySelectorAll('footer').forEach(function (footer) {
3384                    if (footer.querySelector('.paxflow-footer-menu-managed')) return;
3385
3386                    var footerLinks = Array.prototype.slice.call(footer.querySelectorAll('a')).filter(function (a) {
3387                        var text = (a.textContent || '').trim().toLowerCase();
3388                        return knownFooterTexts.indexOf(text) !== -1;
3389                    });
3390
3391                    if (footerLinks.length >= 2) {
3392                        var container = commonAncestor(footerLinks);
3393
3394                        if (container && container !== footer && container.parentNode) {
3395                            replaceContainer(container);
3396                            return;
3397                        }
3398                    }
3399                });
3400            }
3401
3402            document.addEventListener('DOMContentLoaded', applyFooterMenu);
3403            window.addEventListener('load', applyFooterMenu);
3404            setTimeout(applyFooterMenu, 300);
3405            setTimeout(applyFooterMenu, 1000);
3406            setTimeout(applyFooterMenu, 2000);
3407
3408            var observer = new MutationObserver(function () {
3409                applyFooterMenu();
3410            });
3411
3412            document.addEventListener('DOMContentLoaded', function () {
3413                if (document.body) {
3414                    observer.observe(document.body, { childList: true, subtree: true });
3415                }
3416            });
3417        })();
3418    </script>
3418
3419            <style>
3420            footer,
3421            .pf-react-footer,
3422            .site-footer {
3423                position: relative !important;
3424            }
3425
3426            .paxflow-footer-extra-image {
3427                position: absolute !important;
3428                right: 48px !important;
3429                bottom: 48px !important;
3430                width: 150px !important;
3431                max-width: 20vw !important;
3432                height: auto !important;
3433                z-index: 5 !important;
3434                display: block !important;
3435                pointer-events: none !important;
3436            }
3437
3438            @media (max-width: 768px) {
3439                .paxflow-footer-extra-image {
3440                    position: static !important;
3441                    width: 120px !important;
3442                    max-width: 160px !important;
3443                    margin: 28px auto 0 !important;
3444                }
3445            }
3446        </style>
3447
3448        
3448<script>
3449            (function () {
3450                var CONTACT_URL = '/contact/';
3451                var FOOTER_IMAGE_URL = 'https://paxflownewtdev.wpenginepowered.com/wp-content/uploads/2026/06/image-7.png';
3452
3453                function cleanText(value) {
3454                    return String(value || '').replace(/\s+/g, ' ').trim();
3455                }
3456
3457                function normalisedText(value) {
3458                    return cleanText(value).toLowerCase();
3459                }
3460
3461                function currentPath() {
3462                    return (window.location.pathname || '/').replace(/\/+$/, '') || '/';
3463                }
3464
3465                function isPlatformPage() {
3466                    return currentPath() === '/platform';
3467                }
3468
3469                function isInsideHeader(el) {
3470                    return !!(
3471                        el.closest('#paxflow-wp-desktop-header') ||
3472                        el.closest('#paxflow-wp-mobile-header') ||
3473                        el.closest('header') ||
3474                        el.closest('nav')
3475                    );
3476                }
3477
3478                function forceElementToContact(el) {
3479                    if (!el) return;
3480
3481                    var anchor = el.tagName && el.tagName.toLowerCase() === 'a'
3482                        ? el
3483                        : el.closest('a');
3484
3485                    if (anchor) {
3486                        anchor.setAttribute('href', CONTACT_URL);
3487                        anchor.removeAttribute('target');
3488                        anchor.removeAttribute('rel');
3489                        return;
3490                    }
3491
3492                    if (el.dataset.paxflowContactForced === '1') return;
3493
3494                    el.dataset.paxflowContactForced = '1';
3495                    el.setAttribute('role', 'link');
3496                    el.setAttribute('tabindex', '0');
3497                    el.style.cursor = 'pointer';
3498
3499                    el.addEventListener('click', function (event) {
3500                        event.preventDefault();
3501                        event.stopPropagation();
3502                        window.location.href = CONTACT_URL;
3503                    }, true);
3504
3505                    el.addEventListener('keydown', function (event) {
3506                        if (event.key === 'Enter' || event.key === ' ') {
3507                            event.preventDefault();
3508                            window.location.href = CONTACT_URL;
3509                        }
3510                    });
3511                }
3512
3513                function fixOnPageBookDemoButtons() {
3514                    document.querySelectorAll('#root a, #root button, main a, main button, [role="button"]').forEach(function (el) {
3515                        if (isInsideHeader(el)) return;
3516
3517                        var text = normalisedText(el.textContent);
3518
3519                        if (text === 'book demo' || text === 'book a demo') {
3520                            forceElementToContact(el);
3521                        }
3522                    });
3523                }
3524
3525                function addFooterImage() {
3526                    if (document.querySelector('.paxflow-footer-extra-image')) return;
3527
3528                    var footer =
3529                        document.querySelector('.pf-react-footer') ||
3530                        document.querySelector('#root footer') ||
3531                        document.querySelector('footer') ||
3532                        document.querySelector('.site-footer');
3533
3534                    if (!footer) return;
3535
3536                    var img = document.createElement('img');
3537                    img.className = 'paxflow-footer-extra-image';
3538                    img.src = FOOTER_IMAGE_URL;
3539                    img.alt = '';
3540                    img.loading = 'lazy';
3541
3542                    footer.appendChild(img);
3543                }
3544
3545                function findExactTextElement(label) {
3546                    var wanted = label.toLowerCase();
3547
3548                    var candidates = document.querySelectorAll(
3549                        '#root h1, #root h2, #root h3, #root h4, #root h5, #root p, #root span, #root a, #root div'
3550                    );
3551
3552                    for (var i = 0; i < candidates.length; i++) {
3553                        var el = candidates[i];
3554
3555                        if (el.children.length > 4) continue;
3556
3557                        if (normalisedText(el.textContent) === wanted) {
3558                            return el;
3559                        }
3560                    }
3561
3562                    return null;
3563                }
3564
3565                function getMoveableBlock(el) {
3566                    if (!el) return null;
3567
3568                    var current = el;
3569
3570                    for (var i = 0; i < 8 && current; i++) {
3571                        var parent = current.parentElement;
3572                        var className = typeof current.className === 'string' ? current.className : '';
3573                        var textLength = cleanText(current.textContent).length;
3574                        var tagName = current.tagName ? current.tagName.toLowerCase() : '';
3575
3576                        if (
3577                            parent &&
3578                            parent.children.length >= 3 &&
3579                            textLength > 20 &&
3580                            textLength < 2500 &&
3581                            (
3582                                className.indexOf('rounded') !== -1 ||
3583                                className.indexOf('shadow') !== -1 ||
3584                                className.indexOf('border') !== -1 ||
3585                                className.indexOf('card') !== -1 ||
3586                                tagName === 'article' ||
3587                                tagName === 'section'
3588                            )
3589                        ) {
3590                            return current;
3591                        }
3592
3593                        current = parent;
3594                    }
3595
3596                    return null;
3597                }
3598
3599                function reorderPlatformSections() {
3600    if (!isPlatformPage()) return;
3601
3602    var labels = [
3603        'Customer messaging',
3604        'Customer self-service',
3605        'Booking forms'
3606    ];
3607
3608    function textMatches(el, label) {
3609        return normalisedText(el.textContent) === label.toLowerCase();
3610    }
3611
3612    function findLabelElement(label) {
3613        var candidates = document.querySelectorAll(
3614            '#root h1, #root h2, #root h3, #root h4, #root h5, #root p, #root span, #root a, #root div'
3615        );
3616
3617        for (var i = 0; i < candidates.length; i++) {
3618            var el = candidates[i];
3619
3620            if (el.children.length > 6) continue;
3621
3622            if (textMatches(el, label)) {
3623                return el;
3624            }
3625        }
3626
3627        return null;
3628    }
3629
3630    function nearestUsefulSection(el) {
3631        if (!el) return null;
3632
3633        var current = el;
3634
3635        while (current && current !== document.body) {
3636            if (
3637                current.tagName &&
3638                current.tagName.toLowerCase() === 'section' &&
3639                current.parentElement &&
3640                current.parentElement.children.length > 2
3641            ) {
3642                return current;
3643            }
3644
3645            current = current.parentElement;
3646        }
3647
3648        return null;
3649    }
3650
3651    function nearestUsefulCard(el) {
3652        if (!el) return null;
3653
3654        var current = el;
3655
3656        for (var i = 0; i < 10 && current && current !== document.body; i++) {
3657            var parent = current.parentElement;
3658            var className = typeof current.className === 'string' ? current.className : '';
3659            var textLength = cleanText(current.textContent).length;
3660            var tagName = current.tagName ? current.tagName.toLowerCase() : '';
3661
3662            if (
3663                parent &&
3664                parent.children.length > 2 &&
3665                textLength > 20 &&
3666                textLength < 3000 &&
3667                (
3668                    tagName === 'article' ||
3669                    tagName === 'li' ||
3670                    className.indexOf('rounded') !== -1 ||
3671                    className.indexOf('shadow') !== -1 ||
3672                    className.indexOf('border') !== -1 ||
3673                    className.indexOf('card') !== -1 ||
3674                    className.indexOf('grid') !== -1
3675                )
3676            ) {
3677                return current;
3678            }
3679
3680            current = parent;
3681        }
3682
3683        return null;
3684    }
3685
3686    var found = labels.map(function (label) {
3687        var labelEl = findLabelElement(label);
3688
3689        return {
3690            label: label,
3691            labelEl: labelEl,
3692            section: nearestUsefulSection(labelEl),
3693            card: nearestUsefulCard(labelEl)
3694        };
3695    });
3696
3697    if (found.some(function (item) { return !item.labelEl; })) {
3698        return;
3699    }
3700
3701    /*
3702     * First try to move whole page sections.
3703     * This is the preferred path if each feature is its own Platform section.
3704     */
3705    var sectionBlocks = found.map(function (item) {
3706        return item.section;
3707    }
3707).filter(Boolean);
3708
3709    if (sectionBlocks.length === labels.length) {
3710        var sectionParent = sectionBlocks[0].parentElement;
3711
3712        var sameSectionParent = sectionBlocks.every(function (section) {
3713            return section.parentElement === sectionParent;
3714        });
3715
3716        var uniqueSections = Array.from(new Set(sectionBlocks));
3717
3718        if (sameSectionParent && uniqueSections.length === labels.length) {
3719            sectionBlocks.forEach(function (section) {
3720                sectionParent.appendChild(section);
3721            });
3722
3723            return;
3724        }
3725    }
3726
3727    /*
3728     * Fallback: move feature cards/blocks if the items are inside a shared grid.
3729     */
3730    var cardBlocks = found.map(function (item) {
3731        return item.card;
3732    }).filter(Boolean);
3733
3734    if (cardBlocks.length !== labels.length) {
3735        return;
3736    }
3737
3738    var cardParent = cardBlocks[0].parentElement;
3739
3740    if (!cardParent) {
3741        return;
3742    }
3743
3744    var sameCardParent = cardBlocks.every(function (card) {
3745        return card.parentElement === cardParent;
3746    });
3747
3748    var uniqueCards = Array.from(new Set(cardBlocks));
3749
3750    if (!sameCardParent || uniqueCards.length !== labels.length) {
3751        return;
3752    }
3753
3754    cardBlocks.forEach(function (card) {
3755        cardParent.appendChild(card);
3756    });
3757}
3758
3759                function applyFixes() {
3760                    fixOnPageBookDemoButtons();
3761                    addFooterImage();
3762                    reorderPlatformSections();
3763                }
3764
3765                function startFixes() {
3766                    applyFixes();
3767
3768                    var attempts = 0;
3769                    var timer = window.setInterval(function () {
3770                        attempts += 1;
3771                        applyFixes();
3772
3773                        if (attempts >= 20) {
3774                            window.clearInterval(timer);
3775                        }
3776                    }, 250);
3777                }
3778
3779                if (document.readyState === 'loading') {
3780                    document.addEventListener('DOMContentLoaded', startFixes);
3781                } else {
3782                    startFixes();
3783                }
3784
3785                window.addEventListener('load', startFixes);
3786            })();
3787        </script>
3787
3788            
3788<script>
3789        (function () {
3790            function isPricingPage() {
3791                return window.location.pathname.replace(/\/$/, '') === '/pricing';
3792            }
3793
3794            function cleanText(text) {
3795                return (text || '').replace(/\s+/g, ' ').trim().toLowerCase();
3796            }
3797
3798            /*
3799             * EDIT THIS LIST ONLY.
3800             * This becomes the full Grow bullet list.
3801             */
3802            var growBullets = [
3803                'PaxPlanner',
3804                'PaxCRM',
3805                'PaxForms',
3806                'Advanced operational reporting',
3807                'Everything in Starter, plus:',
3808                '5,000 emails/month',
3809                '2,500 form responses/month',
3810                '1-hour free onboarding session'
3811            ];
3812
3813            function findGrowCard() {
3814                var headings = Array.from(document.querySelectorAll('#root h1, #root h2, #root h3, #root h4, #root div, #root span'));
3815
3816                for (var i = 0; i < headings.length; i++) {
3817                    if (cleanText(headings[i].textContent) !== 'grow') continue;
3818
3819                    var el = headings[i];
3820
3821                    for (var step = 0; step < 10; step++) {
3822                        if (!el) break;
3823
3824                        var text = cleanText(el.textContent);
3825
3826                        if (
3827                            text.includes('grow') &&
3828                            text.includes('€450') &&
3829                            text.includes('/month') &&
3830                            text.includes('try for free') &&
3831                            text.includes('2,500 monthly pax') &&
3832                            !text.includes('pro') &&
3833                            !text.includes('enterprise') &&
3834                            el.querySelector('ul')
3835                        ) {
3836                            return el;
3837                        }
3838
3839                        el = el.parentElement;
3840                    }
3841                }
3842
3843                return null;
3844            }
3845
3846            function createGrowBullet(text) {
3847                var li = document.createElement('li');
3848                li.setAttribute('data-paxflow-grow-clean-bullet', 'true');
3849                li.style.cssText = 'display:flex;align-items:flex-start;gap:12px;color:#374151;font-size:15px;line-height:1.45;text-align:left;';
3850
3851                var icon = document.createElement('span');
3852                icon.style.cssText = 'width:20px;height:20px;min-width:20px;border-radius:999px;background:#dcfce7;color:#16a34a;display:flex;align-items:center;justify-content:center;margin-top:1px;';
3853
3854                icon.innerHTML =
3855                    '<svg style="width:12px;height:12px;" fill="none" stroke="currentColor" viewBox="0 0 24 24">' +
3856                        '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"></path>' +
3857                    '</svg>';
3858
3859                var label = document.createElement('span');
3860                label.textContent = text;
3861
3862                li.appendChild(icon);
3863                li.appendChild(label);
3864
3865                return li;
3866            }
3867
3868            function rebuildGrowBullets() {
3869                if (!isPricingPage()) return false;
3870
3871                var growCard = findGrowCard();
3872                if (!growCard) return false;
3873
3874                var list = growCard.querySelector('ul');
3875                if (!list) return false;
3876
3877                list.innerHTML = '';
3878
3879                growBullets.forEach(function (bulletText) {
3880                    list.appendChild(createGrowBullet(bulletText));
3881                });
3882
3883                return true;
3884            }
3885
3886            function runLimited() {
3887                var attempts = 0;
3888                var maxAttempts = 20;
3889
3890                var timer = setInterval(function () {
3891                    attempts++;
3892
3893                    var success = rebuildGrowBullets();
3894
3895                    if (success || attempts >= maxAttempts) {
3896                        clearInterval(timer);
3897                    }
3898                }, 250);
3899            }
3900
3901            document.addEventListener('DOMContentLoaded', runLimited);
3902            window.addEventListener('load', function () {
3903                rebuildGrowBullets();
3904                setTimeout(rebuildGrowBullets, 750);
3905                setTimeout(rebuildGrowBullets, 1500);
3906            });
3907        })();
3908    </script>
3908
3909    
3909<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a46e1a1e79bef157',t:'MTc5MTM4ODY1MQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
3909</body>
3910</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.