PageSourceSearch

https://ovito.org/contact/

html ovito.org collected 2026-10-03 21:56:53 UTC 27,343 bytes, 243 lines download raw bytes

1<!DOCTYPE html><html lang="en" dir="ltr" class="2xl:text-[20px]"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="sitemap" href="/sitemap-index.xml"><link rel="shortcut icon" href="/_astro/favicon.C6mtHyg2.ico"><link rel="icon" type="image/png" href="/_astro/favicon.CdmpE6uC.png"><link rel="mask-icon" href="/_astro/favicon.CdmpE6uC.png" color="#8D46E7"><link rel="apple-touch-icon" sizes="180x180" href="/_astro/apple-touch-icon.BT1w4l04.png"><style is:global>
2  :root {
3    --aw-font-sans: 'Inter Variable';
4    --aw-font-serif: var(--aw-font-sans);
5    --aw-font-heading: var(--aw-font-sans);
6
7    --aw-color-primary: rgb(30 64 175);
8    --aw-color-secondary: rgb(30 58 138);
9    --aw-color-accent: rgb(109 40 217);
10
11    --aw-color-text-heading: rgb(0 0 0);
12    --aw-color-text-default: rgb(16 16 16);
13    --aw-color-text-muted: rgb(16 16 16 / 66%);
14    --aw-color-text-error: rgb(255 0 51);
15    --aw-color-text-success: rgb(22 163 74);
16
17    --aw-color-bg-page: rgb(255 255 255);
18    --aw-color-bg-page-dark: rgb(16 24 32);
19
20    ::selection {
21      background-color: lavender;
22    }
23  }
24
25  .dark {
26    --aw-font-sans: 'Inter Variable';
27    --aw-font-serif: var(--aw-font-sans);
28    --aw-font-heading: var(--aw-font-sans);
29
30    --aw-color-primary: rgb(66, 93, 180);
31    --aw-color-secondary: rgb(30 58 138);
32    --aw-color-accent: rgb(109 40 217);
33
34    --aw-color-text-heading: rgb(0 0 0);
35    --aw-color-text-default: rgb(229 236 246);
36    --aw-color-text-muted: rgb(229 236 246 / 66%);
37    --aw-color-text-error: rgb(255 0 51);
38    --aw-color-text-success: rgb(22 163 74);
39
40    --aw-color-bg-page: var(--aw-color-bg-page-dark);
41
42    ::selection {
43      background-color: black;
44      color: snow;
45    }
46  }
47
48  input:invalid {
49  }
50
51  input:valid {
52  }
53</style>
53<script>(function(){const defaultTheme = "system";
54
55  function applyTheme(theme) {
56    if (theme === 'dark') {
57      document.documentElement.classList.add('dark');
58    } else {
59      document.documentElement.classList.remove('dark');
60    }
61    const matches = document.querySelectorAll('[data-aw-toggle-color-scheme] > input');
62
63    if (matches && matches.length) {
64      matches.forEach((elem) => {
65        elem.checked = theme !== 'dark';
66      });
67    }
68  }
69
70  if ((defaultTheme && defaultTheme.endsWith(':only')) || (!localStorage.theme && defaultTheme !== 'system')) {
71    applyTheme(defaultTheme.replace(':only', ''));
72  } else if (
73    localStorage.theme === 'dark' ||
74    (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)
75  ) {
76    applyTheme('dark');
77  } else {
78    applyTheme('light');
79  }
80})();</script>
80<title>Contact — OVITO</title>
81<meta name="description" content="🚀 Scientific data visualization and analysis software for particle-based simulation models">
82<meta name="robots" content="index,follow">
83<link rel="canonical" href="https://www.ovito.org/contact">
84<meta property="og:title" content="Contact">
85<meta property="og:description" content="🚀 Scientific data visualization and analysis software for particle-based simulation models">
86<meta property="og:url" content="https://www.ovito.org/contact">
87<meta property="og:type" content="website">
88<meta property="og:image" content="https://www.ovito.org/_astro/default.3aUu6wtN_ZtqaLH.webp">
89
90<meta property="og:locale" content="en">
91<meta property="og:site_name" content="OVITO">
92<meta name="twitter:card" content="summary_large_image">
93<meta name="twitter:site" content="@onwidget">
94<meta name="twitter:creator" content="@onwidget"><meta name="google-site-verification" content="orcPxI47GSa-cRvY11tUe6iGg2IO_RPvnA1q95iEM3M"><!-- Uncomment line below to activate View Transitions --><!-- <ViewTransitions fallback="swap" /> --><link rel="stylesheet" href="/_astro/offline_activation_doc.DA1I_h_r.css"></head> <body class="antialiased text-default bg-page tracking-tight">    <header class="sticky top-0 z-40 flex-none mx-auto w-full border-b border-gray-50/0 transition-[opacity] ease-in-out" data-aw-sticky-header="true" id="header"> <div class="absolute inset-0"></div> <div class="relative text-default py-3 px-3 md:px-6 mx-auto w-full md:flex md:justify-between max-w-7xl"> <div class="flex justify-between"> <a class="flex items-center" href="/">
94 <span class="self-center ml-2 rtl:ml-0 rtl:mr-2 text-2xl md:text-xl font-bold text-gray-900 whitespace-nowrap dark:text-white flex items-center"> <img src="/_astro/ovito_logo_256.BAk4uGrH.png" width="40" height="40" srcset="/_astro/ovito_logo_256.BAk4uGrH_1L3FxH.webp 40w, /_astro/ovito_logo_256.BAk4uGrH_Z1hIFve.webp 80w" sizes="(min-width: 40px) 40px, 100vw" style="object-fit: cover; object-position: center; max-width: 40px; max-height: 40px; aspect-ratio: 1; width: 100%;" alt="OVITO logo" loading="lazy" decoding="async"> OVITO </span> </a> <div class="flex items-center md:hidden"> <button class="flex flex-col h-12 w-12 rounded justify-center items-center cursor-pointer group" aria-label="Toggle Menu" data-aw-toggle-menu> <span class="sr-only">Toggle Menu</span>  <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:rotate-45 group-[.expanded]:translate-y-2.5"></span> <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:opacity-0"></span> <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:-rotate-45 group-[.expanded]:-translate-y-2.5"></span>  </button> </div> </div> <nav class="items-center w-full md:w-auto hidden md:flex text-default overflow-y-auto overflow-x-hidden md:overflow-y-visible md:overflow-x-auto md:mx-5" aria-label="Main navigation"> <ul class="flex flex-col md:flex-row md:self-center w-full md:w-auto text-xl md:text-[0.9375rem] tracking-[0.01rem] font-medium"> <li class>
94 <a class="hover:text-link dark:hover:text-white px-4 py-3 flex items-centers" href="/"> Home </a> </li><li class="dropdown">  <button class="hover:text-link dark:hover:text-white px-4 py-3 flex items-center"> Docs  <svg width="1em" height="1em" class="w-3.5 h-3.5 ml-0.5 rtl:ml-0 rtl:mr-0.5 hidden md:inline" data-icon="tabler:chevron-down">   <symbol id="ai:tabler:chevron-down" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></symbol><use href="#ai:tabler:chevron-down"></use>  </svg> </button> <ul class="dropdown-menu md:backdrop-blur-md dark:md:bg-dark rounded md:absolute pl-4 md:pl-0 md:hidden font-medium md:bg-white/90 md:min-w-[200px] drop-shadow-xl dark:border-b dark:border-l dark:border-r dark:border-slate-500"> <li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="https://www.ovito.org/docs/current/" target="_blank" rel="noopener noreferrer"> User Manual </a> </li><li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="https://www.ovito.org/docs/current/python/" target="_blank" rel="noopener noreferrer"> Python Package </a> </li> </ul>  </li><li class="dropdown">  <button class="hover:text-link dark:hover:text-white px-4 py-3 flex items-center"> Support  <svg width="1em" height="1em" viewBox="0 0 24 24" class="w-3.5 h-3.5 ml-0.5 rtl:ml-0 rtl:mr-0.5 hidden md:inline" data-icon="tabler:chevron-down">   <use href="#ai:tabler:chevron-down"></use>  </svg> </button> <ul class="dropdown-menu md:backdrop-blur-md dark:md:bg-dark rounded md:absolute pl-4 md:pl-0 md:hidden font-medium md:bg-white/90 md:min-w-[200px] drop-shadow-xl dark:border-b dark:border-l dark:border-r dark:border-slate-500"> <li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="https://matsci.org/c/ovito/" target="_blank" rel="noopener noreferrer"> User Forum </a> </li><li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="https://www.ovito.org/forum/" target="_blank" rel="noopener noreferrer"> Customer Forum (Pro) </a> </li><li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="/faqs" rel="noopener noreferrer"> FAQs </a> </li><li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap aw-link-active" href="/contact" rel="noopener noreferrer"> Contact </a> </li> </ul>  </li><li class="dropdown">  <button class="hover:text-link dark:hover:text-white px-4 py-3 flex items-center"> OVITO Pro  <svg width="1em" height="1em" viewBox="0 0 24 24" class="w-3.5 h-3.5 ml-0.5 rtl:ml-0 rtl:mr-0.5 hidden md:inline" data-icon="tabler:chevron-down">   <use href="#ai:tabler:chevron-down"></use>  </svg> </button> <ul class="dropdown-menu md:backdrop-blur-md dark:md:bg-dark rounded md:absolute pl-4 md:pl-0 md:hidden font-medium md:bg-white/90 md:min-w-[200px] drop-shadow-xl dark:border-b dark:border-l dark:border-r dark:border-slate-500"> <li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="/#proFeatures" rel="noopener noreferrer"> Features </a> </li><li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="/sales" rel="noopener noreferrer"> Sales Inquiry </a> </li><li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="/extensions" rel="noopener noreferrer"> Available Extensions </a> </li><li> <a class="first:rounded-t last:rounded-b md:hover:bg-gray-100 hover:text-link dark:hover:text-white dark:hover:bg-gray-700 py-2 px-5 block whitespace-no-wrap" href="/#services" rel="noopener noreferrer"> Professional support </a> </li> </ul>  </li><li class>
94 <a class="hover:text-link dark:hover:text-white px-4 py-3 flex items-centers" href="https://www.ovito.org/myaccount/"> My Account </a> </li> </ul> </nav> <div class="hidden md:self-center flex md:flex items-center md:mb-0 fixed w-full md:w-auto md:static justify-end left-0 rtl:left-auto rtl:right-0 bottom-0 p-3 md:p-0"> <div class="items-center flex justify-between w-full md:w-auto"> <div class="flex"> <button type="button" class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center" aria-label="Toggle between Dark and Light mode" data-aw-toggle-color-scheme><svg width="1em" height="1em" class="w-6 h-6 md:w-5 md:h-5 md:inline-block" data-icon="tabler:sun">   <symbol id="ai:tabler:sun" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12a4 4 0 1 0 8 0a4 4 0 1 0-8 0m-5 0h1m8-9v1m8 8h1m-9 8v1M5.6 5.6l.7.7m12.1-.7l-.7.7m0 11.4l.7.7m-12.1-.7l-.7.7"/></symbol><use href="#ai:tabler:sun"></use>  </svg></button>  </div> <span class="ml-4 rtl:ml-0 rtl:mr-4"> <a class="btn-secondary ml-2 py-2.5 px-5.5 md:px-6 font-semibold shadow-none text-sm w-auto" href="/#download">Download</a> </span> </div> </div> </div> </header>  <main>  <input type="hidden" id="submission_url" value="/form_php/submit.php"> <input type="hidden" id="captcha_key" value="6LeXTVgpAAAAAOmHKTSKsOrH7VmwNw-RsxOE6E0D"> <section class="relative not-prose scroll-mt-[72px]"> <div class="absolute inset-0 pointer-events-none -z-[1]" aria-hidden="true">  <div class="bg-white dark:bg-slate-900 w-full h-full"></div>  </div> <div class="relative px-4 md:px-6 py-12 md:py-16 lg:py-20 text-default max-w-7xl mx-auto">  <div class="mb-8 md:mx-auto md:mb-12 text-center max-w-3xl"><h2 class="font-bold leading-tighter tracking-tighter font-heading text-heading text-3xl md:text-4xl">Drop us a message today!</h2><p class="mt-4 text-muted text-xl">For quicker answers, explore our <a href="/faqs" class="btn-link">FAQs section</a>. You may find the solution you're looking for right there! If not, our support team is delighted to help you.</p></div> <div class="flex flex-col max-w-xl mx-auto rounded-lg backdrop-blur border border-gray-200 dark:border-gray-700 bg-white dark:bg-slate-900 shadow p-4 sm:p-6 lg:p-8 w-full"> <form> <div class="mb-6"> <label for="name" class="block text-sm font-medium"> Name (required)  <span id="contact_formname_success_message" class="text-success hidden"> ✓ </span> </label> <input type="text" name="name" id="contact_formname" autocomplete="on" placeholder class="py-3 px-4 block w-full text-md rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-slate-900"> </div><div class="mb-6"> <label for="email" class="block text-sm font-medium"> Email (required)  <span id="contact_formemail_success_message" class="text-success hidden"> ✓ </span> </label> <input type="email" name="email" id="contact_formemail" autocomplete="on" placeholder class="py-3 px-4 block w-full text-md rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-slate-900"> </div> <div class="mb-6"> <label for="textarea" class="block text-sm font-medium"> Message (required)  <span id="contact_formmessage_success_message" class="text-success hidden"> ✓ </span> </label> <textarea id="contact_formmessage" name="textarea" rows="4" class="py-3 px-4 block w-full text-md rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-slate-900"></textarea> </div> <div class="mt-3 flex items-start"> <div class="flex mt-0.5"> <input id="contact_formproUser" name="proUser" type="checkbox" class="cursor-pointer mt-1 h-4 w-4 shrink-0 rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-slate-900" onchange="console.log();"> </div> <div class="ml-3"> <label id="contact_formproUser_label" for="contact_formproUser" class="cursor-pointer select-none text-sm text-gray-600 dark:text-gray-400"> Are you an OVITO Pro user?  <span id="contact_formproUser_success_message" class="text-success hidden">  </span> </label> </div> </div><div class="mt-3 flex items-start"> <div class="flex mt-0.5"> <input id="contact_formdisclaimer" name="disclaimer" type="checkbox" class="cursor-pointer mt-1 h-4 w-4 shrink-0 rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-slate-900" onchange="console.log();"> </div> <div class="ml-3"> <label id="contact_formdisclaimer_label" for="contact_formdisclaimer" class="cursor-pointer select-none text-sm text-gray-600 dark:text-gray-400"> GDPR agreement: I consent to storing the submitted information so that OVITO staff can respond to my inquiry. (required)  <span id="contact_formdisclaimer_success_message" class="text-success hidden"> ✓ </span> </label> </div> </div> <div class="mt-6 grid"> <a class="btn-primary" id="contact_formsubmit_button">Contact us</a> </div> <div class="mt-3 text-center"> <p id="contact_formdescription" class="hidden text-sm text-gray-600 dark:text-gray-400"> Error sending message. Please contact us via email if this issue persists. </p> </div> </form> </div> </div> </section> <div class="mb-8 md:mx-auto md:mb-12 text-center max-w-3xl"><h2 class="font-bold leading-tighter tracking-tighter font-heading text-heading text-3xl md:text-4xl">Email contact</h2><p class="mt-4 text-muted text-xl">
95You can reach the OVITO team directly via email at <br><a class="btn-link" href="mailto:[email protected]">
96[email protected]
97</a> </p></div>  </main>  <footer class="relative border-t border-gray-200 dark:border-slate-800 not-prose"> <div class="dark:bg-dark absolute inset-0 pointer-events-none" aria-hidden="true"></div> <div class="relative max-w-7xl mx-auto px-4 sm:px-6 dark:text-slate-300"> <div class="grid grid-cols-12 gap-4 gap-y-8 sm:gap-8 py-8 md:py-12"> <div class="col-span-12 lg:col-span-4"> <div class="mb-2"> <a class="inline-block font-bold text-xl" href="/">OVITO.ORG</a> </div> <div class="text-sm text-muted"> <a class="text-muted hover:text-gray-700 dark:text-gray-400 hover:underline transition duration-150 ease-in-out mr-2 rtl:mr-0 rtl:ml-2" href="/imprint">Imprint</a><a class="text-muted hover:text-gray-700 dark:text-gray-400 hover:underline transition duration-150 ease-in-out mr-2 rtl:mr-0 rtl:ml-2" href="/terms">Terms</a><a class="text-muted hover:text-gray-700 dark:text-gray-400 hover:underline transition duration-150 ease-in-out mr-2 rtl:mr-0 rtl:ml-2" href="/privacy">Privacy Policy</a> </div> </div>  </div> <div class="md:flex md:items-center md:justify-between py-6 md:py-8"> <ul class="flex mb-4 md:order-1 -ml-2 md:ml-4 md:mb-0 rtl:ml-0 rtl:-mr-2 rtl:md:ml-0 rtl:md:mr-4"> <li> <a class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center" aria-label="LinkedIn" href="https://www.linkedin.com/company/ovito-gmbh/"> <svg width="1em" height="1em" class="w-5 h-5" data-icon="tabler:brand-linkedin">
97   <symbol id="ai:tabler:brand-linkedin" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M8 11v5m0-8v.01M12 16v-5m4 5v-3a2 2 0 1 0-4 0"/><path d="M3 7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4z"/></g></symbol><use href="#ai:tabler:brand-linkedin"></use>  </svg>  </a> </li><li> <a class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center" aria-label="Instagram" href="https://www.instagram.com/ovito_gmbh/"> <svg width="1em" height="1em" class="w-5 h-5" data-icon="tabler:brand-instagram">   <symbol id="ai:tabler:brand-instagram" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M4 8a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v8a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4z"/><path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0m7.5-4.5v.01"/></g></symbol><use href="#ai:tabler:brand-instagram"></use>  </svg>  </a> </li><li> <a class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center" aria-label="GitLab" href="https://gitlab.com/ovito-org"> <svg width="1em" height="1em" class="w-5 h-5" data-icon="tabler:brand-gitlab">   <symbol id="ai:tabler:brand-gitlab" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m21 14l-9 7l-9-7L6 3l3 7h6l3-7z"/></symbol><use href="#ai:tabler:brand-gitlab"></use>  </svg>  </a> </li> </ul> <div class="text-sm mr-4 dark:text-slate-400"> © 2026 OVITO GmbH, Germany </div> </div> </div> </footer>   
97<script>(function(){const defaultTheme = "system";
98
99  if (window.basic_script) {
100    return;
101  }
102
103  window.basic_script = true;
104
105  function applyTheme(theme) {
106    if (theme === 'dark') {
107      document.documentElement.classList.add('dark');
108    } else {
109      document.documentElement.classList.remove('dark');
110    }
111  }
112
113  const initTheme = function () {
114    if ((defaultTheme && defaultTheme.endsWith(':only')) || (!localStorage.theme && defaultTheme !== 'system')) {
115      applyTheme(defaultTheme.replace(':only', ''));
116    } else if (
117      localStorage.theme === 'dark' ||
118      (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)
119    ) {
120      applyTheme('dark');
121    } else {
122      applyTheme('light');
123    }
124  };
125  initTheme();
126
127  function attachEvent(selector, event, fn) {
128    const matches = typeof selector === 'string' ? document.querySelectorAll(selector) : selector;
129    if (matches && matches.length) {
130      matches.forEach((elem) => {
131        elem.addEventListener(event, (e) => fn(e, elem), false);
132      });
133    }
134  }
135
136  const onLoad = function () {
137    let lastKnownScrollPosition = window.scrollY;
138    let ticking = true;
139
140    attachEvent('#header nav', 'click', function () {
141      document.querySelector('[data-aw-toggle-menu]')?.classList.remove('expanded');
142      document.body.classList.remove('overflow-hidden');
143      document.getElementById('header')?.classList.remove('h-screen');
144      document.getElementById('header')?.classList.remove('expanded');
145      document.getElementById('header')?.classList.remove('bg-page');
146      document.querySelector('#header nav')?.classList.add('hidden');
147      document.querySelector('#header > div > div:last-child')?.classList.add('hidden');
148    });
149
150    attachEvent('[data-aw-toggle-menu]', 'click', function (_, elem) {
151      elem.classList.toggle('expanded');
152      document.body.classList.toggle('overflow-hidden');
153      document.getElementById('header')?.classList.toggle('h-screen');
154      document.getElementById('header')?.classList.toggle('expanded');
155      document.getElementById('header')?.classList.toggle('bg-page');
156      document.querySelector('#header nav')?.classList.toggle('hidden');
157      document.querySelector('#header > div > div:last-child')?.classList.toggle('hidden');
158    });
159
160    attachEvent('[data-aw-toggle-color-scheme]', 'click', function () {
161      if (defaultTheme.endsWith(':only')) {
162        return;
163      }
164      document.documentElement.classList.toggle('dark');
165      localStorage.theme = document.documentElement.classList.contains('dark') ? 'dark' : 'light';
166    });
167
168    attachEvent('[data-aw-social-share]', 'click', function (_, elem) {
169      const network = elem.getAttribute('data-aw-social-share');
170      const url = encodeURIComponent(elem.getAttribute('data-aw-url'));
171      const text = encodeURIComponent(elem.getAttribute('data-aw-text'));
172
173      let href;
174      switch (network) {
175        case 'facebook':
176          href = `https://www.facebook.com/sharer.php?u=${url}`;
177          break;
178        case 'twitter':
179          href = `https://twitter.com/intent/tweet?url=${url}&text=${text}`;
180          break;
181        case 'linkedin':
182          href = `https://www.linkedin.com/shareArticle?mini=true&url=${url}&title=${text}`;
183          break;
184        case 'whatsapp':
185          href = `https://wa.me/?text=${text}%20${url}`;
186          break;
187        case 'mail':
188          href = `mailto:?subject=%22${text}%22&body=${text}%20${url}`;
189          break;
190
191        default:
192          return;
193      }
194
195      const newlink = document.createElement('a');
196      newlink.target = '_blank';
197      newlink.href = href;
198      newlink.click();
199    });
200
201    function appyHeaderStylesOnScroll() {
202      const header = document.querySelector('#header[data-aw-sticky-header]');
203      if (lastKnownScrollPosition > 60 && !header.classList.contains('scroll')) {
204        document.getElementById('header').classList.add('scroll');
205      } else if (lastKnownScrollPosition <= 60 && header.classList.contains('scroll')) {
206        document.getElementById('header').classList.remove('scroll');
207      }
208      ticking = false;
209    }
210    appyHeaderStylesOnScroll();
211
212    attachEvent([document], 'scroll', function () {
213      lastKnownScrollPosition = window.scrollY;
214
215      if (!ticking) {
216        window.requestAnimationFrame(() => {
217          appyHeaderStylesOnScroll();
218        });
219        ticking = true;
220      }
221    });
222  };
223  const onPageShow = function () {
224    document.documentElement.classList.add('motion-safe:scroll-smooth');
225    const elem = document.querySelector('[data-aw-toggle-menu]');
226    if (elem) {
227      elem.classList.remove('expanded');
228    }
229    document.body.classList.remove('overflow-hidden');
230    document.getElementById('header')?.classList.remove('h-screen');
231    document.getElementById('header')?.classList.remove('expanded');
232    document.querySelector('#header nav')?.classList.add('hidden');
233  };
234
235  window.onload = onLoad;
236  window.onpageshow = onPageShow;
237
238  document.addEventListener('astro:after-swap', () => {
239    initTheme();
240    onLoad();
241    onPageShow();
242  });
243})();</script>
243  </body> </html>
vendor: 61 bytes, line 243
243 <script src="https://www.google.com/recaptcha/api.js?render=
2436LeXTVgpAAAAAOmHKTSKsOrH7VmwNw-RsxOE6E0D
vendor: 12 bytes, line 243
243"></script> 
243<script type="module">const h=["text-success","text-error","text-gray-600","dark:text-gray-400"],B=e=>(e?.classList.remove(...h),e?.classList.add("text-error"),e),$=e=>(e?.classList.remove(...h),e?.classList.add("text-success"),e),r=e=>(e?.classList.remove("hidden"),e),v=e=>(e?.classList.add("hidden"),e),E=(e,n)=>{B(e),r(e),e.innerHTML=n},I=(e,n)=>{$(e),r(e),e.innerHTML=n},k=e=>{const n=document.getElementById(`${e}submit_button`),u=document.getElementById(`${e}name`),m=document.getElementById(`${e}email`),_=document.getElementById(`${e}message`),g=document.getElementById(`${e}proUser`),y=document.getElementById(`${e}disclaimer`),d=document.getElementById(`${e}description`),b=document.getElementById("submission_url")?.value,p=document.getElementById("captcha_key")?.value;if(!n||!u||!m||!_||!g||!y||!d||!b||!p)return console.error("Missing element in form",e),()=>{};const a=new Set,l=async()=>{a.add("Message sent."),o(),grecaptcha.ready(async()=>{grecaptcha.execute(p,{action:"submit"}).then(async t=>{const s=JSON.stringify({form:e,name:u?.value,email:m?.value,msg:_?.value,proUser:g?.checked,gdpr:y?.checked,recaptcha:t});s&&fetch(b,{method:"POST",body:s,mode:"cors",headers:{"Content-Type":"application/json"}}).then(async c=>{if(c.status===200){$(d),r(d);const i=await c.text();I(d,i),console.debug("Success:",i)}else{a.delete("Message sent."),o();const i=await c.text();E(d,i),console.error(c.status,c.statusText,i)}}).catch(c=>{a.delete("Message sent."),o(),E(d,"Error sending message. Please contact us via email if this issue persists."),console.error(c)})})})},o=()=>{a.size===0?(n?.classList.remove("btn-primary-disabled"),n?.classList.add("btn-primary"),n?.addEventListener("click",l)):(n?.classList.remove("btn-primary"),n?.classList.add("btn-primary-disabled"),n?.removeEventListener("click",l))},L=t=>()=>{const s=document.getElementById(`${e}${t}`),c=document.getElementById(`${e}${t}_success_message`);c?.textContent?.trim()!==""&&(s?.checkValidity()&&s?.value.length>0?(r(c),a.delete(t),o()):(v(c),a.add(t),o()))};["name","email","message"].forEach(t=>{const s=L(t);s(),window.addEventListener("load",()=>{s()}),document.getElementById(`${e}${t}`)?.addEventListener("input",s)});const x=t=>()=>{const s=document.getElementById(`${e}${t}`),c=document.getElementById(`${e}${t}_success_message`);s?.checked?(r(c),a.delete(t),o()):(v(c),a.add(t),o())};return["disclaimer"].forEach(t=>{const s=x(t);s(),document.getElementById(`${e}${t}`)?.addEventListener("input",s)}),l},w=["contact_form"];w.forEach(e=>{document.getElementById(`${e}submit_button`)?.addEventListener("click",k(e))});</script>

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.